上一篇对串口进行了简单的测试,在实际的应用中串口是硬件和上位机的通讯桥梁,这一篇我们通过编程方式来完成访问和控制串口,本次仍然需要用虚拟串口和阿猫串口调试工具配合完成,这样比较简单也不需要添加硬件,在需要连接真是设备的时候再使用USB转串口方式连接。没有安装虚拟串口和调试工具的同学,请参考上一篇完成安装和测试后再进行本篇的代码实践。
串口关键参数
波特率:
1、衡量信号传输速率的参数
2、指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)
3、通常电话线的波特率为 14400,28800 和 36600,波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备的通信。
数据位:
1、衡量通信中实际数据位的参数
2、当计算机发送一个信息包,实际的数据往往不会是 8 位的,标准的值是 6、7 和 8 位。如何设置取决于你想传送的信息。比如,标准的 ASCII 码是 0~127(7位)。扩展的 ASCII 码是0~255(8位)
3、如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
停止位:
1、用于表示单个包的最后一位,典型的值为 1,1.5 和 2 位
2、由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
奇偶校验位:
1、串口通信中一种简单的检错方式
2、有四种检错方式:偶、奇、高和低,当然没有校验位也是可以的
3、对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
这四个参数非常重要,如通讯两端的设置不一致就可能导致数据接收不到或者接收到是乱码。
安装串口操作库
java提供了原生的串口操作库,但不是特别好用,这里我们选用RXTX。
2.选择适合自己电脑的版本下载,我这里下载的是windows-x64,解压后如图:
3.在install.txt中有安装方法,先将RXTXcomm.jar复制到<JAVA_HOME>\jre\lib\ext,再将两个dll文件复制到<JAVA_HOME>\jre\bin目录中,注意下这里的JAVA_HOME是jdk的根目录,不要搞错了。
码上测试
利用上一篇中我们在系统中增加了两个虚拟串口,本次测试中我们用测试工具连接COM1,用JAVA程序连接COM2,这两个串口能相互通讯就算实验成功。
1.新建一个简单的maven工程添加测试类,代码和解释如下:
2.新建接收线程,将测试工具发送到串口的的数据打印出来,
3.新建发送线程,定时给串口发送数据,测试工具将会显示这些数据,
OK,代码准备完了,开始测试,注意串口参数要与代码中设置的一致,
先打开测试工具连接COM1,勾选定时后发送,
运行测试代码,在测试工具中看见了测试代码发送的数据,测试代码中也正确显示了测试工具发送的数据。
至此,代码连接串口测试通讯已经完成,后面我会更新一些通讯协议解析和自定义协议方面的内容,有需要的同学可以继续关注。