这个周末我要做一个小项目。有一个太阳能电池逆变器(丹佛斯 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()
逆变器使用丹佛斯 ComLynx 协议(第 26 页是我要发送的数据):
编辑:我现在可以发送请求,因为 Adam 4520 RS485 转换器上的 LED 灯闪烁一次,但是没有返回数据,但是当我在终端中执行 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