Android串口通信开发

一、前言

​ 串口通信主要用于物联网设备中,采用的协议一般为ModBus协议,这是一种悠久的通信技术。在Android中的使用的通信协议如果是自己编译的话大多数会采用09年google提供的一个串口的源码(源码为C语言版本,需要自己编译成.so)。源码如下:

https://github.com/cepr/android-serialport-api

这里提供一个将源码编译成.so的参考示例(这个参考示例中java代码只有几个,使用很简单,但是没有怎么封装,需要进行再次封装才行):

https://blog.csdn.net/Mr_Tony/article/details/115208890

其实如果搜索ModBus的话就会发现另外一条技术路径。

串口通信是技术,是基于ModBus协议开发的,所以本片会稍微涉及下ModBus协议中的一部分并结合实际工作进行记录。

注意:

本文假设硬件通畅,运行逻辑没有问题

二、ModBus协议

关于ModBus协议可以具体看下百度百科了解下,本文侧重实际应用。

https://baike.baidu.com/item/Modbus%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/5972462?fromtitle=ModBus&fromid=305501&fr=aladdin

modbus有多种协议配置,其主要分为串口和以太网以及其他网络协议。其中串口有RTU和ASCII两个变种。以太网则是基于TCP/IP的modbus协议。主要有TCP和UDP两种使用方式。

本人在工作中采用的是RTU协议(或者modbus_rtu协议)。硬件使用RS-485。数据校验位CRC校验。

通信配置为以下:

  • 波特率:9600
  • 奇偶校验:N
  • 数据位:8
  • 停止位:1

所以发送的命令大致为以下格式:

01 06 00 0E 00 01 28 18

该内容解释如下(因为该格式为16进制,所以在实际操作中要转换进制后才能发送,不能发送成文本格式):

地址功能码地址高地址低数据高数据低CRC高CRC低
0x010x060x000x0E0x000x010x280x18

这行的命令意思为,查找地址为0x01的设备(注意第一个设备为0x01,0x00为广播,所有设备都会收到信息),然后执行0x06功能,然后在该设备的0x000E地址中写入0x0001数据,校验码为0x2818。

CRC校验会根据前面的数据动态计算,可以使用以下链接进行在线计算:

https://www.lammertbies.nl/comm/info/crc-calculation

计算结果可以查看CRC-16(Modbus),其结果是从低到高的,所以在实际应用中需要反着写。

结果如下:
在这里插入图片描述

所以正常开发中只要根据规则计算好相应的CRC,并发送指令就可以完成功能了。

三、线圈、寄存器

在实际工作中有些时候厂家提供的使用说明是线圈数、寄存器数、输入数等跟硬件相关的名词。其实这些数据在等同于上文表格中的第5位(数据高)、第6位(数据低)。执行不同功能时候,该数据位则为不同的位置,比如0x01表示读取线圈状态,则第5位和第6位则为线圈数。0x02表示输入状态,则第5位和第6位则表示输入数。详细解释可以参考:https://www.lammertbies.nl/comm/info/modbus

参考示例如下:

代码描述
01读取线圈状态
02读取输入状态
03读取保持寄存器
04读取输入寄存器
05强制单线圈
06预置单寄存器
07读取异常状态
15强制多个线圈
16预置多个寄存器
17报告从站 ID

根据上述表格在具体开发中就可以进行灵活使用。

四、第三方开发资源

1、modbus的第三方库j2mod(主要用于TCP/UDP的方式进行串口通信):

https://github.com/steveohara/j2mod

2、串口通信的库(使用RTU或者ASCII方式通信,这个会简单点)

http://fazecast.github.io/jSerialComm/

3、modbus使用库jlibmodbus(这个在github上面资料也算是比较多):

https://github.com/kochedykov/jlibmodbus

4、modbus4j(很有名,但是使用说明没怎么找到,需要自己去看源码)

https://github.com/infiniteautomation/modbus4j

五、参考链接:

  1. modbus官网: https://modbus.org/
  2. modbus接口教程: https://www.lammertbies.nl/comm/info/modbus
  3. modbus入门篇,详细介绍: http://www.elecfans.com/rengongzhineng/596297.html
  4. 在线进制转换: https://tool.oschina.net/hexconvert/
  5. 在线CRC计算: https://www.lammertbies.nl/comm/info/crc-calculation
  6. 在线CRC计算: http://www.ip33.com/crc.html
  7. crc16校验码计算java代码: https://blog.csdn.net/u013767488/article/details/81200530
  8. Java实现ModbusTCP通信: https://www.cnblogs.com/ioufev/p/10831289.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值