IEC61131-3
IEC61131-3とは
IEC 61131-3 は、PLC(Programmable Logic Controller)のプログラミング言語を標準化した国際規格です。
PLCメーカーごとに異なっていたプログラム記述方法を統一し、プログラムの再利用性や保守性を向上させることを目的としています。
5つの標準プログラミング言語
グラフィック言語
LD (Ladder Diagram / ラダー図)
リレー回路をベースにした言語です。
FBD (Function Block Diagram / ファンクションブロック図)
ブロックと信号線を結んで処理を表現する言語です。
SFC (Sequential Function Chart)
プロセスの「工程(ステップ)」と「移行条件」をフローチャートのように記述する言語です。
テキスト言語
ST (Structured Text / ストラクチャードテキスト)
C言語やPascalに似た高、中級言語。複雑な数値計算、データ処理(配列・文字処理)、条件分岐(IF文、FOR文など)を省スペースでスマートに記述できます。
IL (Instruction List / インストラクションリスト)
いわゆるニモニックです。アセンブリ言語に似た低級言語です。
使い分け
基本はLD(ラダー)とFBD(FUN,FB)を組み合わせてプログラミングします
よく使う処理をまとめてモジュール化することで再利用できるようになります。
モジュール化(自作のFUNまたはFB)すると社内の共有資産として使いまわすことができ、不具合時にモジュールを改修することで使用しているプログラムの全てが改修できるため品質も上昇します
ST言語は、複雑な数値計算やデータ処理(配列、文字列処理)、繰り返し処理(For文)、条件分岐(IF文)などは見やすく記述できるため分かりやすくなります
データ型
基本型
| 分類 | データ型サイズ | |
|---|---|---|
| ブール | BOOL | TRUE/FALSE |
| ビット列 | BYTE | 8bit |
| WORD | 16bit | |
| DWORD | 32bit | |
| LWORD | 64bit | |
| 整数型 | SINT | 8bit |
| INT | 16bit | |
| DINT | 32bit | |
| LINT | 64bit | |
| USINT | 8bit | |
| UINT | 16bit | |
| UDINT | 32bit | |
| ULINT | 64bit | |
| 実数型 | REAL | 32bit |
| LREAL | 64bit | |
| STRING | 文字数 + NULL |
日付型
| 分類 | データ型サイズ | |
|---|---|---|
| 時間型 | TIME | 64bit |
| 日付型 | DATE | 64bit |
| 時刻型 | TIME_OF_DAY | 64bit |
| 日付時刻型 | DATE_AND_TIME | 64bit |
配列
| 分類 | 記述例 |
|---|---|
| INT型配列 要素数100 | ARRAY[0..99] OF INT |
構造体
| 名称 | データ型 | |
|---|---|---|
| mySTRUCT | STRUCT | |
| mem1 | DINT | |
| mem2 | INT | |
| mem3 | STRING | |
共用体
| 名称 | データ型 | |
|---|---|---|
| myUNION | UNION | |
| mem1 | ARRAY[0..3] OF BYTE | |
| mem2 | ARRAY[0..1] OF WORD | |
| mem3 | DWORD | |
列挙型
| 名称 | 値 | |
|---|---|---|
| myENUM | ||
| right | 1 | |
| left | 2 | |
| center | 3 | |
変数のスコープ
ローカル
POU内だけで使用する変数
グローバル変数
全体で使用できる変数
入力変数
外部ネットワークから書き込める変数
出力変数
外部ネットワークから読み出せる変数
入出力変数
外部ネットワークから読み書きできる変数
FUNとFB
ファンクション FUN
動作
ファンクションは入力がONすると実行して結果を返します。入力値や出力値は状態を保持しません。
標準のFUN例
- MOV
- SHL
- Decoder など
ファンクションブロック FB
動作
ファンクションブロックはファンクションブロック本体(親)をもとにインスタンス(子)が作成されます。
インスタンスは個別に扱われ複数のインスタンスを作成した場合は別々の動作をします。
ファンクションと異なり毎スキャン実行されることに注意してください。
標準のFB例
- TON
- PIDAT
- SktUDPCreate
- FileOpen など
メーカー間の互換性
リレー回路のような接点と出力だけであればメーカー依存はありません。
しかし、FBやFUNはメーカーによって実装状況や名称が多少異なります。
以下はIEC61131-3準拠のFUNとFBの一部です
ファンクション
算術
- ADD, SUB, MUL, DIV, MOD : 加算・減算・乗算・除算・剰余
- ABS : 絶対値
- SQRT : 平方根
- SIN, COS, TAN, ASIN, ACOS, ATAN : 三角関数
- EXPT : べき乗
- LN, LOG : 対数
ビット演算
- AND, OR, XOR, NOT : ビットごとの論理演算
- SHL, SHR : ビットの左シフト・右シフト
- ROR, ROL : ビットの右ローテート・左ローテート
データ型変換
- INT_TO_UDINT など : 任意のデータ型から別の型へ変換
- INT_TO_REAL, REAL_TO_INT : 整数と実数間の変換
- BCD_TO_INT, INT_TO_BCD : BCDコードと整数間の変換
選択・比較
- MOVE : 値の代入
- EQ, NE, GT, GE, LT, LE : 比較演算
- LIMIT : 値の上下限制御
- MAX, MIN : 複数の値から最大・最小を選択
- MUX : マルチプレクサ
文字列操作
- LEN : 文字列の長さを取得
- CONCAT : 文字列の結合
- INSERT : 文字列の挿入
- DELETE : 文字列の削除
- REPLACE : 文字列の置換
- FIND : 文字列の検索
ファンクションブロック
タイマ・カウンタ
- TON, TOF, TP, CTU, CTD, CTUD : オンディレイタイマ・オフディレイタイマ・パルスタイマ・アップカウンタ・ダウンカウンタ・アップダウンカウンタ
