ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Modbus 通讯实现

2021-12-10 15:30:30  阅读:174  来源: 互联网

标签:03 00 通讯 串口 Modbus 寄存器 Android 数据


平台

Android 8.1 + RK3288
Windows 8.1 + Modbus Slave 7.31

概述

在RK3288的主板上, 支持一路RS485串口, 再将外设通过这路串口连接后, 就可以实现外设与3288的通讯, 由于手上没有外设, 所以采用模拟的方式.
连方式如下:
在这里插入图片描述

准备

  1. 买了一个RS485 U转串, 京东
    在这里插入图片描述

  2. Windows 上安装 Modbus Slave
    下载地址
    直接装, 压缩中已包含注册码.

  3. 接线:只接2根线
    在这里插入图片描述

开始

  1. 接好线后, 打开Modbus Salve, 并连接.
    在这里插入图片描述
    一定要仔细核对串口的参数是否正确, 由于一开始选错了红框中的参数, 导致数据发送不过来, 主要的表现有: 数据不完整, 数据错误. 单独一个一个发正常, 连着发3个以上就出错
    参考: 串口通信校验方式(even,odd,space,mark)
    不管GOOGLE还是百度, 都没有人解释为什么Modbus Slave 数据接收不全, 这或许对熟悉的人来说并不算是问题的问题

在这里插入图片描述
主要参考下Modbus测试工具ModbusPoll与Modbus Slave使用方法
红框部分是在调试过程中, 把地址改成了1, 导致读取异常, 特此记录

在这里插入图片描述
寄存器部分, 很简单, 点击可修改, 数据发生变化也同样会刷新.
通俗点可以把它理解为数据库, 没有主动发送数据的功能或接口, 当通讯数据准确, 它会自动把寄存器的数据通过响应发过去.
当然, 整个数据处理过程, 均按标准的Modbus协议来

  1. Android端的实现: 串口通讯
    实现方式大同小异, 比如Acccord/AndroidSerialPort
    利用android-serialport-api进行串口读写操作
	final UartComm uart = new UartComm();
	uart.open("/dev/ttyS0");
	int r = uart.setOpt(9600, 8, 0, 1);
	//剩下读写的实现不作细述.
  1. ModBus 协议

读寄存器

SlaveId + Function + address + value + CRC

名称SlaveIdFunctionaddressvalueCRC
说明设备ID功能码(一般为3)起始地址CRC校验码
大小(byte)11222

如:

//读取从 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

名称SlaveIdFunctionaddressvalueCRC
说明设备ID功能码(一般为6)起始地址CRC校验码
大小(byte)11222
//把地址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

标签:03,00,通讯,串口,Modbus,寄存器,Android,数据
来源: https://blog.csdn.net/ansondroider/article/details/121833111

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有