使用带有 Python/Pyserial 的 C/C++ DLL 与 Opticon 条码阅读器进行通信
Posted
技术标签:
【中文标题】使用带有 Python/Pyserial 的 C/C++ DLL 与 Opticon 条码阅读器进行通信【英文标题】:Using C/C++ DLL with Python/Pyserial to communicate with Opticon barcode reader 【发布时间】:2014-10-08 13:52:19 【问题描述】:我有一个我试图与之通信的光学 OPN-2001 条形码扫描仪。 它正式支持 C/C++ 和 .NET,但如果可能的话,我想将它与 python 一起使用。
我已经打开了到设备的串行连接(或者至少是端口(?),但是当我使用 dll 中的函数时,当我期待正常 (0) 时,它给了我通信错误 (-1)。 我从未使用过 DLL 或串行通信,因此请记住这一点。
我想知道的是我在调用 DLL 函数或使用 pyserial 时是否犯了一些明显的错误。我也对其他人查看他们的 SDK 非常感兴趣。它似乎期待一个 4 字节的 LONG 作为下面的 comPort。我认为这会起作用,所以我有点卡住了。我意识到如果没有实际的硬件,您只能提供很多帮助。不过感谢您的帮助!
这是我到目前为止的代码:
from ctypes import *
from serial import *
opticonLib = WinDLL('Csp2.dll')
opticonLib.csp2SetDebugMode(1) #logs to textfile if using debug version of .dll
comPort = 3
opticonSerial = Serial(
port=comPort - 1,
baudrate=9600,
bytesize=EIGHTBITS,
parity=PARITY_ODD,
stopbits=STOPBITS_ONE,
timeout=5
)
if opticonSerial.isOpen():
print ('Port is open. Using ' + opticonSerial.name + '.')
print (opticonLib.csp2InitEx(comPort)) #Gives -1 instead of 0
opticonSerial.close()
SDK for scanner if you want to dig deeper
【问题讨论】:
【参考方案1】:Windows 会锁定串行端口。如果不查看 SDK,我会猜测 csp2InitEx 会尝试打开串行端口本身,当它这样做时,它会从 Windows 收到错误并失败。
尽量不要自己打开串口。
【讨论】:
嗯,你是对的。在使用 DLL 之前没有用 PySerial 打开它,我收到了 OK。以前应该试过的,呵呵。现在看看我还能用这个做什么。谢谢。以上是关于使用带有 Python/Pyserial 的 C/C++ DLL 与 Opticon 条码阅读器进行通信的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python(pyserial)向华为E3272 Hilink发送AT命令?
Python PySerial.How 知道一个端口是不是已经打开?
GNU/Linux - Python3 - PySerial:如何通过 USB 连接发送数据?