安価な USB - RS-232C 変換アダプターはどれも TX と RX の表示灯しか持っていません。 ではなぜ 9 個なのか。これは DeStatiX A9 について最も多くいただく質問です。

従来の LED 2 個の USB - RS-232C アダプターの限界

ほとんどの USB - RS-232C 変換器が搭載しているステータス LED は TXD と RXD の 2 個だけです。 この 2 つのランプが答えられることは 1 つ、シリアル回線上でデータが動いているかどうか、それだけです。

しかし RS-232C はデータバイトだけではありません。DB9 インターフェースはハードウェア ハンドシェイク用の制御信号群、すなわち DTR、DSR、RTS、CTS、DCD、RI を規定しています。 これらのハンドシェイクは、産業用コントローラ、CNC 機器、ヴィンテージコンピュータ、 そしてレガシーなシリアル周辺機器にとって不可欠です。

核心となる問題はここです。TX/RX のパケットが完全に正常でも、 ハンドシェイク線が間違っていれば、通信は無反応あるいは異常に見えます。

標準的な LED 2 個のアダプターでは、これらの制御信号を目で確認できません。テスターを用意し、 DB9 のピンに 1 本ずつプローブを当て、直流電圧を測り、状態を手作業で判断する必要があります。 現場対応、ラボでのデバッグ、レトロ機器の修理において、これは時間がかかりミスも起きやすくなります。 断続的なハンドシェイクの不具合は、スポット的なテスター測定では捉えにくいものです。

DeStatiX A9 の 9 個の LED とは

DeStatiX A9 は GND、DTR、TxD、RxD、DCD、RI、CTS、RTS、DSR に対応した 9 個の信号表示 LED を備えています。本アダプターに電源専用の独立した LED はありません。

  • GND の LED はグラウンドに直結しています。点灯することはなく、電源表示ではなく 9 箇所の物理的な信号テストポイントの 1 つとして備えています。
  • FTDI チップセットを採用しているため、USB ケーブルを接続した後の USB 認識とドライバ読み込みの際、 DTR と RTS の LED が一度短く点滅します。これは起動時の FTDI Windows VCP ドライバのネイティブな挙動です。シリアルデータの送信によって点灯するものではなく、 後述の Python ビットバンテストスクリプトとも無関係です。
  • 残りの信号(TxD、RxD、DSR、DCD、RI、CTS)は、USB 認識時にこのような決まった点滅をしません。

これらの LED により、DB9 の全信号の状態をリアルタイムに目視できます。工具は不要です。 これによって見えてくる実践的な故障シナリオは次のとおりです。

  • TX/RX の電気的な状態は正常でも、CTS がアサートされないために相手機器が受信データを無視する。
  • ホストと周辺機器の間で DTR/DSR のハンドシェイク論理が食い違い、シリアル接続が成立しない。
  • モデム方式のレガシー機器で DCD(キャリア検出)信号が出ていない。
  • 旧型の通信機器で RI(着信表示)が予期しない状態変化を引き起こす。
  • DB9 ケーブル内部の断線。TX/RX が生きていても、ハンドシェイクの 1 ピンがオープンまたはショートしている。
  • ポートを開いたときの一時的な DTR/RTS の変化を観察できる。TX/RX のみのアダプターでは見えません。

レトロコンピューティングに取り組むホビイスト、工場の PLC や CNC を保守する技術者、 そしてラボのエンジニアにとって、ハンドシェイク信号は必須です。 TX/RX のみのアダプターが完全に隠してしまうシリアル通信不良の根本原因は、しばしばここにあります。

9 個の LED は過剰でしょうか。用途次第です。

ハードウェアハンドシェイクを使わず単純な ASCII 文字列を送るだけなら、答えは「はい」です。 LED は 2 個で十分で、DCD や RI を見る必要はありません。

しかし完全な DB9 ハンドシェイクに依存するレガシーな RS-232C 機器を扱うなら、 9 個の LED 構成は過剰ではありません。アダプターに組み込まれた意図的な診断ツールです。

DeStatiX A9 は安価な基本 USB シリアルアダプターの置き換えを目的としていません。 診断作業のための製品です。目に見えない RS-232C のハンドシェイク状態を、 目に見えるランプに変えることが目的です。

LED テストスクリプトを作った理由

本製品の中核的な価値は 9 個すべての LED による視覚的フィードバックです。そのため、 開封後にすべての LED チャンネルが正しく動作することを確認する簡単な手段が必要です。 1 個でも LED が点かず、それをすぐに確認できなければ、視覚診断ツールは役に立ちません。

FTDI D2XX ドライバを使用する Python のビットバンテストスクリプトを作りました。 スクリプトは動作する 8 本の信号 LED を順番に 1 つずつ点灯させます。 その並びを見て、すべての信号 LED が期待どおり点灯することを確認できます。 GND の LED は終始消灯したままです。

このテストは手早い QA 検証です。シリアルのトラブルシューティングを始める前に、 FTDI のビットバン出力、基板の配線、各 LED 回路が機能していることを確かめます。

重要な注意: このスクリプトは FTDI D2XX ネイティブドライバ を使用します。 WinUSB ではありません。Zadig でこの FTDI インターフェースに WinUSB をバインドしている場合、 D2XX はデバイスを開けずスクリプトは失敗します。先に正規の FTDI FTDIBUS / D2XX ドライバに戻してください。

前提条件

  1. Windows PC(Win10 / Win11)
  2. 正規の FTDI D2XX ドライバが導入されていること(このインターフェースでは Zadig の WinUSB を避けてください)
  3. Python 3
  4. ftd2xx パッケージの導入: pip install ftd2xx
  5. DeStatiX A9 を接続する

DeStatiX A9 LED テスター ソースコード

スクリプトをダウンロード

ページからコピーするのではなくファイルとして保存してください。Python ではインデントが構文の一部であり、 スペースが 1 つ失われるだけで動作しなくなります。

.py · 1 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
DeStatiX A9 LED Tester - dynattenik@
Simple test for the 9 LED USB-RS232 adapter (8 signal LEDs + 1 power LED):
lights one LED at a time, in order, forever, until Ctrl+C.
    python DeStatiX_A9_LED_Tester.py          # 0.5 s per LED
    python DeStatiX_A9_LED_Tester.py 0.2      # 0.2 s per LED
Requires: pip install ftd2xx + FTDI official D2XX driver.
"""
import sys
import time
import ftd2xx
# bit0 TXD  bit1 RXD  bit2 RTS  bit3 CTS  bit4 DTR  bit5 DSR  bit6 DCD  bit7 RI
BIT = {'TXD': 0, 'RXD': 1, 'RTS': 2, 'CTS': 3,
       'DTR': 4, 'DSR': 5, 'DCD': 6, 'RI': 7}
ORDER = ['DTR', 'TXD', 'RXD', 'DCD', 'RI', 'CTS', 'RTS', 'DSR']  # lighting order
DELAY = 0.5                                                       # seconds per LED
def main():
    delay = float(sys.argv[1]) if len(sys.argv) > 1 else DELAY
    dev = ftd2xx.open(0)              # first D2XX device
    dev.setBaudRate(921600)
    dev.setBitMode(0xFF, 0x01)        # 0x01 = asynchronous bit-bang, all outputs
    print('dynattenik@  DeStatiX A9 LED tester  -  Ctrl+C to stop')
    print('order: %s' % ' -> '.join(ORDER))
    try:
        while True:
            for name in ORDER:
                value = 0xFF ^ (1 << BIT[name])   # pull one bit low = LED on
                dev.write(bytes([value]))
                print('\r  LED: %-4s  byte: 0x%02X  %s'
                      % (name, value, format(value, '08b')), end='', flush=True)
                time.sleep(delay)
    except KeyboardInterrupt:
        print('\nstopping ...')
    finally:
        dev.write(b'\xFF')            # all LEDs off
        dev.setBitMode(0x00, 0x00)    # leave bit-bang mode
        dev.close()
        print('all LEDs off, device closed.')
if __name__ == '__main__':
    main()

テストの実行

既定は LED 1 個あたり 0.5 秒です:

python DeStatiX_A9_LED_Tester.py

0.2 秒でより速く一巡させます:

python DeStatiX_A9_LED_Tester.py 0.2

DeStatiX A9 の LED が定義した順序で巡回するのを確認してください。GND の LED は終始消灯します。 他の信号 LED のいずれかが点灯しない場合、ハードウェアの不具合を即座に特定できます。 Ctrl+C で終了します。スクリプトはビットバンモードを安全に解除し、すべての信号 LED を消灯します。

DeStatiX A9 が最も役立つのはどんな方か

  • 産業用 PLC や RS-232C 制御の CNC 機器を保守する現場技術者
  • ヴィンテージのシリアル周辺機器やモデムを修理するレトロコンピューティング愛好家
  • DB9 シリアルケーブルとハンドシェイク論理を検証するラボのエンジニア
  • RS-232C のハードウェアハンドシェイクの原理を教える教育者
  • シリアルハードウェアの小規模生産での QA 検証