根据传入的参数,创建 MODBUS RTU 实例:
/// <summary> /// 建立 MODBUS RTU 串口业务 /// String comnum = 串口号 /// int buad = 串口的Baud rate /// int dataLen = dataLength /// String chklen = 检验位 /// String stoplen = stop bit /// </summary> public ModbusRTU_Lib(String comnum,int buad,int dataLen,string chklen,string stoplen,int scantime)
添加一个 MODBUS RTU 扫描从站:
/// <summary> /// Clear所有的从站列表 /// </summary> public void clearAllModbusSalve() /// <summary> /// Delete扫描列表中的指定从站 /// </summary> /// <param name="whichAddr"></param> public void deletAllModbusSalve(int whichAddr)
Clear创建的 MODBUS RTU 多从站扫描列表:
/// <summary> /// 增加 MODBUS 从站扫描列表 /// </summary> /// <param name="xDeviceMdEnty"></param> public void addModbusSlaveScanList(DeviceMdEnty xDeviceMdEnty)
打开一个 MODBUS RTU 的通讯串口
/// <summary> /// Open the serial port /// </summary> /// <returns></returns> public Boolean openUartOfModbus()
Close the serial port
/// <summary> /// Close the serial port /// </summary> /// <returns></returns> public Boolean closeUartOfModbus()
启动 MODBUS RTU 的定时扫描业务
/// <summary> /// 启动 MODBUS 扫描业务 /// </summary> public void startModbusWork()
send MODBUS RTU 指令
senddata * int slaveAddr = slave address int addrTe = 读写的启始address int cmdTe = function code int lenTe =读出dataLength byte[] msgBuf = 待写入的data的缓冲期,每个字占 2BYTE int msgLen = 写入的dataLength return : * true = 已senddata,false = 未send * *********************************************************************/ /// <summary> /// /// </summary> public Boolean sendModbusMsg(int slaveAddr,int cmdTe, int addrTe, int lenTe, byte[] msgBuf, int msgLen)
MODBUS RTU 的实例的回调方法,返回所有串口收到的data
Result = "E00";表示"创建串口失败:" Result = "E01";表示"串口号未设置:" Result = "E02";表示"stop bit参数Error:" Result = "E03";表示"check digit参数Error:" Result = "F00";表示"check digit参数Error:" Result = "Y00";表示"创建串口成功:" Result = "M00";表示"receive到serial data :"
声明关于事件的委托,参数为要回传的data type,串口receivedata
public delegate void ModbusRTU_EventHandler(string result, byte[] msg) ;
MODBUS RTU 的实例的回调方法,返回所有串口收到的data且经过address和校验码验证的
Result = "AE0";表示"创建串口失败:" Result = "CE0";表示"串口号未设置:" Result = "DE0";表示"stop bit参数Error:" Result = "D00";表示"receive到正确Parse的serial data :" Result = "D01";表示"function code 0x01--正确应答data! :" Result = "D02";表示"function code 0x02--正确应答data !" Result = "D03";表示"function code 0x03--正确应答data !" Result = "D04";表示"function code 0x04--正确应答data !" Result = "D05";表示"function code 0x05--正确应答data !" Result = "D06";表示"function code 0x06--正确应答data !" Result = "D0F";表示"function code 0x0F--正确应答data !" Result = "D10";表示"function code 0x10--正确应答data !"
声明关于事件的委托,参数为要回传的data type,串口receivedata并 MODBUS 验证
public delegate void ModbusRTU_DecodeHandler(string result, byte[] msg) ;
建立 1 个 MODBUS RTU 从站的列表;
DLL 会根据设备数自动扫描;对于没有的Function,指定Length为 0 即可;如 16 入 16 出数字量模块则可指 定输入register和保持registerLength为 0
/// <summary> /// 建立扫描列表 /// </summary> /// <param name="SlaveAddr">设置当前从站的站号</param> /// <param name="CoilLen">设置当前从站的输出线圈个数</param> /// <param name="DiscLen">设置当前从站的输入数字量个数</param> /// <param name="InputRegLen">设置当前从站的输入register个数</param> /// <param name="HoldingRegLen">设置当前从站的保持register个数</param> public DeviceMdEnty(int SlaveAddr, int CoilLen, int DiscLen, int InputRegLen, int HoldingRegLen)
Leave a Reply