5

Python と pyserial を使用して、シリアル ポート経由で hplc ポンプにデータを送信しようとしています。ケーブルとポンプを Linux (gentoo の派生物) でテストしたところ、root ではありますが、完全に機能しました。ここで、ポートを開こうとすると常に「アクセスが拒否されました」というエラーが表示される WinXP マシンでコードを使用する必要があります (パラメーターを ttySxx ではなく COMxx に調整すると、ポートが見つかりました)。コンピューターのシリアル ポートと、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

.close() を呼び出す前に .open() も機能しました

于 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モードと同じです。アクセスが拒否されたか、ポートが見つかりませんでした (ポートのアドレス指定方法を変更した場合)。もちろん、HyperTerminal はすべてを問題なく認識し、操作できました。

4時間後、私はこの小さなナゲットを見つけ、今ではすべてが順調に進んでいます.

プログラミングを楽しんでいるのは良いことです...GAH!

于 2010-01-26T03:10:58.970 に答える
0

ポートが他のプログラムによって開かれていないことを確認してください。(それは私のために働いた)

于 2016-12-16T11:58:34.657 に答える
0

TI Chronos から加速度計の値を取得しようとしたときに、同様の問題が発生しました。デバイスマネージャーで、COMポートを無効にしてから再度有効にしました。働いた

于 2011-05-24T11:35:14.943 に答える