在Python中使用串行端口从扫描仪读取输入

2024-04-26 02:49:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究从扫描仪读取输入,但我想先问一个问题,然后再读取输入的数据。在

这就是我现在所拥有的。在

ser = serial.Serial()
ser.baudrate = 9600
PORT = 1
#for windows
ser = serial.Serial(PORT, 19200, timeout=1)
x = ser.read()
s = ser.read(11)
line = ser.readline()
#Read input
station = int(raw_input('What is the barcode? '))

有人能给我指出正确的方向吗。在

更新:输入设备是条形码扫描仪。输出窗口是控制台。在

我希望输出如下:

^{pr2}$

我还在使用this页上的示例


Tags: 数据forreadinputreadlineportwindowsline
2条回答

这个问题似乎措辞不当。您可以使用Python的raw_input函数从标准输入中读取数据以提问,如果您知道设备通信的波特率,您可以从串行端口读取字节(否则您将收到垃圾邮件)。从这个示例中,我不确定您到底想做什么(代码似乎显示您在读取值后提出问题,与描述相反)。在

如果您知道串行设备在传输完成后\n,那么您可以使用readline(),否则您需要知道它的响应将是多少字节。它看起来像是一个条形码扫描器,所以请确保您请求的字节数将覆盖它可能打印的任何错误代码。如果读取的字节太多,则会在下次读取时切断缓冲区中的数据,如果读取的字节太少,则会在缓冲区中留下一些字节。根据this的说法,这要么是6个字节,要么是10个字节,设备数据表将指定错误。在

您将需要这样的东西(COM1假定为Windows,对于Unix使用/dev/ttyS*:

ser = serial.Serial('COM1', 19200, timeout=1)
station = raw_input('What is the station?')
barcode = ser.read(10)

Edit:正如Paul所说,read()调用是一个阻塞调用,它将一直等到缓冲区中有可用的串行数据,直到达到构造函数中指定的超时时间。这意味着您需要在超时过期之前扫描某些内容,否则代码将中断。您将获得部分扫描结果或一个空字符串。在

^{pr2}$

请注意,我在这里使用了11个字节,因为这是您最初使用的,我假设您的条形码扫描仪的数据表显示它打印10个字符,然后打印一个结束字节,例如\n

上面关于扫描仪可能发送的任何错误代码的信息仍然有效,您需要在打印出条形码之前自己处理。在

你帖子里的链接断了,你不提你用的是哪种串行设备,很难知道你想做什么。在

我不认为raw_input能做你想要的,因为你在上面的代码中使用它的方式,它会使用标准输出和标准输入,我假设你想打印一个问题,然后从串行连接中获取输入。在

如果这确实是你想做的,那么你可能会想把你的问题写在你想显示的地方ser.写入,然后执行读取的代码。在

编辑:sourceforge已备份。{ll()很可能是你的标准方法,然后调用^你的标准输出。你的程序应该等待(阻塞)直到它收到正确的字节数,在你的例子中是11。我假设你发布的读取字节的代码实际上是在给你想要的。在

print "What is the barcode?"
code = ser.read(11)

相关问题 更多 >