package org.crec;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TooManyListenersException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
import org.crec.serialException.NoSuchPort;
import org.crec.serialException.NotASerialPort;
import org.crec.serialException.PortInUse;
import org.crec.serialException.ReadDataFromSerialPortFailure;
import org.crec.serialException.SendDataToSerialPortFailure;
import org.crec.serialException.SerialPortInputStreamCloseFailure;
import org.crec.serialException.SerialPortOutputStreamCloseFailure;
import org.crec.serialException.SerialPortParameterFailure;
import org.crec.serialException.TooManyListeners;
import org.crec.serialPort.SerialTool;
import org.crec.util.StringUtil;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
/**
* 监测数据显示类
* @author Zhong
*
*/
public class SerialView extends JFrame {
/**
*/
private static final long serialVersionUID = 1L;
//设置window的icon
Toolkit toolKit = getToolkit();
//Image icon = toolKit.getImage(SerialView.class.getResource("computer.png"));
DateTimeFormatter df= DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss.SSS");
private JComboBox<String> commChoice;
private JComboBox<String> bpsChoice;
private JButton openSerialButton;
private JButton sendButton;
private JTextArea sendArea;
private JTextArea receiveArea;
private JButton closeSerialButton;
private List<String> commList = null; //保存可用端口号
private SerialPort serialPort = null; //保存串口对象
/**类的构造方法
* @param client
*/
public SerialView() {
init();
TimerTask task = new TimerTask() {
@Override
public void run() {
commList = SerialTool.findPort(); //程序初始化时就扫描一次有效串口
//检查是否有可用串口,有则加入选项中
if (commList == null || commList.size()<1) {
JOptionPane.showMessageDialog(null, "没有搜索到有效串口!", "错误", JOptionPane.INFORMATION_MESSAGE);
}else{
commChoice.removeAllItems();
for (String s : commList) {
commChoice.addItem(s);
}
}
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 10000);
listen();
}
/**
*/
private void listen(){
//打开串口连接
openSerialButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//获取串口名称
String commName = "COM10";
//获取波特率
String bpsStr = (String) bpsChoice.getSelectedItem();
//检查串口名称是否获取正确
if (commName == null || commName.equals("")) {
JOptionPane.showMessageDialog(null, "没有搜索到有效串口!", "错误", JOptionPane.INFORMATION_MESSAGE);
}else {
//检查波特率是否获取正确
if (bpsStr == null || bpsStr.equals("")) {
JOptionPane.showMessageDialog(null, "波特率获取错误!", "错误", JOptionPane.INFORMATION_MESSAGE);
}else {
//串口名、波特率均获取正确时
int bps = Integer.parseInt(bpsStr);
try {
//获取指定端口名及波特率的串口对象
try {
serialPort = SerialTool.openPort(commName, bps);
} catch (SerialPortParameterFailure
| NotASerialPort | NoSuchPort | PortInUse e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SerialTool.addListener(serialPort, new SerialListener());
if(serialPort==null) return;
//在该串口对象上添加监听器
closeSerialButton.setEnabled(true);
sendButton.setEnabled(true);
openSerialButton.setEnabled(false);
String time=df.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),ZoneId.of("Asia/Shanghai")));
receiveArea.append(time+" ["+serialPort.getName().split("/")[3]+"] : "+" 连接成功..."+"\r\n");
receiveArea.setCaretPosition(receiveArea.getText().length());
} catch (TooManyListeners e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
//发送数据
sendButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(!sendButton.isEnabled())return;
String message= sendArea.getText();
try {
SerialTool.sendToPort(serialPort, getOrder("28BD50000000002D"));
} catch (SendDataToSerialPortFailure
| SerialPortOutputStreamCloseFailure e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//关闭串口连接
closeSerialButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(!closeSerialButton.isEnabled())return;
SerialTool.closePort(serialPort);
String time=df.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),ZoneId.of("Asia/Shanghai")));
receiveArea.append(time+" ["+serialPort.getName().split("/")[3]+"] : "+" 断开连接"+"\r\n");
receiveArea.setCaretPosition(receiveArea.getText().length());
openSerialButton.setEnabled(true);
closeSerialButton.setEnabled(false);
sendButton.setEnabled(false);
}
});
}
/**
* 主菜单窗口显示;
* 添加JLabel、按钮、下拉条及相关事件监听;
*/
public byte[] getOrder(String sensorBh) {
byte[] order = new byte[21];
order[0] = (byte) 0xAA;
order[1] = (byte) 0x75;
order[2] = (byte) 0x10;
order[3] = (byte) 0x00;
order[4] = (byte) 0x0E;
order[5] = (byte) 0x00;
byte[] sensorByte = StringUtil.HexString2Bytes(sensorBh);
order[6] = sensorByte[0];
order[7] = sensorByte[1];
order[8] = sensorByte[2];
order[9] = sensorByte[3];
order[10] = sensorByte[4];
order[11] = sensorByte[5];
order[12] = sensorByte[6];
order[13] = sensorByte[7];
order[14] = 14;
Calendar now = Calendar.getInstance();
order[15] = (byte)now.get(Calendar.MONTH);
order[16] = (byte)now.get(Calendar.DAY_OF_MONTH);
order[17] = (byte)now.get(Calendar.HOUR);
order[18] = (byte)now.get(Calendar.MINUTE);
order[19] = (byte)now.get(Calendar.SECOND);
order[20] = xor(or
没有合适的资源?快使用搜索试试~ 我知道了~
java串口通讯 物联网设备通讯dtu
共101个文件
class:53个
java:39个
properties:3个
需积分: 44 35 下载量 138 浏览量
2017-12-19
11:14:28
上传
评论 1
收藏 666KB RAR 举报
温馨提示
运行MainFrame.java 打开程序,设置采集结果,自定义通讯协议数据,解析二进制、十六进制数据。
资源推荐
资源详情
资源评论
收起资源包目录
java串口通讯 物联网设备通讯dtu (101个子文件)
MainFrame.class 10KB
TCPClientBase.class 9KB
SerialView.class 8KB
NIOServer.class 6KB
NIOClient.class 6KB
SendTest.class 6KB
SerialTool.class 5KB
StringUtil.class 5KB
Pusher.class 4KB
GatherTask$SendCommand.class 4KB
ClientStateMachine.class 4KB
SerialView$2.class 4KB
ProcessRequestTask.class 4KB
MainFrame$SerialListener.class 3KB
NodeStatus.class 3KB
StationStateMachine.class 3KB
LoginFrame.class 3KB
SerialView$SerialListener.class 3KB
GatherTask.class 3KB
MainFrame$4.class 3KB
SensorDao.class 2KB
DateTimeUtil.class 2KB
SerialView$4.class 2KB
WellcomView.class 2KB
PropertyUtil.class 2KB
SensorData.class 2KB
Message.class 2KB
TCPClientBase$Worker.class 2KB
ClientMessage.class 2KB
UserDao.class 2KB
ExceptionWriter.class 2KB
LoginFrame$1.class 2KB
SerialView$3.class 2KB
SerialView$1.class 1KB
SqlServerJDBC.class 1KB
MainServer.class 1KB
MainFrame$1.class 930B
WellcomView$1.class 927B
ServerMessage.class 922B
MainFrame$3.class 749B
MainFrame$2.class 733B
SerialPortOutputStreamCloseFailure.class 603B
SerialPortInputStreamCloseFailure.class 596B
Constants.class 594B
SerialPortParameterFailure.class 576B
ReadDataFromSerialPortFailure.class 561B
SendDataToSerialPortFailure.class 552B
NotASerialPort.class 549B
NoSuchPort.class 549B
TooManyListeners.class 540B
PortInUse.class 516B
MainApp.class 495B
Message.class 284B
.classpath 513B
sqljdbc4.jar 525KB
RXTXcomm.jar 60KB
SerialView.java 14KB
MainFrame.java 13KB
TCPClientBase.java 10KB
SerialTool.java 9KB
Pusher.java 7KB
SendTest.java 7KB
GatherTask.java 7KB
NIOClient.java 5KB
StringUtil.java 5KB
NIOServer.java 5KB
ClientStateMachine.java 4KB
ProcessRequestTask.java 4KB
WellcomView.java 3KB
StationStateMachine.java 2KB
LoginFrame.java 2KB
NodeStatus.java 2KB
ClientMessage.java 2KB
Message.java 2KB
DateTimeUtil.java 2KB
SensorData.java 1KB
PropertyUtil.java 1KB
SensorDao.java 1KB
ExceptionWriter.java 1KB
SqlServerJDBC.java 974B
MainServer.java 826B
UserDao.java 805B
ServerMessage.java 566B
SerialPortInputStreamCloseFailure.java 366B
SerialPortOutputStreamCloseFailure.java 334B
Constants.java 329B
SerialPortParameterFailure.java 315B
ReadDataFromSerialPortFailure.java 305B
NotASerialPort.java 300B
SendDataToSerialPortFailure.java 299B
NoSuchPort.java 297B
TooManyListeners.java 291B
PortInUse.java 275B
MainApp.java 203B
Message.java 61B
org.eclipse.jdt.core.prefs 7KB
org.eclipse.core.resources.prefs 63B
.project 390B
crec.properties 115B
crec.properties 47B
共 101 条
- 1
- 2
资源评论
CherishTender
- 粉丝: 6
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 王锐的《OpenSceneGraph 3.0 Beginner's Guide》中文翻译版,个人读了翻译的很不错!值得推荐
- scr ubuntu上传
- AI Python编程学习课件-第6章深度学习
- STM32单片机FPGA毕设电路原理论文报告液晶显示模块与8031单片机的接口电路及编程
- STM32单片机FPGA毕设电路原理论文报告液晶航向指示器接口电路设计
- Pytorch深度学习入门与实战2024
- STM32单片机FPGA毕设电路原理论文报告野战救护车手术台稳定液压系统及其自动控制
- STM32单片机FPGA毕设电路原理论文报告压延机卷取调速装置改造
- STM32单片机FPGA毕设电路原理论文报告形状记忆合金驱动的微电脑密码锁的设计
- HTML小游戏27 - Chuck Chicken 魔法蛋网页游戏源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功