2016-04-28 11 views
-1

STM32F4-Discovery Boardを使用してUARTペリフェラルでModbus RTUプロトコルを実装しようとしています。C/C++を使用してModbusレジスタのアドレスをマップする方法

Modbus RTUを使用してマスタとスレーブの機能を実装する予定です。ここで

が私の質問です

私はMODBUSにUARTの私の受信データを移動し、UARTにMODBUS層からのデータを送信することができるどのように、C/C++を使用して、私はあなたの説明を理解するのを助けることができるいくつかのコードスニペットを提供してください。 (現在、私はいくつかのパターンを提案してくださいいくつかのAPIを思い付くことを考えています)

私はModbusレジスタとコイルをどのように実装できますか?私は、ModBusアプリケーションマニュアルで指定されている通りにアドレスを定義する方法を意味しました。コードスニペットで私に説明してください。私が実装しようとした何かの下に。

/*Global Array, Structure and Variable Declarations*/ 
/* So to access Discrete_Output_Coils[2345] 
    the valid address to include in the protocol would be 
    so we have to access address 0x929 to read the 
    data.*/ 
const unsigned short int Discrete_Output_Coils[4999]; 
const unsigned short int Discrete_Input_Contacts[4999]; 
const unsigned short int Analog_Input_Register[4999]; 
const unsigned short int Anlog_output_Holding_Register[4999]; 
+2

あなたの質問はあまりにも広いです。まず、master *または* slaveで始まりますが、両方で始めることはできません。次に、Modbusの仕様を読んでください。第3に、非常にシンプルな非常にシンプルな実装で始めましょう。ここでは、フレームを送ったり受信したりします。あなたが基本的な送信ソーターを持っていなければ、レジスタの実装について考えようとすることには意味がありません。 – user694733

答えて

0

私はuser694733に同意します。あなたは一歩一歩進むべきです。たとえば、ハードウェアの仕様を定義する必要があります(つまり、どのような信号で、どのタイプのものなのですか?いくつですか?これらの質問の答えは、あなたの "デバイス"にとって意味のあるレジスタの種類とタイプを教えてくれます。各信号をレジスタにマップし、コイルまたはアナログのCRCチェックを組み込んだ単一レジスタの読み書き操作を試みます。期待どおりの結果を得るまでプロトコルを調整し、単一の残りの部分をカバーしますところで、配列の宣言を入れることは、問題を解決するための努力を示していません。あなたは、すべての苦労をするようコミュニティに依頼します。いくつかのコードをもう少しGoogleから始めたいのであれば、あなたの要求に合っているかどうかを調べるために調べることができるライブラリへのリンクがあります:

関連する問題