171 次浏览【转载需注明来源】
快码FOF最新版提供了Modbus支持库,这个支持库中提供了Modbus的:ModbusTCP客户端、ModbusUDP客户端、ModbusRTU客户端、ModbusTCP服务端等功能;本篇博客对该支持库进行相关的讲解。
首先是Modbus的串口实例:
局部变量 客户端ID = modbus客户端类.初始化串口客户端("/dev/ttyUSB0", { baudRate: 9600 }, (客户端状态) => {
调试输出(客户端状态);
});
倒计时执行(() => {
modbus客户端类.设置unitID(客户端ID, 1);
}, 1000);
启动时钟(() => {
modbus客户端类.写入寄存器值(客户端ID, 5, [0,0xffff], (写入状态) => {
调试输出(写入状态);
});
}, 2000);
解释:上述代码进行了串口的连接,并向寄存器5的位置写入了[0,0xffff]数据。
解释:写入的数据是数组类型,例如也可以直接[0]
注意:如果想要读取数据,也可以参考下述代码:
局部变量 客户端ID = modbus客户端类.初始化串口客户端("/dev/ttyUSB0", { baudRate: 9600 }, (客户端状态) => {
调试输出(客户端状态);
});
倒计时执行(() => {
modbus客户端类.设置unitID(客户端ID, 1);
}, 1000);
启动时钟(() => {
modbus客户端类.读取寄存器值(客户端ID,0,10,(读取状态)=>{
调试输出(读取状态)
})
}, 2000);
解释:读取寄存器从地址0开始的10个寄存器的值
关于Modbus客户端连接方式的讲解
Modbus客户端的操作命令几乎一样,唯一不同的则是几个连接方式,如下图:
modbus客户端类.初始化UDP客户端("127.0.0.1","8502",(客户端状态)=>{调试输出(客户端状态)})("127.0.0.1", 8052, (客户端状态) => {
调试输出(客户端状态);
});
modbus客户端类.初始化TCP客户端("127.0.0.1", 8052, (客户端状态) => {
调试输出(客户端状态);
});
modbus客户端类.初始化串口客户端("/dev/ttyUSB0", { baudRate: 9600 }, (客户端状态) => {
调试输出(客户端状态);
});
关于ModbusTCP服务端的讲解
Modbus支持库也提供了TCP服务端的相关功能,下述有一个完整代码参考:
//这里执行相关的JS代码
局部变量 服务ID = modbusTCP服务类.启动modbusTCP服务(
"0.0.0.0",
8052,
真,
1,
(服务状态) => {},
(寄存器地址, 数据值, unitID) => {
调试输出("客户端发起【写入寄存器值】触发", 寄存器地址, 数据值, unitID);
},
(寄存器地址, unitID, 回调函数) => {
调试输出("客户端发起【读取寄存器值】触发");
倒计时执行(() => {
回调函数(空对象, 寄存器地址 + 8000);
}, 10);
回调函数(空对象, 寄存器地址 + 8000);
},
(寄存器地址, unitID) => {
调试输出("客户端发起【读取输入寄存器】触发");
返回 寄存器地址;
},
(寄存器地址, unitID) => {
调试输出("客户端发起【读取线圈数据】触发");
返回 新建对象 Promise(定义函数 (回调函数) {
倒计时执行(() => {
回调函数(寄存器地址 % 2 === 0);
}, 10);
});
},
(寄存器地址, 数据值, unitID) => {
调试输出("客户端发起【写多线圈、写单线圈】触发", 寄存器地址, 数据值, unitID);
返回;
}
);
//上面启动了服务,下面启动客户端
局部变量 客户端ID = modbus客户端类.初始化TCP客户端("127.0.0.1", 8052, (客户端状态) => {
调试输出(客户端状态);
});
倒计时执行(() => {
modbus客户端类.设置unitID(客户端ID, 1);
}, 1000);
启动时钟(() => {
modbus客户端类.写入寄存器值(客户端ID, 0, [0, 1], (写入状态) => {
调试输出("写入成功", 写入状态);
});
}, 2000);
关于modbusTCP服务类的相关案例下载:
测试账号
快码FOF编程 Time: 2023-10-21 13:56:44
评论ID
Modbus支持库来了
轻声奏乐写代码 Time: 2023-10-21 14:15:39
评论ID
看起来很不错,正好有modbus的温度检测器,用来试一试