1

電圧と温度をアナログ入力として受け取り、ローパス フィルター処理、指数平滑化などの信号処理を含むアルゴリズムを使用して何らかの処理を行うアプリケーションがあります。これらの処理は通常、次のような高レベルのプログラミング言語で行われます。 C または C++。

PLC、特に Allen-Bradley Control-Logix システムを使用してこれらの同じ手順を実行する方法に興味がありますか? これには、ラダーロジックを使用した命令セットが制限されすぎているようです。構造化テキストを使用してこれを実行できますか?

4

2 に答える 2

3

ラダー ロジックは、世界で最も優れたプログラミング言語ではありませんが、問題なく計算を実行できます。条件、算術、配列などを完全に補完します。

実際の問題は、ほとんどのラダー ロジック エンジン (および Control Logix) が実行する周期的な実行モデルに計算を適合させることです。つまり、各ラングまたは計算がスキャンごとに 1 回だけ実行され、上から下までコントロール内でプログラムが繰り返し実行されます。

結果を生成する前に一連の値を繰り返しループする必要がある場合、スキャンごとにすべてを "1 回だけ" 実行したいというラダー エンジンの要求と、結果を生成するためにループを実行する必要性を解決するのが困難になる可能性があります。実際、従来のループと同じように、ラダー コードのブロックを繰り返すことができる FOR ループ演算子があると思います。ループ/アルゴリズムで費やされる時間がスキャン レートに実質的に影響しないようにする必要があります。

うまく機能するのは、スキャン レートをループの 1 つとして機能させることです。通常、新しい値を配列に受け入れてから、その配列に対して結果を計算することによってフィルターを計算します。基本的に、スキャン サイクルごとに 1 つよりも高速に値を受け入れることはできないため、精度を失うことなく、スキャン サイクルごとに最大 1 つのフィルター結果を計算できます。配列が適度なサイズ (たとえば、10 個の値) である場合、事実上、フィルター結果を生成する方程式として配列の多項式を単純にコーディングし、その多項式をラダー ロジックとしてコーディングすることができます。

于 2012-12-17T05:00:10.787 に答える
1

Control Logix PLCは、サイクリックスイープで実行する必要はありません。現在、RSLogix 5000が目の前にありませんが、プロジェクトを定義するときに、周期的なスイープで実行される1つのプログラムを作成する必要があります。ただし、そうでない他のプログラムを作成することもできます。また、トリガー(通常の入力スキャンには役立ちません)または固定タイマー(入力スキャンに非常に役立ちます)からそれらを実行することもできます。入力スキャンタイマーを計装の更新よりも速く設定しても意味がないことに注意してください。最新のPLCは、メーターがデータを更新するよりもはるかに速くスキャンを実行できることがよくあります。

私がこれに使用した良いテクニックの1つは、1秒などと呼ばれるプログラムを作成することです。このプログラムは、すべての入力をスキャンし、すべての信号処理を実行してから、バッファリングされたメモリ位置に書き込みます。プログラムの残りの部分は、これらのバッファリングされたメモリ位置を調べ、入力を直接監視することはありません。入力バッファリングプログラムは、PLCが障害を起こす前に処理できるものまで、プロセスに必要な速度で実行するように設定できます。

また、信号処理関数自体をアドオン命令として記述し、必要なパラメーターを使用してそれらを呼び出すこともお勧めします。

したがって、次のような呼び出しインターフェイスを備えたAOIを使用できます。

input-1_buffered := input_smooth (low_pass, input-1);

これにより、input-1を値として使用し、input-1_bufferedを最終的な場所として使用して、input_smooth関数が呼び出されます。low_passは、適切なロジックにジャンプするためにinput_smooth関数内で使用されます。

次に、実際の平滑化ロジックを構造化テキストで記述できます。これは、その1つのAOIにのみ存在するため、誰も理解する必要はありません。

于 2013-01-30T23:21:37.413 に答える