更新记录
1.3.0(2023-05-18)
增加检测连接是否正常的方法
1.2.1(2023-01-10)
1、优化连接的返回信息 2、连接时可自定义unitId
1.2.0(2022-11-29)
- 支持连接多个IP
- 优化返回值的格式
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
Modbus TCP通讯插件
介绍
本插件支持Modbus通讯协议定义的四种常用的寄存器,分别为:
- 线圈状态(coil) 对应的方法为readCoil、readCoils、writeCoil和writeCoils
- 离散输入状态(discrete) 对应的方法为readInputDiscrete和readInputDiscretes
- 保持寄存器(holding) 对应的方法为readRegister、readRegisters、writeRegister和writeRegisters
- 输入寄存器(input) 对应的方法为readInputRegister和readInputRegisters
使用说明
- 引用插件
const testModbus = uni.requireNativePlugin("firefly-modbus")
- 连接
const host = '127.0.0.1'; const port = 502; const useRTU = false; // 自动重连间隔(单位毫秒,0表示不自动重连) const reconnectInterval = 0 testModbus.connect( { 'clientId' : 2, // 客户端ID,1-255,默认为1 'unitId' : 1, // Modbus模块的设备id,默认为1 'host' : host, 'port' : port, 'useRTU' : useRTU, 'reconnectInterval' : reconnectInterval, }, (result) => { modal.toast({ message: result.msg, duration: 2 }); } );
- 读数据
// 读取线圈状态 var coilAddr = 1; testModbus.readCoil(coilAddr, (result) => { if (result.code == 0) { modal.toast({ message: result.msg + ", 数据为" + result.data, duration: 2 }); } else { modal.toast({ message: result.msg, duration: 2 }); } }); // 或者 指定clientId读取线圈状态 testModbus.readCoilByClientId(1, coilAddr, (result) => { if (result.code == 0) { modal.toast({ message: result.msg + ", 数据为" + result.data, duration: 2 }); } else { modal.toast({ message: result.msg, duration: 2 }); } });
- 写数据
// 写入线圈状态 var coilAddr = 1; // 往线圈状态地址中写入的值 var coilVal = 1; testModbus.writeCoil(coilAddr, coilVal, (result) => { modal.toast({ message: result.msg, duration: 2 }); }); // 或者 指定clientId写入线圈状态 testModbus.writeCoilByClientId(1, coilAddr, coilVal, (result) => { modal.toast({ message: result.msg, duration: 2 }); });
- 断开连接
// 断开连接,默认断开clientId=1的连接 testModbus.disconnect(); // 或者 指定clientId,断开连接 testModbus.disconnectByClientId(1);
- 检测连接是否正常
// 每隔5秒钟检测一次连接是否正常 setInterval(() => { // 第一个参数是clientId // 第二个参数是要读取的保持寄存器的地址 testModbus.checkConnection(1, 0, (result) => { console.log(result.msg) if (result.code != 0) { modal.toast({ message: result.msg, duration: 2 }); } }) }, 5000);
方法说明
-
readCoil(addr, callback):读取单个线圈状态
参数名 说明 示例 addr 线圈状态地址 101 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 1, "msg": "读取成功"} -
writeCoil(addr, val, callback):写入单个线圈状态
参数名 说明 示例 addr 线圈状态地址 101 val 要写入线圈状态的值 1或者0 callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readCoils(addr, count, callback):读取多个线圈状态
参数名 说明 示例 addr 线圈状态地址 101 count 从addr开始,线圈状态地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [0,1], "msg": "读取成功"} -
writeCoils(addr, vals, callback):写入多个线圈状态
参数名 说明 示例 addr 线圈状态地址 101 vals 要写入线圈状态的值,数组格式 [1,0] callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readRegister(addr, callback):读取单个保持寄存器中的数据
参数名 说明 示例 addr 保持寄存器地址 400007 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 128, "msg": "读取成功"} -
writeRegister(addr, val, callback):写入单个保持寄存器中的数据
参数名 说明 示例 addr 保持寄存器地址 101 val 要写入保持寄存器的值 122 callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readRegisters(addr, count, callback):读取多个保持寄存器中的数据
参数名 说明 示例 addr 保持寄存器地址 400007 count 从addr开始,保持寄存器地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [21,16], "msg": "读取成功"} -
writeRegisters(addr, vals, callback):写入多个保持寄存器中的数据
参数名 说明 示例 addr 保持寄存器地址 101 vals 要写入保持寄存器的值,数组格式 [112,123] callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readInputRegister(addr, callback):读取单个输入寄存器中的数据
参数名 说明 示例 addr 输入寄存器地址 300007 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 128, "msg": "读取成功"} -
readInputRegisters(addr, count, callback):读取多个输入寄存器中的数据
参数名 说明 示例 addr 输入寄存器地址 300007 count 从addr开始,输入寄存器地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [121,116], "msg": "读取成功"} -
readInputDiscrete(addr, callback):读取单个离散输入状态
参数名 说明 示例 addr 离散输入状态地址 100001 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 1, "msg": "读取成功"} -
readInputDiscretes(addr, count, callback):读取多个离散输入状态
参数名 说明 示例 addr 离散输入状态地址 100001 count 从addr开始,离散输入状态地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [0,1], "msg": "读取成功"} -
readCoilByClientId(clientId, addr, callback):读取单个线圈状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 线圈状态地址 101 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 1, "msg": "读取成功"} -
writeCoilByClientId(clientId, addr, val, callback):写入单个线圈状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 线圈状态地址 101 val 要写入线圈状态的值 1或者0 callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readCoilsByClientId(clientId, addr, count, callback):读取多个线圈状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 线圈状态地址 101 count 从addr开始,线圈状态地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [0,1], "msg": "读取成功"} -
writeCoilsByClientId(clientId, addr, vals, callback):写入多个线圈状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 线圈状态地址 101 vals 要写入线圈状态的值,数组格式 [1,0] callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readRegisterByClientId(clientId, addr, callback):读取单个保持寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 保持寄存器地址 400007 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 128, "msg": "读取成功"} -
writeRegisterByClientId(clientId, addr, val, callback):写入单个保持寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 保持寄存器地址 101 val 要写入保持寄存器的值 122 callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readRegistersByClientId(clientId, addr, count, callback):读取多个保持寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 保持寄存器地址 400007 count 从addr开始,保持寄存器地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [21,16], "msg": "读取成功"} -
writeRegistersByClientId(clientId, addr, vals, callback):写入多个保持寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 保持寄存器地址 101 vals 要写入保持寄存器的值,数组格式 [112,123] callback 回调方法,(result) => {} result格式: {"code": 0, "msg": "写入成功" -
readInputRegisterByClientId(clientId, addr, callback):读取单个输入寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 输入寄存器地址 300007 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 128, "msg": "读取成功"} -
readInputRegistersByClientId(clientId, addr, count, callback):读取多个输入寄存器中的数据
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 输入寄存器地址 300007 count 从addr开始,输入寄存器地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [121,116], "msg": "读取成功"} -
readInputDiscreteByClientId(clientId, addr, callback):读取单个离散输入状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 离散输入状态地址 100001 callback 回调方法,(result) => {} result格式: {"code": 0, "data": 1, "msg": "读取成功"} -
readInputDiscretesByClientId(clientId, addr, count, callback):读取多个离散输入状态
参数名 说明 示例 clientId 客户端ID,1-255 1 addr 离散输入状态地址 100001 count 从addr开始,离散输入状态地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, "data": [0,1], "msg": "读取成功"} -
checkConnection(clientId, regAddr, callback):检测连接是否正常
参数名 说明 示例 clientId 客户端ID,1-255 1 regAddr 保持寄存器地址 100001 callback 回调方法,(result) => {} ,result.code为0表示连接正常,-3表示连接未找到,-4表示连接已断开 result格式: {"code": 0, "msg": "连接正常"}