在WinXP上用pyserial打开串口 -> “访问被拒绝”

5 投票
7 回答
38598 浏览
提问于 2025-04-15 18:01

我正在尝试通过串口用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 来检查一下这个端口是否已经打开。

撰写回答