在WinXP上用pyserial打开串口 -> “访问被拒绝”
我正在尝试通过串口用Python和pyserial向一个HPLC泵发送数据。我在Linux(一个Gentoo的衍生版)上测试了电缆和泵,结果一切都很顺利,虽然我是以root身份运行的。现在我需要在一台Windows XP机器上使用这段代码,但每次尝试打开端口时都会出现“访问被拒绝”的错误(我把参数调整成了COMxx而不是ttySxx,端口也能找到)。 我试过了电脑的串口,也试过USB转串口的适配器。 我听说Windows XP在用自己写的代码访问某些端口时比较严格。 有没有比安装Linux更简单的解决办法呢?
# -*- coding: utf-8 -*-
import sys
import time
import serial
from threading import Thread
"""
usage: cmdCapture workDirectory pictureTime pressureTime
"""
print 'successful import is successful'
workDir=sys.argv[1]
pressureThresh=float(sys.argv[3])
class doCapture(Thread):
def __init__ (self, workDir, pressureThresh):
Thread.__init__(self)
self.workDir=workDir
self.pressureThresh=pressureThresh
self.pressureTimer=0
-> 这里我设置串口
self.ser=serial.Serial(port='\\.\COM1', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1)
-> 这里发生错误
self.ser.open()
def getPressure(self):
self.ser.write('PR')
return self.ser.read(size=8), timer.timer()
def run(self):
self.pressureTimer=time.timer()
while 1:
if self.pressureTimer<=(time.timer()-self.pressureTime):
self.p=getPressure()
print self.p
myCapture=doCapture(workDir, pressureThresh)
myCapture.start()
7 个回答
5
如果你在创建对象的时候已经传入了串口的名称或编号,就不需要再调用 .open 这个方法了!
8
在我调用 .open() 之前先用 .close(),这个方法对我也有效。
11
试着用 \\.\COMxx
的方式打开这个端口。
另外,要确保这个端口没有被其他程序占用。我建议你使用 Hyperterminal 来检查一下这个端口是否已经打开。