5

我正在尝试使用 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()
4

7 回答 7

11

尝试打开端口\\.\COMxx

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

于 2010-01-14T09:49:00.280 回答
8

在我调用 .open() 之前的 .close() 也对我有用

于 2010-02-13T01:28:42.693 回答
5

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

于 2011-04-28T01:28:26.847 回答
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 上却没有。这就是差异所在。

于 2010-12-23T18:23:20.757 回答
1

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

我让它在另一台使用 com0com 虚拟端口运行 vista 64 位的机器上工作,而不是一个障碍。

我试图在我的 Windows 7 机器上使用完全相同的脚本 - nada - XP Mode 相同的东西。访问被拒绝或找不到端口(更改端口的寻址方式时)。当然,超级终端可以完美地识别和处理所有内容。

4 小时后,我找到了这个小金块,现在一切都很好。

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

于 2010-01-26T03:10:58.970 回答
0

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

于 2011-05-24T11:35:14.943 回答
0

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

于 2016-12-16T11:58:34.657 回答