這個週末我打算做一個小項目。有一個太陽能電池逆變器(丹佛斯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