問題タブ [qextserialport]

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.

0 投票する
1 に答える
7131 参照

c++ - Qt で QSerialDevice を使用するには?

Qt で QSerialDevice を使用してシリアル ポートに接続しようとしています。以前にQextSerialPortも試しました(これはWindows Vistaでは動作しますが、残念ながらWindows XPでは動作しません..)が、XP、Vista、およびWin7をサポートするAPIが必要です...ライブラリを構築し、次のように構成しました:

SVN の最新バージョン (0.2.0 - 2010-04-05) と 0.2.0 zip パッケージを使用しました。
ライブラリをビルドした後、Qt Libdir (C:\Qt\2009.05\qt\lib) と C:\Windows\system32 にコピーしました。ここで、プロジェクト ファイルの lib に対してリンクを試みます。

必要なヘッダー (abstractserial.h) をインポートし、次のように独自の AbstractSerial を使用します。

問題は、アプリケーションを実行すると、終了コード -1073741515 ですぐにクラッシュすることです (アプリケーションは正しく初期化できませんでした)。これは、Windows XP で QextSerialPort を使用して発生したエラーと同じです (Windows Vista で動作しました)。
リリース構成と自分のプログラムを使用して QSerialDevice lib をビルドすると、すぐにクラッシュしますが、終了コードは -1073741819 です。

誰かがこのプログラムまたは Qt で動作するシリアル ポートを取得する別のソリューション (おそらく別の API か何か) で私を助けることができますか?そうしないと、プログラムが UNIX システムで動作しないことを意味する Windows API 関数を使用する必要があります。 .
WinXP SP3 での QextSerialPort に関する問題の解決策がある場合は、それも歓迎します ;)

よろしく、
トバイアス

0 投票する
4 に答える
2089 参照

c++ - ArduinoへのQextSerialPort接続の問題

QextSerialPort を使用して Arduino Diecimila ボードにシリアル接続しようとしています。port->open() を呼び出すたびにアプリケーションがハングアップします。これが起こっていると思う理由は、シリアル接続が確立されるたびに Arduino ボードがリセットされるためです。hereで説明されているボードをリセットしない方法がありますが、QextSerialPort でそれを行う方法がわかりません。ポートが開かれた後にのみ DTR を false に設定できますが、その時点までにボードがすでにリセットされているため、あまり役に立ちません。

接続のコードは次のようになります。

これを実現する方法についてのアイデア。誰かがトリックを行う別のライブラリを知っていれば、必ずしも QextSerialPort を使用する必要はありません。

私はC++とQtが初めてです。

更新: 上記のコードを実行する前に (pySerial を使用して) 同じポートに接続する python スクリプトを実行すると、すべて正常に動作することに気付きました。

0 投票する
1 に答える
818 参照

qt - 「QEventDispatcherWin32 なしでは勝利イベント通知を作成できません」


"Cannot create a win event notifier without a QEventDispatcherWin32"
QextSerialPortを開こうとすると、Qtが例外をトリガーします

0 投票する
1 に答える
2579 参照

c++ - 読み込もうとすると QextSerialPort がブロックする

Windows で QextSerialPort を使用して、Qt/C++ アプリケーションがシリアル ポートとの間で読み書きできるようにしています。

読み取るバイトがある場合にのみ、シリアル ポートからバイトを読み取りたい。

まず、QextSerialPort::readyRead()シグナルをメイン クラスのスロットに接続しようとしましたが、アプリケーションがハングすることに気付きました。

次に、読み取ったバイト数を返す を使用してみました。その後、別の失敗した組み合わせをQextSerialPort::read(char *, uint64)試み、それがアプリケーションをブロックしないようにするのに役立つかどうかを確認しました。QextSerialPort::bytesAvailable()QextSerialPort::read(char *, uint64)

ただし、アプリケーションはマウスまたはキーボードのイベントに応答しないため、常にブロックされ、強制終了する必要があります。読み取りルーチンがブロックされるため、アプリケーションがフリーズすると思います。

QextSerialPort でノンブロッキング読み取りを実行する方法はありますか?

そうでない場合、Windows のシリアル ポートからノンブロッキング読み取り機能を使用するには、どのライブラリを使用すればよいですか?

更新: orQextSerialPort::atEnd()を使用する代わりに読み取るバイトがあるかどうかを確認するために 使用しようとしましたが、常に false を返します。QextSerialPort::bytesAvailable()QextSerialPort::size()

0 投票する
1 に答える
2647 参照

c++ - Qtデバッグエラー:「ターゲットライブラリリストの解析中:整形式ではありません(無効なトークン)」

QtCreatorを使用してQt/C++で開発されたアプリケーションをデバッグしています。私のアプリケーションは、シリアルポートがRhinoMarkIVコントローラーに接続されているQextSerialPortを使用してシリアルポートから読み取ります。

ASCIIデータを読み取ろうとしているため、これに問題がありますが、バッファに入るのは奇妙な文字です。たとえば、数値ゼロ( '0')のASCIIコードは、デバッガーによって表示されqDebug、'°'として出力される別のコードに置き換えられます。

さらに、[アプリケーションの出力]タブに次のメッセージが表示されますwhile parsing target library list: not well-formed (invalid token)

QextSerialPortで適切なASCIIコードを取得できないのはなぜだろうか。QextSerialPortまたはRhinoMarkIVコントローラーの問題ですか?2台のモニターでシリアルポートを介したトラフィックを表示していますが、ASCII文字がモニターに正しく表示されています。したがって、コントローラや通信チャネルの問題ではないと結論付けました。

メッセージは何をwhile parsing target library list: not well-formed (invalid token)意味し、なぜそれが引き起こされるのですか?

0 投票する
2 に答える
1447 参照

c++ - QextSerialPort(Qt / C ++)での文字エンコードの問題

QextSerialPortを使用してシリアルポートとの間で読み取りおよび書き込みを行うQt/C++プログラムをQtCreatorで開発しています。私のプログラムはコマンドをRhinoMarkIVコントローラーに送信し、それらのコマンドの応答を読み取る必要があります(コマンドが応答を生成する場合に備えて)。私の開発および展開プラットフォームはWindowsXPProfessionalです。

Mark IVがコマンドへの応答を送信し、私のプログラムがその応答をシリアルポートバッファーから読み取る場合、データは適切にエンコードされていません。私のプログラムはプレーンASCIIデータを取得していないようです。たとえば、MarkIVがASCII「0」(10進数の48)に続いてキャリッジリターン(10進数の13)を送信すると、バッファ(char *)は-80と13になります。文字は正しくエンコードされていませんが、キャリッジリターンは確かにあります。との両方read (char *data, qint64 maxSize)を使ってみreadAll ()ました。

ASCIIデータを解釈して対応する文字を表示する2台のモニターを使用してシリアルポートトラフィックを監視してきましたが、両方の方法で送信されたデータは正しくエンコードされているようです(実際には正しく表示されています)。それQByteArrayは文字エンコードを解釈せず、との両方read (char *data, qint64 maxSize)を使用してみreadAll ()たので、問題はQtが原因である可能性があることを破棄しました。ただし、私のプログラムはデータを適切に送信(書き込み)しますが、正しいバイトを読み取らないため、問題の原因がQextSerialPortであるかどうかはわかりません。

また、ハイパーターミナルを使用して手動でMark IVコントローラと通信しようとしましたが、通信も正しく行われます。次のパラメータを使用してハイパーターミナルを使用して接続を設定しました。

  • ボーレート:9600
  • データビット:8
  • パリティビット:0
  • ストップビット:1
  • フロー制御:ハードウェア

私のプログラムは、同じパラメータを使用してシリアルポートを設定します。ハイパーターミナルは機能しますが、私のプログラムは機能しません。

qextserialport.sourceforge.netからQextSerialPort1.1を使い始めてから、Google CodeでQextSerialPortの最新のソースコードを試してみましたが、問題は解決していません。

間違った文字エンコードの原因は何ですか?

この問題を解決するにはどうすればよいですか?

0 投票する
1 に答える
11657 参照

linux - Qextserialport を使用してシリアル ポートに書き込む方法

Ubuntu 10.10 を使用しています。

QTを介してシリアルを使用してマイクロコントローラー(ATmega328p)と通信したいので、テストのために、UARTから文字を読み取り、シリアルポートで同じ文字で応答(応答)するダミーアプリケーションをマイクロコントローラーで作成しましたが、ブラケットの間にあります.

PC が a を送信した場合、PC は応答 [a] を受信します。

ハイパー ターミナル (GtkTerm) を使用して PC から文字を送信すると、アプリケーションはうまく機能しますが、QT を使用すると機能しません。QT からシリアル ポートで文字を送信し、ハイパー ターミナルで応答を待っていますが、応答がありません。

シリアル通信プロパティ: Baud9600、Parity_none、Stop_bits_1、Data_8bits、Flow_control_Off

何が間違っているのですか?

0 投票する
1 に答える
268 参照

qt - Qextserialport で xml が壊れる

Python で書かれたアプリケーションを C++ で書き直そうとしています。

シリアル ポートを開いて xml を読み取るだけです。Pythonでは、pyserialを使用してxmlを読み取り、beautifulsoupを使用して情報を取得していました。出来上がりはこんな感じでした。

今、qextserialport を使用してシリアル ポートから読み取っています。取得した xml は次のようなものです。

私の問題は、このようなxmlを解析できないことです。エラーが発生します。

編集:


Qextserialport は、固定されていない一連のバイトでシリアル ポートからデータを読み取ります。では、xml を 1 つの文字列に連結するにはどうすればよいでしょうか。シリアル ポートから 4 ~ 5 秒ごとに xml 文字列を取得します。

ここに私のコードがあります

そして、シリアルポートから実際に読み取る関数

0 投票する
1 に答える
2029 参照

c++ - Linux-gnu/C++ の qextserialenumerator の objbase.h はどこにありますか

qextserialport ライブラリをダウンロードして、Eclipse プロジェクトで使用しました。プロジェクトをコンパイルすると、このエラーが発生しました。(gcc バージョン 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5))

入れようと探したのですが、見つかりませんでした。

私は何が欠けていますか?

0 投票する
1 に答える
430 参照

qt - Qt の奇妙な問題 - ウィンドウの再描画がスレッドをブロックしていますか?

これは、Qt サポート フォーラムでの私の投稿の x-post です。奇妙で興味深いと思ったので、ここでも皆さんが私を助けてくれるかもしれません。


私が抱えている問題を説明しようと思います - それは本当に奇妙なものですので、私が説明しようとしている間、我慢してください.

最初に私のアプリケーションの概要を説明しましょう。Windows XP 上の Qt 4.7 で書かれた単純な「シリアル データ ロガー」タイプのプログラムです。基本的にはシリアル ポートで通信を受信し (QExtSerialPort を使用)、これらの通信からデータを抽出するための処理を行ってから、このデータをフロント エンド GUI にプッシュし、ログ ファイルに出力します。また、qDebug() を使用してさまざまな時点でアプリケーション出力に通信とデータが送られてくるので、アプリケーション内で何が流れているかを監視できます。

明確にするために、使用していない場合は、QExtSerialPort は、シリアル ポートでバイトを受信したときに信号を送信し、QByteArray を使用してこれらを接続されたスロットに渡します。

さて、私の問題です。アプリケーションは最初は完全に動作しますが、約 5 ~ 10 分後に全体がロックして動作を停止し、強制的にクラッシュさせてしまいます。

これをデバッガでさらに調査したところ、非常に奇妙なことに気付きました。

通信のストリームはかなり一定しているので、デバッガーの「アプリケーション出力」ペインを監視することで、通信が到着していないように見えてプログラムがロックされる時期をすぐに確認できます。この時点で、アプリケーションのウィンドウをクリックして画面の別の部分にドラッグすると、通信が開始されて処理が開始された後、通信が停止して再びロックされ、ウィンドウを再び移動すると、さらに多くのことが許可されるようになります。データの入力など…..しばらくこれを試してみましたが、画面上でウィンドウを移動するたびに、プログラムが通信を受信して​​処理できるようになりました。ウィンドウの左上のシステム メニュー (ALT スペースを使用) を開くと、開いている限り通信を処理できるように見えます。

したがって、ここでの私の限定的な推論は、これらのアクションのそれぞれがウィンドウの再描画をブロックするので、GUI/再描画アクションが私の通信をブロックしているに違いないという理論に私を導いているようです.

また、データは 2 つのスロットを使用して GUI にプッシュされます。さらに興味深いのは (私が思うに)、これらのスロットへの接続を削除すると、コード内で GUI クラスとの対話ができなくなり、アプリケーションは正常に実行され、決してログ ファイルとアプリケーション出力に記録されるすべてのデータがロックされます。ただし、これらのスロットは非常に単純で、一部のテキスト フィールドを更新するかどうかを決定するために一部のコンボ ボックスの状態のみをチェックします。

誰もこれまでにこのようなものを見たことがありますか? 誰が何が起こっているのかについて何か考えがありますか?