gpt4 book ai didi

python - 使用 python Raspberry Pi 3 从串行设备检索数据时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:28 25 4
gpt4 key购买 nike

我有一个螺线管控制硬件,我正在尝试将其用于访问系统,根据设备手册,我正在向设备发送命令并尝试获取状态,但我只收到空行。

了解端口状态的命令如下:

  1. 读取门锁状态命令(门开关状态的反馈)起始板地址 锁定地址 命令校验码 (XOR)0X80 0X01 – 0XF 0X00-32 0X33 XX锁地址为0X00,返回所有锁的状态,不为0则返回本锁状态。

    例如:A。回到锁1的状态eg:上位机发送0X80 0X01 0X01 0X33 0XB2(16进制),返回命令板地址 锁地址 状态 检查代码 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

Status:从status 1到Status 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 "

这是我的结果:

读取数据:读取数据:读取数据:读取数据:读取数据:读取数据:读取数据:读取数据:

你能帮我看看我做错了什么吗?

最佳答案

Comment ... document: link

  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])

您已经有了二进制 数据,因此不需要编码。阅读pySerial 3.0 documentation
serial.to_bytes(序列)

我不确定你的命令,你的问题描述有些不清楚。
您是否有指向电磁阀控制硬件文档的公共(public)链接。

关于python - 使用 python Raspberry Pi 3 从串行设备检索数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44223563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com