Modbus-RTU主机控件的简单测试

By admin at 2020-03-16 • 1人收藏 • 2137人看过

其实modbus如果只是在pc上作为主机使用的话, 完全用不着使用啥dll, 直接利用串口sio,加上之前我分享的crc16检验程序, 就可以完成软件了。

网上也有一些人封装好的modbus控件,利用这些控件就可以不用管modbus协议是个啥了


下面是找的网上的一个modbus控件,进行了简单的测试

image.png

右边的串口助手模拟一个站号为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是个啥的话,用这种傻瓜式的方式也蛮好。

ModbusActiveX控件V203.zip


1 个回复 | 最后更新于 2020-03-16
2020-03-16   #1
//枚举定义开始 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;

它里面的一些常量

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...