串口通讯时,为什么我每次从前置机中取到的数据都是一样的----------------------串口通讯

风影枫林 2010-10-20 07:53:13
取数命令:7E 44 45 4E 0D
继续取数:7E 44 41 43 0D
我用串口调试工具先发送“取数命令”时得到一串数据,接着马上(发送取数命令后的1秒左右,时间长了发送无反应),发送继续取数的命令,可以得到一串新的数据。
为什么我自己写的程序每次得到的都是相同的数据呢?

//发送取数命令的类

String tempmess = "7E44454E0D"; //向前置机取数报文
byte[] bt = Util.hexStringToBytes(tempmess);// 将字符串转换成byte数组
outputStream = CommServer.serialPort.getOutputStream();
outputStream.write(bt);
outputStream.flush();
outputStream.close();

Thread.sleep(800);
String temp = "7E4441430D";//继续取数的报文
byte[] a = Util.hexStringToBytes(tempmess);// 将字符串转换成byte数组
outputStream = CommServer.serialPort.getOutputStream();
outputStream.write(a);
outputStream.flush();
outputStream.close();





//读取数据的类


public void init(String com,int baudrate,int databits,int stopbits,int parity_none) {
try {
System.out.println("进入串口通讯");
portId = CommPortIdentifier.getPortIdentifier(com);
//打开通讯
serialPort = (SerialPort) portId.open("ReadCommApp", 2000);
serialPort.setRTS(false);
//设置各种参数 波特率 数据位 停止位 校验位
//serialPort.setSerialPortParams(baudrate, databits, stopbits, parity_none);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setRTS(true);
inputStream = serialPort.getInputStream();

serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 监听串口
* @param event
*/
public void serialEvent(SerialPortEvent event) {
try{
if (event.getEventType() == event.DATA_AVAILABLE){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StringBuffer str = new StringBuffer();
List data = new ArrayList();
int i;
//读取报文
while((i=inputStream.read()) != -1){
//将报文中的数据字节不足2位的前面补0
if (Integer.toHexString(i).length() < 2) {
System.out.print("0"+Integer.toHexString(i)+" ");
data.add("0" + Integer.toHexString(i));
} else {
System.out.print(Integer.toHexString(i)+" ");
data.add(Integer.toHexString(i));
}
}
}
...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
风影枫林 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 leando 的回复:]
没大看懂,不过这2行代码这个很怪异
String temp = "7E4441430D";//继续取数的报文
byte[] a = Util.hexStringToBytes(tempmess);// 将字符串转换成byte数组
是不是应该是temp呢?
[/Quote]
我这里是写错了,如果你昨天晚上就回复我这帖子我就可以节约好几个小时的时间了
lean 2010-10-21
  • 打赏
  • 举报
回复
没大看懂,不过这2行代码这个很怪异
String temp = "7E4441430D";//继续取数的报文
byte[] a = Util.hexStringToBytes(tempmess);// 将字符串转换成byte数组
是不是应该是temp呢?
huang002x 2010-10-21
  • 打赏
  • 举报
回复
大家有什么想法就说下吧, 我能想到的情况我都已经试过了,还是不行。
njclsc 2010-10-21
  • 打赏
  • 举报
回复
String temp = "7E4441430D"改为 byte[] = {0x7E 0x44 0x41 0x43 0x0D}
qybao 2010-10-21
  • 打赏
  • 举报
回复
哈哈,LZ犯傻了,每次传送的都是tempmess
5L眼睛还很明亮的
njclsc 2010-10-21
  • 打赏
  • 举报
回复
补充下, 前直机的应答包是厂家写死到设备里面的,所以是一样的 呵呵
njclsc 2010-10-21
  • 打赏
  • 举报
回复
我也做过很长时间的java串口开发, qq:77166776 共同交流, 你的Util.hexStringToBytes(tempmess)这个方法是否考虑到了Oxff 还是ascII方式发送的呢? 你收到的可能是你说的前直机的应答包而已。。。
风影枫林 2010-10-20
  • 打赏
  • 举报
回复
不至于一个回复都没有吧。
风影枫林 2010-10-20
  • 打赏
  • 举报
回复
请大家帮帮忙, 我 这 个 问题比较急
风影枫林 2010-10-20
  • 打赏
  • 举报
回复
为什么我每次发帖都没人回呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧