DMU——上位机串口通信

Java上位机编程总结

一、准备工作

1、开发工具:

eclipse(注意JDK环境配置:不会的百度;还有有的实验室电脑是32位系统,千万不要安装错)

JavaWin32位安装包:解压后配置环境变量即可使用,里面自带eclipse软件中文版

链接:https://download.csdn.net/download/geyou4444/10279754

         https://download.csdn.net/download/geyou4444/10279756

         https://download.csdn.net/download/geyou4444/10279759

另外给大家推荐一个模拟串口工具:在自己电脑上可以虚拟窗口,方便调试程序(是否能够检测到串口)(链接:https://download.csdn.net/download/geyou4444/10278579

2、使用工具:

1)Java串口通信依赖的jar包RXTXcomm.jar(链接:https://download.csdn.net/download/geyou4444/10278576
使用方法: 
拷贝 RXTXcomm.jar 到 JAVA_HOME\jre\lib\ext目录中; 
拷贝 rxtxSerial.dll 到 JAVA_HOME\jre\bin目录中; 
拷贝 rxtxParallel.dll 到 JAVA_HOME\jre\bin目录中; 
JAVA_HOME为jdk安装路径,若没有JAVA_HOME,则一般是拷贝到Java\jdk1.8.0_161目录中


3、新建工程

新建一个Java工程,不想新建的可以从网上寻找相关的开源代码。

上述步骤进行完,就可以开始进行Java的编程工作了

二、课设要求

2.扩展功能:

    (1)下位机扩展为采集2路模拟量数据;

    (2) 上位机发送选择命令来决定下位机采集哪一路模拟量,并且上位机把收到的一路模拟量数值减半后实时回送给下位机;下位机把收到的回送来的数据进行数模转换后用万用表或示波器显示。

    (3)如果上位机收到的数据大于某个阈值(该值自己设定),则以某种方式报警,并通知下位机点亮某个LED灯。

3. 发挥功能:

上位机以图形化的方式(含动态曲线)显示模拟信号和对应的开关量信号;

PS:辛苦两周,就完成上述功能。。。

三、编程实现

1、串口通信管理SerialPortManager.java
SerialPortManager实现了对串口通信的管理,包括查找可用端口、打开关闭串口、发送接收数据。

这部分Java代码是实现串口通信的基础,这个文件在论坛里用心很容易找到,要理解看懂即可。

2、异常处理package serialport.exception;
每个自定义的Exception类都重写了它的 toString() 方法,便于主程序捕捉到该Exception后打印对应的错误信息。看懂理解即可。
3、主界面main class:MainFrame.Java
界面设计,自己自由发挥吧(附上我们设计的界面)

1) 查找可用串口

2) 打开关闭串口
通过用户界面的“打开串口”、“关闭串口”控制串口的开和闭。


3)接收发送数据

发送数据时我们希望通过特定字符串的发送来控制数据发送的开始和结束。因此我们在Java程序中将数据格式改成String类型。

String data =dataInput.getText().toString();

SerialPortManager.sendToPort(serialport,data.getBytes());

而对于接收数据来说,我们使用字节型数组byte[] bytes存放从串口中读取到的数据,方便与下位机发送的数据实现对接。


此外,我们希望接收到的数据是16进制格式。

data = SerialPortManager.readFromPort(serialport);

dataView .append(ByteUtils.byteArrayToHexString( data , true ) + "\r\n" );

4)拓展功能:模拟量数据减半

在本Java程序中,上位机是通过字节型数组byte[] bytes存放从串口中读取到的,对于把收到的模拟量数值减半,我们先将收到的数据转换为int类型,然后进行减半操作,并在界面上实时显示。


5)拓展功能:阈值处理(上位机程序不难,但是让下位机接收着实费了很长时间)

当上位机收到阈值数据时,在Java程序中,我们决定使用if判断语句,当收到的数据超过阈值时,便进行处理。


6)发挥功能:实时显示模拟量数据

若想要画实时曲线,则需要下载jfreechart-1.0.19(链接:https://download.csdn.net/download/geyou4444/10278578)不考虑发挥功能的可以忽略这个

如何将模拟量数据显示在纵坐标上,这是重点。

我们将模拟量数据设置为全局变量,这样他值Sdata的改变可以不断传送给定义的方法




然后图像绘制的方法放在主界面函数中


然后