我有一台电表,我正在尝试使用Java和Python进行握手。它的HDLC连接模式。当我根据DLMS协议写入端口时,在波特率:300, Bytesize:7,奇偶校验:E,StopBit:1。发送" /?! \ r \ n&#34 ;.
我收到
的回复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()
答案 0 :(得分:0)
在更改物理波特率之前,应确保已将“ ACK 2 5 2 \ r \ n”确实发送到线路,否则发送缓冲区中的数据可能会损坏,会议将无法识别。多年前,我对Python Serial做过同样的事情,我记得在发送新波特的ACK之后必须进行某种刷新操作,但是我不记得函数名的确切含义。只需检查PySerial文档即可。否则,在发送完八位字节后,您必须短暂睡眠,但这不好。
答案 1 :(得分:0)
我以前遇到的问题是,我发送的是“ ACK”,而不是发送0x06 ... 谢谢