問題タブ [qtserialport]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Qtを使用したシリアルポートの異常な動作
RS-232 を介して PC と 8 ビット マイクロコントローラーを通信するために、QT を使用してアプリを実行しています。私は QtSerialPort ライブラリを使用しており、通信は正常に機能していますが、PC からマイクロに何かを書き込んで応答を受信するたびに、シリアル ポートを閉じてから開く必要があります。そうしないと、通信を続行できません。構成は次のとおりです。10500 bps、8 ビット、1 ストップ、パリティなし、フロー制御なし。
ポートの設定と講義/書き込みに使用されるコードは次のとおりです。
qt - QSerialPort を使用したシリアル ポートからの読み取りでのトラブル
組み込みの FriendlyARM ベースのプロセッサ システム用の C++ プログラムを開発する必要があります。デスクトップコンピュータには Qt Creator 3.0.0 (Qt 5.2.0 ベース) を使用しています。私のプログラムは、Mini2440 FriendlyARM プロセッサのシリアル ポートから読み取ることができるはずです。
ターゲット システム (組み込みシステム) に移動する前に、ラップトップのシリアル ポートの読み取りと書き込みを試みました。私の主な問題は、シリアルポートから読み取る方法です。ご存知のように、新しいコンピュータやラップトップにはシリアル ポートがありません。そのため、手作りの USB-シリアル アダプタ ケーブルを使用して、シリアル ポート プログラミングをシミュレートしようとしています。USBシリアルケーブルを差し込むと、Ubuntuでは「/dev/ttyUSB0」として認識されます。うまくいきそうです。ケーブルのもう一方の端 (シリアル ポート) はどこにも接続されていないことに注意してください。
私の最初の質問は次のとおりです。このようにケーブルを構成しても問題ありませんか、それとも他のデバイスに接続する必要がありますか? 10 秒ごとに /dev/ttyUSB0 に書き込み、データを読み取ろうとします。私は次のコードになりました:
シリアルポートへの書き込みはOKです。しかし、読み込み時に「そのようなファイルやディレクトリはありません」という問題が発生することがあります。ときどき「ファイルが一時的に利用できません! 奇妙なことに、notifAreaPort.error() は 0 を返します。これは、エラーが発生していないことを意味します!
考え?
-- サイード・アムローラヒ・ボヨウキ
c++ - OSX SnowLeopard および QT 4.8 での QSerialPort のコンパイル
にインストールqt 4.8
し、からOsx Snow Leopard
クローンを作成してQtSerialPort
から git://gitorious.org/qt/qtserialport.git
、にビルドしようとしましたQtCreator
。
ライブラリをビルドしようとすると、次のエラーが表示されます。またはディレクトリ /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: メンバー関数内 'bool QSerialPortPrivate::open(QFlags)': /Users/warcomeb/Projects/External/qserial/qtserialport/ src/serialport/qserialport_unix.cpp:218: エラー: 'qt_safe_open' はこのスコープで宣言されていませんでしたclose()': /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:309: エラー: 'qt_safe_close'このスコープで宣言されていませんでした /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: In member function 'qint64 QSerialPortPrivate::readFromPort(char*, qint64)': /Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1081: エラー: 'qt_safe_read' はこのスコープで宣言されていません /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: Inメンバー関数 'qint64 QSerialPortPrivate::writeToPort(const char*, qint64)': /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1097: エラー: 'qt_safe_write' はこれで宣言されていませんscope /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: メンバー関数内 'qint64 QSerialPortPrivate::writePerChar(const char*, qint64)': /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1134: エラー: 'qt_safe_write' はこのスコープで宣言されていません /Users /warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: メンバー関数内 'qint64 QSerialPortPrivate::readPerChar(char*, qint64)': /Users/warcomeb/Projects/External/qserial/qtserialport/src /serialport/qserialport_unix.cpp:1160: エラー: 'qt_safe_read' はこのスコープで宣言されていませんでした [2]:このスコープで宣言されていませんでした /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: In member function 'qint64 QSerialPortPrivate::readPerChar(char*, qint64)': /Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1160: エラー: 'qt_safe_read' はこのスコープ make[2] で宣言されていません:このスコープで宣言されていませんでした /Users/warcomeb/Projects/External/qserial/qtserialport/src/serialport/qserialport_unix.cpp: In member function 'qint64 QSerialPortPrivate::readPerChar(char*, qint64)': /Users/warcomeb/Projects /External/qserial/qtserialport/src/serialport/qserialport_unix.cpp:1160: エラー: 'qt_safe_read' はこのスコープ make[2] で宣言されていません:* [qserialport_unix.o] エラー 1 make[1]: * [sub-serialport-make_default] エラー 2 make: * [sub-src-make_default-ordered] エラー 2 14:45:11: プロセス "/usr/bin /make" がコード 2 で終了しました。プロジェクト qtserialport のビルド/デプロイ中にエラーが発生しました (キット: デスクトップ)
これで私を助けてもらえますか?
c++ - whileループのQSerialPort?
RS-232 経由でハイパーターミナルにデータを送信する機能があります。この関数は while ループの外では適切に機能しますが、while ループでは最初の 1 回だけ送信し、その後は何も送信しません。
編集:
c++ - QSerialPort 経由のデータ受信が遅い
シリアル ポートから受信したデータの読み取り速度に問題があります。QSerialPort クラスを使用しています。私はそれを正しく設定しました(送信機に設定されているものと同じシリアルポートオプションを設定してください)。MainWindow コンストラクターで、生データを読み取るときに、QSerialPort からの信号を MainWindow のメソッド (readData()) に接続しました。次のようになります。
データは「s03445\n」のようになります。プログラムはデータを正しく読み取って表示しますが、非常に遅いです (たとえば、"s3445" を出力します)。データは約 20 Hz の周波数で送信されます (400 サンプル - その後 1 秒の一時停止)、私のプログラム データでは、約 3 ~ 4 Hz の周波数で存在します。また、単純なシリアル ポート ターミナル (Hercules) を介して送信機に接続すると、フル スピードでデータを受信できることも注目に値します。その行動の理由は何ですか?私は何を間違っていますか?助言がありますか?
c++ - QtSerialPort: Windows 7 での読み取りの重複
私のアプリケーションは、シリアル ポート (USB シリアル) 経由で組み込みシステムと通信しています。
私は Qt 4.8 と gitorious ( https://qt.gitorious.org/qt/qtserialport/ ) の QtSerialPort で開発しており、Windows 7 と Qt 5.2.1 の VM でテストしています。
Linux では問題なく動作しますが、同じメッセージを 2 回、3 回、4 回読み取ります。これらのメッセージが一度だけ送信され、puTTY 経由で通信していることを確認できます。
問題は、QtSerialPort、VM (パテで動作しますが)、シリアルドライバーなどの問題ですか?
これは既知の問題ですか? (しかし、何も見つかりませんでした)これを突き止める方法はありますか?
これが私が読む方法です:
編集: moar コード:
編集:興味深い。「flush()」のコメントを外すと、うまくいきます。フラッシュを使用すると、複数のメッセージが表示されます。しかし、受信側では?「flush()」が原因でメッセージが複数回送信される可能性はありますか?
}
c++ - QtSerialPort: readAll はすべてのデータを生成せず、新しい readyRead 信号も生成しません
USB シリアル ポートから読み込んでいますが、データが「スタック」するという問題が発生することがあります。受信したメッセージに対して、新しいメッセージを送信し、再度応答を待ちます。
Windows 7でQtSerialPortを非同期モードで使用してQt 5.2.1を使用しています。しばらくすると、答えを無期限に待っているため、プログラムが動かなくなります。(これは一種の一時的なバグですが、十分に長く待つと発生します)。デバッガーを使用すると、メッセージの断片しか受信していないことがわかりました。さらに調査すると、QSerialPort の「readChunkBuffer」にメッセージ全体が含まれていることがわかります。
これは私の「readyRead」ハンドラーです:
"while(port->bytesAvailiable()" も試しました。しかし、msgBuffer にはメッセージの一部しか表示されませんが、QSerialPorts バッファーにはメッセージ全体が表示されます。QSerialPort がシグナルを発信するタイミングと、実際にメッセージ全体が表示されるタイミングがわかりません。
たぶん、これはWindowsドライバーのバッファの問題でもありますか? 私を困惑させているのは、アプリケーションを強制終了し、puTTY を起動して改行を送信すると、メッセージの残りの部分が表示されることです。これはおそらく私のシリアル通信「パートナー」の問題ではないことに注意してください。それはpuTTYなどを介して動作し、「readChunkBuffer」でメッセージを見ることができます。
linux - ドライバー CH341 USB アダプターのシリアル ポートまたは QSerialPort が Linux で動作しない
次のコードは、Windows では正しく機能しますが、Linux では機能しません。私は同じ PC を使用しています。両方のオペレーティング システムがネイティブにインストールされています。仮想マシンは使用しません。Linuxで作業する必要があります。さまざまな Linux ディストリビューションで試しましたが、どこでも動作しません。
1 バイトを送信すると、デバイスは応答し、データを正しく送信します。
例:
1 バイトを超えるデバイスが送信された場合、Linux ではリクエストに応答しません。
例:
このイベントは、Windows でのみトリガーされます。Linux では、動作せず、受信されないか、不正な形式で到着し、リモート デバイスが認識されません。
Windows での私のログイン:
(デバイスの実際の応答を「X」文字に置き換えます)
Linux での私のログイン:
USBシリアルアダプタ:CH340
PD: 私の英語で申し訳ありません。Google 翻訳で最善を尽くしてください :(...
詳細情報 1:
ch341.c を再構築して追加します。
ログの delta=0x01 はフラグです:
詳細情報 2:
書き込み/読み取りのスレッドでは、onReadyRead で実行されている wakeAll を希望します。2 番目を渡す場合は、バッファが空かどうかを確認する前に readAll を作成します。例:
詳細情報 3:
私のカーネルは 3.12.6 ですが、GitHub からこのファイルを更新して、このドライバーを再構築します。
https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.c https://github.com/torvalds/linux/blob/master/drivers/usb/serial/usb-serial .c (コミット d9a38a8741fdffabc32e6d0943b1cdcf22712bec)