当前位置: 首页 > 知识库问答 >
问题:

使用python Raspberry Pi 3从串行设备重新传输数据时出现问题

习华灿
2023-03-14

我有一个电磁阀控制硬件,我正试图用于访问系统,根据设备手册,我向设备和tri发送命令以获取状态,但我只收到空行。

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

读取锁定状态命令(车门开关状态的反馈)起始板地址锁定地址命令检查代码(XOR)0X80 0X01–0XF 0X00-32 0X33 XX锁定地址为0X00,返回所有锁定的状态,如果不是0,则返回此锁定状态。

例如:a.返回锁1的状态例如:上位机发送0X80 0X01 0X01 0X33 0XB2(十六进制),返回命令牌地址锁地址状态检查cod 0X80 0X01 0X01 0X11 0X91(锁打开)0X80 0X01 0X01 0X00 0X80(锁关闭b.返回所有锁的状态:

例如:主机发送0X80 0X01 0X00 0X33 0XB2(十六进制),返回起始板地址状态1状态2状态3状态4状态5状态6状态7

命令检查cod 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个答案

萧光华
2023-03-14

注释...文档:链接

>

  • 您的命令[0x80,0x01,0x33,0xB2]错误

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

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

    让我们检查pySerial是否查看串行端口和电磁阀控制硬件
    执行以下操作并检查输出:

    python -m serial.tools.list_ports
    

    删除之间的所有设置

    ser.bytesize
    ...
    ser.writeTimeout
    

    仅对以下代码使用默认值:

    ser = serial.Serial(SERIALPORT)
    

    更改为:

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

    您已经有二进制数据,因此不需要编码。阅读pySerial 3.0文档
    serial。到字节(顺序)

    我不确定你的命令,你的问题的描述有点不清楚。
    你有螺线管控制硬件文档的公共链接吗?

  •  类似资料:
    • 我在从android设备Nexus6上发射iBeacon时遇到了麻烦。我在检测android设备或iTouch发出的信标信号方面没有问题,但我无法定位iPhone发出的信号。我正在使用altbeacon库和BeaconTermission类。我放了一个单独的线程。

    • 我尝试运行上述代码。但它不更新字符串。并且不显示任何错误。数据帧中存在“ABW”数据点。我也给出了数据集的链接。https://github.com/pran9957/world-bank-data.git

    • 我有一个android 7设备,我正在上面开发一个应用程序。此外,我有一个无线电波扫描仪,它可以作为蓝牙键盘(它扫描标签,并通过蓝牙传输数据,如果用户打开了某个写入应用程序,并且与扫描仪配对,它应该在该应用程序中写入数据)。 在android 7设备上的应用程序中,我有一个输入字段,我希望扫描仪在扫描内容时将其写入。最好的情况是扫描仪可以正常工作,无需我编写任何代码,比如我的Galaxy s10手

    • 问题内容: 我需要为应用程序的某些部分向现有应用程序添加插件功能。我希望能够在运行时添加jar,并且应用程序应该能够从jar中加载类,而无需重新启动应用程序。到目前为止,一切都很好。我使用URLClassLoader在线找到了一些示例,并且运行良好。 我还希望能够在罐子的更新版本可用时重新加载相同的类。我再次发现了一些示例,据我所知,实现此目标的关键是我需要为每个新负载使用一个新的类加载器实例。

    • 我在运行数据流作业时得到以下错误。我正试图将现有的beam版本更新到2.11.0,但在运行时出现了以下错误。 java.lang.incompatibleClassChangeError:类org.apache.beam.model.pipeline.v1.runnerAPI$standardpTransforms$Primitives没有实现在org.apache.beam.runners.co

    • 你好,我需要我下面的代码的解决方案。我试图从跨度类中提取文本,但似乎所有的文本都在同一时间提取,这样我就可以一个接一个地提取文本。 JAVA代码 超文本标记语言输出 JAVA输出 独处的年龄令人惊叹的愤怒周年纪念建筑艺术态度美丽最好的生日聪明的商务车机会改变圣诞节通信计算机酷勇气爸爸约会死亡设计饮食梦想复活节教育环境平等经历失败信仰家庭著名的父亲节恐惧金融健身食物宽恕自由友谊有趣的未来园艺上帝好政