DLMS с использованием Java/Python

У меня есть электрический счетчик, с которым я сейчас пытаюсь пожать руку, используя как Java, так и Python. Это режим подключения HDLC. Когда я пишу в порт в соответствии с протоколом DLMS, скорость передачи данных:300, байтовый размер:7, четность: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()

2 ответа

Перед тем, как изменить физическую скорость передачи данных, вы должны убедиться, что ACK 2 5 2\r\n действительно отправлен на провод, иначе данные в буфере отправки могут быть повреждены, и собрание не распознает его. Несколько лет назад я проделал то же самое с Python Serial, я вспомнил, что мне нужно было выполнить какую-то операцию очистки после отправки ACK нового бода, но я не помню, какое именно имя функции. Просто проверьте, что PySerial doc должен это сделать. В противном случае вы должны сделать короткий сон после отправки, чтобы дождаться выхода октетов, но это не хорошо.

У меня были проблемы с тем, что я отправлял "ACK" вместо отправки 0x06... Спасибо

Другие вопросы по тегам