В эти выходные я собираюсь сделать небольшой проект. У меня есть инвертор на солнечных батареях (Danfoss ULX 3600i), который я попытаюсь подключить к своей машине с Linux, чтобы посмотреть, смогу ли я получить от него данные, сколько энергии было создано, например, для статистики. На нем есть вход для подключения RJ45, но с RS485.
Я получил кабели для подключения его через USB-порт в ПК с преобразователем RS485 между ПК и инвертором.
Затем я пишу небольшой код на Python, чтобы сделать запрос. Однако я не могу понять, как правильно отправить данные.
import serial
import struct
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate=19200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
print(ser.isOpen())
thestring = "7E FF 03 00 01 00 02 0A 01 C8 04 D0 01 02 80 00 00 00 00 8E E7 7E"
data = struct.pack(hex(thestring))
#data = struct.pack(hex, 0x7E, 0xFF, 0x03, 0x00, 0x01, 0x00, 0x02, 0x0A, 0x01, 0xC8, 0x04, 0xD0, 0x01, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xE7, 0x7E)
ser.write(data)
s = ser.read(1)
print(s)
ser.close()
Инвертор использует протокол Danfoss ComLynx (на страница 26 — это данные, которые я пытаюсь отправить):
РЕДАКТИРОВАТЬ: теперь я могу отправить запрос, так как светодиодный индикатор на преобразователе Adam 4520 RS485 мигает один раз, однако данные не возвращаются, но я получаю эту ошибку, когда я нажимаю CTRL + C в терминале:
dontommy@dtbeast:~/workspace/python_scripting/src$ ./sollar.py
True
^CTraceback (most recent call last):
File "./sollar.py", line 30, in <module>
s = ser.readline().decode('utf-8')
File "/usr/local/lib/python3.2/dist-packages/serial/serialposix.py", line 446, in read
ready,_,_ = select.select([self.fd],[],[], self._timeout)
KeyboardInterrupt