Android 8.1 + RK3288
Windows 8.1 + Modbus Slave 7.31
在RK3288的主板上, 支持一路RS485串口, 再将外设通过这路串口连接后, 就可以实现外设与3288的通讯, 由于手上没有外设, 所以采用模拟的方式.
连方式如下:
主要参考下Modbus测试工具ModbusPoll与Modbus Slave使用方法
红框部分是在调试过程中, 把地址改成了1, 导致读取异常, 特此记录
寄存器部分, 很简单, 点击可修改, 数据发生变化也同样会刷新.
通俗点可以把它理解为数据库, 没有主动发送数据的功能或接口, 当通讯数据准确, 它会自动把寄存器的数据通过响应发过去.
当然, 整个数据处理过程, 均按标准的Modbus协议来
final UartComm uart = new UartComm();
uart.open("/dev/ttyS0");
int r = uart.setOpt(9600, 8, 0, 1);
//剩下读写的实现不作细述.
读寄存器
SlaveId + Function + address + value + CRC
名称 | SlaveId | Function | address | value | CRC |
---|---|---|---|---|---|
说明 | 设备ID | 功能码(一般为3) | 起始地址 | 值 | CRC校验码 |
大小(byte) | 1 | 1 | 2 | 2 | 2 |
如:
//读取从 0 开始的 1e(30)个数据
SEND->01 03 00 00 00 1e c5 c2
//返回数据 3C(60)为数据长度对应上面要求的30个, 一个数据2个byte
RECV<-01 03 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a d7
写寄存器
SlaveId + Function + address + value + CRC
名称 | SlaveId | Function | address | value | CRC |
---|---|---|---|---|---|
说明 | 设备ID | 功能码(一般为6) | 起始地址 | 值 | CRC校验码 |
大小(byte) | 1 | 1 | 2 | 2 | 2 |
//把地址0a 的值改为 1a
SEND->01 06 00 0a 00 1a 28 03
//成功后返回
RECV<-01 06 00 0a 00 1a 28 03
写多个寄存器 功能码 0x10(16)
SEND->01 10 00 1B 00 03 06 00 DF 00 BE 00 FF 23 47
RECV->01 10 00 1B 00 03 F0 0F
更多说明请查阅: Modbus协议中文版.pdf
若无法打开, 请自行下载Modbus协议中文版【完整版】.pdf