我有一个可能有点无知的问题。我第一次尝试编写向串行设备写入数据的程序。我有一个帧[12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y],我需要发送它。其中X和Y是校验和值。在使用pyserial模块时,我的理解是需要将这个帧转换为字符串表示形式。好的,那很好,但我对事物应该采用什么格式感到困惑。我尝试过
a = [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y]
send = "".join(chr(t) for t in a)
但我的困惑来自于使用chr时,X和Y会转换成奇怪的字符串(假设它们的ASCII表示)。例如,如果X是36,则chr(x)为“$”,而不是“\x24”。是否有一种方法可以获得表示“\xnn”值而不是ASCII代码的字符串?令我困惑的是,12和7正确地转换为“\x0b”和“\x07”。我错过了什么吗?
更新: 所以可能是我没有完全理解串行写入是如何进行或者我的设备对我期望什么。这是我的C代码的一部分,正在工作:
fd=open("/dev/ttyS2",O_RDWR|O_NDELAY); char buff_out[20] //下一行是伪代码 for i in buff_out print("%x ",buff_out[i]); // 打印 b 0 0 0 0 0 0 0 9 b3 36 write(fd,buff_out,11); sleep() read(fd,buff_in,size); for i in buff_in print("%x ",buff_in[i]); // 打印我期望的正确帧
Python:
frame = [11, 0, 0, 0, 0, 0, 0, 0, 9] + [crc1, crc1]
senddata = "".join(chr(x) for x in frame)
IEC = serial.Serial(port='/dev/ttyS2', baudrate=1200, timeout=0) IEC.send(senddata)
IEC.read(18) # 要读取的字节数无所谓,它总是0
我是否正在正确进行?显然,由于它是特定于设备的,因此您无法确定确切情况,而且我不能真正提供太多细节。但是,serial.send()期望数据的格式是否正确?