モノリシックMODBUS通信ソースコード
, Linux 。 MODBUS MODBUS 。
2 AI 4 DO , 90C52 OP07 , ( , ), MODBUS 。
MODBUS
:crc
: ( )
よく研究してみたところ、CRCチェックのプログラムは全然書けないし、ネット上に既存のものがたくさんあるのでそのまま持ってきて使えばいいということも理解できませんでした.シンプログラムを経て通信できるようになりましたが、もう一つ重要な問題はタイムアウト判断の問題がずっと処理できなかったことです.そのため、以下の時間問題のまとめを行いました.Modbus文字とデータフレーム間隔の問題1、MODBSプロトコルでの規定は、RTUモードで、メッセージには少なくとも3.5文字の時間がかかる空間間隔を下図のように区別する
メッセージ全体を連続した文字ストリームで送信する必要があります.2つの文字間の空き時間が1.5文字より大きい場合、メッセージフレームは不完全とみなされ、受信ポイントによって破棄されるべきです.
RTU受信ドライバの実装は、1.5 Tと3.5 Tのタイミングにより、割り込みの管理が大量に隠されていることに注意してください.高い通信速度ではCPU負荷が増大するため、<=19200 pbsではこの2つのタイミングを厳格に守らなければならない.>19200 pbsの場合は2つのタイミングの固定値を用いるべきであり、文字間のタイムアウト時間t 1を推奨する.5は750 usです.フレーム間タイムアウト時間1.75 msはMODBUSプロトコルで規定されているが,実際の使用では1.5 Tとも注目する必要はない.フレームとフレームの間の3.5 Tはプログラム処理が必要である.RTUモードには開始子と終了子がないため、2つのパケット間は時間間隔でしか区別できない.計器の工場での実際の使用過程では、一般的に40 ms、50 ms、さらに長い間隔でデータを1回読み、この間隔はT 3を完全に超えている.5;現在のボーレートが9600 bpsでデータを取得する要求を送信すると仮定します:01 03 00 01 D 5 CA(フォーマットは8データビット1停止ビット)では、バイトごとに1つの開始ビット1停止ビット、つまり10ビットが含まれています.このコマンドを送信するには時間がかかります.8×10/9600×1000=8.3 ms、すなわち第1フレーム送信時間が8.3 ms、3.5 Tの時間が3.5×10/9600×1000=3.65 msなので2フレーム目のデータの送信開始時間は少なくとも12 ms目(8.3+3.65=1.95 ms)からプログラムを修正してやっと予想通りの効果が得られますが、3つのソフトウェアでデバッグしてもデータが読めます(シリアルデバッグアシスタント、MODBUSIM、modscan)その中でmodscanだけがデータを受信したときに赤くなったが、データが読めるのはなぜか彼のpoll時間を調節してもだめだ.他の2つのソフトウェアは正常にデータを書くことができる.考えてみるとこの2,3日でこんなことをしたと思った.プログラムはkeilで書く必要があれば連絡してください.直接使ってもいいです.