试图在WinXP上使用pyserial打开一个串口 - > “拒绝访问”

时间:2010-01-14 09:44:51

标签: python serial-port access-denied windows-xp 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

- >在这里我设置串口

    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 个答案:

答案 0 :(得分:11)

尝试将端口打开为\\.\COMxx

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

答案 1 :(得分:8)

在我打电话给.open()之前

.close()以及

答案 2 :(得分:4)

如果已经传递了串口名称/号码,则无需调用.open 构造!

答案 3 :(得分:3)

执行时

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

串口已经打开。在Windows上,如果您运行.open(),如果端口已经打开,但是您没有在Linux上运行,则会出现错误。这就是差异所在。

答案 4 :(得分:1)

在打开端口之前调用.close()解决了一个让我疯狂的问题!

我使用com0com虚拟端口在另一台运行vista 64位的计算机上工作,而不是故障。

我试图在我的Windows 7盒子上使用完全相同的脚本 - nada - XP Mode同样的事情。访问被拒绝或找不到端口(在更改端口的寻址方式时)。当然,HyperTerminal可以完美地识别和使用所有内容。

4小时后,我发现这个小金块,现在一切都在嗡嗡作响。

我喜欢编程是件好事...... GAH!

答案 5 :(得分:0)

当我试图从TI Chronos获取加速度计值时,我遇到了类似的问题。在设备管理器中,我刚刚禁用了COM端口并再次启用它。工作

答案 6 :(得分:0)

确保该端口未被任何其他程序打开。 (这对我有用)