这个周末我打算做一个小项目。有一个太阳能电池逆变器(丹佛斯ULX 3600i),我将尝试连接到我的Linux机器,看我是否可以从中获取数据,创建多少能量,例如统计数据。有一个用于RJ45连接的输入,但带有RS485。用python发送十六进制串行
我在电脑和逆变器之间通过一个RS485转换器将电缆连接到PC的USB端口。
然后我写一个小的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协议(上page 26是我想发送数据):
编辑: 我现在可以发送一个请求为对亚当4520 RS485的LED光转换器闪烁一次,但是没有数据返回,但是当我在终端做了CTRL + C得到此错误:
[email protected]:~/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