Inquiry
Form loading...
シーメンスのいくつかの一般的な PLC のプログラム構造と特性

ニュース

シーメンスのいくつかの一般的な PLC のプログラム構造と特性

2023-12-08
1. 一部の海外小型PLCのプログラム構造 これらのPLCのユーザープログラムは、メインプログラム、サブプログラム、割り込みプログラムから構成されます。 各スキャン サイクルで、CPU はメイン プログラムを 1 回呼び出します。 メインプログラムはサブプログラムを呼び出すことができますが、小規模制御システムはメインプログラムのみを持つことができます。 割り込みプログラムは、割り込みイベントに迅速に応答するために使用されます。 割り込みイベントが発生すると、CPU はその時点で処理中のプログラムやタスクの実行を停止し、ユーザーが作成した割り込みプログラムを実行します。 中断されたプログラムの実行後、中断されたプログラムまたはタスクの実行を継続します。 これらのサブルーチンと割り込みプログラムにはローカル変数がなく、サブルーチンには入出力パラメータもありません。 2. Siemens S7-200のプログラム構成 プロセスイメージ入出力(I/Q)、変数メモリV、内部メモリビットM、タイマT、カウンタCなどはグローバル変数です。 S7-200 のプログラム編成単位 (POU) には、メイン プログラム、サブプログラム、および割り込みプログラムが含まれます。 各 POU には独自の 64 バイトのローカル変数があり、その POU 内でのみ使用できます。 対照的に、グローバル変数は各 POU で使用できます。 サブルーチンで使用できるローカル変数は次のとおりです。 1) TEMP (一時変数) は、ローカルデータ領域に一時的に保存される変数です。 定義された一時変数は、POU の実行時にのみ使用されます。 POU の実行後、一時変数の値は保存されません。 2) IN は、それを呼び出す POU によって提供される入力パラメータです。 3) OUT は、呼び出し元の POU に返される出力パラメータ (サブルーチンの実行結果) です。 4)IN_ OUT は input_ 出力パラメータの初期値は、それを呼び出す POU によってサブルーチンに転送され、サブルーチンの実行結果は同じ変数で呼び出した POU に返されます。 メインプログラムと割り込みプログラムのローカル変数には一時変数 TEMP のみがあります。 入出力パラメータとローカル変数を備えたサブプログラムは、構造化プログラミングを容易に実現でき、同様の装置や生産ラインを長期間生産するメーカーにとって特に便利です。 これらのメーカーのプログラマーは、機器の各コンポーネントまたはプロセス機能に対して多数の一般的なサブルーチンを作成しました。 サブルーチンの内部コードがわからなくても、サブルーチンの機能と入出力パラメータの意味さえわかれば、さまざまなユーザーの要求に応じた制御プログラムを素早く「組み立て」ることができます。プログラム間の呼び出し。 これは、デジタル集積回路チップを使用して複雑なデジタル回路を形成するようなものです。 サブルーチンに入力パラメータと出力パラメータがない場合、それを呼び出すプログラムとの間に明確なインターフェイスがないため、構造化プログラミングを実現することが困難になります。 サブルーチンにローカル変数がない場合、サブルーチンを呼び出すプログラムとはグローバル変数を介してのみデータを交換でき、サブルーチン内で使用できるのはグローバル変数のみです。 サブプログラムと割り込みプログラムを他のプロジェクトに移行するときは、アドレスの競合が発生しないように、それらが使用するグローバル変数を再配置する必要があります。 プログラムが非常に複雑で、サブプログラムや割り込みプログラムが多い場合、このようなアドレスの再割り当ての負担は非常に大きくなります。 サブプログラムと割り込みプログラムにローカル変数があり、グローバル変数ではなくローカル変数のみを使用する場合、他の POU とのアドレス競合がないため、サブプログラムを変更せずに他のプロジェクトに移植できます。 3. Siemens S7-300/400のプログラム構成 S7-300/400はサブプログラムをファンクション(またはファンクション)とファンクションブロックに分割します。 S7-300/400 の機能は基本的に S7-200 と同様です。 これらには、入力パラメータ、出力パラメータ、および一時変数があります。 関数のローカル データの戻り値は、実際には出力パラメーターです。 専用の保管領域はありません。 関数の完了後、一時変数のデータは保存されません。 グローバル変数を使用して、関数の実行後に保存する必要があるデータを保存できますが、関数の移植性に影響します。 ファンクションブロックは、独自の専用記憶領域(つまり、バックグラウンドデータブロック)を使用してユーザーによって書き込まれるプログラムブロックです。 関数ブロックの入出力パラメータと静的変数は、指定されたバックグラウンド データ ブロックに保存され、一時変数はローカル データ スタックに保存されます。 ファンクション ブロックを呼び出すたびに、バックグラウンド データ ブロックを指定する必要があります。 ファンクション ブロックの実行後、バックグラウンド データ ブロック内のデータは失われませんが、ローカル データ スタック内のデータは保存されません。 ファンクションブロックはC++と同様のカプセル化の概念を採用しており、プログラムとデータを一緒にカプセル化し、移植性に優れています。 S7-300/400の共有データブロックは、すべての論理ブロックで使用できます。 4. IEC61131-3のプログラム構造 IEC61131-3はPLCのプログラミング言語規格です。 IEC61131-3 は、産業制御分野における世界初で唯一のプログラミング言語規格です。 IEC 61131-3 には、プログラム、ファンクションブロック、ファンクションの 3 種類の POU があります。 この関数は、複数の入力パラメータと 1 つの出力パラメータ (戻り値) を持つ POU です。 戻り値の名前は関数の名前と同じです。 戻り値のデータ型を定義する必要があります。 調整器具 同じ入力値を持つ関数は常に同じ結果を返します。 関数は他の関数を呼び出すことができますが、関数ブロックやプログラムを呼び出すことはできません。 関数で定義できるローカル変数には、VAR と VAR_INPUT があります。 ファンクション ブロックは、複数の入出力パラメータと内部ストレージ ユニットを備えた POU です。 機能ブロックの出力パラメータ値は、その内部記憶装置の値に関連しています。 ファンクションブロックは他の関数を呼び出すことができます ブロックまたは関数ですが、プログラムを呼び出すことができません。 ファンクション ブロックを呼び出す前に、ファンクション ブロックが呼び出される POU で呼び出しごとにファンクション ブロックのインスタンスを宣言する必要があります。 オペレーティング システムは、呼び出しごとに関数ブロック専用の記憶領域を割り当てます。 (S7-300/400 のバックグラウンド データ ブロックと同様)。 この関数には内部ストレージ領域がないため、呼び出し時にインスタンス化する必要はありません。 プログラムの動作と目的はファンクション ブロックと似ています。 プログラムには入出力パラメータがあり、内部記憶領域を持つことができます。 通常、プログラムには関数や関数ブロックへの呼び出しが含まれます。 IEC61131-3 では、いくつかの標準機能と機能ブロックが定義されています。 5. S7-300/400とIEC61131-3のプログラム構造の違い 1) S7-300/400 の関数は複数の出力パラメータを持つことができ、戻り値も出力パラメータになります。 IEC61131-3の関数の戻り値は1つだけです。 2) IEC61131-3 ファンクションブロックのローカル変数を格納するための特別な格納領域は、ファンクションブロックのインスタンス宣言時に確保されます。 ユーザーには不透明であり、他の POU はストレージ領域に直接アクセスできません。 S7-300/400のファンクションブロックのローカル変数(一時変数を除く)は、バックグラウンドデータブロックに格納されます。 他の POU はバックグラウンド データ ブロック内の変数にアクセスできます。 同じ種類の制御対象を制御するために同じファンクションブロックを複数回呼び出す必要がある場合、呼び出しごとにバックグラウンドデータブロックを指定する必要がありますが、このバックグラウンドデータブロックには変数が少ないため、変数の数が多くなります。プロジェクト内のバックグラウンド データ ブロック。 複数の背景データ ブロックを使用して、背景データ ブロックの数を減らすことができます。 ただし、複数の背景を管理するための機能ブロックを追加する必要があります。 3) S7-300/400 ファンクションブロックのローカル変数には一時変数と静的変数があります。 IEC61131-3 ファンクションブロックの内部変数 Var は、S7-300/400 の静的変数に相当します。 4) S7-300/400 はデータ領域をデータブロックに分割して使用します。 データ ブロックのサイズは、データ ブロック内で定義されているデータ型と変数の数に関係します。 IEC61131-3 にはデータブロックの概念がありません。