NModbus类库使用

本文介绍了如何使用NModbus类库进行串口通信,包括创建SerialPort实例,配置参数,建立Modbus主站,以及读写线圈、寄存器等各项功能。并提供了多种读写操作的示例代码,展示了如何处理异常和超时情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过串口进行通信 :

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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值