Modbus-RTU主机控件的简单测试
By
admin
at 2020-03-16 • 1人收藏 • 2137人看过
其实modbus如果只是在pc上作为主机使用的话, 完全用不着使用啥dll, 直接利用串口sio,加上之前我分享的crc16检验程序, 就可以完成软件了。
网上也有一些人封装好的modbus控件,利用这些控件就可以不用管modbus协议是个啥了
下面是找的网上的一个modbus控件,进行了简单的测试
右边的串口助手模拟一个站号为1的从机, 左边是调用的modbus组件程序,用01功能码读取1个状态位.
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=304;bottom=215) winform.add( button2={cls="button";text="读取线圈1";left=60;top=56;right=266;bottom=138;z=1} ) /*}}*/ import console console.open() var mdObj = com.CreateObject("ModbusActiveX.Modbus") //波特率 mdObj.BaudRate = 5 //串口端口 mdObj.CommPort = 2 //数据位 mdObj.DataBit = 1 //奇偶校验 mdObj.Parity = 0 //停止位 mdObj.StopBit = 0 //超时时间 mdObj.RespondTimeOut = 3000 //开启 mdObj.OpenPort() //关联接收事件 com.Connect(mdObj,{ //举一个事件例子1 FC01ReadCoilStatusRespond0X = function(TransactionID,CommStatus,CommError,CoilsOnOff,CoilsCount){ mdObj.FC01ReadCoilStatusRespond0X(TransactionID,CommStatus,CommError,CoilsOnOff,CoilsCount); }; //...还有好几个事件, 不写了,参考上面那个,复制黏贴 }); //使用事件1 mdObj.FC01ReadCoilStatusRespond0X= function(TransactionID,CommStatus,CommError,CoilsOnOff,CoilsCount){ console.dump(TransactionID,CommStatus,CommError,CoilsOnOff,CoilsCount) } winform.button2.oncommand = function(id,event){ //主机读取站号为1的从机,起始地址0,读取长度1 console.log(mdObj.FC01_ReadCoilStatus_0X(1,0,1)) } winform.onClose = function(hwnd,message,wParam,lParam){ //释放 mdObj.ClosePort() } winform.show(); win.loopMessage();
总体来说,如果只是作为主机使用, 那么强烈建议自己用sio库来写,如果实在不懂modbus是个啥的话,用这种傻瓜式的方式也蛮好。
1 个回复 | 最后更新于 2020-03-16
登录后方可回帖
它里面的一些常量