示例:示例
import wsock.tcp.modbusClient;
//创建 Modbus TCP 客户端
var client = wsock.tcp.modbusClient("127.0.0.1", 502, 1);
//连接服务器(可选指定超时秒数)
var ok, err = client.connect(3);
if(!ok){
print("连接失败:", err);
return;
}
print("已连接到 Modbus TCP 服务器");
//读取保持寄存器
var registers, err = client.readHoldingRegisters(0, 10);
if(registers){
print("保持寄存器值:");
for(i=1;#registers){
print(" 地址", i-1, "=", registers[i]);
}
}
else {
print("读取失败:", err);
}
//写入单个寄存器
var ok, err = client.writeSingleRegister(0, 1234);
print("写入寄存器:", ok ? "成功" : err);
//读取线圈状态
var coils, err = client.readCoils(0, 8);
if(coils){
print("线圈状态:");
for(i=1;#coils){
print(" 线圈", i-1, "=", coils[i]);
}
}
//写入多个寄存器
var ok, err = client.writeMultipleRegisters(10, [100, 200, 300]);
print("写入多个寄存器:", ok ? "成功" : err);
//关闭连接
client.close();
Modbus TCP 协议库。
相关库: wsock.udp.modbusClient ( Modbus UDP 协议 )。
相关库: sio.modbus ( Modbus RTU 串口协议 )。
Modbus 异常码对照表
wsock.tcp.client 对象
关闭连接
连接服务器,成功返回 true,失败返回 null,错误信息
连接服务器,可指定超时时间(秒),成功返回 true
服务器地址
检查是否已连接,返回布尔值
掩码写寄存器(功能码0x16),
结果=(当前值 AND 掩码) OR (OR掩码 AND (NOT AND掩码))
服务器端口
读线圈状态(功能码0x01),
返回布尔值数组,失败返回 null,错误信息
读离散输入(功能码0x02),
返回布尔值数组,失败返回 null,错误信息
读保持寄存器(功能码0x03),
返回16位整数数组,失败返回 null,错误信息
读输入寄存器(功能码0x04),
返回16位整数数组,失败返回 null,错误信息
读写多个寄存器(功能码0x17),
返回读取的16位整数数组
发送原始 PDU 数据,
返回原始响应 PDU
设置从站地址(1-247),setUnitId 的别名
设置通信超时时间,默认1000毫秒
设置单元标识符(1-255)
超时时间(毫秒)
当前事务ID
单元标识符
写多个线圈(功能码0x0F),
参数@2为布尔值数组,成功返回true
写多个寄存器(功能码0x10),
参数@2为16位整数数组,成功返回true
写单个线圈(功能码0x05),
参数@2为布尔值,成功返回true
写单个寄存器(功能码0x06),
参数@2为16位整数,成功返回true
创建 Modbus TCP 客户端,
参数 @1 为服务器 IP 或域名,
参数 @2 为端口号(默认502),
参数 @3 为单元标识符(默认为1),
返回客户端对象