NModbus类库使用
洒满阳光的小院
通过串口进行通信:
1、将NMobu类库导入工程中,添加引用、命名空间。工程属性必须配置为4.0。
2、创建SerialPort类的一个实例,配置参数,打开串口,如:组
bool[]ReadCoil(bytelaveAddre,uhorttartAddre,uhortnumberOfPoint);
形容天气热publicSerialPortport=newSerialPort(“COM1”)//创建串口port.BaudRate=9600;//配置port.DataBit=8;port.Parity=Parity.None;port.StopBit=StopBit.One;port.Open();//打开串口祝酒词
IModbuSerialMatermater=ModbuSerialMater.CreateRtu(port);
//创建Rtu传输模式、通过串口port通信的主站mater//ASCII传输模式
IModbuSerialMatermater=ModbuSerialMater.CreateAcii(port);
3、调用相应方法创建Modbu主站,如:
4、配置参数,如:潮汕小菜
mater.Tranport.ReadTimeout=1000;//读取串口数据超时为1000mmater.Tranport.WriteTimeout=1000;//写入串口数据超时mater.Tranport.Retrie=3;//重试次数
mater.Tranport.WaitToRetryMilliSecond=250;//重试间隔try{}
mater.WriteMultipleRegiter(laveId,tartAddre,regiter);
5、调用相应方法执行功能,如:
有以下几种功能:
//读线圈,参数:从站地址(8位)、起始地址(16位)、数量(16位);返回布尔型数
//读输入离散量,参数:从站地址(8位)、起始地址(16位)、数量(16位);返回布尔型数组
bool[]ReadInput(bytelaveAddre,uhorttartAddre,uhortnumberOfPoint);
/
世界上最珍贵的东西
/读保持寄存器,参数:从站地址(8位)、起始地址(16位)、数量(16位);返回16位整型数组
uhort[]ReadHoldingRegiter(bytelaveAddre,uhorttartAddre,uhort
处女和双子numberOfPoint);
//读输入寄存器,参数:从站地址(8位)、起始地址(16位)、数量(16位);返回16位整型数组
uhort[]ReadInputRegiter(bytelaveAddre,uhorttartAddre,uhortnumberOfPoint);
//写单个线圈,参数:从站地址(8位),线圈地址(16位),线圈值(布尔型)voidWriteSingleCoil(bytelaveAddre,uhortcoilAddre,boolvalue);
//写单个寄存器,参数:从站地址(8位),寄存器地址(16位),寄存器值(16位)voidWriteSingleRegiter(bytelaveAddre,uhortregiterAddre,uhortvalue);
//写多个寄存器,参数:从站地址(8位),起始地址(16位),寄存器值(16位整型数组)
voidWriteMultipleRegiter(bytelaveAddre,uhorttartAddre,uhort[]data);
/
/写多个线圈,参数:从站地址(8位),起始地址(16位),线圈值(布尔型数组)voidWriteMultipleCoil(bytelaveAddre,uhorttartAddre,bool[]data);
//读写多个寄存器,参数:从站地址(8位),读起始地址(16位),数量(16位),写起始地址(16位),写入值(16位整型数组);返回16位整型数组
uhort[]ReadWriteMultipleRegiter(bytelaveAddre,uhorttartReadAddre,uhortnumberOfPointToRead,uhorttartWriteAddre,uhort[]writeData);
6、使用catch语句捕捉异常:
去看电影英文
如果执行没有出错,则不抛出异常,如果是执行读操作则能得到相应的响应超时会抛出TimeoutE某ception类型的异常;
接收到从站的异常响应时会抛出SlaveE某ception类型的异常,这一类异常
hn12333返回值。
包含SlaveE某ceptionCode属性,即异常码,通过判断异常码能得知出错的原因。