やりたいこと
pc-マイコン間のシリアル通信にて、"マイコンが送信したデータフレーム"をひと固まりとしてPCが受信したい
↓画像はPC側からみた送信データと受信データ
※E0~44をひとつのデータフレームとして受信したいが、なぜか途切れ途切れで受信している
※9600bps
#コード
C#
1/*データ受信毎に呼び出される*/ 2private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 3{ 4 /*データ受信用構造体定義*/ 5 TxRx_buffer_struct st_rx_buffer = new TxRx_buffer_struct(); 6 st_rx_buffer.buffer = new byte[TXRX_BUUFER_SIZE]; 7 8 /*受信したデータの長さを取得、ここでデータフレームの長さをゲットしたい。※データフレームは可変長*/ 9 Int32 len = serialPort1.BytesToRead; 10 /*受信したデータサイズ分、バッファにセットする*/ 11 for(byte mem_cnt = 0; mem_cnt < len; mem_cnt++ ) 12 { 13 st_rx_buffer.buffer[mem_cnt] = (byte)serialPort1.ReadByte(); 14 } 15 Invoke(new Delegate_RcvDataToTextBox(RcvDataToTextBox), 16 new Object[] { st_rx_buffer.buffer, len }); 17 18 19}
#わかっていること
len = serialPort1.BytesToRead;
ここのlenにセットされる値がまちまちになってしまっている。
#質問
参考となるやり方はありますでしょうか。
今考えているのはタイムアウトを使おうと思っているのですが上手くできず苦しんでおります。
例えば
50msecたっても次のデータが来なければそれまでのデータ群をデータフレームとする
みたいな。
どなたかご教授お願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/05 12:15
2020/05/05 13:14