从串行端口发送十六进制数据的问题

Posted

技术标签:

【中文标题】从串行端口发送十六进制数据的问题【英文标题】:Issue with hex data being sent out of a serial port 【发布时间】:2014-05-16 15:10:55 【问题描述】:

我真的希望有人可以帮助我解决这个问题,我已经研究了 3 天,现在它让我发疯了。

我有两个基于 linux 的设备通过串行连接,一个是嵌入式设备,另一个是 pc 类型的设备。我在 PC 设备上有一些 python 代码,当前成功读取了嵌入式设备发送的消息(因此串行设置是正确的)。

但是我现在需要将命令发送回嵌入式设备,这就是我正在努力解决的问题,我在串行线上有一个数据接头,因此我可以看到正在发送/接收的数据。

当我从串行端口发送字符串“\x2a\x00\x00\x00\x00\x00\x57\x78\xD6\x81\x00\x01\x00\x8D\x54”时,在串行数据上点击我只看到“EF F7 FF FF”。

请看下面的代码:

import serial

serialport = serial.Serial(port=self.device,
                                       baudrate=self.baudrate,
                                       bytesize=self.bytesize,
                                       parity=self.parity,
                                       stopbits=self.stopbits,
                                       timeout=0)

data = "\x2a\x00\x00\x00\x00\x00\x57\x78\xD6\x81\x00\x01\x00\x8D\x54"
serialport.write(data)
serialport.flushOutput()

【问题讨论】:

您的串行数据分流器是否在嵌入式设备发送的命令中显示正确的数据? 【参考方案1】:

这个问题现在已经解决,原来是客户忽略的几个问题告诉我,除非嵌入式设备处于工程模式,否则它将忽略命令。此外,数据分接头的 DIP 开关设置不正确,因此我的代码没有任何问题。感谢 Shane 让我质疑硬件而不是我的代码!

【讨论】:

以上是关于从串行端口发送十六进制数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

串行端口上的十六进制转换错误

QSerialPort::write() - 只有签名值? (最多 127 个十进制数)?我需要发送 0xFF (255 dec)

我用udp发送一个16进制包,接收端怎么解析。

C语言中的Modbus ASCII LRC生成

为串行设备创建/格式化十六进制值字符串

二进制串行通信协议 - 得到意外响应