NModbus類庫使用


通過串口進行通信 :

1、將 NMobus 類庫導入工程中,添加引用、命名空間。工程屬性必須配置 為 .NET 4.0。

2、創建 SerialPort 類的一個實例,配置參數,打開串口,如:

public SerialPort port = new SerialPort(“ COM1” )//創建串口

port.BaudRate = 9600;//配置

port.DataBits = 8;

port.Parity = Parity.None;

port.StopBits = StopBits.One;

port.Open();//打開串口

3、調用相應方法創建 Modbus 主站,如:

IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port); //創建 Rtu 傳輸模式、通過串口 port 通信的主站 master IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port); //ASCII傳輸模式

4、配置參數,如:

master.Transport.ReadTimeout = 1000;//讀取串口數據超時為 1000ms master.Transport.WriteTimeout = 1000;//寫入串口數據超時

master.Transport.Retries = 3;//重試次數

master.Transport.WaitToRetryMilliSeconds = 250;//重試間隔

5、調用相應方法執行功能,如:

try

{

master.WriteMultipleRegisters(slaveId, startAddress, registers); }

有以下幾種功能:

//讀線圈,參數:從站地址 (8位 ) 、起始地址 (16位 ) 、數量 (16位 ) ;返回布爾型數 組

bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//讀輸入離散量,參數:從站地址 (8位 ) 、起始地址 (16位 ) 、數量 (16位 ) ;返回布 爾型數組

bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//讀保持寄存器,參數:從站地址 (8位 ) 、起始地址 (16位 ) 、數量 (16位 ) ;返回 16位整型數組

ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort

numberOfPoints);

//讀輸入寄存器,參數:從站地址 (8位 ) 、起始地址 (16位 ) 、數量 (16位 ) ;返回 16位整型數組

ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//寫單個線圈,參數:從站地址 (8位 ) ,線圈地址 (16位 ) ,線圈值 (布爾型 ) void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value);

//寫單個寄存器,參數:從站地址 (8位 ) ,寄存器地址 (16位 ) ,寄存器值 (16位 ) void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value);

//寫多個寄存器,參數:從站地址 (8位 ) ,起始地址 (16位 ) ,寄存器值 (16位整型 數組 )

void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);

//寫多個線圈,參數:從站地址 (8位 ) ,起始地址 (16位 ) ,線圈值 (布爾型數組 ) void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data);

//讀寫多個寄存器,參數:從站地址 (8位 ) ,讀起始地址 (16位 ) ,數量 (16位 ) ,寫 起始地址 (16位 ) ,寫入值 (16位整型數組 ) ;返回 16位整型數組

ushort[] ReadWriteMultipleRegisters(byte slaveAddress, ushort startReadAddress, ushort numberOfPointsToRead, ushort startWriteAddress, ushort[] writeData);

6、使用 catch 語句捕捉異常:

如果執行沒有出錯,則不拋出異常,如果是執行讀操作則能得到相應的 返回值。

響應超時會拋出 TimeoutException 類型的異常 ;

接收到從站的異常響應時會拋出 SlaveException 類型的異常, 這一類異常 包含 SlaveExceptionCode 屬性,即異常碼,通過判斷異常碼能得知出錯的原因。

 

 

 

NModbus Sample Code

 

 

 Simple Modbus serial RTU master write holding registers example.

 

using (SerialPort port = new SerialPort("COM1"))

{

 

// configure serial port

port.BaudRate = 9600;

 

port.DataBits = 8;

port.Parity = Parity.None;

port.StopBits = StopBits.One;

port.Open();

// create modbus master

IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

byte slaveID = 1;

ushort startAddress = 100;

ushort[] registers = new ushort[] { 1, 2, 3 };

// write three registers

master.WriteMultipleRegisters(slaveID, startAddress, registers);

}

 Simple Modbus serial ASCII master read holding registers example.

using (SerialPort port = new SerialPort("COM1"))

{

// configure serial port

port.BaudRate = 9600;

port.DataBits = 8;

port.Parity = Parity.None;

port.StopBits = StopBits.One;

port.Open();

// create modbus master

IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);

byte slaveID = 1;

ushort startAddress = 1;

ushort numRegisters = 5;

// read five registers

ushort[] registers = master.ReadHoldingRegisters(slaveID, startAddress, numRegisters);

for (int i = 0; i < numRegisters; i++)

Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);

}

// output: 

// Register 1=0

// Register 2=0

// Register 3=0

// Register 4=0

// Register 5=0

 Simple Modbus serial USB RTU master write multiple coils example.

using (FtdUsbPort port = new FtdUsbPort(0))

{

// configure usb port

port.BaudRate = 9600;

port.DataBits = 8;

port.Parity = FtdParity.None;

port.StopBits = FtdStopBits.One;

port.Open();

// create modbus master

IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

byte slaveID = 1;

ushort startAddress = 1;

// write three coils

master.WriteMultipleCoils(slaveID, startAddress, new bool[] { true, false, true });

}

Donate

NModbus is developed and

maintained on a voluntary basis

and provided free of charge.

 

Upcoming Features

WPF NModbus Master

Master Console Wrapper

FTDI USB Slave

Home

Samples

Downloads

Discussion

Issues

NModbus

http://web.archive.org/web/20090601225835/http://www...

第1頁󰀃共6頁

2011/07/06󰀃9:49

 

 Simple Modbus serial USB ASCII master write multiple coils example.

using (FtdUsbPort port = new FtdUsbPort(0))

 

{

// configure usb port

 

port.BaudRate = 9600;

port.DataBits = 8;

 

port.Parity = FtdParity.None;

port.StopBits = FtdStopBits.One;

port.Open();

// create modbus master

IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);

byte slaveID = 1;

ushort startAddress = 1;

// write three coils

master.WriteMultipleCoils(slaveID, startAddress, new bool[] { true, false, true });

}

 Simple Modbus TCP master read inputs example.

using (TcpClient client = new TcpClient("127.0.0.1", 502))

{

ModbusIpMaster master = ModbusIpMaster.CreateTcp(client);

// read five input values

ushort startAddress = 100;

ushort numInputs = 5;

bool[] inputs = master.ReadInputs(startAddress, numInputs);

for (int i = 0; i < numInputs; i++)

Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);

}

// output: 

// Input 100=0

// Input 101=0

// Input 102=0

// Input 103=0

// Input 104=0

 Simple Modbus UDP master write coils example.

using (UdpClient client = new UdpClient())

{

IPEndPoint endPoint = new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), 502);

client.Connect(endPoint);

ModbusIpMaster master = ModbusIpMaster.CreateUdp(client);

ushort startAddress = 1;

// write three coils

master.WriteMultipleCoils(startAddress, new bool[] { true, false, true });

}

 Simple Modbus serial RTU slave example.

using (SerialPort slavePort = new SerialPort("COM2"))

{

// configure serial port

slavePort.BaudRate = 9600;

slavePort.DataBits = 8;

slavePort.Parity = Parity.None;

slavePort.StopBits = StopBits.One;

slavePort.Open();

byte unitID = 1;

// create modbus slave

ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitID, slavePort);

slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

slave.Listen();

}

NModbus

http://web.archive.org/web/20090601225835/http://www...

第2頁󰀃共6頁

2011/07/06󰀃9:49

 

 Simple Modbus Serial ASCII slave example.

using (SerialPort slavePort = new SerialPort("COM2"))

 

{

// configure serial port

 

slavePort.BaudRate = 9600;

slavePort.DataBits = 8;

 

slavePort.Parity = Parity.None;

slavePort.StopBits = StopBits.One;

 

slavePort.Open();

byte unitID = 1;

// create modbus slave

ModbusSlave slave = ModbusSerialSlave.CreateAscii(unitID, slavePort);

slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

slave.Listen();

}

 Simple Modbus serial RTU slave example.

using (SerialPort slavePort = new SerialPort("COM2"))

{

// configure serial port

slavePort.BaudRate = 9600;

slavePort.DataBits = 8;

slavePort.Parity = Parity.None;

slavePort.StopBits = StopBits.One;

slavePort.Open();

byte unitID = 1;

// create modbus slave

ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitID, slavePort);

slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

slave.Listen();

}

 Simple Modbus TCP slave example.

byte slaveID = 1;

int port = 502;

IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

// create and start the TCP slave

TcpListener slaveTcpListener = new TcpListener(address, port);

slaveTcpListener.Start();

ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveID, slaveTcpListener);

slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

slave.Listen();

// prevent the main thread from exiting

Thread.Sleep(Timeout.Infinite);

 Simple Modbus UDP slave example.

using (UdpClient client = new UdpClient(502))

{

ModbusUdpSlave slave = ModbusUdpSlave.CreateUdp(client);

slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

slave.Listen();

// prevent the main thread from exiting

Thread.Sleep(Timeout.Infinite);

}

 Modbus TCP master and slave example.

byte slaveID = 1;

int port = 502;

IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

NModbus

http://web.archive.org/web/20090601225835/http://www...

第3頁󰀃共6頁

2011/07/06󰀃9:49

1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九貳肆陸扒拾,。青玉案元夕東風夜放花千樹更吹落星如雨寶馬雕車香滿路鳳簫聲動玉壺光轉一夜魚龍舞蛾兒雪柳黃金縷笑語盈盈暗香去眾里尋他千百度暮然回首那人卻在燈火闌珊處

閱讀已結束,下載本文需要

 

定制HR最喜歡的簡歷

我要定制簡歷
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM