NModbus类库使用

89 篇文章 0 订阅

转自:微点阅读  https://www.weidianyuedu.com/content/4817804073853.html

通过串口进行通信:

1、将nMobus类库导入工程中,添加引用、命名空间。工程属性必须配置为.nET 4.0。

2、创建SerialPort类的一个实例,配置参数,打开串口,如: 组

bool[] Readcoils(byte slaveAddress, ushort startAddress, ushort numberofPoints);

public SerialPort port = new SerialPort(“coM1”)//创建串口 port.BaudRate = 9600;//配置 port.DataBits = 8; port.Parity = Parity.none; port.StopBits = StopBits.one; port.open();//打开串口

IModbusSerialMaster master = ModbusSerialMaster.createRtu(port);

//创建Rtu传输模式、通过串口port通信的主站master //AScII传输模式

IModbusSerialMaster master = ModbusSerialMaster.createAscii(port);

3、调用相应方法创建Modbus主站,如:

4、配置参数,如:

master.Transport.ReadTimeout = 1000;//读取串口数据超时为1000ms master.Transport.WriteTimeout = 1000;//写入串口数据超时 master.Transport.Retries = 3;//重试次数

master.Transport.WaitToRetryMilliSeconds = 250;//重试间隔 try { }

master.WriteMultipleRegisters(slaveId, startAddress, registers);

5、调用相应方法执行功能,如:

有以下几种功能:

//读线圈,参数:从站地址(8位)、起始地址(16位)、数量(16位);返回布尔型数

//读输入离散量,参数:从站地址(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属性,即异常码,通过判断异常码能得知出错的原因。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值