Modbus-RTU主机控件的简单测试
By
admin
at 2020-03-16 • 1人收藏 • 2320人看过
其实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
登录后方可回帖
//枚举定义开始 ModbusActiveX.Modbus; EnumBaudRate={ BPS__28800=8; BPS__14400=6; BPS__38400=9; BPS____110=0; BPS__57600=10; BPS__19200=7; BPS_256000=12; BPS____600=2; BPS___1200=3; BPS___2400=4; BPS_128000=11; BPS____300=1; BPS___9600=5 }; EnumCommPort={ COM41=41; COM1=1; COM57=57; COM31=31; COM37=37; COM10=10; COM36=36; COM2=2; COM49=49; COM62=62; COM35=35; COM3=3; COM4=4; COM14=14; COM45=45; COM5=5; COM19=19; COM48=48; COM7=7; COM22=22; COM8=8; COM27=27; COM56=56; COM59=59; COM16=16; COM55=55; COM60=60; COM47=47; COM18=18; COM43=43; COM9=9; COM11=11; COM12=12; COM13=13; COM20=20; COM30=30; COM15=15; COM46=46; COM52=52; COM58=58; COM17=17; COM33=33; COM53=53; COM34=34; COM40=40; COM51=51; COM44=44; COM39=39; COM6=6; COM21=21; COM23=23; COM25=25; COM24=24; COM26=26; COM28=28; COM29=29; COM32=32; COM64=64; COM38=38; COM63=63; COM50=50; COM54=54; COM61=61; COM42=42 }; EnumParity={ Odd=1; None=0; Even=2 }; EnumStopBit={ StopBit_2=1; StopBit_1=0 }; EnumDataBit={ DataBit_7=0; DataBit_8=1 } //枚举定义结束 ModbusActiveX.Modbus;它里面的一些常量