4

USB経由で接続するArduinoベースのデバイスがあります。

QExtSerialPortプラグインされているときに、Qt 4 アプリケーションから (または必要に応じて) 使用して検出したいと思います。

これが不可能な場合は、どうにかしてシステムのポート名のリストを取得し、Arduino を検索してそれらすべてを試すことができると考えました (ここで、Arduino を正しく検出するための何らかのハンドシェイク手順を実装します)。このアプローチに関する私の懸念は、異なるボー レートである種のハンドシェイク ack を送信した場合に、デバイス (たとえば、プリンター) が破損するかどうかわからないことです。

そのため、どこから始めればよいかわかりません。どちらが最善のアプローチでしょうか? どうすれば実装できますか?

4

3 に答える 3

1

Windowsのシリアルポートのリストは、調べてみるとわかると思います。

HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM

レジストリキー

UNIXシステムの各シリアルポートには、1つ以上のデバイスファイル(/ devディレクトリ内のファイル)が関連付けられています。

System           Port 1           Port 2
IRIX®            /dev/ttyf1       /dev/ttyf2
HP-UX            /dev/tty1p0      /dev/tty2p0
Solaris®/SunOS®  /dev/ttya        /dev/ttyb
Linux®           /dev/ttyS0       /dev/ttyS1
Digital UNIX®    /dev/tty01       /dev/tty02

POSIXシステムでのシリアルプログラミングの詳細については、こちらをご覧ください

于 2009-12-30T15:37:33.750 に答える
1

奇妙な Windows レジストリ キーを使用したり、Linux でハードウェア接続されたデバイス ノードに依存したりするなど、難しすぎてプラットフォームに固有すぎます。

あなたは正しい道を進んでいます。QextSerialPort または QSerialDevice (Qt5 に統合されたので、私のプロジェクトではこちらを好みます) を入手し、例を見て、単純に使用してください。両方のライブラリで、構成されているすべてのシリアル ポートのリストを返すある種のポート列挙子クラスを取得します。手動で行う必要があるプラットフォーム/デバイス固有の設定のみ (現在の組み込みプロジェクトで RS485 を半二重モードにするなど) ですが、「標準」の問題は QIODevice 実装に完全にカプセル化されています。

QextSerialPort と QSerialDevice の両方をファイルのように使用できます。それを開き(ファイル名の代わりに、デバイス名を指定します。つまり、構成に応じて、Windowsでは「COM1」、Linuxでは「/dev/tty0」です)、通常のQFile、QBufferで行うのと同じように読み書きします、QIODevice から継承する Qwhatever-inherits-from-QIODevice。

ポートの開放や通信に問題がある場合は、お気軽にお問い合わせください。:)

于 2012-10-11T20:02:26.340 に答える
1

あなたのデバイスは USB であるため、UART ポートはハードウェア内のある種のコンバーターによってエミュレートされます。そのため、まずシステムで使用されているドライバーを理解する必要があります。

最も一般的な SERIAL->USB コンバーターは PL2303/PL2301 チップを使用するため、/dev にパスを作成します。これが最初のデバイスの場合、「/dev/ttyUSB0」と表示されますが、 proc パス (「cat /proc/bus/usb/devices」など)。Windows では通常、仮想 "COM" が作成されます。デバイス マネージャに移動してポートを確認してください。

ハードウェアがシステムとどのように通信するかを確信している場合は、QExtSerialPort を使用してシステム API をラップし、デバイスと通信することができます。

于 2010-01-01T13:52:56.490 に答える