Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyserial检查奇偶校验错误_Python_Serial Port_Pyserial - Fatal编程技术网

Python 使用pyserial检查奇偶校验错误

Python 使用pyserial检查奇偶校验错误,python,serial-port,pyserial,Python,Serial Port,Pyserial,我目前正在用python编写一个小实用程序来监视串行线路上的通信。这是用来调试一些通过rs232连接的硬件,因此能够准确地看到线路上发生了什么是非常重要的。如何使用pyserial检查奇偶校验错误 具体来说,我想知道是否有一种平台无关的方法可以使用pyserial查找奇偶校验位的值。我强烈希望不需要termios来执行此操作,因为这在某些windows机器上使用。我在Pi上用GPIO4逐位监控奇偶校验 灵感 我的解决方案是在第二个字节中输出奇偶校验位,并将其全部写入文件: import time

我目前正在用python编写一个小实用程序来监视串行线路上的通信。这是用来调试一些通过rs232连接的硬件,因此能够准确地看到线路上发生了什么是非常重要的。如何使用pyserial检查奇偶校验错误


具体来说,我想知道是否有一种平台无关的方法可以使用pyserial查找奇偶校验位的值。我强烈希望不需要termios来执行此操作,因为这在某些windows机器上使用。

我在Pi上用GPIO4逐位监控奇偶校验

灵感

我的解决方案是在第二个字节中输出奇偶校验位,并将其全部写入文件:

import time
import pigpio # http://abyz.me.uk/rpi/pigpio/python.html

RXD=4 # number of GPIO pin

pi = pigpio.pi()

if not pi.connected:
    exit(0)

pigpio.exceptions = False # Ignore error if already set as bit bang read.

handle = pi.file_open("/home/pi/Documents/bit_bang_output.txt",pigpio.FILE_WRITE) #assuming that the file /opt/pigpio/access (yes without extension) contains a line /home/pi/Domcuments/* w

pi.bb_serial_read_open(RXD, 9600,9) # Set baud rate and number of data bits here. Reading 9 data bits will read the parity bit.

pigpio.exceptions = True

stop = time.time() + 5.0 # recording 5.0 seconds

while time.time() < stop:

    (count, data) = pi.bb_serial_read(RXD)
    if count:
        #print(data.hex(),end="")
        pi.file_write(handle, data.hex())

pi.bb_serial_read_close(RXD)

pi.stop()
导入时间
进口pigpio#http://abyz.me.uk/rpi/pigpio/python.html
RXD=4#GPIO引脚数
pi=pigpio.pi()
如果未连接pi,则:
出口(0)
pigpio.exceptions=False#如果已设置为bit bang read,则忽略错误。
handle=pi.file_open(“/home/pi/Documents/bit_bang_output.txt”,pigpio.file_WRITE)#假设文件/opt/pigpio/access(是,无扩展名)包含一行/home/pi/Domcuments/*w
pi.bb_serial_read_open(RXD,9600,9)#在此设置波特率和数据位数。读取9个数据位将读取奇偶校验位。
pigpio.exceptions=True
停止=时间。时间()+5.0#记录5.0秒
while time.time()<停止:
(计数,数据)=pi.bb_串行_读取(RXD)
如果计算:
#打印(data.hex(),end=”“)
pi.file_write(句柄,data.hex())
pi.bb_串行_读取_关闭(RXD)
pi.stop()

如何定义“奇偶校验错误”?到目前为止,您尝试了什么?@DanLenski,我特别想看看串行帧中奇偶校验位的值。我不确定您的硬件设置到底是什么样的,但我相信在标准PC串行端口中,奇偶校验是在硬件级别进行的,因此软件不会看到。如果您希望实现一个“”串行端口,它可以让您检查线路上的各个位,那么您可能必须使用不同的硬件。。。制作某种GPIO接口?我可以设置一个微控制器来接收串行数据,然后将其与奇偶校验位和任何帧错误信息一起发送到计算机,每接收一个字节发送2个字节。然后,脚本将解析该输出。然而,这正是我想要避免的努力,只需使用两个usb到串行转换器以及pyserial。我想如果不可能的话,我会再次研究基于微控制器的方法。我发现了一些其他的线索可能会帮助你。这些讨论了从串行端口读取原始数据的各种复杂性:,