0

最初は、PYthon 2.7.5、Python 2.7.x、Windows 7 (64)、および FTDIFT232RL (実際の RS232 シリアル ポートではない) の最後のバージョンで pySerial を使用しています。テストのために、このコードを作成しました:

class cProduction:

    g_comPort_name = "COM1"
    g_comPort = 0

    # Instance of object -------------------------------------------------------
    def __init__(self, portName):
        self.data = []
        self.g_comPort_name = portName

    # Main functions -----------------------------------------------------------
    def start(self):
        """ Open port, configure port, set pins of serial line to default state
        DTR true, RTS false """
        try:
            self.g_comPort = serial.Serial(
                port = self.g_comPort_name,
                baudrate = 9600,
                parity = serial.PARITY_NONE,
                stopbits = serial.STOPBITS_ONE,
                bytesize = serial.EIGHTBITS,
                timeout = 10,
                dsrdtr = False,
                xonxoff = False,
                rtscts = False)

            if self.g_comPort.isOpen():
                return True
            else:
                return False
        except:
            return False
        return False

主要:

prod = cProduction("COM33")
if prod.start():
    print Style.BRIGHT + Fore.YELLOW + "Open" + Style.RESET_ALL
    while True:
        key = raw_input('key: ')
        if key == "R":
            prod.g_comPort.setRTS(True)
        if key == "r":
            prod.g_comPort.setRTS(False)
        if key == "D":
            prod.g_comPort.setDTR(True)
        if key == "d":
            prod.g_comPort.setDTR(False)

else:
    print Style.BRIGHT + Fore.RED + "Error while starting production module" + Style.RESET_ALL

RTS はうまく機能していますが、DTR に問題があります。DTR を False に設定すると、DTR が実際には低レベルに設定されていることをオシロスコープで確認できますが、700 ミリ秒後に高レベルに戻ります (私の側からの割り込みはありません)。この時点で setDTR(False) は機能しなくなりました。最初に setDTR(True) を呼び出す必要があり、その後 setDTR(False) が再び機能します (ただし、700 ミリ秒後に再び高レベルに戻ります)。700msという時間はすべて同じでした。「dsrdtr」または「rtscts」の構成を変更しようとしましたが、役に立ちませんでした。

私のデバイスで正しく動作する C++ ベースの Qt アプリケーションがあり、今はそれを Python に書き直そうとしているので、デバイスが正しいことを 100% 確信しています。

編集:ラップトップの実際の RS232 COM ポートで試してみましたが、正しく動作しています。そのため、pySerial には FTDI チップを搭載した仮想 COM ポートに問題があるようです...

4

1 に答える 1

0

Python の問題というよりも、ハードウェアまたはドライバーの問題のように見えます。dtr に何か接続されていますか? 多くの電流が流れているため、ハードウェア保護がトリガーされている可能性があります。

アプリケーションと Qt でloggerまたはapimonitorを使用して、違いがあるかどうかを確認できます。

于 2013-10-29T11:08:53.380 に答える