2400511_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2400511_ja-JP

2400511_ja-JP

Modbus RTU通信エラー

私はMC9S08JM60用のMODBUS RTU保持レジスタを読み取るためのコードを書いています。私は15個の保持レジスタを読み取っており、それによって35バイトのフレームが得られます。つまり、各バイトごとに1回の割り込みを受けることが期待されていますが、フレームの最初のバイトは1回、次の割り込みは次のフレームの最初のバイトに対してです。SO、残りの34バイトを失うことになります。これに関して何かご意見があればお聞かせください。

コードスニペットを添付します。

Re: Modbus RTU communication error

こんにちは、 @An95さん

投稿ありがとうございます!

S08にModbus RTUのドキュメントは存在します。

しかし、あなたが直面している問題はRDRFをクリアしていないことに関係している可能性があります。

RDRF(受信データレジスタ満杯)フラグは、SCI1S1を読み取った後にSCI1Dを読み取った場合にのみクリアされます。ISRでSCI1Dが読み取れない場合、割り込みは一度発生し、その後レシーバが停止します。

14.2.4を参照MC9S08JM60シリーズデータシートのSCIステータスレジスタ1(SCIxS1)。

コードがフラグを正しくクリアしていることを確認してください。

BR

Re: Modbus RTU communication error

こんにちは、 @carlos_o さん

ご回答ありがとうございます。
RDRFフラグは、割り込みサービスルーチンのコールバック関数に入るとクリアされます。35バイトのフレームは、単一の割り込みで送られてきます。35バイトのバッファを使用しても、フレーム全体を読み込むことができません。
この件に関して、ご意見をお聞かせください。
BR

Re: Modbus RTU communication error

実装をベアメタルコードに変更しましたが、それでも1バイトしか受信できません。
ご意見をお聞かせください。

Re: Modbus RTU communication error

こんにちは、 @An95さん

SCIはRDRFがトリガーされるたびに1バイトしか受信できませんでした。つまり、送信する35バイトを読み取るために35回の割り込みをトリガーする必要があります。

14.3.3章「レシーバ機能説明」を参照すると良いでしょう

SCIモジュールには1つのSCIデータレジスタ(SCIxD)しかなく、毎回8ビットを節約できます。

タグ(1)
評価なし
バージョン履歴
最終更新日:
木曜日
更新者: