赞
踩
最近是在研究安卓板子上的modbus通信,于是写了这个maven依赖。
项目中主要用到的功能是读写寄存器,所以依赖中重点测试了读写多个寄存器的协议。
另外你可以自定义协议pdu交给程序进行封装及发送。
如果使用中发现了什么问题,可以到仓库添加issue,提交你的代码
Github:https://github.com/jeadyx/AndroidSimpleModbusMaster
Gitee:https://gitee.com/jeadyx/AndroidSimpleModbusMaster
下面简单介绍下如何使用该依赖
添加依赖项到项目的build.gradle.kts
implementation("org.github.jeadyx.modbus:simple-modbus-master:1.0")
添加之后别忘记sync
项目
SimpleModbus.init("/dev/ttyS1", 9600)
// 创建写多个寄存器请求,以写两个寄存器为例 // 0x10: 从机地址 // 0x1F00: 寄存器开始地址 // ShorArray(2): 写两个寄存器,均设置为0xffff val requestWrite = SimpleModbus.createCustomWriteRequest(0x10, ModbusFunctionCode.WriteMultipleRegisters.value, 0x1F00, ShortArray(2).apply { fill(0xffff.toShort()) }) // 创建读多个寄存器请求,以两个为例 // 0x10: 从机地址 // 0x1f: 读寄存器的开始地址 // 2: 读取两个寄存器 val requestRead = SimpleModbus.createCustomReadRequest(0x10, ModbusFunctionCode.ReadHoldingRegisters.value, 0x1F00, 2) // 从pdu创建自定义请求 // 0x10: 从机地址 // 10: modbus指令之写多个寄存器, 每个寄存器2字节数据 // 1f00: 要写入的第一个寄存器地址 // 0002:要写入的寄存器个数 // 0001 000f: 写入这两个寄存器的数据 // 执行结果应为: 1f00寄存器写入0001; 0f01寄存器写入000f val requestCustom = SimpleModbus.createRequestFromPduString(0x10, "101f0000020001000F") // 要实现上面自定义请求,你还可以使用api // fun createCustomWriteRequest(slaveAddress: Int, functionCode: Int, startAddress: Int, data: ShortArray): ByteArray
// 以读寄存器为例
val request = requestRead
// 调用写串口的接口,发送刚才创建好的请求
// res: 得到的api返回结果 类型为:SimpleModbusResponse
// res.err: 是否期间发生了错误 / 回复了错误信息
SimpleModbus.write(request) { res ->
Log.d(TAG, "Modbus: response $res")
if (res.err!= SimpleModbusExceptionCode.NoError) {
// response error
} else {
// get response
}
}
SimpleModbusResponse
说明data class SimpleModbusResponse(
val err: SimpleModbusExceptionCode = SimpleModbusExceptionCode.NoError, // 错误信息
val request: ByteArray?=null, // 请求帧
val response: ByteArray?=null, // 响应帧
val requestPdu: ByteArray?=null, // 请求帧的pdu部分
val responsePdu: ByteArray?=null, // 响应帧的pdu部分
val requestTime: String="", // 请求发送的时间
val responseTime: String="", // 响应接收的时间
)
使用过程中的任何问题可以到git仓库反馈。
如果对你有帮助,欢迎star,点赞,分享。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。