Как читать данные счетчика по протоколу DLMS?
Я пытался прочитать данные со счетчика по протоколу DLMS, но только '/?!\r\n'
работает другой нет,
Я пытаюсь прочитать данные, такие как (1-1.32.7.0 [напряжение]), но не могу использовать его как ASCII,
затем я записываю данные с RS485 по параллельному RS485 на USB.
Так что код, который я показал ниже, работает, но я все равно не могу декодировать.
def readr():
rcx2 = ser.readline()
print(rcx2)
def writex(data):
ser.write(data.encode('raw_unicode_escape'))
readr()
writex('\xa0\x07\x03!\x93\x0f\x01')writex('\xa0+\x03!\x10\xfb\xaf\xe6\xe6\x00`\x1d\xa1\t\x06\x07`\x85t\x05\x08\x01\x01\xbe\x10\x04\x0e\x01\x00\x00\x00\x06_\x1f\x04\x00\x00~\x1f\x04\xb0\xca\xea')
writex('\xa0\x19\x03!2o\xd8\xe6\xe6\x00\xc0\x01\xc1\x00\x01\x01\x00\x00\x00\x00\xff\x02\x00\xc3\xad')
writex('\xa0\x19\x03!T_\xde\xe6\xe6\x00\xc0\x01\xc1\x00\x03\x01\x01 \x07\x00\xff\x02\x00P\x1c')
writex('\xa0\x07\x03!q\x13\xc5')
writex('\xa0\x07\x03!S\x03\xc7')
1 ответ
Есть хорошая библиотека под названием GuruX, которую вы можете использовать для считывания показаний счетчиков.
Вот ссылки
Примерный запрос выглядит так.
Для начала нужно установить библиотеку:
pip install gurux-common
pip install gurux-serial
pip install gurux-net
pip install gurux-dlms
Обратитесь к документации для установки начальных параметров, таких как адрес сервера и т. Д.
Теперь вы можете читать данные.
def readDLMSPacket2(self, data, reply):
if not data:
return
notify = GXReplyData()
reply.error = 0
succeeded = False
rd = GXByteBuffer()
if not reply.isStreaming():
self.writeTrace("TX: " + self.now() + "\t" + GXByteBuffer.hex(data), TraceLevel.VERBOSE)
self.media.sendall(data)
msgPos = 0
count = 100
pos = 0
try:
while not self.client.getData(rd, reply, notify):
if notify.data.size != 0:
if not notify.isMoreData():
t = GXDLMSTranslator(TranslatorOutputType.SIMPLE_XML)
xml = t.dataToXml(notify.data)
print(xml)
notify.clear()
msgPos = rd.position
continue
rd.position = msgPos
rd.set(self.media.recv(100))
if pos == 3:
raise ValueError("Failed to receive reply from the device in given time.")
if pos != 0:
print("Data send failed. Try to resend " + str(pos) + "/3")
++pos
except Exception as e:
self.writeTrace("RX: " + self.now() + "\t" + rd.__str__(), TraceLevel.ERROR)
raise e
self.writeTrace("RX: " + self.now() + "\t" + rd.__str__(), TraceLevel.VERBOSE)
if reply.error != 0:
raise GXDLMSException(reply.error)
Есть несколько шагов, которые вам нужно сделать, прежде чем пытаться прочитать атрибут. Вам необходимо создать ассоциацию приложений, а перед этим вам нужно изменить режим последовательного интерфейса на HDLC. Вам могут понадобиться учетные данные безопасности для создания ассоциации приложений с доступом к атрибуту, который вы хотите прочитать. Вы можете бесплатно получить выдержки из Синей книги и Зеленой книги на веб-сайте DLMS, но вам, вероятно, понадобятся либо стандарты IEC 62056, либо полная Зеленая книга и Синяя книга от Ассоциации пользователей DLMS, чтобы установить связь. Техническая поддержка доступна членам Ассоциации пользователей через веб-сайт Ассоциации пользователей.