簡體   English   中英

使用python Raspberry Pi 3從串行設備檢索數據時出現問題

[英]Problems retrrieving data from serial device with python Raspberry Pi 3

我有一個電磁線圈控制硬件,我正在嘗試將它用於Access系統,根據設備的手冊,我正在向設備發送命令,並嘗試獲取狀態,但我僅收到空白行。

知道端口狀態的命令如下:

  1. 讀取鎖狀態命令(門開關狀態的反饋)起始板地址鎖地址命令校驗碼(XOR)0X80 0X01 – 0XF 0X00-32 0X33 XX鎖地址為0X00,返回所有鎖的狀態,如果它不為0,則將返回到此鎖定狀態。

    例如: 返回到鎖1的狀態,例如:上位機發送0X80 0X01 0X01 0X33 0XB2(十六進制),返回命令板地址鎖地址狀態檢查代碼0X80 0X01 0X01 0X11 0X91(鎖打開)0X80 0X01 0X01 0X00 0X80(鎖關閉b。返回到所有鎖的狀態:

例如:主機發送0X80 0X01 0X00 0X33 0XB2(十六進制),返回起始板地址Status1 Status2 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 "

這是我的結果:

讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:

你能幫我做錯什么嗎?

評論 〜文件:鏈接

  1. 您的命令[0x80,0x01,0x33,0xB2] 錯誤
    采用

     ser.write ([0x80, 0x01, 0x01, 0x33, 0xB2]) 

    要么

     ser.write ([0x80, 0x01, 0x00, 0x33, 0xB2]) 
  2. 讓我們檢查pySerial看到您的串行端口和電磁控制硬件
    執行以下操作並檢查輸出:

     python -m serial.tools.list_ports 
  3. 刪除之間的所有設置

     ser.bytesize ... ser.writeTimeout 

    使用以下代碼使用默認值

     ser = serial.Serial(SERIALPORT) 

更改為以下內容:

    ser.write ([0x80, 0x01, 0x00, 0x33, 0xB2])

您已經有binary數據,因此不需要編碼。 閱讀pySerial 3.0文檔
serial.to_bytes(sequence)

我不確定您的命令,您對問題的描述不清楚。
您是否有電磁閥控制硬件文檔的公共鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM