更新记录
1.1.1(2024-03-28)
修复bug:写单个保持寄存器,设置成了0x10指令,现改为0x06指令。
1.1.0(2022-11-29)
支持ASCII编码
1.0.0(2022-11-25)
- 支持Android系统与外部硬件(如单片机、智能家居等支持Modbus串口的硬件)数据通信,目前仅支持RTU,暂不支持ASCII
- 支持Modbus通讯协议定义的四种常用的寄存器:线圈状态(coil)、离散输入状态(discrete)、保持寄存器(holding)、输入寄存器(input)
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 10.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 串口(支持RTU和ASCII)通讯插件
介绍
本插件支持Modbus通讯协议定义的四种常用的寄存器,分别为:
- 线圈状态(coil) 对应的方法为readCoil、readCoils、writeCoil和writeCoils
- 离散输入状态(discrete) 对应的方法为readInputDiscrete和readInputDiscretes
- 保持寄存器(holding) 对应的方法为readRegister、readRegisters、writeRegister和writeRegisters
- 输入寄存器(input) 对应的方法为readInputRegister和readInputRegisters
注意
串口通讯需要使用root权限,本插件已经加了获取系统权限的代码,在Android 5 以下的模拟器上测试通过,Android 6 以上系统需要root。 具体机型请根据实际情况,配置supath参数,确认是否可以打开串口,如果不行,只能进行root了。
使用说明
- 引用插件
const testModbus = uni.requireNativePlugin("firefly-modbus-sp")
-
打开串口
const device = '/dev/ttyS1'; // 串口名称 const baudrate = 9600; // 比特率,默认9600 const databits = 8; // 数据位,默认8 const parity = 0; // 校验位,默认0 const stopbits = 1; // 停止位,默认1 const timeout = 500; // 超时时间,默认500毫秒 const supath = '/system/bin/su' // 获取root权限的路径,/system/bin/su或者/system/xbin/su const encoding = 'rtu' // 编码,'rtu'或者'ascii',默认rtu const unitId = 1 // 从机地址,1-255,默认1 testModbus.open( { 'device' : this.device, 'baudrate': this.baudrate, 'databits' : this.databits, 'parity' : this.parity, 'stopbits' : this.stopbits, 'timeout' : this.timeout, 'supath' : this.supath, 'encoding' : this.encoding, 'unitId' : this.unitId, }, (result) => { modal.toast({ message: result.msg, duration: 2 }); } );
- 读数据
// 线圈状态地址 var coilAddr = 1; testModbus.readCoil(coilAddr, (result) => { if (result.code == 0) { modal.toast({ message: '获取成功,数据为' + result.data, duration: 2 }); } else { modal.toast({ message: result.msg, duration: 2 }); } });
- 写数据
// 线圈状态地址 var coilAddr = 1; // 往线圈状态地址中写入的值 var coilVal = 1; testModbus.writeCoil(coilAddr, coilVal, (result) => { if (result.code == 0) { modal.toast({ message: "写入成功", duration: 2 }); } else { modal.toast({ message: result.msg, duration: 2 }); } });
- 关闭串口
testModbus.close();
方法说明
-
readCoil(addr, callback):读取单个线圈状态
参数名 说明 示例 addr 线圈状态地址 101 callback 回调方法,(result) => {} result格式: {"code": 0, data: 1} -
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]} -
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} -
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]} -
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} -
readInputRegisters(addr, count, callback):读取多个输入寄存器中的数据
参数名 说明 示例 addr 输入寄存器地址 300007 count 从addr开始,输入寄存器地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, data: [121,116]} -
readInputDiscrete(addr, callback):读取单个离散输入状态
参数名 说明 示例 addr 离散输入状态地址 100001 callback 回调方法,(result) => {} result格式: {"code": 0, data: 1} -
readInputDiscretes(addr, count, callback):读取多个离散输入状态
参数名 说明 示例 addr 离散输入状态地址 100001 count 从addr开始,离散输入状态地址的偏移个数 2 callback 回调方法,(result) => {} result格式: {"code": 0, data: [0,1]}