VaComm コンポーネントは、COM ポートを介した外部デバイスとの通信をカプセル化します。私のプログラムは、次のコードを使用して測定デバイスと通信しています:
void Form::OnButton_Click()
{
VaComm1->PortNum = param.serialComm.port;
VaComm1->Open();
VaComm1->WriteText("bla bla\r\n");
Sleep(3000);
VaComm1->WriteText("another bla bla");
}
次のような OnRxChar イベント ハンドラーを (フォーム デザイナーを介して) 設定しました。
void __fastcall TForm_Main::VaComm1RxChar(TObject *Sender, int Count)
{
AnsiString str = VaComm1->ReadText();
if (!str.IsEmpty())
{
// process received data
}
}
問題は、データを受信してもこのイベントが発生しないことです (無限ループで TVaComm::ReadText メソッドを呼び出すことで確認できます)。また、接続されたデバイスへの 2 つのコマンドの送信に成功しました (デバイスのディスプレイで確認できます)。入力バッファにデータがある場合、COM ポートを開いて OnRxChar イベントを受信する以外に何が必要ですか? また、兄弟コンポーネント TVaBuffer の目的がわかりませんか? 現在、私はそれを使用しておらず、メソッド ReadText を介してデータを受け取ることができます (上記で書いたように)。