タイトル : Re^11: シリアル通信で異常に時間がかかってしまう 投稿日 : 2010/01/29(Fri) 11:05 投稿者 : ぽると
るるさん > ぽるとさんのプログラムは受信データ長ですべてのデータが入ってきたと判断し、 > まとめて受信データをごっそり取り出す方法ですよね? > そこをデータ長で判断せず、確実に1文字とか数文字毎に取り出し > その文字の中に最後の文字であるか?を判定してやる方がいいのかな?と思ったのです。 MsComm.InputLen = 1 で OnComm にて文字列結合していく手法でしょうか? 今の方法でやはり厳しそうならこっちの方式にするしかないかと思っています。 > 三菱シーケンサは使用した事ありませんが、おそらく最終文字がASCIIコードで言う > LF(0x0A)とかCR(0xOD)とかでないですか? 資料を確認したところ、今回の設定での通信での最終文字は CR+LF でした。 > あと、 > lstrSendData = <コマンド文字列> > lintDataLength = <コマンドに応じて設定されてます> > ここ。確実にコマンドに対する受信データ長がセットされてますかな? > 送信コマンドと受信データ長が本来のと一致しない場合が出てる可能性もあるかも。 シリアル通信ログにて送信文字列を出力しています。 確認してみましたが、やはり送信文字列の形式に誤りはなさそうでした。 受信文字列についても、通信タイムアウトログでその時点の受信文字列を出力しています。 送信コマンドに応じた受信データ長分のデータが取得できているようです。 > ちなみにACK,NAKは通信成功、通信失敗を意味する場合が多いです。 > STXは通信の始め、ETXは通信の終わりのアクセントとして使われます。 ここらへんも判定する処理が必要かと思い、この問題が解決後に処理部分を実装予定です。 |