0

我有一个电表,我目前正在尝试与之握手,同时使用 Java 和 Python。这是HDLC连接模式。当我根据DLMS协议写入端口时,在Baudrate:300,Bytesize:7,Parity:E,StopBit:1。发送“/?!\r\n”后。

我收到了来自

meter="/HXE5\\2HXE12\r\n".

然后我发送“ACK 2 5 2 \r\n”,但我没有得到任何回复......下面是python代码。如果需要,我也可以附上 Java 代码。我现在只想通过物理层。谢谢

import serial
ser = serial.Serial('COM28', 300, bytesize=7, timeout=1,parity=serial.PARITY_EVEN)
print(ser.name)
ser.write('/?!\r\n'.encode('raw_unicode_escape'))
rcx1 = ser.readline()
ser.write('ACK 2 5 2\r\n'.encode('raw_unicode_escape'))
ser.baudrate=9600
rcx2 = ser.readline()
print(rcx1,'---',rcx2)
ser.close()
4

2 回答 2

0

在更改物理波特率之前,应确保 'ACK 2 5 2\r\n' 确实发送到线路,否则发送缓冲区中的数据可能会损坏,并且会无法识别。多年前我用 Python Serial 做了同样的事情,我记得在发送新波特的 ACK 后我必须做某种刷新操作,但我不记得函数名称的确切含义。只需检查 PySerial 文档就可以了。否则你必须在发送后做一个短暂的睡眠等待八位字节出去,但这不好。

于 2018-08-21T02:56:15.067 回答
0

我之前遇到的问题是,我发送的是“ACK”而不是发送 0x06 ......谢谢

于 2018-09-04T14:32:11.977 回答