何年に-数え、どの土地に-推測し、質問をしました。ARMはAVRよりどれくらい速いですか?どのModbusプロトコルが「高速」ですか?ASCIIまたはRTU?
この場合、「速度」とは、プロトコルのすべてのアクションを実行するために必要なプロセッサマシンサイクルの数を意味します。
パフォーマンス調査は、ATMega48およびSTM32L052マイクロシステムに移植されたModBus Slave RTU / ASCIIライブラリーで実行されます。これは狭い範囲で広く知られています。 Modbusプロトコルを介してWeintekパネルエミュレーターに情報を出力します。テストはデモの例で行われます。テスト結果に加えて、パネルにはModbusレジスタの状態が表示されます:ディスクリート入力、ディスクリート出力、読み取り用のレジスタ、および読み取り/書き込み用のレジスタ。パネルは、マイクロコンピュータとのデータ交換におけるエラーの数も計算します。テストウィンドウを図に示します。
プロトコルメッセージ処理機能の実行時間を測定することにより、パフォーマンスを評価します。ワーカーピーザント方式を使用して実行時間を測定します。機能を開始する前に、カウント周波数がマイクロコンピューターのクロック周波数と等しいハードウェアタイマーをリセットし、機能を実行した後、タイマー値を読み取り、測定結果を処理します。Modbusプロトコルのメッセージを処理する機能の実行時間の最小値、最大値、および平均値を計算します。
while(1)
{
TIM6->CNT=0;
ModBusRTU();
//ModBusASCII();
tcurent=TIM6->CNT;
if(tcurent<tmin)tmin=tcurent;
if(tcurent>tmax)tmax=tcurent;
avg32=avg32-(avg32>>16)+tcurent;
tavg=avg32>>alfa;
...
研究結果は表にまとめられています。調査は、さまざまなライブラリオプションを使用して実行されました。
- ModBusUseTableCRC-テーブルCRC計算を使用します。
- ModBusUseErrMes-論理プロトコルエラーに関するメッセージを使用します。
また、さまざまなコンパイラ最適化戦略を使用します。
ModBusスレーブRTU / ASCIIライブラリは、場合によっては、重要な機能(Modbusマスターからの要求の受信とModbusスレーブの応答の間の一時停止)をサポートします。調査は、2ミリ秒と0の一時停止値(つまり、一時停止なし)で実行されました。これらの値は、表「一時停止P / P」の列に示されています。 「サイズ」列は、モジュールのサイズを示します。これには、Modbusメッセージを処理するための両方の関数(ModBusRTU()、ModBusASCII())が含まれます。
著者の意見では、最悪の場合、つまり関数の最大実行時間に従ってパフォーマンスを評価するのが最も適切です。
研究結果について深く考えた結果、以下の結論を導き出すことができます。
- AVRはそれほど遅くはありません!!! 同じクロック速度では、平均してARMよりも1.5倍遅くなります。また、サイズの最適化(たとえば、バリアント13および15)の場合、実際にはARMに近づきます。
- ASCIIプロトコルは、RTUと比較して、伝送速度が遅いだけでなく、はるかに多くのマイクロコントローラーリソースを消費します。
- プロトコルの論理エラーに関するメッセージを使用しても、パフォーマンスにはまったく影響しません。
- CRCを計算するための表形式の方法を使用すると、マイクロプロセッサの計算リソースの使用を1.5倍以上減らすことができます。
- 要求の受信と応答の送信の間に一時停止を使用すると、RS-485バスでの競合を回避できるだけでなく、Modbusプロトコルのメッセージを処理するブロッキング機能を減らすこともできます。
他にどのような結論を導き出すことができますか?