尝试在WinXP上使用pyserial打开串口 - >"拒绝访问"

5 python windows-xp serial-port access-denied pyserial

我正在尝试使用python和pyserial通过串口将数据发送到hplc泵.我测试了linux下的电缆和泵(gentoo衍生物),它在那里工作得很好,尽管是root.现在我必须在WinXP机器上使用代码,在尝试打开端口时我总是得到"拒绝访问"错误(我将参数调整为COMxx而不是ttySxx,找到了端口).我尝试了计算机的串口,以及USB2Serial适配器.我听说WinXP在尝试用自编代码解决一些端口时非常严格.这个问题比安装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
Run Code Online (Sandbox Code Playgroud)

- >这里我设置了串口

    self.ser=serial.Serial(port='\\.\COM1', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1)
Run Code Online (Sandbox Code Playgroud)

- >这里发生了错误

    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()
Run Code Online (Sandbox Code Playgroud)

kgi*_*kis 11

尝试打开端口 \\.\COMxx

还要确保该端口尚未从其他应用程序打开.我建议您使用Hyperterminal来查看端口是否打开.

  • 好的 - 谢谢,这有帮助.我可以很容易地控制我的泵从超级终端.很明显,端口在初始化时已经打开了.在打开之前关闭它(self.ser.close())解决了问题. (6认同)

Mad*_*gan 8

.close()之前,我打电话给.open()也为我工作

  • 对于那些来这里寻求答案的人来说 - 这不是你要找的答案.这样做的原因是因为(正如其他地方所指出的那样)`.open()`不需要,在创建串行实例时打开端口.因此,在创建端口后关闭它只会停止当您(错误地)再次打开它时出现的错误. (4认同)

小智 5

如果您已经在构造函数中传递了串行端口名称/编号,则无需调用 .open!