我有一個電磁控制硬件,我試圖用於Access系統,根據設備的手冊我發送命令到設備,狀態,但我只收到空白行。使用python樹莓派從串口設備獲取數據的問題3
命令知道端口的estatus如下:
讀鎖定狀態命令(的門開關狀態的反饋) 開始板地址鎖地址命令校驗碼(XOR) 0X80 0X01 - 0XF 0X00-32 0X33 XX 鎖地址爲0X00,返回所有鎖的狀態,如果不是0,則返回此鎖狀態。
例如: a。返回到鎖定的狀態1 如:上位機發送0x80的0X01 0X01 0X33 0XB2(十六進制), 回報 司令部板地址鎖定地址狀態檢查鱈魚 0x80的0X01 0X01 0X11 0X91(鎖打開) 0x80的0X01 0X01 0X00 0x80的(鎖定關閉 b返回回所有的鎖的狀態:
如:主機發送0x80的0X01 0X00 0X33 0XB2(十六進制),返回 起板地址狀態1狀態2 STATUS3 STATUS4 STATUS5 STATUS6 STATUS7
命令檢查碼 0X80 0X01 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0X33 0XXX
狀態:從狀態1到狀態7,從高到低,相應的鎖是1-50。
這是我的代碼:
#!/usr/bin/env python
# based on tutorials:
# http://www.roman10.net/serial-port-communication-in-python/
# http://www.brettdangerfield.com/post/raspberrypi_tempature_monitor_project/
import serial, time
SERIALPORT = "/dev/ttyUSB0"
BAUDRATE = 9600
ser = serial.Serial(SERIALPORT, BAUDRATE)
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None #block read
#ser.timeout = 0 #non-block read
ser.timeout = 2 #timeout block read
ser.xonxoff = False #disable software flow control
ser.rtscts = False #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 0 #timeout for write
print 'Starting Up Serial Monitor'
if ser.isOpen():
try:
ser.flushInput() #flush input buffer, discarding all its contents
ser.flushOutput()#flush output buffer, aborting current output
ser.write (serial.to_bytes([0X80,0X01,0X33,0XB2]))
print("write data: 0X80,0X01,0X33,0XB2")
time.sleep(0.5)
numberOfLine = 0
while True:
response = ser.readline()
print("read data: " + response)
numberOfLine = numberOfLine + 1
if (numberOfLine >= 8):
break
ser.close()
except Exception, e:
print "error communicating...: " + str(e)
else:
print "cannot open serial port "
這是我的結果:
讀取數據: 讀取數據: 讀取數據: 讀取數據: 讀取數據: 讀取數據: 閱讀數據: 閱讀數據:
你能幫我嗎我做錯了什麼?
您正在使用'readline',但在'ser.write(...'Data。'末尾沒有'\ n'。 – stovfl
感謝您的幫助@stovfl,您可以幫我解釋一下語法,我是新的Python編程,所以我不敢肯定,如果我承認你的建議,謝謝。你的意思是:'ser.write(serial.to_bytes([0X80,0X01,0X33,0XB2 \ n]))' –