サイトトップへこのカテゴリの一覧へ

B 3503:2016 (IEC 61131-3:2013) 

(1) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

目 次 

ページ 

序文 ··································································································································· 1 

1 適用範囲 ························································································································· 1 

2 引用規格 ························································································································· 1 

3 用語及び定義 ··················································································································· 2 

4 アーキテクチャルモデル ··································································································· 10 

4.1 ソフトウェアモデル ······································································································ 10 

4.2 コミュニケーションモデル······························································································ 12 

4.3 プログラミングモデル ··································································································· 13 

5 規格順守性 ····················································································································· 14 

5.1 概要 ··························································································································· 14 

5.2 項目表 ························································································································ 15 

5.3 実装者の規格順守対照表 ································································································ 15 

6 共通要素 ························································································································ 16 

6.1 印刷文字の使用法 ········································································································· 16 

6.2 プラグマ ····················································································································· 18 

6.3 リテラル−データの外部表現··························································································· 18 

6.4 データ型 ····················································································································· 23 

6.5 変数 ··························································································································· 39 

6.6 プログラム構成ユニット(POU) ···················································································· 50 

6.7 シーケンシャルファンクションチャート(SFC)の各要素 ··················································· 152 

6.8 コンフィグレーションの各要素······················································································· 177 

6.9 名前空間 ···················································································································· 189 

7 テキスト形式言語 ··········································································································· 198 

7.1 共通要素 ···················································································································· 198 

7.2 命令リスト(IL言語)·································································································· 199 

7.3 構造化テキスト(ST言語) ··························································································· 204 

8 グラフィック言語 ··········································································································· 211 

8.1 共通要素 ···················································································································· 211 

8.2 ラダー図(LD) ·········································································································· 218 

8.3 ファンクションブロック図(FBD) ················································································· 221 

附属書A(規定)言語要素の形式仕様 ···················································································· 223 

附属書B(参考)第三版の主要変更点及び拡張リスト ································································ 236 

B 3503:2016 (IEC 61131-3:2013)  

(2) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

まえがき 

この規格は,工業標準化法第14条によって準用する第12条第1項の規定に基づき,一般社団法人日本

電機工業会(JEMA)及び一般財団法人日本規格協会(JSA)から,工業標準原案を具して日本工業規格を

改正すべきとの申出があり,日本工業標準調査会の審議を経て,経済産業大臣が改正した日本工業規格で

ある。 

これによって,JIS B 3503:2012は改正され,この規格に置き換えられた。 

この規格は,著作権法で保護対象となっている著作物である。 

この規格の一部が,特許権,出願公開後の特許出願又は実用新案権に抵触する可能性があることに注意

を喚起する。経済産業大臣及び日本工業標準調査会は,このような特許権,出願公開後の特許出願及び実

用新案権に関わる確認について,責任はもたない。 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

日本工業規格          JIS 

B 3503:2016 

(IEC 61131-3:2013) 

プログラマブルコントローラ−プログラム言語 

Programmable controllers-Programming languages 

序文 

この規格は,2013年に第3版として発行されたIEC 61131-3を基に,技術的内容及び構成を変更するこ

となく作成した日本工業規格である。 

なお,この規格で点線の下線を施してある参考事項は,対応国際規格にはない事項である。 

適用範囲 

この規格は,JIS B 3501に規定するプログラマブルコントローラに用いるプログラム言語の構文規則及

び意味論について規定する。 

プログラム入力,試験,監視,オペレーティングシステムなどの機能は,JIS B 3501に規定する。 

この規格は,プログラマブルコントローラ(PLC)に用いる統一プログラム言語一式の構文規則及び意

味論について規定する。この規格のプログラム言語は,命令リスト(IL)及び構造化テキスト(ST)の二

つのテキスト言語,並びにラダー図(LD)及びファンクションブロックダイアグラム(FBD)の二つのグ

ラフィック言語で構成する。 

プログラマブルコントローラプログラム及びファンクションブロックの内部構造を構築するためのシー

ケンシャルファンクションチャート(SFC)と名付けられた追加図式等価文字要素セットを規定する。ま

た,プログラマブルコントローラシステムへのプログラマブルコントローラプログラムのインストールを

支援する構成要素も規定する。 

さらに,自動システムのプログラマブルコントローラとその他のコンポーネントとの通信を容易にする

項目も規定する。 

注記 この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。 

IEC 61131-3:2013,Programmable controllers−Part 3: Programming languages(IDT) 

なお,対応の程度を表す記号“IDT”は,ISO/IEC Guide 21-1に基づき,“一致している”こ

とを示す。 

引用規格 

次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの

引用規格は,その最新版(追補を含む。)を適用する。 

JIS B 3501 プログラマブルコントローラ−一般情報 

注記 対応国際規格:IEC 61131-1,Programmable controllers−Part 1: General information(MOD) 

JIS C 0617-12 電気用図記号−第12部:二値論理素子 

注記 対応国際規格:IEC 60617-DB,Graphical symbols for diagrams(MOD) 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

JIS X 0221 国際符号化文字集合(UCS) 

注記 対応国際規格:ISO/IEC 10646:2011,Information technology−Universal Coded Character Set 

(UCS)(IDT) 

IEC 60848,GRAFCET specification language for sequential function charts 

IEC 61131-5,Programmable controllers−Part 5: Communications 

ISO/IEC/IEEE 60559,Information technology−Microprocessor Systems−Floating-Point arithmetic 

用語及び定義 

この規格で用いる主な用語及び定義は,JIS B 3501によるほか,次による。 

3.1 

絶対時刻(absolute time) 

日付と時刻とを組み合わせた情報。 

3.2 

アクセスパス(access path) 

オープンコミュニケーションのための記号名と変数との関係。 

3.3 

アクション(action) 

制御構造に連結されたブール変数又は実行する演算の集まり。 

3.4 

アクションブロック(action block) 

あらかじめ決定された制御構造に従って,ブール入力変数を用いてブール出力変数値,又はアクション

を有効にする条件の値を決定するグラフィック言語要素。 

3.5 

集合体(aggregate) 

一つのデータ型を型成する,構造化されたデータオブジェクトの集合。 

(ISO/AFNOR:1989参照) 

3.6 

配列(array) 

同一の属性をもつデータオブジェクトからなる集合体。それぞれのデータオブジェクトは,添字付けに

よって個別に参照する。 

(ISO/AFNOR:1989参照) 

3.7 

代入(assignment) 

値を変数又は集合体に与える仕組み。 

(ISO/AFNOR:1989参照) 

3.8 

基本型(base type) 

そこから追加型に継承される/派生するデータ型,ファンクションブロック型又はクラス。 

3.9 

底(based number) 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

数が10の場合は省略し,10以外の数の場合は明示する,底の数。 

3.10 

二進化十進数(binary coded decimal),BCD 

それぞれの桁が固有の2進数列で表す10進数のコード化。 

3.11 

双安定ファンクションブロック(bistable function block) 

一つ以上の入力で制御する二つの安定状態をもつファンクションブロック。 

3.12 

ビット列(bit string) 

一つ以上のビットからなるデータ要素。 

3.13 

ビット列リテラル(bit string literal) 

BOOL,BYTE,WORD,DWORD又はLWORDのデータ型のビット列値を直接表すリテラル。 

3.14 

ボディ(body) 

プログラム構成ユニットの演算の集合。 

3.15 

呼出し(call) 

ファンクション及びファンクションブロックの実行を呼び出すための構文構造。 

3.16 

文字列(character string) 

順序付けられた文字の集合体。 

3.17 

文字列リテラル(character string literal) 

CHAR,WCHAR,STRING又はWSTRINGのデータ型の文字又は文字列値を直接表すリテラル。 

3.18 

クラス(class) 

次で構成するプログラム構成ユニット。 

a) データ構造の定義 

b) データ構成の際に行われる一式のメソッド 

3.19 

コメント(comment) 

テキストに含むが,プログラムの実行には影響しない構文要素。 

(ISO/AFNOR:1989参照) 

3.20 

コンフィグレーション(configuration) 

プログラマブルコントローラシステムに対応する言語要素。 

3.21 

定数(constant) 

固定値のデータ要素を宣言する言語要素。 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.22 

カウンタファンクションブロック(counter function block) 

一つ以上の入力から検知した変化の数を累積するファンクションブロック。 

3.23 

データ型(data type) 

使用可能な演算の集合を伴う値の集合。 

(ISO/AFNOR:1989参照) 

3.24 

日付及び時刻(date and time) 

日付及び時刻を表す言語要素。 

3.25 

宣言(declaration) 

言語要素の規定を構築するための仕組み。 

3.26 

区切り文字(delimiter) 

プログラム言語要素を区切るために用いる文字及び文字の組合せ。 

3.27 

派生クラス(derived class) 

もう一つのクラスからの継承によって作られるクラス(拡張クラス又は子クラスとも名付けられる。)。 

3.28 

派生データ型(derived data type) 

もう一つのデータ型を用いて作られるデータ型。 

3.29 

派生ファンクションブロック型(derived function block type) 

もう一つのファンクションブロック型からの継承によって作られるファンクションブロック型。 

3.30 

直接表現(direct representation) 

実装が,物理又は論理位置への対応を直接に決定する,プログラマブルコントローラのプログラムにお

ける変数を表現する方法。 

3.31 

2倍長ワード(double word) 

32ビットのデータ要素。 

3.32 

動的束縛(dynamic binding) 

メソッド呼出しのインスタンスが,インスタンス又はインタフェースの実際の型に基づいて実行時に検

索される状況。 

3.33 

評価(evaluation) 

プログラムが実行している間,式,ファンクション,ネットワークの出力及びファンクションブロック

インスタンスの出力の値を確立するプロセス。 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.34 

実行制御要素(execution control element) 

プログラム実行の流れを制御する言語要素。 

3.35 

立下りエッジ(falling edge) 

ブール型変数の1から0への変化。 

3.36 

ファンクション(function) 

実行したとき,一般的に一つのデータ要素結果及び付加的な出力変数を返す言語要素。 

3.37 

ファンクションブロックインスタンス(function block instance) 

ファンクションブロック型のインスタンス。 

3.38 

ファンクションブロック型(function block type) 

次のものから構成する言語要素。 

a) 入力,出力及び内部変数に分割されたデータ構造体の定義。 

b) ファンクションブロック型のインスタンスが呼び出されたときに,データ構造体に対して実行する演

算又はメソッドの集合。 

3.39 

ファンクションブロック図(function block diagram) 

ノードがグラフィカルで表現されたファンクション,メソッド呼出し,変数,リテラル及びラベルから

なるネットワーク。 

3.40 

総称データ型(generic data type) 

一つ以上のデータ型で表現するデータ型。 

3.41 

グローバル変数(global variable) 

スコープがグローバルである変数。 

3.42 

階層的アドレス(hierarchical addressing) 

物理的又は論理的階層の一部としてデータ要素を直接表現すること。例えば,盤内の一つのラック中の

あるモジュールの中の一点。 

3.43 

識別子(identifier) 

1文字又は下線記号で始まり,言語要素を名付ける文字,数字及び下線記号の組合せ。 

3.44 

実装(implementation) 

PLC又は実装者用が提供するプログラミングツール及びデバッグツールの製品版。 

3.45 

実装者(implementer) 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

PLC用途をプログラムするために使用者へ提供されるPLC又はプログラミングツール及びデバッグツ

ールの実装者。 

3.46 

継承(inheritance) 

既存のクラス,ファンクションブロック又はインタフェースのそれぞれに基づいた新しいクラス,ファ

ンクションブロック又はインタフェースを作ること。 

3.47 

初期値(initial value) 

システムの立上げ時に変数に設定する値。 

3.48 

入出力変数(in-out variable) 

プログラム構成ユニットに値を与えるために用いられる変数であり,また,プログラム構成ユニットか

らの値を戻すためにも付加的に用いられる。 

3.49 

入力変数(input variable) 

クラス以外のプログラム構成ユニットに対し値を与えるための変数。 

3.50 

インスタンス(instance) 

個々に名付けられた,ファンクションブロック型,クラス又はプログラム型に関連付けられたデータ構

造のコピー。関連付けられた演算の一つの呼出しから次の呼出しまで持続する。 

3.51 

インスタンス名(instance name) 

定義されたインスタンスに関連付けられる識別子。 

3.52 

インスタンス化(instantiation) 

インスタンスの生成。 

3.53 

整数(integer) 

正の値,0及び負の値を含むことがある整数。 

3.54 

整数リテラル(integer literal) 

整数値を直接表現するリテラル。 

3.55 

インタフェース(interface) 

メソッドのプロトタイプの集合を含むオブジェクト指向のコンテキスト内の言語要素。 

3.56 

予約語(keyword) 

言語要素を特性付ける字句単位。 

3.57 

ラベル(label) 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

命令,ネットワーク及びネットワークのグループを名付ける,識別子をもつ構文要素。 

3.58 

言語要素(language element) 

形式仕様において,生成規則の左辺の記号によって表す項目。 

3.59 

リテラル(literal) 

値を直接表現する字句単位。 

(ISO/AFNOR:1989参照) 

3.60 

論理位置(logical location) 

プログラマブルコントローラの入力,出力及びメモリの物理構成の位置的関係に関係なく,概念上で階

層的にアドレスされた変数の位置。 

3.61 

64ビット実数(long real) 

ロングワードで表す実数。 

3.62 

ロングワード(long word) 

64ビットのデータ要素。 

3.63 

メソッド(method) 

ファンクションブロック型の範囲内だけで定義できるファンクションに類似した言語要素であり,ファ

ンクションブロックインスタンス又はクラスインスタンスの静的変数に潜在的にアクセスできる。 

3.64 

メソッドのプロトタイプ(method prototype) 

メソッドのシグネチャだけを含む言語要素。 

3.65 

名前付き要素(named element) 

関連付けられた識別子によって名付けられた構造の要素。 

3.66 

ネットワーク(network) 

ノードとノードとを相互に接続する枝の配置。 

3.67 

数値リテラル(numeric literal) 

数値を直接表すリテラル,すなわち,整数リテラル又は実数リテラル。 

3.68 

演算(operation) 

プログラム構成要素又はメソッドに属する基本的な機能性を表す言語要素。 

3.69 

オペランド(operand) 

演算が実行される対象の言語要素。 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.70 

演算子(operator) 

演算中に実行されるアクションを表す記号。 

3.71 

オーバライド(override) 

新しいメソッドボディを用いる基底クラス又はブロックタイプのメソッドと同じシグネチャをもつメソ

ッドに用いる派生クラス又はファンクションブロック型のメソッドと一緒に用いられる予約語。 

3.72 

出力変数(output variable) 

クラスを除くプログラム構成ユニットからの値を返すために用いられる変数。 

3.73 

パラメータ(parameter) 

プログラム構成ユニットに(入力パラメータ又は入出力パラメータとして)値を提供するために用いら

れる変数,又はプログラム構成ユニットから(出力パラメータ又は入出力パラメータとして)値を戻すた

めに用いられる変数。 

3.74 

リファレンス(reference) 

変数又は指定型のファンクションブロックのインスタンスへの位置アドレスを含むユーザ定義データ。 

3.75 

パワーフロー(power flow) 

ラダー図において,論理的解法のアルゴリズムの進行状態を表すのに用いられる疑似的電力の流れ。 

3.76 

プラグマ(pragma) 

プログラム構成ユニットの中でプログラムの実行の準備に影響するテキストを取り込むための言語要素。 

3.77 

プログラムする(program) 

プログラムを設計,記述及び試験する。 

注記 JIS X 0001参照。 

3.78 

プログラム構成ユニット(program organization unit),POU 

ファンクション,ファンクションブロック,クラス又はプログラム。 

3.79 

実数リテラル(real literal) 

REAL又はLREALの値を直接表現するリテラル。 

3.80 

リソース(resource) 

“信号処理機能”,その“ヒューマンマシンインタフェース機能”,“センサ及びアクチュエータインタフ

ェース機能”などに対応する言語要素。 

3.81 

結果(result) 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ファンクション又はメソッドの結果として戻される値。 

3.82 

リターン(return) 

あるプログラム構成ユニットにおいて,実行動作の終了を示す構文要素。 

3.83 

立上りエッジ(rising edge) 

ブール型変数の0から1への変化。 

3.84 

スコープ(scope) 

宣言又はラベルを適用するプログラム構成ユニットの集合。 

3.85 

意味論(semantics) 

プログラム言語の記号要素と,その意味,解釈及び使用との間の関係。 

3.86 

セミグラフィック表現(semigraphic representation) 

限定された一連の文字を用いたグラフィック表現。 

3.87 

シグネチャ(signature) 

METHODのパラメータインタフェースの同一性を明確に定義する情報の集合であり,メソッド名並びに

全てのパラメータの名前,型及び順序(例えば,入力,出力,入出力変数及び結果型)で構成される。 

3.88 

単一要素変数(single-element variable) 

単一データ要素を表現する変数。 

3.89 

静的変数(static variable) 

呼び出される間,値を保持する変数。 

3.90 

ステップ(step) 

シーケンシャルファンクションチャート(SFC)を表現する要素の一つで,プログラム構成ユニットの

入力及び出力に対して,ステップに連結されたアクションで定義される一組の規則に従って動作するプロ

グラム構成ユニットの状態。 

3.91 

構造データ型(structured data type) 

STRUCT宣言又はFUNCTION̲BLOCK宣言を用いて表現される集合型データ型。 

3.92 

添字付け(subscripting) 

配列の参照及び評価時に要素位置を示す一つ以上の表現によって配列要素を参照する仕組み。 

3.93 

記号表現(symbolic representation) 

変数に名前を付けるための識別子の使用法。 

10 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.94 

タスク(task) 

プログラム構成ユニットの一群の周期的又はトリガによる実行のために提供される実行制御要素。 

3.95 

時間リテラル(time literal) 

TIME,DATE,TIME̲OF̲DAY又はDATE̲AND̲TIMEのデータ型の値を直接表現するリテラル。 

3.96 

トランジション(transition) 

シーケンシャルファンクションチャート(SFC)を表現する要素の一つで,有向接続線に沿って,一つ

以上の前置ステップから一つ以上の後置ステップへ制御を展開させる条件。 

3.97 

符号なし整数(16ビット)(unsigned integer) 

プラス又はマイナス符号を含むことがある整数リテラル。 

3.98 

符号なし整数(16ビット)リテラル(unsigned integer literal) 

先導プラス(+)又はマイナス(−)記号を含まない整数リテラル。 

3.99 

ユーザ定義データ型(user-defined data type) 

使用者が定義するデータ型。 

例 列挙,配列又は構造 

3.100 

変数(variable) 

一度に一つのそれぞれ異なる値になるソフトウェア実体。 

アーキテクチャルモデル 

4.1 

ソフトウェアモデル 

基本的な上位言語要素及びその相関関係は,図1による。 

これらは,この規格で規定する言語でプログラムする要素,すなわち,プログラム及びファンクション

ブロック型,クラス,ファンクション及びコンフィグレーション要素,すなわち,コンフィグレーション,

リソース,タスク,グローバル変数,アクセスパス及びインスタンスごとの初期化などのプログラマブル

コントローラシステムへプログラムの導入をサポートする要素で構成する。 

background image

11 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

注記1 この図はイラスト的に表しており,このグラフィック表現は規定ではない。 
注記2 一つだけリソースをもったコンフィグレーションの中では,リソースの明記は必要ない。 

図1−ソフトウェアモデル 

コンフィグレーションは,JIS B 3501に規定するプログラマブルコントローラシステムに相当する言語

要素である。リソースは,JIS B 3501に規定する“信号処理機能”,“ヒューマンマシンインタフェース機

能”,“センサ,アクチュエータとのインタフェース機能”などに相当する。 

一つのコンフィグレーションは,一つ以上のリソースを含む。それぞれのリソースに,0(ゼロ)又は一

つ以上のタスクの制御下で実行する一つ以上のプログラムを含む。 

プログラムには,ファンクションブロック又はこの規格に規定する他の言語要素を含んでもよい。 

タスクは,例えば,定期的にプログラム及びファンクションブロックインスタンスの集合を実行させる

ことができる。 

コンフィグレーション及びリソースは,JIS B 3501に規定する“ヒューマンマシンインタフェース”,“プ

ログラミング,試験及び監視”,又は“オペレーティングシステム”などの機能によって,始動及び停止す

ることができる。コンフィグレーションの始動はそのグローバル変数を初期化させ,続いてコンフィグレ

ーション内の全てのリソースを始動させる。リソースの始動は,リソース内の全ての変数を初期化させ,

続いてリソース内の全てのタスクを実行可能にする。コンフィグレーションを停止すると全てのリソース

が停止し,リソースの停止は,全てのタスクを実行不可にする。 

タスクを制御する仕組みは,この規格の8.3.2に規定する。さらに,通信機能経由でのコンフィグレーシ

12 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ョン及びリソースの始動及び停止の仕組みは,IEC 61131-5に規定している。 

プログラム,リソース,グローバル変数,アクセスパス(及びそれに対応するアクセス権)及びコンフ

ィグレーションは,JIS B 3501に規定する“通信機能”によって,ロード又は消去される。コンフィグレ

ーション又はリソースのロード又は消去は,それに含まれる全ての要素のロード又は消去と等価である。 

アクセスパス及びそれに対応するアクセス権は,この規格に規定する。 

言語要素の通信オブジェクトへのマッピングは,IEC 61131-5の規定による。 

4.2 

コミュニケーションモデル 

変数の値をソフトウェア要素の間でやり取りする方法は,図2による。 

図2 a)に表すとおり,プログラム内の変数の値は,一つのプログラム要素の出力と他のプログラム要素

の入力との接続で直接伝達している。この接続は,グラフィック言語では明示的に示されるが,テキスト

表現言語では暗黙的である。 

変数の値は,図2 b)の変数“x”のように,グローバル変数を経て,同じコンフィグレーション中のプロ

グラム間を伝達する。これらの変数は,このコンフィグレーションの中でGLOBALとして,また,プログ

ラム中でEXTERNALとして宣言する。 

図2 c)に表すように,変数の値は,IEC 61131-5に規定する“通信ファンクションブロック”を用いて,

一つのプログラムの異なる部分間,同じ若しくは異なるコンフィグレーション間,又はプログラマブルコ

ントローラプログラムとプログラマブルでないコントローラシステムとの間で通信することができる。 

加えて,プログラマブルコントローラシステム又はプログラマブルでないコントローラシステムは,図

2 d)に表すように,アクセスパスによって,IEC 61131-5に規定する仕組みを用いてデータを転送できる。 

background image

13 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

PROGRAM A 

FB̲X 

a

FB1 

FB̲Y 

FB2 

a

FB̲Y

b

CONFIGURATION C 

VAR̲GLOBAL
  x: BOOL; 
END̲VAR 
 

FB2

FB1

FB̲X 

PROGRAM A 
  VAR̲EXTERNAL 
   x: BOOL; 
END̲VAR 

PROGRAM B 
  VAR̲EXTERNAL 
  x: BOOL; 
END̲VAR 
 

a) プログラム内のデータフロー接続 

b) グローバル変数経由の通信 

c) 通信ファンクションブロック経由 

d) アクセスパス経由の通信 

注記1 この図はイラスト的に表しており,このグラフィック表現は規定ではない。 
注記2 これらの例では,コンフィグレーションC,Dはそれぞれ一つのリソースをもつとみなす。 
注記3 通信ファンクションブロックの詳細は,図2には示さない。 
注記4 アクセスパスは,直接表現変数,グローバル変数,プログラム又はファンクションブロックインスタンスの

入出力又は内部変数に対して宣言できる。 

注記5 IEC 61131-5は,PLCシステム及びPLC以外のシステムの両方が変数のリード及びライトのためのアクセス

パスの使用方法について規定している。 

図2−通信モデル 

4.3 

プログラミングモデル 

PLC言語要素の要約は,図3による。これらの要素の組合せは,次の規則による。 

a) データ型は,標準データ型又は先に定義したデータ型を用いて宣言しなければならない。 

b) ファンクションは,標準データ型又はユーザ定義データ型,標準ファンクション及び先に定義したフ

ァンクションを用いて宣言することができる。 

この宣言は,IL,ST,LD及びFBD言語用に規定する仕組みを用いなければならない。 

c) ファンクションブロック型は,標準データ型又はユーザ定義データ型,ファンクション,標準ファン

クションブロック型及び先に定義したファンクションブロック型を用いて宣言することができる。 

これらの宣言は,IL,ST,LD又はFBD言語用に定義された仕組みを用いなければならず,シーケ

ンシャルファンクションチャート(SFC)要素を含むことができる。 

さらに,メソッド及びインタフェースを用いるオブジェクト指向のファンクションブロック型又は

クラスを定義してもよい。 

d) プログラムは,標準データ型又はユーザ定義データ型,ファンクション,ファンクションブロック及

びクラスを用いて宣言することができる。 

この宣言はIL,ST,LD及びFBD言語用に定義された仕組みを用いなければならず,シーケンシャ

ルファンクションチャート(SFC)要素を含むことができる。 

e) プログラムは,要素(グローバル変数,リソース,タスク及びアクセスパス)を用いてコンフィグレ

ーションに組み込むことができる。 

send1 

RCV 

プログラムA 

FB1 

コンフィグレーションC 

SEND 

SD1 

FB̲Y 

FB2 

コンフィグレーションD 

rcv1 

RD1 

プログラムB 

FB-X 

プログラムA 

FB̲X 

FB1 

VAR̲ACCESS 
CSX: P1.Z : REAL READ̲ONLY; 

PプログラムB 

FB̲Y 

FB2 

コンフィグレーションC 

コンフィグレーションD 

READ 

TO̲FB2 

RD1 

'CSX' 

VAR̲1 

P1 

コンフィグレーションC 

プログラムA 
 VAR̲EXTERNAL 
 x: BOOL 
END̲VAR 

プログラムB 
 VAR̲EXTERNAL 
 x: BOOL 
END̲VAR 

FB1 

FB2 

FB̲X 

FB̲Y 

VAR̲GLOBAL 
 x: BOOL 
END̲VAR 

FB̲Y 

FB̲X 

FB1 

FB2 

PROGRAM A 

プログラムA 

background image

14 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

上記の規則に従った“先に定義した”データ型,ファンクション及びファンクションブロックへの

リファレンスは,一度そのような先に定義した要素を宣言すれば,その定義が利用できることを意味

する。この宣言は,例えば,先に定義した要素の“ライブラリ”で更なる定義に利用できる。 

この規格に定義されていないプログラム言語を,ファンクション,ファンクションブロック型及び

メソッドのプログラミングに用いてもよい。 

先に定義した要素 

作成手段 

使用者定義要素 

及びライブラリ要素 

図3−PLC言語要素の組合せ 

規格順守性 

5.1 

概要 

JIS B 3501に規定したPLCプログラミングツール及びデバッグツール(PADT)が,完全に又は部分的

にこの規格の要求事項に順守していることを示すには,次のようにしなければならない。 

a) 次に示す項目の一部,及び実装者の規格順守対照表を提供する。 

b) いずれかの項目を達成するために他の言語要素を代用又は追加してはならない。 

c) 全ての実装者固有の拡張を記述したドキュメントを提供しなければならない。これらの拡張は,この

規格で禁止している又は規定しないシステム仕様のあらゆる項目である。 

d) 全ての実装者依存を記述したドキュメントを提供しなければならない。これには,この規格において

明確に規定されている実装依存のパラメータ及びパラメータの範囲(例えば,最大長,数,値の大き

さ及び範囲)が含まれる。 

e) 実装によって検出可能であり,また,報告される全てのエラーを記述したドキュメントを提供しなけ

ればならない。このドキュメントは,この規格において明確に規定されているエラー及びプログラム

の実行準備段階で検出可能なエラー及びプログラム実行時に検出可能なエラーを含む。 

宣言 

データ型 
− 標準 
− 使用者定義 

ファンクション 
− 標準 
− 使用者定義 

ファンクションブロック 
クラス,インタフェース 
− 標準 
− 使用者定義 

メソッド 
− 使用者定義 

プログラム 

リソース 

IL,ST,LD,FB, 
その他での宣言 

IL,ST,LD,FB, 
SFC要素,その他で
の宣言 

IL,ST,LD,FB, 
SFC要素での宣言 

宣言 
グローバル変数 
アクセスパス 
タスク 

使用者定義 
データ型 

使用者定義 
ファンクション 

使用者定義 
ファンクションブロック,
クラス,インタフェース 

プログラム 

コンフィグレーション 

(1) 

(2) 

(3) 

(4) 

(5) 

15 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

注記 プログラム実行時に発生するエラーの一部分だけを,この規格で記述する。 

f) 

実装者が定める仕様項目がこの規格の規定と異なる場合は,この規格の標準のデータ型,ファンクシ

ョン及びファンクションブロックの名称を用いてはならない。 

5.2 

項目表 

この規格の中の表は,共通の構造で専用の用途に用いる。最初の欄は,“項目番号”を含み,2番目の欄

は“項目の説明”を示し,3番目以降の欄は,例又はより詳しい情報を含んでもよい。この表の構造は,

実装者の規格順守対照表で用いる。 

5.3 

実装者の規格順守対照表 

実装者は,項目表に記載されている項目のどの一致部分を定義してもよく,その項目を“実装者規格順

守対照表”で公表する。 

実装者の規格順守対照表は,そのシステムに添付する文書に含める,又はシステムから出力できるよう

にする。 

実装者の規格順守対照表の書式には,次の情報がなければならない。一例は,図4による。 

・ 実装者の名前及び住所,製品名及びバージョン,コントローラのタイプ及びバージョン,並びに発行

日を含む一般情報。 

・ 各実装項目について,対応する項目表の番号,項目番号及び適用可能なプログラム言語。 

項目表のタイトル及びサブタイトル,項目の説明,例,実装者の備考などは,任意とする。 

実装されていない表及び項目は,省略してもよい。 

background image

16 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

JIS B 3503“PLCプログラム言語” 
 
実装者 :会社名,住所など 
製品 

:製品名,バージョンなど。コントローラタイプ固有のサブセットなど 

日付 

:2012年5月01日 

この製品は,次の言語仕様に関してこの規格の要求事項に順守しています。 

項目 
番号 

表番号及びタイトル/ 
項目説明 

実装言語の順守性 

( ) 

実装者備考 

LD FBD  ST 

IL 

表1−文字セット 

JIS X 0221,国際符号化文字集合(UCS) 

2a 

小文字 : 

a, b, c, … 

“ß, ü, ä, ö”ではない 

2b 

数値記号: 

表5参照 

2c 

ドル記号: 

表6参照 

表2−識別子 

大文字及び数字: 

IW215 

大文字及び小文字,数字,途中の下線(アンダースコア?) 

大文字及び小文字,数字,先頭又は途中の下線(アンダースコ
ア?) 

表3−コメント 

一行コメント 

//… 

2a 

複数行コメント 

(* … *) 

2b 

複数行コメント 

/* …  */ 

3a 

入れ子にされたコメント 

(* ..(* .. *) ..*) 

3b 

入れ子にされたコメント 

/* .. /* .. */ .. */ 

表4−プラグマ 

プラグマ 

{ … } 

表5−数値リテラル 

整数リテラル: 

−12 

実数リテラル: 

−12.0 

指数付実数リテラル: 

−1.34E−12 

2進リテラル: 

2#1111̲1111 

8進リテラル: 

8#377 

16進リテラル: 

6#FF 

ブール0及び1 

ブール偽及び真 

データ型指定リテラル: 

INT#−123 

など 

図4−実装者の規格順守対照表(例) 

共通要素 

6.1 

印刷文字の使用法 

6.1.1 

文字セット 

テキスト表現言語及びグラフィック言語におけるテキスト表現要素の文字セットは,表1による。文字

は,JIS X 0221で表す。 

background image

17 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表1−文字セット 

No. 

説明 

JIS X 0221 

2a 

小文字a): 

a, b, c 

2b 

数値記号: 

表5参照 

2c 

ドル記号: 

表6参照 

注a) 小文字を用いるときは,大文字であるか小文字であるかは言語要素の中で意味をもってはならない。ただし,

6.1.5に規定するコメント,6.3.3に規定する文字列リテラル,並びに6.3.3に規定するSTRING型及びWSTRING
型の変数を除く。 

6.1.2 

識別子 

識別子は,文字,数字及び下線で構成する文字列であり,文字又は下線で始まる。 

大文字・小文字の区別は,識別子において意味をもってはならない。例えば,識別子のabcd,ABCD,

及びaBCdは,同様に解釈する。 

下線は,識別子の中で意味をもち,例えば,A̲BCDとAB̲CDとは別の識別子と解釈する。多重の下線

は許されていない。例えば,文字列̲̲LIM̲SW5及びLIM̲̲SW5は,有効な識別子でない。また,最終文

字に続く下線は許されない。例えば,文字列LIM̲SW5̲は,有効な識別子ではない。 

識別子の使用をサポートする全てのシステムでは,少なくとも6文字は区別する。このようなシステム

では,例えば,ABCDE1とABCDE2とは別の識別子と解釈する。識別子に許される最大文字数は,実装者

に依存する。 

識別子の仕様及び例は,表2による。 

表2−識別子 

No. 

説明 

例 

大文字及び数字: 

IW215 

IW215 IW215Z QX75 IDENT 

大文字及び小文字,数字,途中の下線 

上記全てに加えて: 
LIM̲SW̲5 LimSw5 abcd ab̲Cd 

大文字及び小文字,数字,先頭又は途中の下線 

上記全てに加えて ̲MAIN ̲12V7 

6.1.3 

予約語 

予約語は,個々の構文規則要素として用いられる文字の特定の組合せである。予約語は,途中に空白を

含まない。大文字・小文字は,予約語では意味をもたない。例えば,予約語の“FOR”及び“for”は,

構文規則上同等である。予約語は,例えば,変数名又は拡張など,他のいかなる目的にも用いてはならな

い。 

6.1.4 

空白の使用 

使用者が,一つ以上の“空白”文字をプログラマブルコントローラのプログラムテキストのどの位置に

でも挿入できるようにする。ただし,予約語,リテラル,列挙型値,識別子,直接表現変数又は区切り文

字列の組合せに空白を挿入してはならない。“空白”は,タブ及び改行のような非印刷文字(JIS X 0221

でエンコーディングは定義されていない)と同様に,SPACE文字[コード値:32(10進)]として定義す

る。 

6.1.5 

コメント 

コメントには,表3に記載する様々なものがある。 

1) 一行コメントは,文字組合せ//で始まり,次の行へのラインフィード,改行,ページ送り(改ページ)

background image

18 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

又は復帰で終わる。 

一行コメントでは, (* 及び *) 又は/* 及び */の特別な文字の組合せに特別な意味はない。 

2) 複数行のコメントは,最初及び最後にそれぞれ特別な文字の組合せ (* 及び *) で区切る。 

複数行のコメントは,特別な文字の組合せ/* 及び */を用いてもよい。 

複数行コメントでは,特別な文字の組合せ//には特別な意味はない。 

コメントは,文字列リテラルの間を除き,空白が使用できるプログラムのどこでも用いることができる

ようにしなければならない。 

コメントは,この規格に規定する全ての言語中において,構文規則上でも又は意味論上でも無意味であ

り,空白のように処理する。 

入れ子にされたコメントは,次の対応する対を用いる。 

・ (*, *)の対,例えば,(*... (* 入れ子*)...*),又は 

・ /*, */の対,例えば,/*... /* 入れ子*/...*/ 

表3−コメント 

No. 

説明 

例 

一行コメント 
//… 

X :=13; // 一行のコメント 
// 一行のコメントは, 
// 一文字目から始めてもよい 

2a 

複数行コメント 
(* … *) 

(*コメント *) 
(*************************** 
 

3行の枠付のコメント 

****************************) 

2b 

複数行コメント 
/* …  */ 

/*  一行又は複数行の 
コメント */ 

3a 

入れ子にされたコメント 
(* .. (* .. *) ..*) 

(* (* 入れ子*) *) 

3b 

入れ子にされたコメント 
/* .. /* .. */ .. */ 

/* /* 入れ子*/ */ 

6.2 

プラグマ 

プラグマは,表4に示すように,中括弧{及び}によって始め及び終わりを区切らなければならない。特

定のプラグマの構文規則及び意味論は,実装者に依存する。プラグマは,文字列リテラルの間を除いて,

空白の使用できるプログラムのどこでも使用できるようにしなければならない。 

表4−プラグマ 

No. 

説明 

例 

プラグマ 
{ … } 

{VERSION 2.0} 
{AUTHOR JHC} 
{x :=256, y :=384} 

6.3 

リテラル−データの外部表現 

6.3.1 

概要 

種々のプログラマブルコントローラプログラム言語におけるデータの外部表現は,数値リテラル,文字

列リテラル及び時間リテラルからなる。 

二つの異なる種類の時間関連データに関する外部表現を提供する必要性が認識されている。 

19 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ 制御事象の経過時間を測定又は管理する持続時間型データ,及び 

・ 絶対時刻基準に対する制御事象の開始又は終了を同期させるためのデータ情報を含んでもよい日時デ

ータ 

6.3.2 

数値リテラル及びビット列リテラル 

数値リテラルには,整数リテラル及び実数リテラルの2種類がある。数値リテラルは,10進数又は底で

規定する。各種数値リテラルに関する数字の最大桁数は,規定した実装系のリテラルで表現した全データ

型の値の精度及び全範囲を表現するのに十分でなければならない。 

数値リテラルの数字間に挿入した単一の下線(̲)に意味をもたせてはならない。数値リテラルにおけ

る下線の他の使用は許されない。 

10進リテラルは,10進法の通常の方法で表現しなければならない。実数リテラルは,小数点があること

で区別しなければならない。指数は,10のべき乗を示し,それを先行する前の数字に掛け合わせて,表現

する値を得る。10進リテラル及び指数は,先行符号(+又は−)を含むことができる。 

整数リテラルは,2進法,8進法又は16進法でも表現できる。明示がない場合,底は10進表記でなけれ

ばならない。16進法の場合は,従来の10進の10〜15に対応して,それぞれ大文字のA〜Fからなる拡張

数字集合を用いる。底は,先頭符号(+又は−)を含んではならない。それらは,ビット列リテラルと解

釈する。 

正の整数を表現する数値リテラルをビット列リテラルとして用いてもよい。 

ブール型データは,0又は1の整数リテラルによって表現するか,予約語FALSE又はTRUEでそれぞれ

表現しなければならない。 

数値リテラルの項目及び例は,表5による。 

基本データ型の名前及び“#”記号を用いて,リテラルに型の接頭語を加えることによって,ブール又は

数値リテラルのデータ型を指定できる。例えば,表5の項目No.9を参照。 

background image

20 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表5−数値リテラル 

No. 

説明 

例 

解説 

整数リテラル 

−12, 0, 123̲4, +986 

実数リテラル 

0.0, 0.4560, 3.14159̲26  

指数付実数リテラル 

−1.34E−12, −1.34e−12 
1.0E+6, 

1.0e+6 

1.234E6, 

1.234e6 

2進リテラル 

2#1111̲1111 
2#1110̲0000 

2進法リテラル 
255 10進 
224 10進 

8進リテラル 

 
8#377 
8#340 

8進法リテラル 
255 10進 
224 10進 

16進リテラル 

 
16#FF又は16#ff 
16#E0又は16#e0 

16進法リテラル 
255 10進 
224 10進 

ブール0及び1 

0又は1 

ブール偽及び真 

FALSE  TRUE 

データ型指定リテラル 

INT#−123 

10進−123のINT表現 

INT#16#7FFF 

10進32767のINT表現 

WORD#16#AFF 

16進0AFFのWORD表現 

WORD#1234 

10進1234=16#4D2のWORD表現 

UINT#16#89AF 

16進89AFのUINT表現 

CHAR#16#41 

“A”のCHAR表現 

BOOL#0 

BOOL#1 

BOOL#FALSE 

BOOL#TRUE 

注記1 予約語FALSE及びTRUEは,ブール値0及び1のそれぞれに相当する。 
注記2 項目No.5“8進リテラル”は廃止され,この規格の次の版には含まれないかもしれない。 

6.3.3 

文字列リテラル 

文字列リテラルには,1バイト又は2バイト文字コードを含む。 

・ 1バイト文字列リテラルは,シングルクォーテーション(')に挟まれた0文字以上の文字列である。

1バイト文字列では,ドル記号($)に続く二つの16進数の文字,合わせて3文字の組合せは,表6

の項目No.1に示すように,8ビット文字コードの16進表記として解釈する。 

・ 2バイト文字列は,ダブルクォーテーション(")で挟まれたJIS X 0221からの0文字以上の文字列

である。2バイト文字列において,ドル記号($)に続く四つの16進数の文字,合わせて5文字の組

合せは,表6の項目No.2に示すように,16ビット文字コードの16進表記として解釈する。 

注記 JIS X 0221とユニコードとの関係。 

文字コード及び符号化形式は,ユニコードとJIS X 0221との間で一致しているが,ユニコー

ド規格は,ユニコードがプラットフォーム及びアプリケーションを越えて文字を均一に扱うよ

うにするために実装に追加制約を課している。このため,ユニコード規格は,一連の広範な制

御文字仕様,文字データ,アルゴリズム及びJIS X 0221にはないかなりの量の参考資料を提供

している。 

ドル記号から始まる2文字の組合せが文字列中に現れた場合は,表7に従って解釈する。 

background image

21 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表6−文字列リテラル 

No. 

説明 

例 

1バイト文字又は文字列 

'   ' 

1a 

空文字列(長さ0) 

'' 

1b 

単一文字からなる長さ1の列又は文字CHAR 

'A' 

1c 

“空白”文字からなる長さ1の列又は文字CHAR 

' ' 

1d 

“シングルクォーテーション”文字からなる長さ1の列又は文字CHAR 

'$'' 

1e 

“ダブルクォーテーション”文字からなる長さ1の列又は文字CHAR 

'"' 

1f 

表7の二文字の組合せのサポート 

'$R$L' 

1g 

“$”及び二つの16進文字表現のサポート 

'$0A' 

2バイト文字又は文字列 

“   ”a) 

2a 

空文字列(長さ0) 

"" 

2b 

単一文字からなる長さ1の列又は文字WCHAR 

"A" 

2c 

“空白”文字からなる長さ1の列又は文字WCHAR 

" " 

2d 

“シングルクォーテーション”文字からなる長さ1の列又は文字WCHAR 

"'" 

2e 

“ダブルクォーテーション”文字からなる長さ1の列又は“文字WCHAR 

"$"" 

2f 

表7の二文字の組合せのサポート 

"$R$L" 

2h 

“$”及び四つの16進文字表現のサポート 

"$00C4" 

1バイトデータ型指定文字又は文字列リテラル 

3a 

データ型指定文字列 

STRING#'OK' 

3b 

データ型指定文字 

CHAR#'X' 

2バイトデータ型指定文字列リテラル 

# a) 

4a 

データ型指定2バイト文字列(“ダブルクォーテーション”を用いる) 

WSTRING#"OK" 

4b 

データ型指定2バイト文字(“ダブルクォーテーション”を用いる) 

WCHAR#"X" 

4c 

データ型指定2バイト文字列(“シングルクォーテーション”を用いる) 

WSTRING#'OK' 

4d 

データ型指定2バイト文字(“シングルクォーテーション”を用いる) 

WCHAR#'X' 

注a) 特定の実装が,項目No.2でなく項目No.4をサポートする場合,実装者はダブルクォーテーションの文字の使

用に対して,実装者固有の構文規則及び意味論を指定してもよい。 

表7−文字列における2文字の組合せ 

No. 

説明 

組合せ 

ドル記号 

$$ 

シングルクォーテーション 

$' 

ラインフィード 

$L又は$l 

改行 

$N又は$n 

ページ送り 

$P又は$p 

復帰 

$R又は$r 

タブ 

$T又は$t 

ダブルクォーテーション 

$" 

注記1 “改行”文字は実装固有のデータ行の終わりを定義する方法を提供する。印字に対しては,データ行を終了

して次行の先頭で印字を再開する効果がある。 

注記2 $'の組合せは,シングルクォーテーションの文字列リテラル内だけ有効である。 
注記3 $"の組合せは,ダブルクォーテーションの文字列リテラル内だけ有効である。 

6.3.4 

持続時間型リテラル 

持続時間型データは,予約語であるT#,TIME#又はLTIME#によって,左側を区切らなければならない。

日数,時間数,分数,秒数及びミリ秒数,又はそれらの任意の組合せによる持続時間型データの表現は,

background image

22 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表8による。最小の時間単位は,指数なしの実数表記として書くことができる。 

持続時間型リテラルの単位は,アンダースコアによって分離できる。 

持続時間型リテラルの最大単位の“オーバフロー”,例えば,T#25h̲15mは許される。 

時間単位(例えば,秒,ミリ秒など)は,大文字及び小文字で表すことができる。 

表8のように,正及び負の両方の値が持続時間型として許される。 

表8−持続時間型リテラル 

No. 

説明 

例 

持続時間型省略型 

1a 

日 

1b 

時間 

1c 

分 

1d 

秒 

1e 

ms 

ミリ秒 

1f 

us(μは利用できない) 

マイクロ秒 

1g 

ns 

ナノ秒 

アンダースコアなしの継続時間リテラル 

2a 

省略型 

T#14ms 

T#-14ms 

LT#14.7s 

T#14.7m 

T#14.7h 

t#14.7d 

t#25h15m 

lt#5d14h12m18s3.5ms 
t#12h4m34ms230us400ns 

2b 

基本型 

TIME#14ms TIME#-14ms 

time#14.7s 

アンダースコア付きの継続時間リテラル 

3a 

省略型 

t#25h̲15m t#5d̲14h̲12m̲18s̲3.5ms 
LTIME#5m̲30s̲500ms̲100.1us 

3b 

基本型 

TIME#25h̲15m 
ltime#5d̲14h̲12m̲18s̲3.5ms 
LTIME#34s̲345ns 

6.3.5 

日付及び時刻のリテラル 

日付及び時刻リテラルの接頭予約語は,表9に示すものでなければならない。 

表9−日付及び時刻のリテラル 

No. 

説明 

例 

1a 

日付リテラル 

(基本型) DATE#1984-06-25, date#2010-09-22 

1b 

日付リテラル 

(省略型) D#1984-06-25 

2a 

64ビット日付リテラル 

(基本型) LDATE#2012-02-29 

2b 

64ビット日付リテラル 

(省略型) LD#1984-06-25 

3a 

時刻リテラル 

(基本型) TIME̲OF̲DAY#15:36:55.36 

3b 

時刻リテラル 

(省略型) TOD#15:36:55.36 

4a 

時刻リテラル(64ビット) 

(省略型) LTOD#15:36:55.36 

4b 

時刻リテラル(64ビット) 

(基本型) LTIME̲OF̲DAY#15:36:55.36 

5a 

日付及び時間リテラル 

(基本型) DATE̲AND̲TIME#1984-06-25-15:36:55.360227400 

5b 

日付及び時間リテラル 

(省略型) DT#1984-06-25-15:36:55.360̲227̲400 

6a 

日付及び時間リテラル(64ビット) (基本型) LDATE̲AND̲TIME#1984-06-25-15:36:55.360̲227̲

400 

6b 

日付及び時間リテラル(64ビット) (省略型) LDT#1984-06-25-15:36:55.360̲227̲400 

background image

23 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.4 

データ型 

6.4.1 

概要 

データ型は,リテラル及び変数を対象にして,取り得る値,適用可能な演算及び値を格納する方法を定

義するものである。 

6.4.2 

基本データ型(BOOL,INT,REAL,STRINGなど) 

6.4.2.1 

基本データ型の仕様 

一連の(事前に定義している)基本データ型をこの規格によって規定する。 

基本データ型,それぞれのデータ型の予約語,データ要素ごとのビット数及びそれぞれの基本データ型

の数値の範囲は,表10による。 

表10−基本データ型 

No. 

説明 

予約語 

デフォルト値 

N(ビット数)a) 

ブール型 

BOOL 

0, FALSE 

1 h) 

8ビット整数 

SINT 

8 c) 

整数(16ビット) 

INT 

16 c) 

32ビット整数 

DINT 

32 c) 

64ビット整数 

LINT 

64 c) 

符号なし8ビット整数 

USINT 

8 d) 

符号なし整数(16ビット) UINT 

16 d) 

符号なし32ビット整数 

UDINT 

32 d) 

符号なし64ビット整数 

ULINT 

64 d) 

10 

実数(32ビット) 

REAL 

0.0 

32 e) 

11 

64ビット実数 

LREAL 

0.0 

64 f) 

12a 

持続時間型 

TIME 

T#0s 

−b) 

12b 

持続時間型(64ビット) 

LTIME 

LTIME#0s 

64 m), q) 

13a 

日付 

DATE 

実装依存(注記参照) 

−b) 

13b 

64ビット日付 

LDATE 

LDATE#1970-01-01 

64 n) 

14a 

時刻 

TIME̲OF̲DAY or TOD 

TOD#00:00:00 

−b) 

14b 

時刻(64ビット) 

LTIME̲OF̲DAY or LTOD 

LTOD#00:00:00 

64 p), q) 

15a 

日付と時刻 

DATE̲AND̲TIME or DT 

実装依存(注記参照) 

−b) 

15b 

日付と時刻(64ビット) 

LDATE̲AND̲TIME or LDT LDT#1970-01-01-00:00:00 

64 o), q) 

16a 

可変長1バイト文字列 

STRING 

''(空文字列) 

8 i), g), k), l) 

16b 

可変長2バイト文字列 

WSTRING 

""(空文字列) 

16 i), g), k), l) 

17a 

1バイト文字 

CHAR 

'$00' 

8 g), l) 

17b 

2バイト文字 

WCHAR 

"$0000" 

16 g), l) 

18 

8ビットのビット列 

BYTE 

16#00 

8 j), g) 

19 

16ビットのビット列 

WORD 

16#0000 

16 j), g) 

20 

32ビットのビット列 

DWORD 

16#0000̲0000 

32 j), g) 

21 

64ビットのビット列 

LWORD 

16#0000̲0000̲0000̲0000 

64 j), g) 

注記 デフォルト値が実装依存となっている欄は,0001-01-01とは異なる特別な開始日があるためである。 
注a) この列の入力は,脚注で指定するように解釈しなければならない。 

b) これらのデータ型表現の値の範囲及び精度は,実装依存である。 

c) このデータ型の変数の値の取り得る範囲は,−(2N−1)〜(2N−1)−1である。 

d) このデータ型の変数の値の取り得る範囲は,0〜(2N)−1である。 

e) このデータ型の変数の値の取り得る範囲は,基本的な単精度浮動小数点の形式としてISO/IEC/IEEE 60559に規

定するとおりでなければならない。非正規化数,無限又は非数での演算結果は,実装依存である。 

background image

24 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表10−基本データ型(続き) 

注f) このデータ型の変数の値の取り得る範囲は,基本的な倍精度浮動小数点の形式としてISO/IEC/IEEE 60559に規

定するとおりでなければならない。非正規化数,無限又は非数での演算結果は,実装依存である。 

g) 値の取り得る数値の範囲は,このデータ型に適用しない。 

h) このデータ型の変数の取り得る値は0又は1で,それぞれ予約語のFALSE及びTRUEに相当する。 

i) Nの値は,このデータ型の1文字当たりのビット数を示す。 

j) Nの値は,このデータ型のビット列のビット数を示す。 

k) STRING変数及びWSTRING変数の最大許容長は,実装依存である。 

l) CHAR,STRING,WCHAR及びWSTRINGに用いられる文字符号化は,JIS X 0221である(6.3.3参照)。 

m) データ型LTIMEは,単位がナノ秒である符号付64ビット整数である。 

n) データ型LDATEは,単位がナノ秒で開始日が1970年1月1日である符号付64ビット整数である。 

o) データ型LDTは,単位がナノ秒で開始日時が1970年1月1日00:00:00である符号付64ビット整数である。 

p) データ型LTODは,単位がナノ秒で夜中の開始時間がTOD#00:00:00である符号付64ビット整数である。 

q) この時間書式の値の更新精度は,実装依存である。すなわち,値はナノ秒で示すが,マイクロ秒又はミリ秒ご

とに更新してもよい。 

6.4.2.2 

基本文字列型(STRING,WSTRING) 

STRING型及びWSTRING型の要素のサポートされている最大長は実装で決める値であり,プログラミ

ングツール及びデバッグツールによって定義されている。 

明示的な最大長は,所定の宣言の角括弧内に示す値によって指定する(この値は,実装によって異なる

最大値を越えてはならない。)。 

データ型CHAR又はWCHARの要素を用いる文字列の単一文字へは,角括弧内に1から始まる文字列内の

文字の位置を指定してアクセスする。 

2バイト文字列が1バイト文字を用いてアクセスする場合,又は1バイト文字列が2バイト文字を用い

てアクセスする場合はエラーとしなければならない。 

例1 STRING,WSTRING及びCHAR,WCHAR 

a) 宣言 

VAR 

String1: 

STRING[10] :='ABCD'; 

String2: 

STRING[10] :=''; 

aWStrings: ARRAY [0..1] OF WSTRING :=[“1234”, “5678”]; 

Char1 : 

CHAR;  

WChar1 : 

WCHAR;  

END̲VAR 

b) STRING及びCHARの使用法 

Char1 :=String1[2]; 

//Char1 :='B';と等しい。 

String1[3]:=Char1; 

//結果はString1 :='ABBD 'となる。 

String1[4]:='B'; 

//結果はString1 :='ABBB 'となる。 

String1[1]:=String1[4]; //結果はString1 :='BBBB 'となる。 

String2 :=String1[2]; 

(*暗黙の型変換CHAR̲TO̲STRINGを実装している場合, 

結果は,String2 :='B' となる。*) 

c) WSTRING及びWCHARの使用法 

WChar1 :=aWStrings[1][2]; 

//WChar1 :='6';と等しい。 

25 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

aWStrings[1][3]:=WChar1; 

//結果はaWStrings[1] :="5668"となる。 

aWStrings[1][4]:="6"; 

//結果はaWStrings[1] :="5666"となる。 

aWStrings[1][1]:=aWStrings[1][4]; 

//結果はString1 :="6666"となる。 

aWStrings[0] :=aWStrings[1][4]; (*暗黙の型変換WCHAR̲TO̲WSTRINGを実装

している場合,結果は, 

aWStrings[0]:="6";となる。*) 

d) 等価なファンクション(6.6.2.5.11を参照) 

Char1 :=String1[2];  

これは,次と等価である。 

Char1 :=STRING̲TO̲CHAR(Mid(IN :=String1, L :=1, P :=2));  

aWStrings[1][3]:=WChar1; 

これは,次と等価である。 

REPLACE(IN1 :=aWStrings[1], IN2 :=WChar1, L :=1, P :=3 );  

e) エラー事例 

WChar1 :=String1[2]; //WCHAR及びSTRINGの混在 

String1[2] :=String2;  

//暗黙の型変換STRING̲TO̲CHARが必要であるが,許容されていない。 

注記 単一文字(CHAR及びWCHAR)のデータ型は,一文字だけを含むことができる。文字列は,複

数の文字を含むことができる。したがって,文字列は単一文字には必要でない追加管理情報を

要求してもよい。 

例2 型STR10を次によって宣言すると, 

TYPE STR10: STRING[10] :='ABCDEF'; END̲TYPE 

STR10の最大長は10文字,デフォルト値は'ABCDEF'であり,型STR10の初期要素長は6文

字である。 

6.4.3 

総称データ型 

表10の基本データ型に加えて,図5に示した総称データ型の階層は,標準ファンクション及び標準ファ

ンクションブロックの入出力の仕様で使用できる。総称データ型は,接頭語“ANY”によって識別する。 

総称データ型の使用方法は,次の規則による。 

a) 直接派生型の総称型は,派生元の基本データ型と同じ総称型でなければならない。 

b) 部分範囲派生型の総称型は,ANY̲INTでなければならない。 

c) 表11に定義する他の全ての派生型の総称型は,ANY̲DERIVEDでなければならない。 

ユーザ宣言プログラム構成ユニット内の総称データ型の使用法は,この規格の適用範囲外である。 

background image

26 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

総称データ型 

総称データ型 

基本データ型グループ 

ANY 

ANY̲DERIVED 

ANY̲ELEMENTARY 

ANY̲MAGNITUDE 

ANY̲NUM 

ANY̲REAL 

REAL,LREAL 

ANY̲INT 

ANY̲UNSIGNED 

USINT,UINT,UDINT,ULINT 

ANY̲SIGNED 

SINT,INT,DINT,LINT 

ANY̲DURATION 

TIME,LTIME 

ANY̲BIT 

BOOL,BYTE,WORD,DWORD,LWORD 

ANY̲CHARS 

ANY̲STRING 

STRING,WSTRING 

ANY̲CHAR 

CHAR,WCHAR 

ANY̲DATE 

DATE̲AND̲TIME,LDT,DATE,TIME̲OF̲DAY,LTOD 

図5−総称データ型の階層 

6.4.4 

ユーザ定義データ型 

6.4.4.1 

宣言(型) 

6.4.4.1.1 

概要 

ユーザ定義データ型の目的は,他のデータ型の宣言及び変数宣言の中で用いるためである。 

ユーザ定義データ型は,基底型を使用できる場所では,どこでも用いることができる。 

ユーザ定義データ型は,テキスト表現構文TYPE...END̲TYPEを用いて宣言する。 

型宣言は,次で構成する。 

・ 型の名前 

・ 一つのʻ:ʼ(コロン) 

・ 次の条項に定める型自体の宣言 

例 型宣言 

TYPE 

myDatatype1: <オプションの初期化付のデータ型宣言>; 

END̲TYPE 

6.4.4.1.2 

初期化 

ユーザ定義データ型は,ユーザ定義の値で初期化できる。この初期化は,デフォルトの初期値に優先す

る。 

ユーザ定義データ型の初期化は,型宣言の後に代入演算子ʻ:=ʼが続き,その後に初期値が続く。 

リテラル(例えば,−123,1.55,“abc”)又は定数式(例えば,12*24)を用いてもよい。使用する初期

値は,互換型,すなわち,同じ型又は暗黙の型変換を用いて変換できる型のものでなければならない。 

データ型の初期化には図6に準じた規則を適用しなければならない。 

background image

27 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

総称データ型 

リテラルによる初期化 

結果 

ANY̲UNSIGNED 

非負整数リテラル又は非負定数式 

非負整数値 

ANY̲SIGNED 

整数リテラル又は定数式 

整数値 

ANY̲REAL 

数値リテラル又は定数式 

数値 

ANY̲BIT 

符号なし整数(16ビット)リテラル又は符号なし定数式 

符号なし整数(16ビット)値 

ANY̲STRING 

文字列リテラル 

文字列 

ANY̲DATE 

日付及び時刻リテラル 

日付及び時刻の値 

ANY̲DURATION 

持続時間型リテラル 

持続時間の値 

図6−リテラル及び定数式による初期化(規則) 

ユーザ定義データ型の宣言の項目及び初期化は,表11による。 

表11−ユーザ定義データ型の宣言及び初期化 

No. 

説明 

例 

解説 

1a 

列挙データ型 

TYPE 

1b 

  ANALOG̲SIGNAL̲RANGE: 

(BIPOLAR̲10V, 

UNIPOLAR̲10V, 

UNIPOLAR̲1̲5V, 

UNIPOLAR̲0̲5V, 

UNIPOLAR̲4̲20̲MA, 

UNIPOLAR̲0̲20̲MA) 

:=UNIPOLAR̲1̲5V; 

初期化 

END̲TYPE 

2a 

指定値をもつデータ型 TYPE 

2b 

Colors: DWORD 

(Red 

:=16#00FF0000, 

Green :=16#0000FF00, 

Blue 

:=16#000000FF, 

White :=Red OR Green OR Blue, 

Black :=Red AND Green AND Blue) 

:=Green; 

初期化 

END̲TYPE 

3a 

部分範囲データ型 

TYPE 

3b 

ANALOG̲DATA: INT(−4095 .. 4095) :=0;  

END̲TYPE 

4a 

配列データ型 

TYPE ANALOG̲16̲INPUT̲DATA: 

ANALOG̲DATAは,3a及び
3bの例を参照 

4b 

ARRAY [1..16] OF ANALOG̲DATA 

:=[8(−4095), 8(4095)]; 

END̲TYPE 

初期化 

5a 

配列要素としてのファ
ンクションブロック型
及びクラス 

TYPE 

5b 

TONs: ARRAY[1..50] OF TON 

配列要素としてのファンク
ションブロック TON 

:=[50(PT:=T#100ms)]; 

END̲TYPE 

初期化 

background image

28 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表11−ユーザ定義データ型の宣言及び初期化(続き) 

No. 

説明 

例 

解説 

6a 

構造データ型 

TYPE ANALOG̲CHANNEL̲CONFIGURATION: 

ANALOG̲SIGNAL̲RANGE
は,1a及び1bを参照 

6b 

 STRUCT 

RANGE:  

ANALOG̲SIGNAL̲RANGE; 

MIN̲SCALE:  ANALOG̲DATA :=−4095; 

MAX̲SCALE:  ANALOG̲DATA :=4095; 

 END̲STRUCT; 

END̲TYPE 

7a 

構造体要素としてのフ
ァンクションブロック
型及びクラス 

TYPE 

構造体要素としてのファン
クションブロックTOF 

7b 

 Cooler: STRUCT 

Temp: INT; 

Cooling: TOF :=(PT:=T#100ms); 

END̲TYPE 

8a 

相対アドレス指定AT
付構造データ型 

TYPE 

重複なしの明示的レイアウ
ト 

8b 

 Com1̲data: STRUCT 

head 

AT%B0:  

INT; 

length AT%B2:  

USINT :=26; 

flag1 AT%X3.0:  BOOL; 

end 

AT%B25:  BYTE; 

 END̲STRUCT; 

END̲TYPE 

9a 

相対アドレス指定AT
及びOVERLAP付構造
データ型 

TYPE 

重複ありの明示的レイアウ
ト 

 Com2̲data: STRUCT OVERLAP 

head  

AT%B0:  

INT; 

length  AT%B2:  

USINT; 

flag2  AT%X3.3:  BOOL; 

data1  AT%B5:  

BYTE; 

data2  AT%B5:  

REAL; 

end  

AT%B19:  BYTE; 

 END̲STRUCT; 

END̲TYPE 

10a 

構造体の直接表現要素
−“*”を用いて部分
的に指定 

TYPE 

位置をまだ決められていな
い入出力に構造体要素を割
り当てる。 

10b 

 HW̲COMP: STRUCT; 

IN  AT %I*: BOOL; 

OUT̲VAR  

AT %Q*: WORD:=200; 

ITNL̲VAR: REAL :=123.0; // 位置が未決定  

END̲STRUCT; 

END̲TYPE 

11a 

直接派生データ型 

TYPE 

11b 

 CNT:  UINT; 

 FREQ: REAL :=50.0; 

初期化 

 ANALOG̲CHANNEL̲CONFIG: 

ANALOG̲CHANNEL̲CONFIGURATION 

:=(MIN̲SCALE :=0, MAX̲SCALE :=4000); 新しい初期化 

END̲TYPE 

12 

定数式を用いた初期化 TYPE 

定数式を用いる。 

 PIx2: REAL :=2 * 3.1416; 

END̲TYPE 

background image

29 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表11−ユーザ定義データ型の宣言及び初期化(続き) 

注記 データ型の宣言は,初期化なし(項目a)又は初期化付き(項目b)で可能である。項目(a)だけがサポート

されている場合,データ型はデフォルト値を用いて初期化する。項目(b)がサポートされている場合,データ
型はユーザが指定した値を用いて初期化し,初期値が示されていない場合はデフォルト値を用いて初期化しな
ければならない。 

構造体の直接表現要素を備えた変数(“ * ”を用いて部分的に指定されている。)は,VAR̲INPUT又は

VAR̲IN̲OUTの部分では使用できない。 

6.4.4.2 

列挙型 

6.4.4.2.1 

概要 

列挙データ型の宣言は,列挙型のデータ要素の値が,表11に示すように,識別子の関連リストに定義し

た値の一つしかとれないことを指定する。 

列挙リストは,リストの最初の識別子から始まり,最後の識別子で終わる列挙データの順序集合を定義

する。 

それぞれ異なる列挙データ型は,列挙した値に同じ識別子を用いてもよい。列挙値の許される最大個数

は,実装依存である。 

特定の文脈で使用するときに,列挙リテラルを一意に識別するために,型付リテラルと同様に,関連デ

ータ型名及びハッシュ記号(番号記号)“#”から成る接頭語によって修飾できる。そのような接頭語を列

挙リストの中で用いてはならない。 

列挙リテラルの値を明確に決定するための十分な情報が与えられない場合はエラーである(次の例を参

照)。 

例 列挙データ型 

TYPE 

 Traffic̲light:   (Red, Amber, Green); 

 Painting̲colors: (Red, Yellow, Green, Blue) := Blue; 

END̲TYPE 

VAR 

 My̲Traffic̲light: Traffic̲light := Red; 

END̲VAR 

IF My̲Traffic̲light = Traffic̲light#Amber THEN ... // OK 

IF My̲Traffic̲light = Traffic̲light#Red   THEN ... // OK 

IF My̲Traffic̲light = Amber THEN ... // OK−Amberは一意に決まる 

IF My̲Traffic̲light = Red   THEN ... 

// ERROR−Redは一意には決まらない 

6.4.4.2.2 

初期化 

列挙データ型のデフォルト値は,関連付けられた列挙リストの最初の識別子である。 

ユーザは,その列挙値のリストの中のユーザ定義の値を用いてデータ型を初期化できる。この初期化は

デフォルト値よりも優先する。 

ANALOG̲SIGNAL̲RANGEについて表11に示すように,列挙データ型のユーザ定義デフォルト値は,指

定された値UNIPOLAR̲1̲5Vである。 

30 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

データ型の初期値のユーザ定義代入は,表11の項目である。 

6.4.4.3 

指定値をもつデータ型 

6.4.4.3.1 

概要 

指定値をもつ列挙データ型は,列挙データ型の値がユーザに分からない場合に使用する,列挙データ型

の一種である。宣言はデータ型を指定し,表11に図示するように指定値の値を代入する。 

宣言する指定値は,これらのデータ型の変数値の範囲を限定しない。すなわち,他の定数で指定する,

又は計算によって指定できる。 

指定値を特定の文脈で使用するときに,一意に識別を可能にするために,指定値は,型リテラルと同様

に,関連付けられるデータ型名及びハッシュ記号(番号記号)“#”から成る接頭語によって修飾できる。 

そのような接頭語を列挙リストの中で用いてはならない。指定値を明確に決定するための十分な情報が

与えられない場合はエラーである(次の例を参照)。 

例 指定値をもつデータ型 

TYPE 

 Traffic̲light:   INT (Red :=1, Amber  :=2, Green :=3) :=Green; 

 Painting̲colors: INT (Red :=1, Yellow :=2, Green :=3, Blue :=4) :=Blue; 

END̲TYPE 

VAR 

 My̲Traffic̲light: Traffic̲light; 

END̲VAR 

My̲Traffic̲light := 27; 

// 数値からの代入 

My̲Traffic̲light := Amber+1; 

// 数式からの代入 

// 注記:列挙値では不可能 

My̲Traffic̲light := Traffic̲light#Red+1; 

IF My̲Traffic̲light   =123 THEN ... 

// OK 

IF My̲Traffic̲light   =Traffic̲light#Amber THEN ... // OK 

IF My̲Traffic̲light   =Traffic̲light#Red   THEN ... // OK 

IF My̲Traffic̲light   =Amber THEN ... // OK Amberが一意に決まるため 

IF My̲Traffic̲light   =Red THEN ...  

// Error Redが一意に決まららないため 

6.4.4.3.2 

初期化 

指定値をもつデータ型のデフォルト値は,列挙リストの中の最初のデータ要素である。Traffic̲light

についての上記例では,この要素はRedである。 

ユーザは,その列挙値のリストの中のユーザ定義の値を用いてデータ型を初期化できる。初期化は,指

定値に限定されていない,基本データ型の範囲内のどの値を使用してもよい。この初期化はデフォルト値

よりも優先する。 

例では,Traffic̲lightについての列挙データ型のユーザ定義初期値は,Greenである。 

データ型の初期値のユーザ定義指定は,表11の項目である。 

31 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.4.4.4 

部分範囲データ型 

6.4.4.4.1 

概要 

部分範囲宣言は,部分範囲データ型のどの要素の値も,表11に表すとおり指定した上限及び下限を含む

その間の値しかとれないことを指定する。 

部分範囲の上限及び下限は,リテラル又は定数式でなければならない。 

例 

TYPE 

  ANALOG̲DATA: INT(−4095 .. 4095) :=0; 

END̲TYPE  

6.4.4.4.2 

初期化 

部分範囲のデータ型のデフォルト値は,部分範囲の最初の限度(下限)でなければならない。 

ユーザは,部分範囲の中のユーザ定義の値を用いてデータ型を初期化できる。この初期化はデフォルト

値より優先する。 

例えば,表11の例に表すとおり,型ANALOG̲DATAの要素のデフォルト値は,−4095であり,一方,

明示的初期化の場合は,デフォルト値はゼロ(宣言どおり)である。 

6.4.4.5 

配列データ型 

6.4.4.5.1 

概要 

表11に示すとおり,配列データ型の宣言は,指定範囲の添字によって指定できる全てのデータを格納す

るために,個々の指定型の要素に対して十分な量のデータ領域を割り当てることを指定する。 

配列は,同じデータ型のデータ要素の集合である。基本データ型及びユーザ定義データ型,ファンクシ

ョンブロック型及びクラスは,配列要素の型として使用できる。このデータ要素の集合は,括弧内の一つ

以上の添字によって参照され,複数の添字はコンマによって分けられる。添字の値が配列宣言に明記され

ている範囲の外側であればエラーである。 

注記 インデックスを計算する場合,このエラーは実行時にだけ検出できる。 

配列添字の最大個数,最大配列サイズ及び添字値の最大範囲は,実装依存である。 

インデックス部分範囲の上限及び下限は,リテラル又は定数式でなければならない。可変長配列の定義

は,6.5.3による。 

ST言語では,添字は総称型の部分型の一つANY̲INTに対応する値をもたらす式でなければならない。 

7.2に規定するIL言語及び箇条8に規定するグラフィック言語での添字の形式は,単一要素変数又は整

数リテラルに限定されている。 

例 

a) 配列の宣言 

VAR myANALOG̲16: ARRAY [1..16] OF ANALOG̲DATA  

:= [8(−4095), 8(4095)]; 

// ユーザ定義初期値 

END̲VAR 

b) ST言語での配列変数は,次のように用いることができる。 

OUTARY[6,SYM] :=INARY[0]+INARY[7]−INARY[i] *%IW62; 

6.4.4.5.2 

初期化 

各配列要素のデフォルト値は,配列要素のデータ型に対して定義されている初期値である。 

ユーザは,ユーザ定義の値を用いて配列型を初期化できる。この初期化は,デフォルト値によって優先

32 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

する。 

配列のユーザ定義初期値は,反復を表すために括弧を使用できるリスト形式で指定する。 

配列データ型の初期化において,初期化のリストで配列を埋めていく場合,配列の最も右側の添字から

順番に変化していくように格納する。 

例 配列の初期化 

A: ARRAY [0..5] OF INT :=[2(1, 2, 3)] 

これは,初期化シーケンス1, 2, 3, 1, 2, 3と同等である。 

初期化リストに規定した初期値の数が,配列要素の数を超える場合,超過分(右端よりの)初期値は無

視する。初期値の数が,配列要素の数よりも少ない場合,残りの配列要素には,対応するデータ型のデフ

ォルトの初期値を代入する。いずれの場合も,ユーザには,実行前のプログラム準備段階において,この

状態の警告をしなければならない。 

データ型の初期値のユーザ定義指定は,表11の項目である。 

6.4.4.6 

構造データ型 

6.4.4.6.1 

概要 

構造データ型(STRUCT)の宣言は,このデータ型が,表11に表すとおり指定名によってアクセスでき

る指定型の部分要素の集合を含まなければならないことを明記する。 

構造データ型の要素は,ピリオド“.”で区切る二つ以上の識別子又は配列アクセスで表す。最初の識別

子は,構造体要素の名前を表し,後の識別子は,データ構造中の実際のデータ要素をアクセスするための

要素名の並びを示す。基本データ型及びユーザ定義データ型,ファンクションブロック型及びクラスを構

造要素の型として使用できる。 

例えば,表11に宣言したとおりデータ型ANALOG̲CHANNEL̲CONFIGURATIONの要素が型

ANALOG̲SIGNAL̲RANGEのRANGE下位要素,型ANALOG̲DATAのMIN̲SCALE下位要素及び型

ANALOG̲DATAのMAX̲SCALE下位要素を含むことがある。 

構造体要素の最大数,構造体に含むことができるデータの最大量,及び構造体要素の位置指定の階層最

大数は,実装によって異なる。 

二つの構造化変数は,それらが同じデータ型である場合にだけ代入互換性があるものである。 

例 構造データ型及び構造化変数の宣言及び使用 

a) 構造データ型の宣言 

TYPE 

  ANALOG̲SIGNAL̲RANGE: 

(BIPOLAR̲10V, 

 UNIPOLAR̲10V); 

  ANALOG̲DATA: INT (−4095 .. 4095); 

  ANALOG̲CHANNEL̲CONFIGURATION: 

    STRUCT 

      RANGE: 

ANALOG̲SIGNAL̲RANGE; 

      MIN̲SCALE: ANALOG̲DATA; 

      MAX̲SCALE: ANALOG̲DATA; 

    END̲STRUCT; 

END̲TYPE 

33 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

b) 構造化変数の宣言 

VAR 

 MODULE̲CONFIG: ANALOG̲CHANNEL̲CONFIGURATION; 

 MODULE̲8̲CONF: ARRAY [1..8] OF ANALOG̲CHANNEL̲CONFIGURATION; 

END̲VAR 

c) ST言語での構造化変数の使用 

MODULE̲CONFIG.MIN̲SCALE :=−2047; 

MODULE̲8̲CONF[5].RANGE :=BIPOLAR̲10V; 

6.4.4.6.2 

初期化 

構造体要素のデフォルト値は,個別のデータ型のデフォルト値によって決まる 

ユーザは,ユーザによって定義された値を用いて構造体の構成要素を初期化できる。この初期化は,デ

フォルト値より優先する。 

ユーザは,構造体の構成要素の割付リストを用いて既に定義された構造体も初期化できる。この初期化

は,デフォルト初期化及び構成要素の初期化より優先度が高い。 

例 構造体の初期化 

a) 構造データ型初期化の宣言 

TYPE 

  ANALOG̲SIGNAL̲RANGE: 

(BIPOLAR̲10V, 

 UNIPOLAR̲10V) :=UNIPOLAR̲10V; 

  ANALOG̲DATA: INT (−4095 .. 4095); 

  ANALOG̲CHANNEL̲CONFIGURATION: 

    STRUCT 

      RANGE: 

ANALOG̲SIGNAL̲RANGE; 

      MIN̲SCALE: ANALOG̲DATA :=−4095; 

      MAX̲SCALE: ANALOG̲DATA :=4096; 

    END̲STRUCT; 

  ANALOG̲8BI̲CONFIGURATION: 

    ARRAY [1..8] OF ANALOG̲CHANNEL̲CONFIGURATION 

      :=[8((RANGE:=BIPOLAR̲10V))]; 

END̲TYPE 

b) 構造化変数の初期化の宣言 

VAR 

 MODULE̲CONFIG:  ANALOG̲CHANNEL̲CONFIGURATION 

   :=(RANGE:=BIPOLAR̲10V, MIN̲SCALE:=−1023); 

 MODULE̲8̲SMALL:  ANALOG̲8BI̲CONFIGURATION 

   :=[8 ((MIN̲SCALE:=−2047, MAX̲SCALE:=2048))]; 

END̲VAR 

34 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.4.4.7 

構造データ型の構成要素に対する相対的位置(AT) 

6.4.4.7.1 

概要 

構造型の構成要素の位置(アドレス)は,構造体の先頭からの相対位置で定義できる。 

この場合,この構造体のそれぞれの構成要素名の後に予約語AT及び相対位置がなければならない。宣

言は,メモリ配置内にギャップを含んでもよい。 

相対位置は,“%”(パーセント),位置修飾子及びビット又はバイト位置で構成する。バイト位置は,バ

イトオフセットを示す符号なし整数(16ビット)リテラルである。ビット位置はその後に“.”(ポイント)

が続くバイトオフセット,及び0から7までの範囲からの符号なし整数(16ビット)リテラルで構成する。

相対位置記述内では,スペースは認められない。 

構造体の構成要素は,予約語OVERLAPが宣言の中に示されている場合を除き,そのメモリ配置内で重

複してはならない。 

文字列の重複は,この規格の適用範囲を超えている。 

注記 ビットオフセットの計数は,右端のビットの0から始まる。バイトオフセットの計数は,バイ

トオフセットが0である構造体の初めから始める。 

例 相対位置及び構造体内の重複 

TYPE 

  Com1̲data: STRUCT 

   head  

AT %B0:  

INT; 

// 位置0を指定 

   length  AT %B2:  

USINT :=26; // 位置2を指定 

   flag1  

AT %X3.0:  BOOL; 

// 位置3.0を指定 

   end  

AT %B25:  

BYTE; 

// 位置25を指定,一つのギャップを残す。 

  END̲STRUCT; 

  Com2̲data: STRUCT OVERLAP 

   head  

AT %B0:  

INT; 

// 位置0を指定 

   length  AT %B2:  

USINT; 

// 位置2を指定 

   flag2  

AT %X3.3:  BOOL; 

// 位置3.3を指定 

   data1  

AT %B5:  

BYTE; 

// 位置5を指定,重複している。 

   data2  

AT %B5:  

REAL; 

// 位置5から8を指定 

   end  

AT %B19:  

BYTE; 

// 位置19を指定,一つのギャップを残す。 

  END̲STRUCT; 

  Com̲data: STRUCT OVERLAP 

// C1とC2とが重複する。 

   C1 at %B0: Com1̲data; 

   C2 at %B0: Com2̲data; 

 END̲STRUCT; 

END̲TYPE 

6.4.4.7.2 

初期化 

オーバラップされた構造体は明示的な初期化はできない。 

35 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.4.4.8 

“*”を用いて部分的に記述する,直接的に表現された構造体での構成要素 

表11のアスタリスク表記“*”は,構造体の直接表現構成要素についてまだ完全に指定されていない位

置を示すために用いることができる。 

例 構造体の構成要素をまだ位置指定されていない入出力へ割り付ける。 

TYPE 

  HW̲COMP: STRUCT; 

   IN 

AT %I*: BOOL; 

   VAL 

AT %I*: DWORD; 

   OUT 

AT %Q*: BOOL; 

   OUT̲VAR AT %Q*: WORD; 

   ITNL̲VAR: REAL; // 位置なし 

   END̲STRUCT; 

END̲TYPE 

構造体の直接表現構成要素を,プログラム,ファンクションブロック型又はクラスの宣言部の位置割付

けで用いている場合,直接表現がまだ完全には指定されていないことを示すために,アスタリスク“*”を,

連結の中でのサイズ接頭語,及び符号なし整数(16ビット)の代わりに使用しなければならない。 

この項目を使用するには,そのように宣言された構造化変数の位置が収納する型の全てのインスタンス

ごとに,コンフィグレーションのVAR̲CONFIG…END̲VAR構文の中で完全に詳述することが必要となる。 

この型の変数は,VAR̲INPUT,VAR̲IN̲OUT又はVAR̲TEMP部で用いてはならない。 

プログラム又はファンクションブロック型のいかなるインスタンス内の,アスタリスク表記“*”で示す

不完全なアドレス記述に対して,VAR̲CONFIG…END̲VAR構文の中の完全な記述が不足していればエラー

である。 

6.4.4.9 

直接派生データ型 

6.4.4.9.1 

概要 

ユーザが定義するデータ型は,基本データ型又は既にユーザによって定義されたデータ型から直接派生

する。 

これは,新しい型固有の初期値を定義するために使用してもよい。 

例 直接派生データ型 

TYPE 

 myInt1123:     INT :=123; 

 myNewArrayType: ANALOG̲16̲INPUT̲DATA  

:=[8(−1023), 8(1023)]; 

 Com3̲data:   Com2̲data :=(head:=3, length:=40); 

END̲TYPE 

.R1 : REAL :=1.0;  

 R2 : R1;  

6.4.4.9.2 

初期化 

デフォルト値は,そこから新しいデータ型が派生するデータ型の初期値である。 

ユーザは,ユーザが定義する値を用いてデータ型を初期化できる。この初期化は優先される。 

36 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

構造体構成要素のユーザ定義初期値は,データ型識別子に続く括弧付きリストの中で宣言することがで

きる。初期値リストに記載されていない要素は,オリジナルデータ宣言においてそれらの要素に対して宣

言したデフォルト値をもっていなければならない。 

この規則は,再帰的に適用することもできる。 

例1 ユーザ定義データ型−使用 

表11のANALOG̲16̲INPUT̲DATAの宣言及び宣言VAR INS: ANALOG̲16̲INPUT̲DATA; 

END̲VARを規定する場合に,変数INS[1]からINS[16]までは,INT型の変数を使用できる

どの位置でも使用できる。 

例2 同様に,表11のCom̲dataの宣言,及び更に宣言VAR telegram: Com̲data; END̲VAR

を規定する場合に,変数telegram.lengthはUSINT型を使用できるどの位置でも使用でき

る。 

例3 表11のANALOG̲16̲INPUT̲CONFIGURATION, ANALOG̲CHANNEL̲CONFIGURATION,及び

ANALOG̲DATA,及び宣言VAR CONF: ANALOG̲16̲INPUT̲CONFIGURATION; END̲VARを

規定する場合に,変数CONF.CHANNEL[2].MIN̲SCALEは,INT型を使用できるどの位置で

も使用できる。 

6.4.4.10 リファレンス 

6.4.4.10.1 リファレンス宣言 

リファレンスは,変数に対するリファレンス又はファンクションブロックのインスタンスに対するリフ

ァレンスだけを含む変数である。リファレンスの値はNULLでもよい。つまり,何も参照しなくてもよい。 

リファレンスは,予約語REF̲TO及び被参照データ型を用いてあらかじめデータ型の宣言をしなければ

ならない。被参照データ型は,既定でなければならない。被参照データ型は,基本データ型又はユーザ定

義データ型でよい。 

注記 データ型を束縛しないリファレンスは,この規格の適用範囲を超えている。 

例1 

TYPE 

 myArrayType: 

ARRAY[0..999]OF INT; 

 myRefArrType: 

REF̲TO myArrayType; 

//リファレンスの定義 

 myArrOfRefType: ARRAY [0..12]OF myRefArrType; //リファレンスの配列の定義 

END̲TYPE 

VAR  

 myArray1: 

myArrayType; 

 myRefArr1: 

myRefArrType; 

//リファレンスの宣言 

 myArrOfRef: 

myArrOfRefType; 

//リファレンスの配列の宣言 

END̲VAR 

リファレンスは,特定の参照データ型の変数だけを参照しなければならない。直接派生するデータ型の

リファレンスは,基底データ型のリファレンスのエイリアスとして扱う。直接派生は,数回適用してもよ

い。 

例2 

TYPE 

 myArrType1:  ARRAY[0..999]OF INT; 

37 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 myArrType2:  myArrType1; 

 myRefType1:  REF̲TO myArrType1; 

 myRefType2:  REF̲TO myArrType2; 

END̲TYPE 

myRefType1及びmyRefType2は,型ARRAY[0..999]OF INTの変数及び派生データ型

の変数を参照できる。 

被参照データ型は,ファンクションブロック型又はクラスでもある。基底型へのリファレン

スは,この基底型から派生されたインスタンスも参照できる。 

例3 

CLASS F1 ...  

END̲CLASS; 

CLASS F2 EXTENDS F1 ... END̲CLASS; 

TYPE 

  myRefF1: REF̲TO F1; 

  myRefF2: REF̲TO F2; 

END̲TYPE 

myRefF1型のリファレンスは,クラスF1及びクラスF2のインスタンス及び両方の派生型

のインスタンスを参照できる。F1が拡張クラスF2のメソッド及び変数をサポートしていない

ので,myRefF2のリファレンスはF1のインスタンスを参照できず,F2及びその派生物のイ

ンスタンスだけを参照。 

6.4.4.10.2 リファレンスの初期化 

リファレンスは,値NULL(デフォルト)又は既に宣言されている変数,ファンクションブロック又は

クラスのインスタンスのアドレスを用いて初期化できる。 

例 

FUNCTION̲BLOCK F1 ... END̲FUNCTION̲BLOCK; 

VAR 

 myInt: 

INT; 

 myRefInt: REF̲TO INT :=REF(myInt); 

 myF1: 

F1; 

 myRefF1: 

REF̲TO F1 :=REF(myF1); 

END̲VAR 

6.4.4.10.3 リファレンスに対する演算 

REF()演算子は,特定の変数又はインスタンスへのリファレンスを返す。返されたリファレンスの被参

照データ型は,特定の変数のデータ型である。一時変数(例 VAR̲TEMP部の変数及びインサイドファン

クション変数)に対するREF()演算子の適用は認められない。 

左辺に代入する被参照データ型が,右辺の被参照データ型と同じ又は右辺の被参照データ型の基底デー

タ型であれば,リファレンスを他のリファレンスに代入することができる。 

ファンクション,ファンクションブロック及びメソッドのパラメータの被参照データ型が,実引数の被

参照データ型と同じ,又は実引数の被参照データ型の基底データ型であれば,リファレンスを呼出しの中

のパラメータに代入することができる。リファレンスは入出力変数として使用してはならない。 

38 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

リファレンスが同じデータ型のリファレンスに代入されれば,その後,後者は同じ変数をリファレンス

する。このような状況で,直接派生データ型はその基底データ型のように扱われる。 

リファレンスが同じファンクションブロック型又は基底ファンクションブロック型のリファレンスに代

入されれば,このリファレンスは同じインスタンスを参照するが,リファレンスはそのファンクションブ

ロック型に結合したままである。すなわち,その参照データ型の変数及びメソッドだけを使用できる。 

リファレンス解除を明示的に行わなければならない。 

リファレンスは,後続ʻ^ʼ(キャレット)を用いてリファレンス解除できる。 

解除されたリファレンスは,直接変数を用いるのと同じ方法で使用できる。 

NULLリファレンスの解除はエラーである。 

注記1 NULLリファレンスの評価は,コンパイルのときにランタイムシステム又はアプリケーショ

ンプログラムによって行うことができる。 

REF()構文及び解除演算子“^”は,グラフィック言語の中では,オペランドの定義で使用しなければな

らない。 

注記2 リファレンス算術は推奨できず,リファレンス算術は,この規格の適用範囲の対象外である。 

例1 

TYPE 

S1: STRUCT 

  SC1: INT; 

  SC2: REAL; 

  END̲STRUCT; 

A1: ARRAY[1..99]OF INT; 

END̲TYPE 

VAR 

 myS1: S1; 

 myA1: A1; 

 myRefS1: REF̲TO S1 :=REF(myS1);  

 myRefA1: REF̲TO A1 :=REF(myA1); 

 myRefInt: REF̲TO INT :=REF(myA1[1]); 

END̲VAR 

myRefS1^.SC1 :=myRefA1^[12]; //この場合,S1.SC1:=A1[12];と同等である 

myRefInt:=REF(A1[11]); 

S1.SC1:=myRefInt^; 

// A1[11]の値をS1.SC1へ代入する  

例2 

例1の文のグラフィック表現 

background image

39 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ---------- + 

MOVE 

--------------- | EN      ENO | 

myRefA1^[12]--- | IN      OUT | --- myRefS1^.SC1 

+ ---------- + 

+ ---------- + 

+ ---------+ 

MOVE 

MOVE | 

--------------- | EN      ENO |------------------------ |EN      ENO| 

 REF(A1[11])--- | IN      OUT |---myRefInt myRefInt^--- |IN      OUT| --- S1.SC1 

+ ---------- + 

+ ---------+ 

表12は,リファレンス演算の主要項目を定義する。 

表12−リファレンス演算 

No. 

説明 

例 

宣言 

リファレンス型の宣言 

TYPE 
  myRefType: REF̲TO INT; 
END̲TYPE 

代入及び比較 

2a 

リファレンスへのリファレンス代入 

<reference> :=<reference> 
myRefType1 :=myRefType2; 

2b 

ファンクション,ファンクションブロック及びメソッ
ドパラメータへのリファレンス代入 

myFB (a :=myRefS1); 
型は等しくなければならない! 

2c 

NULLとの比較 

IF myInt =NULL THEN ... 

リファレンス化 

3a 

REF(<variable>) 
データ型指定リファレンスを変数に提供する 

myRefA1 :=REF (A1); 

3b 

REF(<function block instance>) 
データ型指定リファレンスをファンクションブロッ
ク又はクラスインスタンスへ提供する 

myRefFB1 :=REF(myFB1) 

リファレンス解除 

<reference>^ 
変数の内容又はリファレンス変数がリファレンスを
含むインスタンスの内容を提供する 

myInt :=myA1Ref^[12]; 

6.5 

変数 

6.5.1 

変数の宣言及び初期化 

6.5.1.1 

概要 

変数は,例えば,プログラマブルコントローラの入力,出力,又はメモリと関連付けられたデータのよ

うに内容が変化するデータオブジェクトを識別する方法を提供する。 

データ変数の外部表現であるリテラルとは対照的に,変数は時間とともにその値を変更できる。 

6.5.1.2 

宣言 

変数は,複数の変数宣言部のうちの一つの中で宣言する。 

変数は,次のいずれかを用いて宣言できる。 

・ 基本データ型 

40 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ 既にユーザが定義した型 

・ リファレンス型 

・ 変数宣言の中でユーザが定義した型 

変数は,次のいずれかになることがある。 

・ 単一要素変数,すなわち,型が次のいずれかである変数 

− 基本型 

− ユーザ定義列挙型又は部分範囲型 

− “系統図”で再帰的に定義するユーザ定義型は,基本データ型,列挙型又は部分範囲型までたどる

ことができる。 

・ 多要素変数,すなわち,ARRAY又はSTRUCTを表現する変数 

・ リファレンス,すなわち,他の変数又はファンクションブロックインスタンスを参照する変数 

変数宣言は,次で構成する。 

・ 宣言される変数名リスト 

・ “:”(コロン),及び 

・ オプションの変数固有初期化によるデータ型 

例 

TYPE 

myType: ARRAY [1..9]OF INT; 

// 既にユーザ定義されたデータ型 

END̲TYPE 

VAR 

  myVar1, myVar1a: INT; 

// 一つの基本データ型を用いた二つの変数 

  myVar2: myType; 

// 既にユーザ定義された一つの型を用いる 

  myVar3: ARRAY [1..8] OF REAL; //変数宣言の中でユーザ定義した一つの型を用いる 

END̲VAR 

6.5.1.3 

変数の初期化 

変数のデフォルト値は,次でなければならない。 

a) 表10に定義された元となる基本データ型のデフォルト値 

b) 変数がリファレンスの場合はNULL 

c) 型に割り付けられたユーザの指定値 この値は,表11に定義されたTYPE宣言内の代入演算子“:=”

を用いて随意に指定する。 

d) 変数のユーザ定義の値 この値は,VAR宣言内の代入演算子“:=”を用いて随意に指定する(表14参

照)。 

このユーザ定義の値は,リテラル(例 −123, 1.55, “abc”)又は定数式(例 12*24)となる。 

初期値は,VAR̲EXTERNAL宣言の中に示すことはできない。 

初期値は,VAR̲CONFIG...END̲VAR構文で提供するインスタンス固有の初期化項目を用いても詳述さ

れる。インスタンス固有の初期値は,必ず型固有の初期値をオーバライドする。 

background image

41 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表13−変数の宣言 

No. 

説明 

例 

解説 

基本データ型の変数 

VAR 
 MYBIT: BOOL; 
 
 OKAY:  STRING[10]; 
 
 VALVE̲POS AT %QW28: INT; 
END̲VAR 

 
ブール型変数MYBITへメモリビットを
割り付ける。 
 
最大長が10文字である列を含むために
メモリを割り付ける。 

ユーザ定義データ型の
変数 

VAR 
 myVAR: myType; 
END̲VAR 

ユーザデータ型の変数の宣言 

配列型の変数 

VAR 
 BITS: ARRAY[0..7] OF BOOL; 
 TBT:  ARRAY [1..2, 1..3] OF INT; 
 OUTA AT %QW6: ARRAY[0..9] OF INT; 
END̲VAR 

リファレンス型の変数 VAR 

 myRefInt: REF̲TO INT; 
END̲VAR 

リファレンス型の変数の宣言 

表14−変数の初期化 

No. 

説明 

例 

解説 

基本データ型の変数の
初期化 

VAR 
 MYBIT: BOOL  

:=1; 

 
 OKAY:  STRING[10] :='OK'; 
 
 
 
 
 
 VALVE̲POS AT %QW28: INT :=100; 
END̲VAR 

 
初期値が1であるブール型変数MYBIT
にメモリビットを割り付ける。 
最大長が10文字である文字列が入れる
メモリを割り付ける。 
初期化後,文字列の長さが2であり,文
字列として印字するために適切な順序
の2バイト文字列'OK'(それぞれ10進で
79及び75)を含む。 

ユーザ定義データ型の
変数の初期化 

TYPE  
  myType: ... 
END̲TYPE 
VAR 
  myVAR: myType :=… // 初期化 
END̲VAR 

初期化付き又はなしのユーザデータ型
の宣言 
 
ユーザデータ型の変数の事前初期化の
宣言 

配列型の変数の初期化 VAR 

 BITS: ARRAY[0..7] OF BOOL   
  

:=[1,1,0,0,0,1,0,0]; 

 
 TBT: ARRAY [1..2, 1..3] OF INT  
 

:=[9,8,3(10),6]; 

 OUTARY AT %QW6: ARRAY[0..9]OF INT
 

:=[10(1)]; 

END̲VAR 

 
初期値を含むためにメモリ8ビットを割
り付ける。 
 BITS[0] :=1, BITS[1] :=1,..., 
 BITS[6] :=0, BITS[7] :=0. 
2x3の整数配列TBTに初期値を割り付け
る。 

 TBT[1,1] :=9,  TBT[1,2] :=8, 
 TBT[1,3] :=10, TBT[2,1] :=10, 
 TBT[2,2] :=10, TBT[2,3] :=6. 

background image

42 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表14−変数の初期化(続き) 

No. 

説明 

例 

解説 

定数の初期化 

VAR CONSTANT  
 PI:  REAL :=3.141592; 
 PI2: REAL :=2.0*PI; 
END̲VAR 

 
定数 
記号定数PI 

定数式を用いた初期化 VAR 

  PIx2: REAL :=2.0 * 3.1416; 
END̲VAR 

 
定数式を使用する。 

リファレンス型の変数
の初期化 

VAR 
 myRefInt:  REF̲TO INT 
 

:=REF(myINT); 

END̲VAR 

 
変数myINTを指すためにmyRefintを
初期化する。 

6.5.2 

変数宣言部 

6.5.2.1 

概要 

各プログラム構成ユニット(POU)(すなわち,ファンクションブロック,ファンクション及び追加とし

てメソッド)の宣言は,プログラム構成ユニット内で用いられる変数の名前,型(及び,必要に応じ物理

又は論理位置の宣言及び初期化宣言)を明記する複数の宣言部から始まる。 

POUの宣言部は,POUの種類次第で複数のVAR宣言部を含んでもよい。 

変数は,該当する場合,RETAIN又はPUBLICのような識別子を含めて個々にVAR ... END̲VARテキ

スト表現構成内で宣言できる。変数部の識別子は,図7に要約する。 

予約語 

変数の使用 

VAR宣言部:POUの型(ファンクション,ファンクションブロック,プログラムについて参照)。又はメソッドによ

って使用可能なものが異なる。 

VAR 

実体(ファンクション,ファンクションブロックなど)の内部で使用する。 

VAR̲INPUT 

外部から入力され,実体内では変更できない。 

VAR̲OUTPUT 

実体内から外部呼出し元へ出力する。 

VAR̲IN̲OUT 

実体から入力され,呼出し先によって変更でき,外部呼出し元へ出力できる。 

VAR̲EXTERNAL 

コンフィグレーションからVAR̲GLOBALを通じて入出力する。 

VAR̲GLOBAL 

グローバル変数宣言 

VAR̲ACCESS 

アクセスパス宣言 

VAR̲TEMP 

ファンクションブロック,メソッド及びプログラムの内部変数のための一時記憶 

VAR̲CONFIG 

インスタンス固有の初期化及び位置の割付け 

(END̲VAR) 上記の様々なVAR宣言部の終了 

修飾子:上記VAR宣言部に付随して使用できる。 
RETAIN 

保持属性変数 

NON̲RETAIN 

非保持属性変数 

PROTECTED 

自身の呼出し先及びその派生(デフォルト)の内側からだけアクセス可能 

PUBLIC 

全ての実体からのアクセスが許可されている。 

PRIVATE 

その実体だけアクセス可能 

INTERNAL 

同じ名前空間内からだけアクセス可能 

CONSTANT a) 

コンスタント(変数の値は変更できない。) 

注記 これらの予約語の使用の可否は,それらを使用するプログラム構成ユニット又はコンフィグレーション要素の

特性による。 

注a) ファンクションブロックインスタンスは,CONSTANT修飾子宣言は許されていない。 

図7−変数宣言の予約語(概要) 

background image

43 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ VAR VAR ... END̲VAR構文で宣言された変数は,プログラム又はファンクションブロックインス

タンスからの呼出しから別の呼出しへ存続する。 

ファンクション内で,この構文で宣言された変数は,ファンクションから呼出しから別の呼出しま

で存続しない。 

・ VAR̲TEMP プログラム構成ユニット内で,変数はVAR̲TEMP...END̲VAR構文の中で宣言できる。 

ファンクション及びメソッドでは,予約語VAR及びVAR̲TEMPは同等である。 

これらの変数は,各呼出しで型固有のデフォルト値で指定され,また,初期化され,呼出し間で存

続しない。 

・ VAR̲INPUT,VAR̲OUTPUT及びVAR̲IN̲OUT これらの構文で宣言された変数は,ファンクション,

ファンクションブロック型,プログラム及びメソッドの正式なパラメータとなる。 

・ VAR̲GLOBAL及びVAR̲EXTERNAL VAR̲GLOBAL構文内で宣言された変数は,これらが別のPOUの

VAR̲EXTERNAL構文で再度宣言された場合,そのPOU内で使用することができる。 

VAR̲GLOBAL,VAR̲EXTERNAL及びCONSTANTの使用方法は,図8に示す。 

変数を含む要素の宣言 

左記の変数を用いた要素の宣言 

許可されている? 

VAR̲GLOBAL X 

VAR̲EXTERNAL CONSTANT X 

はい 

VAR̲GLOBAL X 

VAR̲EXTERNAL X 

はい 

VAR̲GLOBAL CONSTANT X 

VAR̲EXTERNAL CONSTANT X 

はい 

VAR̲GLOBAL CONSTANT X 

VAR̲EXTERNAL X 

いいえ 

注記 変数宣言部内のVAR̲EXTERNAL宣言部の使用は,予期しない挙動をもたらすことがある。例えば,外部変数の

値が同じプログラム構成要素内の別の変数宣言部で変更する場合である。 

図8−VAR̲GLOBAL,VAR̲EXTERNAL及びCONSTANTの使用 

・ VAR̲ACCESS VAR̲ACCESS宣言部内で宣言されている変数は,宣言内に示すアクセスパスを用いて

アクセスできる。 

・ VAR̲CONFIG VAR̲CONFIG...END̲VAR構文は,アスタリスク表記“*”を用いてシンボルで位置

を実体に割り当てる,若しくは表現されている変数にインスタンス固有の位置を代入する方法,変数

によって初期値を実体に割り当てる方法,又はその両方を提供する。 

6.5.2.2 

宣言の範囲 

宣言部分に含まれる宣言のスコープ(有効範囲)は,宣言部を含むプログラム構成ユニットに対しての

ローカルなスコープとなる。それらのユニットの入力又は出力として宣言した変数をパラメータとして明

示的に渡す場合を除いて,宣言している変数は他のプログラム構成ユニットからアクセスできない。 

この規則の例外は,グローバルとして宣言された変数の場合である。このような変数は,VAR̲EXTERNAL

宣言によってだけプログラム構成ユニットでアクセスできる。VAR̲EXTERNALブロックで宣言する変数の

型は,関連するプログラム,コンフィグレーション,又はリソースのVAR̲GLOBALブロックで宣言する型

と一致しなければならない。 

次の場合は,エラーになる。 

・ プログラム構成ユニットが,CONSTANT修飾子をもつ変数の値,又はVAR̲INPUT部で宣言されてい

る変数の値を変更しようとしたとき。 

・ コンフィグレーション要素又はプログラム構成ユニット(以下,収納要素という。)において,

VAR̲GLOBAL CONSTANTで宣言した変数が,次に示すように収納要素に含まれる要素の

VAR̲EXTERNAL宣言(CONSTANT修飾子なし)で使用したとき。 

background image

44 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

変数宣言ブロックに許される変数の最大個数は,実装依存である。 

6.5.3 

可変長ARRAY変数 

可変長配列は,次のいずれかの場合にだけ用いることができる。 

・ ファンクション及びメソッドの入力変数,出力変数又は入出力変数として 

・ ファクションブロックの入出力変数として 

実パラメータ及び正式パラメータとで,配列の次元の数が同じでなければならない。各次元の添字の範

囲は,未定義であることを示すアスタリスクを用いて指定する。 

可変長配列は,添字の範囲がそれぞれ異なるの配列を使用するための方法をプログラム,ファンクショ

ン,ファンクションブロック及びメソッドに提供する。 

可変長配列を取り扱うには,次の標準ファンクションを提供しなければならない(表15参照)。 

表15−可変長ARRAY型変数 

No. 

説明 

例 

* を用いた宣言 
ARRAY [*, *, . . . ] OF data type 

VAR̲IN̲OUT  
  A: ARRAY [*, *] OF INT;  
END̲VAR; 

標準ファンクションLOWER̲BOUND / UPPER̲BOUND 

2a 

グラフィック表現 

配列の添字の下限値を得る。 
 

+ ----------- + 

! LOWER̲BOUND ! 

 ARRAY ----! ARR 

! --- ANY̲INT 

 ANY̲INT --! DIM 

+ ----------- + 

 
配列の添字の上限値を得る。 
 

+ ----------- + 

! UPPER̲BOUND ! 

 ARRAY ----! ARR 

! --- ANY̲INT 

 ANY̲INT --! DIM 

+ ----------- + 

2b 

テキスト表現表現 

配列Aの2番目の添字の下限値を得る。 
low2 :=LOWER̲BOUND (A, 2); 
配列Aの2番目の添字の上限値を得る。 

up2 :=UPPER̲BOUND (A, 2); 

例1 

A1: ARRAY [1..10] OF INT :=[10(1)]; 

A2: ARRAY [1..20,−2..2] OF INT :=[20(5(1))]; 

// 6.4.4.5.2(初期化)による初期化 

LOWER̲BOUND (A1, 1) 

→ 

UPPER̲BOUND (A1, 1) 

→ 10 

LOWER̲BOUND (A2, 1) 

→ 

UPPER̲BOUND (A2, 1) 

→ 20 

LOWER̲BOUND (A2, 2) 

→ −2 

45 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

UPPER̲BOUND (A2, 2) 

→ 

LOWER̲BOUND (A2, 0) 

→エラー 

LOWER̲BOUND (A2, 3) 

→エラー 

例2 配列の合計 

FUNCTION SUM: INT; 

VAR̲IN̲OUT A: ARRAY [*] OF INT; END̲VAR; 

VAR i, sum2 : DINT; END̲VAR; 

sum2:=0; 

FOR i:=LOWER̲BOUND(A,1) TO UPPER̲BOUND(A,1) 

  sum2:=sum2 + A[i]; 

END̲FOR; 

SUM:=sum2; 

END̲FUNCTION 

 // SUM (A1) 

→ 10 

 // SUM (A2[2]) 

→ 

例3 行列の乗算 

FUNCTION MATRIX̲MUL 

VAR̲INPUT  

  A: ARRAY [*, *] OF INT; 

  B: ARRAY [*, *] OF INT; 

END̲VAR; 

VAR̲OUTPUT C: ARRAY [*, *] OF INT; END̲VAR; 

VAR i, j, k, s: INT; END̲VAR; 

FOR i:=LOWER̲BOUND(A, 1) 

TO UPPER̲BOUND(A, 1) 

  FOR j:=LOWER̲BOUND(B, 2) 

TO UPPER̲BOUND(B, 2) 

  s :=0; 

      FOR k:=LOWER̲BOUND(A, 2) TO UPPER̲BOUND(A, 2) 

      s:=s +A[i, k] * B[k, j]; 

      END̲FOR; 

  C[i, j] :=s; 

  END̲FOR; 

END̲FOR; 

END̲FUNCTION 

// 使い方: 

VAR  

46 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  A: ARRAY [1..5, 1..3] OF INT;  

  B: ARRAY [1..3, 1..4] OF INT; 

  C: ARRAY [1..5, 1..4] OF INT; 

END̲VAR 

MATRIX̲MUL (A, B, C); 

6.5.4 

コンスタント変数 

コンスタント変数は,予約語CONSTANTを含む変数部内で定義する変数である。表現定義規則を適用し

なければならない。 

例 コンスタント変数 

VAR CONSTANT 

  Pi:  

REAL :=3.141592; 

  TwoPi:  

REAL :=2.0*Pi; 

END̲VAR 

6.5.5 

直接表現変数(%) 

6.5.5.1 

概要 

単一要素変数の直接表現は,次の連結による特殊記号形式で与えられなければならない。 

・ パーセント記号“%” 

・ 位置接頭語I, Q又はM,及び 

・ サイズ接頭語X(又はなし),B, W, D又はL,及び 

・ ピリオド(.)とによって分離された一つ以上の符合なし整数(次の階層的番地付けの例を参照。) 

例 

%MW1.7.9 

%ID12.6 

%QL20 

実装者は,変数の直接表現と,メモリ,入力又は出力において番地付けされた対象物の物理又は論理位

置との間の対応を指定しなければならない。 

注記 ファンクション,ファンクションブロック,メソッド及びプログラムのボディ内での直接表現

変数の使用は,例えば,それぞれ異なる目的で物理的入出力を使用するプログラマブルコント

ローラシステム間でのプログラム構成ユニット型の再利用において制限となる。 

直接表現変数の使用は,ファンクション,ファンクションブロック,プログラム及びメソッドのボディ,

並びにコンフィグレーション及びリソース内で許可される。 

直接表現変数の項目の定義は,表16による。 

POU及びメソッドのボディでの直接表現変数の使用は,非推奨である。 

background image

47 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表16−直接表現変数 

No. 

説明 

例 

解説 

位置a) 

入力位置 

%IW215 

入力ワード215 

出力位置 

%QB7 

出力バイト7 

メモリ位置 

%MD48 

メモリ位置48での2倍長ワード 

サイズ 

4a 

1ビットサイズ 

%IX1 

入力データ型BOOL 

4b 

1ビットサイズ  

なし 

%I1 

入力データ型BOOL 

バイト(8ビット)サイズ 

%IB2 

入力データ型BYTE 

ワード(16ビット)サイズ 

%IW3 

入力データ型WORD 

2倍長ワード(32ビット)サイズ 

%ID4 

入力データ型DWORD 

ロング(4倍長)ワード(64ビット)サイズ 

%IL5 

入力データ型LWORD 

番地付け 

単純番地付け 

IX1 

%IB0 

1レベル 

10 

“.”を用いた階層的番地付け 

%QX7.5 

%QX7.5 
%MW1.7.9 

実装者定義,例 
2レベル,範囲0..7 
3レベル,範囲1..16 

11 

アスタリスク”*”を用いた部分指定変数b) 

%M* 

注a) 各国の標準化機構は,これらの接頭語の翻訳表を発行できる。 

b) この表中のアスタリスクを使用するには,項目VAR̲CONFIGを必要とする。逆も同様である。 

6.5.5.2 

直接表現変数−階層的アドレス 

単純(1レベル)直接表現がピリオドで分離された追加の整数フィールドによって拡張されたとき,最

も左側の整数フィールドが階層の最上位のレベルを表し,より低いレベルが右側に表れる階層的な物理又

は論理アドレスとして解釈しなければならない。 

例 階層的アドレス 

%IW2.5.7.1 

例えば,この変数は,プログラマブルコントローラシステムの第2“I/Oバス”の第5“ラック”の第7

“モジュール”の第1番目の“チャンネル”(ワード)を表す。階層的アドレスの最大レベル数は,実装者

によって異なる。 

注記 あるプログラマブルコントローラシステム内のプログラムで他のプログラマブルコントローラ

内のデータをアクセスすることを可能にするための階層的アドレスの使用は,実装者固有の言

語拡張とみなす。 

6.5.5.3 

直接表現変数の宣言(AT) 

表16に規定する直接表現変数の宣言(例 %IW6)は,ATの予約語を用いて記号名及びデータ型を与え

ることができる。 

例えば,配列のようなユーザ定義のデータ型の変数には,ATを用いて“絶対”メモリの割付けができる。

変数の位置はメモリ位置の開始アドレスを定義し,特定の直接表現よりも等しい,又は大きいサイズであ

る必要はない。すなわち,メモリのサイズが0又はメモリの割付けの重複は認められる。 

例 直接表現の使用 

48 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

VAR 
 INP̲0 AT %I0.0: BOOL; 

入力名及び型 

 AT %IB12: REAL; 
 PA̲VAR AT %IB200: PA̲VALUE; 

%IB200で始まる入力位置の名前及びユーザ定義
の型 

 OUTARY AT %QW6: ARRAY[0..9] OF 
INT; 
END̲VAR 

%QW6で始まる隣接する出力位置に代入する要素
数10の整数の配列 

表13に規定する全種類の変数では,明示的(ユーザ定義)なメモリ割付けは,直接表現変数(例 %MW10)

と組み合わせた予約語ATを用いて宣言できる。 

この項目が一つ以上の変数宣言内でサポートされていない場合は,実装者の規格順守対照表の中にその

旨を記載しなければならない。 

注記1 変数が“%”を用いて明示的に位置指定する場合,変数は,PROGRAM及びVAR̲GLOBAL 宣

言内だけで使用することが望ましい。 

注記2 システム入力(例えば,%IW10)の初期化は,実装者によって異なる。 

6.5.5.4 

直接表現変数−“ * ”を用いた部分指定 

直接表現変数の位置がまだ完全に指定されていないことを示すために,プログラム及びファンクション

ブロック型の内部で,アスタリスク表記“*”をアドレス指定に使用することができる。 

例 

VAR 
  C2 AT %Q*: BYTE; 
END̲VAR 

まだ位置が指定されていない出力バイトを長さ1
バイトのビット列変数に割り当てる。 

直接表現変数が,プログラム又はファンクションブロック型の宣言部の内部変数への位置割付けで用い

られている場合,直接表現がまだ完全に指定されてないことを示すために,アスタリスク“*”を,連結

表現中のサイズ接頭語,及び符号なし整数の代わりに用いなければならない 

この型の変数は,VAR̲INPUT及びVAR̲IN̲OUT部で使用してはならない。 

この仕様を用いるには,プログラム又はファンクションブロックのインスタンスごとに,コンフィグレ

ーションのVAR̲CONFIG...END̲VAR構文の中で,宣言する変数の位置を完全に示さなければならない。 

アスタリスク記法“*”で表現された不完全な位置指定を含むどのプログラム又はファンクションブロッ

ク型のインスタンスでも,不完全なアドレス表現に対する完全な記述がVAR̲CONFIG...END̲VAR構文に

ない場合は,エラーとしなければならない。 

6.5.6 

保持属性変数(RETAIN,NON̲RETAIN) 

6.5.6.1 

概要 

構成要素(リソース又はコンフィグレーション)がJIS B 3501に従って“ウォーム再始動”又は“コー

ルド再始動”として“始動”するとき,構成要素及びそのプログラムに関係した変数のそれぞれは,構成

要素の始動操作及び変数の保持の挙動の宣言に応じた値になる。 

保持の挙動は,図7に規定しているRETAIN又はNON̲RETAIN修飾子を用いることによって保持又は

非保持のいずれかであるファンクションブロック及びプログラムの変数部VAR̲INPUT,VAR̲OUTPUT及

びVARに含まれる全ての変数で宣言できる。これらの予約語の使用は,オプション項目である。 

変数の初期値の状態は,図9による。 

background image

49 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

図9−変数の初期値の状態(規則) 

1) 始動操作が,JIS B 3501に規定する“ウォーム再始動”の場合,RETAIN修飾子による変数部内の全

ての変数の初期値は,保持された値でなければならない。これらの初期値は,リソース又はコンフィ

グレーションが停止されたときの変数の値である。 

2) 始動操作が“ウォーム再始動”の場合,NON̲RETAIN修飾子による変数部内の全ての変数の初期値は,

初期化しなければならない。 

3) 始動操作が“ウォーム再始動”でRETAIN及びNON̲RETAIN修飾子が加えられていない場合,初期

値は実装者によって異なる。 

4) 始動操作が“コールド再始動”の場合,RETAIN及びNON̲RETAIN修飾子によるVAR部内の全ての

変数の初期値は,次に規定するとおり初期化しなければならない。 

6.5.6.2 

初期化 

変数は,ユーザ定義の変数ごとに固有な初期値を用いて初期化する。 

初期値が指定されていないときは,ユーザ定義の型固有の初期値を用いる。ユーザ定義がない場合,表

10に規定する型固有のデフォルトの初期値を用いる。 

さらに,次の規則を適用する。 

・ JIS B 3501に規定しているプログラマブルコントローラシステムへの入力を表現する変数は,実装者

固有の方法で初期化しなければならない。 

・ RETAIN及びNON̲RETAIN修飾子は,VAR̲IN̲OUT部で宣言する変数で用いてはならないが,静的

なVAR,VAR̲INPUT,VAR̲OUTPUT及びVAR̲GLOBAL部において宣言する変数に用いてもよい。 

・ ファンクションブロック,クラス及びプログラムのインスタンスの宣言内でのRETAIN及び

NON̲RETAINの使用を許す。この結果,次の場合を除いて,インスタンスの全ての変数をRETAIN又

はNON̲RETAINとして扱う。 

− ファンクションブロック,クラス又はプログラム型定義において,変数にRETAIN又はNON̲RETAIN

が明示的に宣言されている場合。 

− 変数自体がファンクションブロック型又はクラスである場合。この場合,使用するファンクション

ブロック型又はクラスの保持宣言を適用する。 

構造体データ型のインスタンスにRETAIN及びNON̲RETAINの使用を許す。結果,全ての構造体要素

(入れ子にされた構造のものを含め)をRETAIN又はNON̲RETAINとして扱う。 

例 

VAR RETAIN 

 AT %QW5: WORD :=16#FF00; 

始動操作? 

ウォーム再始動 

保持属性は? 

RETAIN 

NON̲RETAIN 

コールド再始動 

a) 保持された値 

b),d) 初期化された値 

宣言なし 

c) 実装者固有値 

50 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 OUTARY AT %QW6: ARRAY[0..9] OF INT :=[10(1)]; 

 BITS: ARRAY[0..7] OF BOOL :=[1,1,0,0,0,1,0,0]; 

END̲VAR 

VAR NON̲RETAIN 

 BITS: ARRAY[0..7]OF BOOL; 

 VALVE̲POS AT %QW28: INT :=100; 

END̲VAR 

6.6 

プログラム構成ユニット(POU) 

6.6.1 

POUの共通項目 

6.6.1.1 

概要 

この規格に規定するプログラム構成ユニット(POU)とは,ファンクション,ファンクションブロック, 

クラス及びプログラムのことである。ファンクションブロック及びクラスはメソッドを含んでもよい。 

POUは,モジュール化及び構造化のために明確に定義されたプログラムを含んでいる。POUは,入出力

とのインタフェースをもち,複数回呼び出し,実行してもよい。 

注記 上述のパラメータインタフェースは,オブジェクト指向との関連で定義するインタフェースと

同じものではない。 

POU及びメソッドは,実装者が提供するか,使用者がプログラムする。 

宣言済みのPOUは,図3に示すように他のPOUで使用できる。 

POU及びメソッドの再帰的呼出しの可否は,実装依存である。 

特定のリソースに対するPOU,メソッド及びインスタンスの最大数は,実装者固有のものである。 

6.6.1.2 

代入及び式 

6.6.1.2.1 

概要 

代入及び式の言語構成要素は,テキスト言語及び(部分的に)グラフィック言語の中で使用する。 

6.6.1.2.2 

代入 

代入は,リテラル,定数式,変数又は式(次を参照。)の値を別の変数に書き込むために用いる。代入す

る変数は,例えば,ファンクション,メソッド,ファンクションブロックなどの入力変数,又は出力変数

のようなどんな種類の変数でもよい。 

同じデータ型の変数は,常に代入することができる。追加的に次の規則を適用する。 

・ STRING型又はWSTRING型の変数又は定数は,それぞれSTRING型又はWSTRING型の変数に個々に

代入できる。代入元となる文字列の長さが代入先となる変数の定義よりも長ければ,結果は実装依存

による。 

・ 範囲指定型の変数は,その基本データ型の変数を使用できる箇所で,どこでも用いることができる。

範囲指定型の値が,指定された範囲外となる場合は,エラーである。 

・ 派生型の変数は,その基本データ型の変数を使用できる箇所で,どこでも用いることができる。 

・ 配列に関する追加規則を,実装依存で定義してもよい。 

代入元のデータ型を代入先のデータ型に合致させるために,暗黙的又は明示的なデータ型変換を適用し

てもよい。 

a) テキスト表現(又はグラフィック言語に部分的に適用可能な形式)では,代入演算子は,次でもよい。 

“:=”は,演算子の右側の式の値が演算子の左側の変数に書き込まれることを意味する。 

“=>”は,演算子の左側の値が演算子の右側の変数に書き込まれることを意味する。 

51 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

“=>”演算子は,ファンクション,メソッド,ファンクションブロックなどの呼出しのパラメータ

リストの中だけで使用でき,かつ,VAR̲OUTPUTパラメータの値を呼出し側に戻すためだけに用いる。 

例 

A :=B+C/2; 

Func (in1 :=A, out2=> x);  

A̲struct1 :=B̲Struct1; 

注記 ユーザ定義データ型(STUCTURE,ARRAY)の代入については,表72参照。 

b) グラフィック表現では,代入は代入元から代入先へのグラフィック接続線として視覚化する。一般的

には,左から右,例えば,ファンクションブロック出力からファンクションブロック入力,又は変数

/定数のグラフィック“位置”からファンクション入力,又はファンクション出力から変数のグラフ

ィック“位置”まで視覚化する。 

標準ファンクションMOVEは,代入のグラフィック表現の一つである。 

6.6.1.2.3 

式 

式は,リテラル,変数及びファンクション呼出しのようなオペランドと,(+,−,*,/)のような演

算子の定義済み組合せとで構成され,複数の値をもつ場合がある一つの値を生み出す言語構成要素である。 

暗黙的及び明示的データ型変換は,式の演算のデータ型を合致させるために適用してもよい。 

a) テキスト表現(又はグラフィック言語に部分的に適用可能な形式)では,式は言語で定義された順位

に応じて既定順序で実行する。 

例 ... B+C / 2 * SIN(x)...  

b) グラフィック表現では,ラインに接続されている図式ブロック(ファンクションブロック,ファンク

ション,ほか)のネットワークとして視覚化する。 

6.6.1.2.4 

定数式 

定数式は,リテラル,コンスタント変数及び列挙値のようなオペランドと,(+,−,*)のような演算

子の定義された組合せとで構成され,多値をもつ場合がある一つの値を生み出す言語構成要素である。 

6.6.1.3 

ANY̲BIT変数への部分的なアクセス  

ANY̲BIT(BYTE,WORD,DWORD,LWORD)データ型の変数では,変数のビット,バイト,ワード及び

ダブル・ワードデータへの部分的なアクセスが可能で,表17に定義する。 

変数の部分的なデータをアドレス指定するには,整数リテラル(0から最大値)と合わせ,記号“%”及

び表16の直接表現変数を対象にして定義されているサイズ接頭語(X,B,W,D,L)を用いる。リテラ

ル0は,最下位の部分を参照し,最大値は最上位部分を参照することになる。“%X”は,ビットデータに

アクセスする場合は省略可能である。 

例 ANY̲BITへの部分的アクセス 

VAR 

  Bo: BOOL; 

  By: BYTE; 

  Wo: WORD; 

  Do: DWORD; 

  Lo: LWORD; 

END̲VAR; 

Bo :=By.%X0; // Byの0ビット目 

background image

52 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Bo :=By.7; 

// Byの7ビット目;%X がデフォルトであり,省略可能 

Bo :=Lo.63 

// Loの63ビット目; 

By :=Wo.%B1; // Woの1バイト目; 

By :=Do.%B3; // Doの3バイト目; 

表17−ANY̲BIT変数の部分的アクセス 

No. 

説明 

データ型 

例及び構文 

次へアクセスするデータ型 

myVAR̲12.%X1; yourVAR1.%W3; 

1a 

BYTE−ビット 

VB2.%X0 

BOOL 

<variable̲name>.%X0から<variable̲name>.%X7へ 

1b 

WORD−ビット 

VW3.%X15 

BOOL 

<variable̲name>.%X0から<variable̲name>.%X15へ 

1c 

DWORD−ビット 

BOOL 

<variable̲name>.%X0から<variable̲name>.%X31へ 

1d 

LWORD−ビット 

BOOL 

<variable̲name>.%X0から<variable̲name>.%X63へ 

2a 

WORD−バイト 

VW4.%B0 

BYTE 

<variable̲name>.%B0から<variable̲name>.%B1へ 

2b 

DWORD−バイト 

BYTE 

<variable̲name>.%B0から<variable̲name>.%B3へ 

2c 

LWORD−バイト 

BYTE 

<variable̲name>.%B0から<variable̲name>.%B7へ 

3a 

DWORD−ワード 

WORD 

<variable̲name>.%W0から<variable̲name>.%W1へ 

3b 

LWORD−ワード 

WORD 

<variable̲name>.%W0から<variable̲name>.%W3へ 

LWORD−2倍長ワード 

VL5.%D1 

DWORD 

<variable̲name>.%D0から<variable̲name>.%D1へ 

ビットアクセス接頭語%Xは,表16に従って省略してもよい。例 By1.%X7はBy1.7と同じである。 
部分的アクセスは,直接変数には用いてはならない。例 %IB10 

6.6.1.4 

呼出し表現及び規則 

6.6.1.4.1 

概要 

ファンクション,ファンクションブロックインスタンス又は(ファンクションブロック又はクラスの)

メソッドを実行するために呼出しを用いる。図10に示すように,呼出しは,テキスト表現又はグラフィ

ック表現で表示できる。 

a) 標準ファンクションで入力変数に名前が定められていない場合,上から下に向かってデフォルト名

IN1,IN2を付けなければならない。標準ファンクションがただ一つの名前未設定入力をもつ場合,

デフォルト名INを適用しなければならない。 

b) POU内の呼出しのVAR̲IN̲OUT変数が“正しくマップされていない”ときは,エラーとしなければ

ならない。 

VAR̲IN̲OUT変数が“正しくマップされている”とは,次のいずれかをいう。 

・ 左側でグラフィカルに接続されている。 

・ 所属するプログラム構成ユニット内でのテキスト表現の呼出しで“:=”演算子を用いて,

VAR̲IN̲OUT,VAR,VAR̲TEMP,VAR̲OUTPUT,VAR̲EXTERNALブロックにて(ただし,CONSTANT

修飾子なしに)宣言された変数に代入されているか,又は他のファンクション,ファンクションブ

ロック,メソッドの呼出しの正しくマップされた“VAR̲IN̲OUT”変数に代入されている。 

c) 呼出しの“正しくマップされた”(上記規則に示すとおりに)VAR̲IN̲OUT変数は,次のいずれかを

いう。 

・ 右側でグラフィカルに接続できる。 

・ テキスト表現の代入文内で“:=”演算子を用いて,所属するプログラム構成ユニットのVAR,

VAR̲OUTPUT又はVAR̲EXTERNALブロックで宣言された変数に代入できる。 

そのように接続された変数値が明確に定まらない場合には,エラーとしなければならない。 

53 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

d) ファンクションブロックインスタンスの名前は,それがVAR̲INPUT又はVAR̲IN̲OUTとして宣言さ

れていれば,呼出しの入力として用いることができる。 

呼び出された側の内部では,入力として引き渡されたインスタンスを次のように利用できる。 

・ インスタンスがVAR̲INPUTとして宣言されている場合は,そのファンクションブロック変数は読

み取ることだけができる。 

・ インスタンスがVAR̲IN̲OUTとして宣言されている場合は,そのファンクションブロック変数は読

み取ることも書き込むことも,また,ファンクションブロックを呼び出す(実行する)こともでき

る。 

6.6.1.4.2 

テキスト言語 

テキスト表現の呼出しの項目を表20に規定する。テキスト表現の呼出しは,呼び出される側の名前に続

けてパラメータのリストを記述する形式で構成する。 

ST言語では,パラメータはコンマで分離し,また,このリストは括弧によって左右で区切らなければな

らない。 

呼出しのパラメータリストは実効値を提供しなければならず,また,正式パラメータ名がある場合には

それらに代入することができる。 

・ 正式呼出し パラメータリストは,一連の正式パラメータ名に対する実効値の代入の表記(正式パラ

メータリスト)を備えている。代入の表記には,次の二つがある。 

a) “:=”演算子を用いた入力変数及び入出力変数への値の代入 

b) “=>”演算子を用いた変数への出力変数の値の代入 

正式パラメータリストは,完全でも不完全でも差し支えない。リストによって値が代入されない変数に

対しては,呼び出された側に初期値が宣言されている場合はその値が,初期値宣言がない場合はその変数

のデータ型のデフォルト値が適用されなければならない。 

リスト内のパラメータの順序付けは,意味があってはならない。 

実行制御パラメータEN及びENOを使用してもよい。 

例1 

A :=LIMIT(EN:=COND, IN:=B, MN:=0, MX:=5, ENO => TEMPL); 

// 完全 

A :=LIMIT(IN:=B, MX:=5); 

// 不完全 

・ 略式呼出し パラメータリストは,実行制御パラメータEN及びENOを除き,ファンクション定義に

示すものと同じパラメータ数,正確に同じ順序及び同じデータ型をそのとおりに含まなければならな

い。 

例2 

A :=LIMIT(B, 0, 5); 

この呼出しは,例1の完全な呼出しに相当するが,EN/ENOはない。 

6.6.1.4.3 

グラフィック言語 

グラフィック言語において,ファンクションの呼出しは,次の規則に従ってグラフィックブロックとし

て表現しなければならない。 

a) ブロックの型は,長方型でなければならない。 

b) ブロックの大きさ及び縦横比は,表示する入力及びその他の情報によって変わってもよい。 

c) ブロックを通しての処理の方向は,左から右(入力変数が左側で出力変数が右側)でなければならな

い。 

background image

54 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

d) 呼び出された要素の名称又は記号は,ブロックの中に表示しなければならない。 

e) ブロックの左右内側にそれぞれ,入力及び出力変数の名前を表示しなければならない。 

f) 

付加的な入力EN及び/又は付加的な出力ENOを用いてもよい。その場合,それぞれブロックの左側

最上部,右側最上部に表示しなければならない。 

g) ENO出力がない場合,ファンクションの結果は,右側の最上部に示さなければならない。ENO出力が

ある場合は,ファンクションの結果は,ENO出力のすぐ下に示さなければならない。呼び出された要

素の名自体がその出力値,すなわち,ファンクションの結果の代入で使用するので,出力変数名をブ

ロックの右側に表示してはならない。 

h) パラメータの接続(ファンクションの結果を含む。)は,信号線で示さなければならない。 

i) 

ブール信号の否定は,ブロック及びその入出力線の交点のすぐ外側に白抜きの円を置くこととで示さ

れなければならない。文字セットでは,図10に示すように大文字アルファベット“O”で表現しても

よい。否定はPOUの外側で行う。 

j) 

グラフィック表現で表現されたファンクションの全ての入力及び出力(ファンクションの結果を含

む。)は,データ要素が多要素変数だとしても,ブロックの対応する側の外側に一本線で表さなければ

ならない。 

k) 結果及び出力(VAR̲OUTPUT)は,変数に接続し他の呼出しへの入力として使用することができるが,

何も接続しなくてもよい。 

グラフィック表現例 

(FBD) 

テキスト表現例 

(ST) 

解説 

a) 
 

+ ------ + 

| ADD | 

B-- | 

| --A 

C-- | 

D-- | 

+ ------ + 

 
A :=ADD(B, C, D); //ファン
クション 
 
 
A :=B+C+D; //演算式 

 
略式パラメータリスト 
(B, C, D) 

b) 
 

+ ------ + 

| SHL | 

B-- | IN 

| --A 

C-- | N 

+ ------ + 

 
A :=SHL(IN :=B, N :=C); 

 
正式パラメータ名 
IN, N 

c) 
 

+ ------ + 

| SHL | 

ENABLE-- | EN・ENO | O-NO̲ERR 

B-- | IN 

| --A 

C-- | N 

+ ------ + 

 
A :=SHL( 
 

EN :=ENABLE, 

IN :=B,  

N :=C,  

NOT ENO=> NO̲ERR); 

 
正式パラメータ名 
 
 
EN入力及び否定ENO出力の使用 

図10−呼出しの正式及び略式表示(例) 

background image

55 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

グラフィック表現例 

(FBD) 

テキスト表現例 

(ST) 

解説 

d) 
 

+ ------ + 

| INC | 

| --A 

X-- | V----V | --X 

+ ------ + 

 
A :=INC(V :=X); 

 
ユーザ定義INCファンクション 
 
 
VAR̲IN̲OUTの正式パラメータ名

注記 上記例は,正式パラメータ名がない標準ファンクション(ADD),正式パラメータ名がある標準ファンクション

(SHL),それにEN入力及びENO出力の否定を付加的に使用したファンクション,正式パラメータ名をもつユ
ーザ定義ファンクション(INC)におけるファンクションのグラフィック表現,並びにそれと同等なテキスト表
現の使用の両方を示す。 

図10−呼出しの正式及び略式表示(例)(続き) 

6.6.1.5 

実行制御(EN,ENO) 

表18に示すように,実装者又は使用者は,付加的なブール型のEN(イネーブル)入力若しくはENO(イ

ネーブル・アウト)出力のいずれか又はその両方を,宣言によって提供できる。 

VAR̲INPUT 

EN:  BOOL :=1; 

END̲VAR 

VAR̲OUTPUT ENO: BOOL;  

END̲VAR 

これらの変数を用いるとき,POUで定義している演算の実行は,次の規則で制御しなければならない。 

a) ENがFALSEであれば,POUが実行されてはならない。さらに,ENOはFALSEにリセットされなけ

ればならない。実装者は,この場合の挙動を詳細に明記しなければならない。次の例を参照。 

b) ENの値がTRUEであれば,ENOはTRUEにセットされ,POUに実装された処理が実行されなければ

ならない。また,POUは,実行結果に応じてENOにブール値をセットしてもよい。 

c) POUの一つを実行中にエラーが発生した場合,プログラマブルコントローラシステムによってPOU

のENO出力をFALSE(0)にリセットするか,又は実装者はそのようなエラーに対する処理を明記しな

ければならない。 

d) ENO出力がFALSE(0)と評価される場合,POUの全ての出力値(VAR̲OUTPUT,VAR̲IN̲OUT及び

ファンクションの結果)は,実装依存である。 

e) 入力ENは,POUの呼出しの一部として実効値をセットされるだけでなければならない。 

f) 

出力ENOは,POUの呼出しの一部として変数に値を渡すだけでなければならない。 

g) 出力ENOは,そのPOU内部で値をセットしなければならない。 

h) EN/ENOを参照する場合のファンクションREF()におけるパラメータEN/ENOの使用は,エラーであ

る。 

ENがFALSEの場合には,通常のPOU実行とは異なる挙動を実装できる。この挙動は,実装者が明記し

なければならない。次の例を参照。 

例1 内部実装 

入力ENをPOU内で評価する。 

ENがFALSEであれば,ENOをFALSEにセットし,POUは直ちに戻る。 

又は 

POUは,状況次第で演算の一部を行ってもよい。 

特定の入力及び入出力パラメータを全て評価し,POUのインスタンスにセットする(ファン

56 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

クションを除く。)。 

入出力パラメータの有効性を確認する。 

例2 外部実装 

入力ENを外部で評価する。ENがFALSEであれば,ENOだけをFALSEにセットし,POU

を呼出ししない。 

入力及び入出力パラメータは評価せず,POUのインスタンスにセットしない。入出力パラメ

ータの有効性は,確認しない。 

入力ENは,呼出しとは別にPOU外で割り付けない。 

次の図及び式は,EN/ENOがある場合とない場合の使用法を図示したものである。 

myInst 

+ -------- + 

cond 

| myFB | 

---- |  | ---- | EN 

ENO | --------( ) 

v1 -- | A 

B | -- v2 

v3 -- | C------C | -- 

+ -------- + 

例3 内部実装 

myInst (EN:=cond, A:=v1, C:=v3, B=> v2, ENO=> X); 

mylnstのボディは,次から始まる。 

IF NOT EN THEN... //状況次第で演算の一部を行う。 

ENO:=0; RETURN; END̲IF; 

例4 外部実装 

IF cond THEN myInst (A:=v1, C:=v3, B=> v2, ENO=> X) 

ELSE X:=0; END̲IF; 

EN/ENOなし及びありのPOUの呼出しの項目は,表18による。 

background image

57 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表18−EN及びENOをグラフィック表現で用いた実行制御 

No. 

説明a) 

例b) 

EN及びENOなしでの使用 

FBD及びSTのファンクションを表示 
 

+ -------- + 

A-- | 

| --C 

+ -------- + 

C :=ADD(IN1 :=A, IN2 :=B); 

ENだけの使用 
(ENOなし) 

FBD及びSTのファンクションを表示 

+ -------- + 

 ADD̲EN-- | EN 

A-- | 

| --C 

B-- | 

+ -------- + 

C :=ADD(EN :=ADD̲EN. IN1 :=A, IN2 :=B); 

ENOだけの使用 
(ENなし) 

FBD及びSTのファンクションを表示 
 

+ -------- + 

ENO | --ADD̲OK 

A-- | 

| --C 

B-- | 

+ -------- + 

C :=ADD(IN1 :=A, IN2 :=B, ENO=> ADD̲OK); 

EN及びENOの使用 

ST及びLDのファンクションを表示 
 

+ -------- + 

| ADD̲EN | 

| ADD̲OK 

+ --| |-- | EN ENO | --( )-- + 

A-- | 

| --C 

B-- | 

+ -------- + 

C :=ADD(EN :=ADD̲EN, IN1 :=a, IN2 :=IN2, EN=> ADD̲OK); 

注a) どの言語において項目がサポートされているかを実装者は明記する。すなわち,実装においてEN,ENOのいず

れか又は両方の使用を禁止することもできる。 

b) 上記項目を明示するために選ばれた言語は,例にすぎない。 

6.6.1.6 

データ型変換 

データ型変換は,式,代入及びパラメータ割付けにおいて,データ型を合致させるために使用する。 

変数に保持されている情報の表示及び解釈は,宣言された変数のデータ型によって決まる。型変換を用

いる二つのケースがある。 

a) 異なるデータ型の変数への変数のデータ値の代入 代入演算子“:=”及び“=>”並びにファンクショ

ン,ファンクションブロック,メソッド,及びプログラムのパラメータとして宣言された変数(すな

わち,入力,出力など)の代入にこれを適用できる。変換元データ型から変換先データ型への変換規

則は,図11による。 

例1 A :=B;  

//変数代入 

FB1(x :=z, v=> W);  

//パラメータ割付け 

b) 式の中(ST言語については7.3.2参照) “+”のような演算子と,データ型が同じ又は異なった変数

及びリテラルといったオペランドとで構成する式。 

58 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例2 … SQRT[B+(C * 1.5)]; 

//式 

c) 明示的データ型変換は,変換ファンクションを用いて行う。 

d) 暗黙のデータ型変換には,次の適用規則がある。 

1) データ型の値及び精度を維持しなければならない。 

2) 型付ファンクションに適用できる。 

3) 変数への式の代入に適用できる。 

例3 

myUDInt :=myUInt1 * myUInt2;  

/* 乗算の結果はUINT型となるが,この結果は代入時にUDINTへ暗黙のうちに変

換される。*/ 

4) 入力パラメータの割付けに適用できる。 

5) 出力パラメータの割付けに適用できる。 

6) 入出力パラメータへの割付けに適用してはならない。 

7) 演算又は多重定義されたファンクションの結果とオペランドとが,同じデータ型になるように適用

できる。 

例4 

myUDInt :=myUInt1 * myUDInt2; 

//myUIntはUDINTへ暗黙のうちに変換し,乗算の結果はUDINTである。 

8) 実装者は,非型付リテラルの規則を定義しなければならない。 

注記 使用者が,曖昧さを避けるために型付リテラルを使用できる。 

例5 

IF myWord=NOT (0) THEN …; 

//16#FFF, 16#0001, 16#00FF,などとの曖

昧な比較 

IF myWord=NOT (WORD#0) THEN …; //16#FFFFとの曖昧な比較 

図11は,変換元データ型から変換先データ型への変換において,“暗黙的変換”又は“明示的変換”の

いずれかを選択するべきかを示すものである。 

background image

59 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

変換元 

データ型 

変換先データ型 

実数 

整数 

符号なし 

ビット列 

日付及び時刻 

文字 

L

R

E

A

L

R

E

A

L

L

IN

T

D

IN

T

IN

T

S

IN

T

U

L

IN

T

U

D

IN

T

U

IN

T

U

S

IN

T

L

W

O

R

D

D

W

O

R

D

W

O

R

D

B

Y

T

E

B

O

O

L

L

T

IM

E

T

IM

E

L

D

T

D

T

L

D

A

T

E

D

A

T

E

L

T

O

D

T

O

D

W

S

T

R

IN

G

S

T

R

IN

G

W

C

H

A

R

C

H

A

R


LREAL 

e e e e e e e e e e − − − − − − − − − − − − − − − − 

REAL 

e e e e e e e e − e − − − − − − − − − − − − − − − 


LINT 

e e 

e e e e e e e e e e e − − − − − − − − − − − − − 

DINT 

e e e e e e e e e e − − − − − − − − − − − − − 

INT 

e e e e e e e e e − − − − − − − − − − − − − 

SINT 

e e e e e e e e − − − − − − − − − − − − − 



ULINT 

e e e e e e 

e e e e e e e − − − − − − − − − − − − − 

UDINT 

e e e 

e e e e e e − − − − − − − − − − − − − 

UINT 

e e 

e e e e e − − − − − − − − − − − − − 

USINT 

e e e e − − − − − − − − − − − − − 



LWORD 

e − e e e e e e e e 

e e e − − − − − − − − − − − − − 

DWORD 

− e e e e e e e e e 

e e − − − − − − − − − − − − − 

WORD 

− − e e e e e e e e 

e − − − − − − − − − − − e − 

BYTE 

− − e e e e e e e e 

 − − − − − − − − − − − − e 

BOOL 

− − e e e e e e e e 

 − − − − − − − − − − − − 




LTIME 

− − − − − − − − − − − − − − −  

e − − − − − − − − − − 

TIME 

− − − − − − − − − − − − − − − i 

 − − − − − − − − − − 

LDT 

− − − − − − − − − − − − − − − − −  

e e e e e − − − − 

DT 

− − − − − − − − − − − − − − − − − i 

e e e e − − − − 

LDATE 

− − − − − − − − − − − − − − − − − − −  

e − − − − − − 

DATE 

− − − − − − − − − − − − − − − − − −  

 − − − − −  

LTOD 

− − − − − − − − − − − − − − − − − − − − −  

e − − − − 

TOD 

− − − − − − − − − − − − − − − − − − − − − i 

 − − − − 


WSTRING − − − − − − − − − − − − − − − − − − − −  − −  

e − − 

STRING a) − − − − − − − − − − − − − − − − − − − −  − − e 

 − e 

WCHAR 

− − − − − − − − − − e e e − − − − − − −  − − i −  

CHAR a) 

− − − − − − − − − e e e e e − − − − − −  − − − i 

記号 

データ型変換不要 

− この規格で規定する暗黙的又は明示的データ型変換なし。実装者が独自仕様のデータ型変換をサポートして

もよい。 

暗黙的データ型変換。ただし,明示的データ変換も追加的に認める。 

使用者が適用する明示的データ型変換(標準変換ファンクション)は,精度低下又は値域の不一致を受け入
れるため,又は考えられる実装者依存挙動を達成するために使用してもよい。 

注a) WSTRINGへのSTRINGの変換及びWCHARへのCHARの変換は,使用されている文字セットとの矛盾を避け

るために暗黙的ではない。 

図11−データ型変換規則−暗黙的及び/又は明示的(要約) 

図12は,暗黙的型変換がサポートするデータ型変換を示すものである。矢印は,考えられる変換パスを

示す。例えば,BOOLはBYTEに変換でき,BYTEはWORDに変換できる。 

background image

60 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

図12−サポートされた暗黙的データ変換 

次の例は,データ型変換の例を示すものである。 

例 明示的型変換及び暗黙的型変換 

a) 型宣言 

VAR 

  PartsRatePerHr: REAL; 

  PartsDone: 

INT; 

  HoursElapsed: 

REAL; 

  PartsPerShift: 

INT; 

  ShiftLength: 

SINT; 

END̲VAR 

b) ST言語での使用 

1) 明示的型変換 

PartsRatePerHr :=INT̲TO̲REAL(PartsDone) / HoursElapsed; 

PartsPerShift

:=REAL̲TO̲INT(SINT̲TO̲REAL(ShiftLength)*PartsRatePerHr); 

2) 明示的多重定義型変換 

PartsRatePerHr :=TO̲REAL(PartsDone) / HoursElapsed; 

PartsPerShift :=TO̲INT(TO̲REAL(ShiftLength)*PartsRatePerHr); 

3) 暗黙的型変換 

PartsRatePerHr :=PartsDone / HoursElapsed; 

PartsPerShift :=TO̲INT(ShiftLength * PartsRatePerHr); 

c) FBD言語での使用 

1) 明示的型変換 

USINT 

SINT 

INT 

DINT 

LINT 

UINT 

UDINT 

ULINT 

REAL 

LREAL 

TIME 

LTIME 

DT 

LDT 

TOD 

LTOD 

CHAR 

STRING 

WCHAR 

WSTRING 

BOOL 

BYTE 

WORD 

DWORD 

LWORD 

DATE 

LDATE 

61 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ----------- + + -------- + +--+ + ----------- + 

PartsDone - | INT̲TO̲REAL | -- | DIV̲REAL | -- | * | -- | REAL̲TO̲INT | --PartsPerShift 

+ ----------- + | 

| | | | 

| | | + ----------- + 

HoursElapsed ---------------- | 

| | | 

+ -------- + | | 

| | 

+ ----------- + 

| | 

ShiftLength - | SINT̲TO̲REAL |--------------| | 

+ ----------- + 

+ -- + 

2) 明示的多重定義型変換 

+ ----------- + + -------- + +--+ + ------- + 

PartsDone - | TO̲REAL 

| -- | DIV̲REAL | -- | * | -- | TO̲INT | --PartsPerShift 

+ ----------- + | 

| | | | 

| | | + ------- + 

HoursElapsed ---------------- | 

| | | 

+ -------- + | | 

| | 

+ ----------- + 

| | 

ShiftLength - | TO̲REAL 

|--------------| | 

+ ----------- + 

+ -- + 

3) 暗黙的型変換 

+ -------- + +---------+ + ------- + 

PartsDone------- | DIV̲REAL | -- | MUL̲REAL | -- | TO̲INT | --PartsPerShift 

| | 

| | 

| | 

| + ------- + 

HoursElapsed---- | 

| | 

+ -------- + | 

ShiftLength ----------------- | 

+---------+ 

6.6.1.7 

多重定義 

6.6.1.7.1 

概要 

言語要素が,総称データ型,例えば,ANY̲NUM及びANY̲INTに含まれる様々な型の入力データ要素で

の演算を可能とした場合,それを多重定義されているという。 

実装者が提供する次の標準言語要素は,特殊項目として総称多重定義をしてもよい。 

・ 標準ファンクション 標準ファンクションには,多重定義された標準ファンクション(例 ADD,MUL),

62 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

及び多重定義された標準変換ファンクション(例 TO̲REAL,TO̲INT)がある。 

・ 標準メソッド この規格は,標準クラス又はファンクションブロック型内の標準メソッドを定義しな

いが,それらは実装者が提供してもよい。 

・ 標準ファンクションブロック この規格は,カウンタのような幾つかの単純なものを除き,標準ファ

ンクションブロックを定義しない。 

しかしながら,実装者が提供してもよい。 

・ 標準クラス この規格は,標準クラスを定義しないが,実装者が提供してもよい。 

・ 演算子 演算子には,例えば,ST言語では“+”及び “*”があり,IL言語ではADD,MULがある。 

6.6.1.7.2 

データ型変換 

プログラマブルコントローラシステムが,多重定義言語要素をサポートするとき,その言語要素はその

システムがサポートしている総称型のうち適用可能な全てのデータ型に適用しなければならない。 

各言語要素に対して適用可能なデータ型は,関連項目表に定義する。次の例で詳細を説明する。 

例1 この規格では,ADDファンクションに関して,同じ種類の入力及び一つの結果出力に対する総

称データ型ANY̲NUMを定義する。 

実装者は,PLCシステムのこの総称データ型ANY̲NUMに関して,関連する基本データ型

REAL及びINTを明記する。 

例2 この規格では,ビットシフトファンクションLEFTについて,一つの入力及び結果出力に関す

る総称データ型ANY̲BIT及び他の入力に関するANY̲INTを定義する。 

実装者は,PLCシステムのこれら二つの総称データ型の具体的なデータ型を明記する 

ANY̲BITに対しては,例えば,基本データ型BYTE及びWORD。 

ANY̲INTに対しては,例えば,基本データ型INT及びLINT。 

多重定義言語要素は,次に従って定義済み基本データ型で演算しなければならない。 

・ 入力,及び出力又は結果が同じ種類である場合には,それらのデータ型は同一でなければならない。

入力,及び出力又は結果が同じ種類とは,加算又は乗算の入力のように,同じように使用するパラメ

ータ,オペランド及び結果であることを意味する。 

より複雑な組合せは,実装者固有のものである。 

・ 同じ種類の入力及び出力のデータ型が同じでない場合は,言語要素における変換は実装者固有のもの

である。 

・ 式及び代入の暗黙的型変換は,式の評価順序に従う。次の例を参照。 

・ 多重定義ファンクションの結果を保存するための変数のデータ型は,ファンクション又は演算の結果

のデータ型に影響を及ぼさない。 

注記 使用者は,型付ファンクションを用いて演算の結果型を明示的に指定できる。 

例3 

int3 :=int1 +int2 (*整数演算として加算を行う*) 

dint1 :=int1 +int2; (*整数演算として加算を行い,その後結果をDINTに変換し,

dint1に代入する*) 

dint1 :=dint2 +int3; (*int3をDINTに変換し,DINT加算として加算を行う*) 

63 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.2 

ファンクション 

6.6.2.1 

概要 

ファンクションは,その状態(入力,インターナル及び出力/結果)を保存しないプログラム構成ユニ

ット(POU)である。 

POUの共通項目は,別段に記載されていない場合にファンクションに適用する。 

ファンクションの実行 

・ 一般的に,1データ要素,多値配列又は構造である一時的な結果をもたらす。 

・ 場合によって,多値である出力変数をもたらす。 

・ 入出力及びVAR̲EXTERNAL変数の値を変更してもよい。 

結果があるファンクションは,式の中で呼出し,又は文として呼出しする。 

結果がないファンクションは,式の内部で用いることはできない。 

6.6.2.2 

ファンクション宣言 

ファンクションの宣言は,表19に規定する次の要素で構成しなければならない。これらの項目は,ファ

ンクションブロックの宣言と同じ方法で宣言する。 

ファンクションの宣言に関する次の規則を表19に定義するように適用しなければならない。 

a) 宣言は,予約語FUNCTIONで始まり,続いてファンクション名を示す識別子を続ける。 

b) ファンクション結果を得られる場合,コロン(:),及びファンクションから戻される値のデータ型は,

規定しなければならず,又はファンクション結果を得られない場合,コロン及びデータ型は省略しな

ければならない。 

c) 必要な場合,VAR̲INPUT,VAR̲OUTPUT及びVAR̲IN̲OUT構文,ファンクションパラメータの名前

及びデータ型を明記する。 

d) VAR̲EXTERNAL構文を通じてファンクションに渡す変数の値は,ファンクションの中で変更できる。 

e) VAR̲EXTERNAL CONSTANT構文を通じてファンクションに渡す定数の値は,ファンクションの中で

変更できない。 

f) 

VAR̲IN̲OUT構文を通じてファンクションに渡す変数の値は,ファンクションの中で変更できる。 

g) 可変長配列は,VAR̲INPUT,VAR̲OUTPUT及びVAR̲IN̲OUTとして使用してもよい。 

h) 入力,出力及び一時的変数は初期化してもよい。 

i) 

EN入力及びENO出力は,表18に記載したとおりに使用してもよい。 

j) 

VAR...END̲VAR構文及びVAR̲TEMP...END̲VAR構文で,必要であれば内部一時的変数の名前及び

型を指定する。ファンクションブロックとは異なり,VAR...END̲VAR構文で宣言した変数の値は保

存されない。 

k) 総称データ型(例 ANY̲INT)が標準ファンクションの変数の宣言中で用いられている場合,そのよ

うなファンクションのパラメータの実際の型をファンクションに定義しなければならない。 

l) 

変数初期化構文は,ファンクション入力の初期値の宣言として,また,ファンクションの内部変数及

び出力変数の初期値の宣言として使用できる。 

m) 予約語END̲FUNCTIONは,宣言を終了させる。 

background image

64 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表19−ファンクション宣言 

No. 

説明 

例 

1a 

結果なし 
FUNCTION <name> ... END̲FUNCTION 

FUNCTION myFC ... END̲FUNCTION 

1b 

結果あり 
FUNCTION <name> : <data type>  
END ̲FUNCTION 

FUNCTION myFC: INT ... END̲FUNCTION 

2a 

入力 
VAR̲INPUT...END̲VAR 

VAR̲INPUT IN: BOOL; T1: TIME; END̲VAR 

2b 

出力 
VAR̲OUTPUT...END̲VAR 

VAR̲OUTPUT OUT: BOOL; ET̲OFF: TIME; END̲VAR 

2c 

入出力 
VAR̲IN̲OUT...END̲VAR 

VAR̲IN̲OUT A: INT; END̲VAR 

2d 

一時的変数 
VAR̲TEMP...END̲VAR 

VAR̲TEMP I: INT; END̲VAR 

2e 

一時的変数 
VAR...END̲VAR 

VAR B: REAL; END̲VAR  
 
互換性の理由から,ファンクションブロックのVARと差異がある。
ファンクションブロックではVARは静的である(保存)。 

2f 

外部変数 
VAR̲EXTERNAL...END̲VAR 

VAR̲EXTERNAL B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL... 

2g 

外部定数 
VAR̲EXTERNAL CONSTANT...END̲VAR 

VAR̲EXTERNAL CONSTANT B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL 

3a 

入力の初期化 

VAR̲INPUT  MN:  INT :=0; 

3b 

出力の初期化 

VAR̲OUTPUT RES: INT :=1; 

3c 

一時的変数の初期化 

VAR I: INT :=1; 

EN 入力及びENO出力 

表18に規定する。 

65 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

// パラメータインタフェースの記述 

 FUNCTION SIMPLE̲FUN: REAL 

 VAR̲INPUT 

      A, B: REAL; 

      C:   REAL := 1.0; 

 END̲VAR 

  VAR̲IN̲OUT COUNT: INT; 

 END̲VAR 

// パラメータインタフェースの記述 

FUNCTION 

+ ------------ + 

| SIMPLE̲FUN | 

 REAL-- | A 

| --REAL 

 REAL-- | B 

 REAL-- | C 

 INT-- | COUNT--COUNT | --INT 

+ ------------ + 

//ファンクションボディの記述  

 VAR COUNTP1: INT; END̲VAR 

 COUNTP1 :=ADD(COUNT, 1); 

 COUNT   :=COUNTP1 

 SIMPLE̲FUN :=A*B/C; // 結果 

 END̲FUNCTION 

// ファンクションボディの記述 

+ --- + 

| ADD | -- 

+ -- + 

 COUNT-- | 

| --COUNTP1-- | := | --COUNT 

1-- | 

+ -- + 

+ --- + + -- + 

A-- | * | + -- + 

B-- | | -- | / | -SIMPLE̲FUN 

+ -- + | | 

C--------- | | 

+ -- + 

END̲FUNCTION 

a) ファンクション宣言及びボディ(ST及びFBD)−備考 

66 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

VAR̲GLOBAL DataArray: ARRAY [0..100] OF INT; 

END̲VAR 

FUNCTION SPECIAL̲FUN  

VAR̲INPUT 

  FirstIndex: INT; 

  LastIndex:  INT;  

END̲VAR 

VAR̲OUTPUT 

  Sum: INT;  

END̲VAR 

VAR̲EXTERNAL DataArray:  

    ARRAY [0..100] OF INT;  

END̲VAR 

VAR I: INT; Sum: INT:=0; END̲VAR 

  FOR  i :=FirstIndex TO LastIndex 

    DO Sum :=Sum + DataArray[i]; 

  END̲FOR 

END̲FUNCTION 

//外部インタフェース 

//ファンクション結果はないが,Sumを出

力 

+-------------- + 

| SPECIAL̲FUN | 

INT--- | FirstIndex Sum | ----INT 

INT--- | LastIndex 

+-------------- + 

//ファンクションボディ−グラフィック表

現で示さず 

b) ファンクション宣言及びボディ(ファンクション結果なし−出力変数あり) 

注記 a)では,デフォルト値1.0を規定している。そのファンクションへのグラフィカルな入力が未

接続など,入力が未指定のままファンクションが呼び出されたときに“0除算”を防ぐためで

ある。 

6.6.2.3 

ファンクション呼出し 

ファンクションの呼出しは,テキスト表現又はグラフィック表現で表す。 

入力変数,出力変数及びファンクション結果は保存されないので,入力への代入,出力へのアクセス及

び結果へのアクセスはファンクションの呼出しの直前,直後でなければならない。 

パラメータを可変長配列として用いる場合,パラメータは静的変数に接続しなければならない。 

ファンクションは,内部状態情報を含んではならない,すなわち, 

・ ファンクションは,呼出しごとの入力,内部(一時的)及び出力要素のいずれも保存しない。 

・ 同じパラメータ(VAR̲INPUT及びVAR̲IN̲OUT)及びVAR̲EXTERNALに同じ値を与えるファンク

ションの呼出しは,常にその出力変数,入出力変数,外部変数及び(ある場合には)そのファンクシ

ョン結果に同じ値を返す。 

注記1 一般的に実装によってシステムファンクションとして提供されるファンクションの中には,

それぞれ異なる値,例えば,TIME(),RANDOM()をもたらすものがある。 

background image

67 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表20−ファンクション呼出し 

No. 

説明 

例 

1a 

完全な正式呼出し(テキスト表現だけ) 
 
注記1 EN/ENOが呼出しで必要な場合にこれを用いる。 

A :=LIMIT(EN :=COND, 
 

IN :=B,  

MN :=0,  

MX :=5,  

ENO=> TEMPL); 

1b 

不完全な正式呼出し(テキスト表現だけ) 
 
注記2 EN/ENOが呼出しで必要でない場合にこれを用い

る。 

A :=LIMIT(IN :=B, 
 

MX :=5); 

注記3 MN変数の値はデフォルト値の0(ゼロ)

になる。 

略式呼出し(テキスト表現だけ) 
(引数は定義された順序どおりに全て記述する。) 
 
注記4 名前なしのパラメータをもつ標準ファンクショ

ンの呼出しにこれを用いる。 

A :=LIMIT(B, 0, 5); 
 
注記5 この呼出しは1aに相当するが,EN/ENO

はない。 

ファンクション結果がないファンクション 

FUNCTION myFun 

//型宣言なし 

VAR̲INPUT  x: INT; 

END̲VAR; 

VAR̲OUTPUT y: REAL; END̲VAR; 
myFun(150, var); 

//呼出し 

グラフィック表現 

+ -------- + 

| FUN | 

a-- | EN ENO | -- 

b-- | IN1 

| --result 

c-- | IN2 Q1 | --out 

Q2 | 

+ -------- + 

グラフィック表現の否定ブール型入力及び出力の使用 

+ -------- + 

| FUN | 

a-o | EN ENO | -- 

b-- | IN1 

| --result 

c-- | IN2 Q1 | o-out 

Q2 | 

+ -------- + 

注記6 これらの構文は,入出力変数には使用禁

止である。 

VAR̲IN̲OUTのグラフィック表現方法 

+------------+ 

myFC1 

 a-- |In1      Out1| --d 
 b-- |Inout--Inout| --c 
 

+------------+ 

例 ファンクション呼出し 

呼出し 

VAR 

  X, Y, Z, Res1, Res2: REAL; 

  En1, V: BOOL; 

END̲VAR 

Res1 :=DIV(In1 :=COS(X), In2 :=SIN(Y), ENO=> EN1); 

68 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Res2 :=MUL(SIN(X), COS(Y)); 

:=ADD(EN :=EN1, IN1 :=Res1, IN2 :=Res2, ENO=> V); 

+----+ 

+ ------- + 

+ ------- + 

 X-- + -- | COS | -- + - | EN ENO |----- | EN ENO | -- V 

| | 

| | 

| +----+ +----| DIV |----- | ADD | -- Z 

| + --- + 

+- | 

Y- +----| SIN | ------- | 

| + ------- + 

| | | 

+ ------- + 

| | +----+ 

| | 

| | +----+ 

+ ------- + 

| + -- | SIN | -- + - | EN ENO |- | 

| | 

+----+ + --- | MUL | -- + 

+----+ 

+----| COS | ------- | 

+ ------- + 

+----+ 

a) 結果及びEN/ENOによる標準ファンクション 

宣言 

FUNCTION My̲function 

//型指定なし, 結果なし 

VAR̲INPUT In1:  

REAL; END̲VAR 

VAR̲OUTPUT Out1, Out2: REAL; END̲VAR 

VAR̲TEMP Tmp1:  

REAL; END̲VAR //VAR̲TEMP 使用可 

VAR̲EXTERNAL Ext:  

BOOL; END̲VAR 

//ファンクションボディ 

END̲FUNCTION 

テキスト表現及びグラフィック表現呼出し 

My̲Function (In1 :=a, Out1=> b; Out2=> c); 

+--------------+ 

| My̲Function | 

//結果なし 

a -- | In1 

Out1 | -- b 

Out2 | -- c 

//出力2点 

+--------------+ 

b) ファンクション宣言及び結果はないが出力変数による呼出し 

69 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

テキスト表現及びグラフィック表現呼出し 

myFC1 (In1 :=a, Inout :=b, Out1=> Tmp1);  //一時的変数の用い方 

d:=myFC2 (In1 :=Tmp1, Inout:=b); 

//bをInoutに設定; cに代入 

c:=b; 

//bをcに代入 

+--------------+ +--------------+ 

myFC1 

| | 

myFC2 

a -- | In1 

Out1 | -- | 

In1 

| -- d 

//結果Result 

b -- | Inout--Inout | -- | Inout--Inout | -- c 

//cに代入 

+--------------+ | 

+--------------+ 

c) 入出力変数のグラフィック表現を伴うファンクション呼出し 

テキスト表現呼出し及びグラフィック表現呼出し 

My̲Function (In1 :=a, Out1+Out2=> d); 

//STでは可能ではない 

My̲Function (In1 :=a, Out1=> Tmp1, Out2=> Tmp2);  

d :=Tmp1+Tmp2; 

+--------------+ +--------------+ 

| My̲Function | | 

| -- d 

a -- | In1 

Out1 | -- | In1 

Out2 | -- | In2 

+--------------+ +--------------+ 

d) 結果はないが出力変数式を伴うファンクション呼出し 

注記2 これらの例は,二つの同じ機能性のそれぞれ異なる表現を示す。二つの表現形式間の自動変

換をサポートする必要はない。 

6.6.2.4 

データ型指定ファンクション及び多重定義ファンクション 

多重定義演算子を通常表しているファンクションは,データ型を指定する。これを行うには,表21に示

すように,必要な型を“̲”(アンダースコア)に続けて付加しなければならない。データ型指定ファンク

ションは,型をその入力及び出力のデータ型として用いることによって行う。明示的又は暗黙的型変換を

適用してもよい。 

基本データ型xxxを出力型とするTO̲xxx又はTRUNC̲xxx形式の多重定義変換ファンクションは,ア

ンダースコアの前に必要な基本データ型を指定する。 

background image

70 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表21−データ型指定ファンクション及び多重定義ファンクション 

No. 

説明 

例 

1a 

多重定義ファンクション 
 ADD(ANY̲Num to ANY̲Num) 

+-----------+ 

ADD 

ANY̲NUM -- | 

| -- ANY̲NUM 

ANY̲NUM -- | 

-- | 

-- | 

ANY̲NUM -- | 

+-----------+ 

1b 

入力の変換 
 ANY̲ELEMENT TO̲INT 

+-----------+ 

 ANY̲ELEMENTARY -- | 

TO̲INT | ---INT 

+-----------+ 

2a a) 

データ型指定ファンクション: 
 ADD̲INT 

+-----------+ 

| ADD̲INT | 

INT -- | 

| -- INT 

INT -- | 

. -- | 

. -- | 

INT -- | 

+-----------+ 

2b a) 

データ型変換 
 WORD̲TO̲INT 

+-----------+ 

WORD -- |WORD̲TO̲INT| ---INT 

+-----------+ 

注記 標準以外のファンクション又はファンクションブロック型の多重定義は,この規格の適用範囲外である。 
注a) 項目No.2をサポートする場合,実装者は,その実装においてどのファンクションが多重定義で,どのファンク

ションがデータ型指定であるのかの表を提供しなければならない。 

例1 データ型指定ファンクション及び多重定義ファンクション 

VAR 

  A: INT ; 

  B: INT ; 

  C: INT ; 

END̲VAR 

+ ---- + 

A -- | + | -- C 

B -- | 

+ ---- + 

C :=A+B; 

注記1 上記例では,データ型変換は必要なし。 

71 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

VAR 

  A: INT ; 

  B: REAL ; 

  C: REAL; 

END̲VAR 

+----------- + + -- + 

A -- |INT̲TO̲REAL | -- | + | -- C 

+----------- + | | 

B ----------------- | | 

+ -- + 

C :=INT̲TO̲REAL(A)+B; 

+ ------- + + ---+ 

A -- |TO̲REAL | -- | ADD| -- C 

+ ------- + | 

B --------------| 

+ --- + 

C :=TO̲REAL(A) + B; 

VAR 

  A: INT ; 

  B: INT ; 

  C: REAL; 

 END̲VAR 

+ -- + +----------- + 

A -- | + | -- |INT̲TO̲REAL | -- C 

B -- | | + -----------+ 

+ -- + 

C :=INT̲TO̲REAL(A+B); 

+--- + + ------- + 

A -- |ADD | -- |TO̲REAL | -- C 

B -- | 

| + ------- + 

+--- + 

C :=TO̲REAL(A+B); 

a) データ型宣言(ST) 

b) 用法(FBD及びST) 

例2 データ型指定ファンクションによる暗黙的及び明示的入力データ型変換 

VAR 

  A: INT ; 

  B: INT ; 

  C: INT ; 

END̲VAR 

+ ------- + 

A -- | ADD̲INT | -- C 

B -- | 

+ ------- + 

C :=ADD̲INT(A, B); 

注記2 上記例では,データ型変換は必要なし。 

VAR 

  A: INT; 

  B: REAL; 

  C: REAL; 

END̲VAR 

明示的なデータ型変換 

+----------- + +-------- + 

A -- |INT̲TO̲REAL | -- |ADD̲REAL | -- C 

+----------- + | 

B------------------ | 

+-------- + 

C :=ADD̲REAL(INT̲TO̲REAL(A), B); 

VAR 

  A: INT; 

  B: REAL; 

  C: REAL; 

END̲VAR 

暗黙的なデータ型変換 

+---------+ 

A --------------| ADD̲REAL | -- C 

B --------------| 

+---------+ 

C :=ADD̲REAL(A,B); 

72 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

VAR 

  A: INT; 

  B: INT; 

  C: REAL; 

END̲VAR 

明示的なデータ型変換 

+ ------- + +----------- + 

A -- |ADD̲INT | -- |INT̲TO̲REAL | -- C 

| +----------- + 

B -- | 

+ -------| 

C :=INT̲TO̲REAL(ADD̲INT(A, B)); 

VAR 

  A: INT; 

  B: INT; 

  C: REAL; 

END̲VAR 

暗黙的なデータ型変換 

+ ------- + 

A -- | ADD̲INT | -- C 

B -- | 

+ -------| 

C :=ADD̲INT(A, B); 

a) データ型宣言(ST) 

b) 用法(FBD及びST) 

6.6.2.5 

標準ファンクション 

6.6.2.5.1 

概要 

この箇条で拡張可能と記している標準ファンクションでは,二つ以上の個数の入力に対して,指示され

た演算を適用することができる。例えば,拡張可能な加算では,全ての入力の和を出力しなければならな

い。拡張可能なファンクションに対する最大入力数は,実装に依存する。拡張可能なファンクションの正

式呼出し中で有効な実際の入力数は,変数名の順番で最大番号が付いている正式入力パラメータ名で決定

する。 

例1 文  X :=ADD(Y1, Y2, Y3); 

は次の文に等しい。X :=ADD(IN1 :=Y1, IN2 :=Y2, IN3 :=Y3); 

例2 文 I :=MUX̲INT(K:=3, IN0 :=1, IN2 :=2, IN4 :=3); 

は次の文に等しい。I :=0; 

6.6.2.5.2 

データ型変換ファンクション 

表22に示すように,データ型変換ファンクションは,*̲TO̲**の型でなければならない。例えば,

INT̲TO̲REALのように,“*”は入力変数INの型,“**”は出力変数OUTの型である。データ型変換の

精度への影響,及びデータ型変換演算実行中に起き得るエラーの種類は,実装に依存する。 

background image

73 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表22−データ型変換ファンクション 

No. 

説明 

グラフィック表現 

例 

1a 

データ型変換 
input̲TO̲output 

+ ---------- + 

B -- | *̲TO̲** | -- A 

+ ---------- + 

  (*) -入力データ型,例えば,INTなど 
 (**) -出力データ型,例えば,REALなど 

A :=INT̲TO̲REAL(B); 

1b a), b), e) 多重定義変換 

TO̲output 

+ ---------- + 

B -- | TO̲** | -- A 

+ ---------- + 

-入力データ型,例えば,INTなど 

 (**) -出力データ型,例えば,REALなど 

A :=TO̲REAL(B); 

2a c) 

“旧”多重定義小数切捨て 
TRUNC 

+ ---------- + 

ANY̲REAL -- | TRUNC | -- ANY̲INT 
 

+ ---------- + 

非推奨 

2b c) 

データ型指定小数切捨て 
input̲TRUNC̲output 

+ ---------- + 

ANY̲REAL -- | *̲TRUNC̲** | -- ANY̲INT 
 

+ ---------- + 

A :=REAL̲TRUNC̲INT(B); 

2c c) 

多重定義小数切捨て 
TRUNC̲output 

+ ---------- + 

ANY̲REAL -- | TRUNC̲** | -- ANY̲INT 
 

+ ---------- + 

A :=TRUNC̲INT(B); 

3a d) 

データ型指定 
input̲BCD̲TO̲output 

+ ---------- + 

* --|*̲BCD̲TO̲**| -- ** 

+ ---------- + 

A :=WORD̲BCD̲TO̲INT(B)

3b d) 

多重定義 
BCD̲TO̲output 

+ ---------- + 

* -- | BCD̲TO̲** | -- ** 

+ ---------- + 

A :=BCD̲TO̲INT(B); 

4a d) 

データ型指定 
input̲TO̲BCD̲output 

+ ---------- + 

* --|*̲TO̲BCD̲**| -- ** 

+ ---------- + 

A :=INT̲TO̲BCD̲WORD(B)

4b d) 

多重定義 
TO̲BCD̲output 

+ ---------- + 

* -- | TO̲BCD̲** | -- ** 

+ ---------- + 

A :=TO̲BCD̲WORD(B); 

注記 用例は,ST言語によっている。 
注a) この表の項目No.1に対する順守表には,サポートする特定のデータ型変換のリストを含まなければならない。

また,それぞれの変換の実行の作用についても記述する必要がある。 

b) REAL型又はLREAL型からSINT,INT,DINT又はLINT型への変換では,ISO/IEC/IEEE 60559の変換方法に

従って丸めなければならない。それによると,二つの整数に等しく近い場合,その変換結果は最も近い偶数整
数にならなければならない。次に,例を示す。 

REAL̲TO̲INT(1.6)は2に等価である。 
REAL̲TO̲INT(−1.6)は−2に等価である。 
REAL̲TO̲INT(1.5)は2に等価である。 
REAL̲TO̲INT(−1.5)は−2に等価である。 
REAL̲TO̲INT(1.4)は1に等価である。 
REAL̲TO̲INT(−1.4)は−1に等価である。 
REAL̲TO̲INT(2.5)は2に等価である。 
REAL̲TO̲INT(−2.5)は−2に等価である。 

background image

74 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表22−データ型変換ファンクション(続き) 

注c) TRUNC̲*ファンクションは,REAL型,LREAL型の切捨てのために使用され,整数をもたらさなければならな

い。例えば, 

TRUNC̲INT(1.6)はINT#1に等価である。 
TRUNC̲INT(−1.6)はINT#−1に等価である。 
TRUNC̲SINT(1.4)はSINT#1に等価である。 
TRUNC̲SINT(−1.4)はSINT#−1に等価である。 

d) 変換ファンクション*̲BCD̲TO̲**及び*̲TO̲BCD̲**は,BYTE,WORD,DWORD及びLWORD型の変数と,USINT,

UINT,UDINT及びULINT型の変数との間の変換を実行しなければならない(*及び**は,それぞれの型を示
す。)。このとき,対応するビット列変数のデータは,BCDフォーマットでエンコードしているとみなす。例え
ば,USINT̲TO̲BCD̲BYTE(25)の値は,2#0010̲0101になる。また, 
WORD̲BCD̲TO̲UINT(2#0011̲0110̲1001)は,369になる。 

e) データ型変換ファンクションの入力又は出力の型が,STRING,WSTRING型である場合,文字列データの外部

表現は,6.3.3に規定したとおり,6.1.1に規定する文字セットに合致しなければならない。 

6.6.2.5.3 

数値データ型のデータ型変換 

数値データ型の変換には,次の規則を用いる。 

a) 変換元データ型は,その値を保持しながら同じデータ型カテゴリの最大データ型に拡張する。 

b) 次に,変換先データ型が属するデータ型カテゴリの最大データ型に結果を変換する。 

c) その後,結果を変換先データ型に変換する。 

変換元変数の値が,例えば,値範囲が小さすぎるなどのように,変換先データ型に合致しない場合,

変換先変数の値は実装固有の値である。 

注記 変換ファンクションの実行は,より効率的な手順を用いてもよい。 

例 

X :=REAL̲TO̲INT (70̲000.4) 

1. REAL値(70̲000.4)をLREAL値(70̲000.400̲000..)に変換 

2. LREAL値(70̲000.4000̲000..)をLINT値(70̲000)に変換。ここで整数に丸める。 

3. LINT値(70̲000)をINT値に変換。ここでは,INTが最大32̲767まで保持できるので,実装

固有の値になる。 

変換先データ型がこの値を保持できれば,これは変換元変数と同じ値を維持する変換先データ型の変数

になる。浮動小数点に変換する場合,通常の丸め規則を適用する。すなわち,最も近い整数に丸める,こ

れが不明確であれば,最も近い偶数整数に丸める。 

変換元データ型として用いられるデータ型BOOLは,0及び1の値だけを保持できる符号なし整数デー

タ型のように扱う。 

変換ファンクションの詳細は,表23による。 

表23−数値データ型のデータ型変換 

No. 

変換ファンクション 

変換詳細 

LREAL ̲TO̲ REAL 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ LINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ DINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ INT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ SINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ ULINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ UDINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

background image

75 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表23−数値データ型のデータ型変換(続き) 

No. 

変換ファンクション 

変換詳細 

LREAL ̲TO̲ UINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

LREAL ̲TO̲ USINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

10 

REAL ̲TO̲ LREAL 

値維持変換 

11 

REAL ̲TO̲ LINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

12 

REAL ̲TO̲ DINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

13 

REAL ̲TO̲ INT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

14 

REAL ̲TO̲ SINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

15 

REAL ̲TO̲ ULINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

16 

REAL ̲TO̲ UDINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

17 

REAL ̲TO̲ UINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

18 

REAL ̲TO̲ USINT 

丸めによる変換,値範囲エラーは実装固有の結果になる。 

19 

LINT ̲TO̲ LREAL 

精度低下含みの変換 

20 

LINT ̲TO̲ REAL 

精度低下含みの変換 

21 

LINT ̲TO̲ DINT 

値範囲エラーは実装固有の結果になる。 

22 

LINT ̲TO̲ INT 

値範囲エラーは実装固有の結果になる。 

23 

LINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

24 

LINT ̲TO̲ ULINT 

値範囲エラーは実装固有の結果になる。 

25 

LINT ̲TO̲ UDINT 

値範囲エラーは実装固有の結果になる。 

26 

LINT ̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

27 

LINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

28 

DINT ̲TO̲ LREAL 

値維持変換 

29 

DINT ̲TO̲ REAL 

精度低下含みの変換 

30 

DINT ̲TO̲ LINT 

値維持変換 

31 

DINT ̲TO̲ INT 

値範囲エラーは実装固有の結果になる。 

32 

DINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

33 

DINT ̲TO̲ ULINT 

値範囲エラーは実装固有の結果になる。 

34 

DINT ̲TO̲ UDINT 

値範囲エラーは実装固有の結果になる。 

35 

DINT ̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

36 

DINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

37 

INT 

̲TO̲ LREAL 

値維持変換 

38 

INT 

̲TO̲ REAL 

値維持変換 

39 

INT 

̲TO̲ LIN T 

値維持変換 

40 

INT 

̲TO̲ DINT 

値維持変換 

41 

INT 

̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

42 

INT 

̲TO̲ ULINT 

値範囲エラーは実装固有の結果になる。 

43 

INT 

̲TO̲ UDINT 

値範囲エラーは実装固有の結果になる。 

44 

INT 

̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

45 

INT 

̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

46 

SINT ̲TO̲ LREAL 

値維持変換 

47 

SINT ̲TO̲ REAL 

値維持変換 

48 

SINT ̲TO̲ LINT 

値維持変換 

49 

SINT ̲TO̲ DINT 

値維持変換 

50 

SINT ̲TO̲ INT 

値維持変換 

51 

SINT ̲TO̲ ULINT 

値範囲エラーは実装固有の結果になる。 

52 

SINT ̲TO̲ UDINT 

値範囲エラーは実装固有の結果になる。 

53 

SINT ̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

background image

76 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表23−数値データ型のデータ型変換(続き) 

No. 

変換ファンクション 

変換詳細 

54 

SINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

55 

ULINT ̲TO̲ LREAL 

精度低下含みの変換 

56 

ULINT ̲TO̲ REAL 

精度低下含みの変換 

57 

ULINT ̲TO̲ LINT 

値範囲エラーは実装固有の結果になる。 

58 

ULINT ̲TO̲ DINT 

値範囲エラーは実装固有の結果になる。 

59 

ULINT ̲TO̲ INT 

値範囲エラーは実装固有の結果になる。 

60 

ULINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

61 

ULINT ̲TO̲ UDINT 

値範囲エラーは実装固有の結果になる。 

62 

ULINT ̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

63 

ULINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

64 

UDINT ̲TO̲ LREAL 

値維持変換 

65 

UDINT ̲TO̲ REAL 

精度低下含みの変換 

66 

UDINT ̲TO̲ LINT 

値維持変換 

67 

UDINT ̲TO̲ DINT 

値範囲エラーは実装固有の結果になる。 

68 

UDINT ̲TO̲ INT 

値範囲エラーは実装固有の結果になる。 

69 

UDINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

70 

UDINT ̲TO̲ ULINT 

値維持変換 

71 

UDINT ̲TO̲ UINT 

値範囲エラーは実装固有の結果になる。 

72 

UDINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

73 

UINT ̲TO̲ LREAL 

値維持変換 

74 

UINT ̲TO̲ REAL 

値維持変換 

75 

UINT ̲TO̲ LINT 

値維持変換 

76 

UINT ̲TO̲ DINT 

値維持変換 

77 

UINT ̲TO̲ INT 

値範囲エラーは実装固有の結果になる。 

78 

UINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

79 

UINT ̲TO̲ ULINT 

値維持変換 

80 

UINT ̲TO̲ UDINT 

値維持変換 

81 

UINT ̲TO̲ USINT 

値範囲エラーは実装固有の結果になる。 

82 

USINT ̲TO̲ LREAL 

値維持変換 

83 

USINT ̲TO̲ REAL 

値維持変換 

84 

USINT ̲TO̲ LINT 

値維持変換 

85 

USINT ̲TO̲ DINT 

値維持変換 

86 

USINT ̲TO̲ INT 

値維持変換 

87 

USINT ̲TO̲ SINT 

値範囲エラーは実装固有の結果になる。 

88 

USINT ̲TO̲ ULINT 

値維持変換 

89 

USINT ̲TO̲ UDINT 

値維持変換 

90 

USINT ̲TO̲ UINT 

値維持変換 

6.6.2.5.4 

ビットデータ型のデータ型変換 

このデータ型変換は,次の規則を用いる。 

a) データ型変換は,バイナリ転写として行う。 

b) 変換元データ型が変換先データ型より小さい場合,変換元の値は変換先の変数の右端のバイトに格納

し,左端のバイトをゼロにセットする。 

c) 変換元データ型が変換先データ型より大きい場合,変換元の変数の右端のバイトだけを変換先データ

型に格納する。 

background image

77 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例 

左バイト 

右バイト 

変換元: 

変換先: 

ビットデータ型変換の詳細は,表24による。 

表24−ビットデータ型のデータ型変換 

No. 

変換ファンクション 

変換詳細 

LWORD ̲TO̲ DWORD 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ BYTE 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ BOOL 

右端のビットを変換先へバイナリ転写 

DWORD ̲TO̲ LWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

DWORD ̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

DWORD ̲TO̲ BYTE 

右端の数バイトを変換先へバイナリ転写 

DWORD ̲TO̲ BOOL 

右端のビットを変換先へバイナリ転写 

WORD 

̲TO̲ LWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

10 

WORD 

̲TO̲ DWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

11 

WORD 

̲TO̲ BYTE 

右端の数バイトを変換先へバイナリ転写 

12 

WORD 

̲TO̲ BOOL 

右端のビットを変換先へバイナリ転写 

13 

BYTE 

̲TO̲ LWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

14 

BYTE 

̲TO̲ DWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

15 

BYTE 

̲TO̲ WORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

16 

BYTE 

̲TO̲ BOOL 

右端のビットを変換先へバイナリ転写 

17 

BYTE 

̲TO̲ CHAR 

バイナリ転写 

18 

BOOL 

̲TO̲ LWORD 

値は16#0又は16#1になる。 

19 

BOOL 

̲TO̲ DWORD 

値は16#0又は16#1になる。 

20 

BOOL 

̲TO̲ WORD 

値は16#0又は16#1になる。 

21 

BOOL 

̲TO̲ BYTE 

値は16#0又は16#1になる。 

22 

CHAR 

̲TO̲ BYTE 

バイナリ転写 

23 

CHAR 

̲TO̲ WORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

24 

CHAR 

̲TO̲ DWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

25 

CHAR 

̲TO̲ LWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

26 

WCHAR ̲TO̲ WORD 

バイナリ転写 

27 

WCHAR ̲TO̲ DWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

28 

WCHAR ̲TO̲ LWORD 

変換先の右端の数バイトへバイナリ転写,変換先の左端の数バイトをゼロに
セットする。 

background image

78 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.2.5.5 

ビットの数値データ型へのデータ型変換 

これらの型変換は,次の規則を用いる。 

a) データ型変換は,バイナリ転写として行う。 

b) 変換元データ型が変換先データ型より小さい場合,変換元の値は変換先変数の右端のバイトに格納さ

れ,左端のバイトをゼロにセットする。 

例1 X: SINT :=18; W: WORD; W=SINT̲TO̲WORD(X);するとW は16#0012になる。 

c) 変換元データ型が変換先データ型より大きい場合,変換元変数の右端のバイトだけが変換先データ型

を格納する。 

例2 W: WORD: =16#1234; X: SINT; X :=W;するとXは54 (=16#34)になる。 

変換ファンクションの詳細は,表25による。 

表25−ビット及び数値データ型のデータ型変換 

No. 

変換ファンクション 

変換詳細 

LWORD ̲TO̲ LREAL 

バイナリ転写 

DWORD ̲TO̲ REAL 

バイナリ転写 

LWORD ̲TO̲ LINT 

バイナリ転写 

LWORD ̲TO̲ DINT 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ INT 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ SINT 

右端の1バイトを変換先へバイナリ転写 

LWORD ̲TO̲ ULINT 

バイナリ転写 

LWORD ̲TO̲ UDINT 

右端の数バイトを変換先へバイナリ転写 

LWORD ̲TO̲ UINT 

右端の数バイトを変換先へバイナリ転写 

10 

LWORD ̲TO̲ USINT 

右端の1バイトを変換先へバイナリ転写 

11 

DWORD ̲TO̲ LINT 

変換先の数バイトへバイナリ転写 

12 

DWORD ̲TO̲ DINT 

バイナリ転写 

13 

DWORD ̲TO̲ INT 

右端の数バイトを変換先へバイナリ転写 

14 

DWORD ̲TO̲ SINT 

右端の1バイトを変換先へバイナリ転写 

15 

DWORD ̲TO̲ ULINT 

変換先の数バイトへバイナリ転写 

16 

DWORD ̲TO̲ UDINT 

バイナリ転写 

17 

DWORD ̲TO̲ UINT 

右端の数バイトを変換先へバイナリ転写 

18 

DWORD ̲TO̲ USINT 

右端の1バイトを変換先へバイナリ転写 

19 

WORD 

̲TO̲ LINT 

変換先の数バイトへバイナリ転写 

20 

WORD 

̲TO̲ DINT 

変換先の数バイトへバイナリ転写 

21 

WORD 

̲TO̲ INT 

バイナリ転写 

22 

WORD 

̲TO̲ SINT 

右端の1バイトを変換先へバイナリ転写 

23 

WORD 

̲TO̲ ULINT 

変換先の数バイトへバイナリ転写 

24 

WORD 

̲TO̲ UDINT 

変換先の数バイトへバイナリ転写 

25 

WORD 

̲TO̲ UINT 

バイナリ転写 

26 

WORD 

̲TO̲ USINT 

右端の1バイトを変換先へバイナリ転写 

27 

BYTE 

̲TO̲ LINT 

変換先の数バイトへバイナリ転写 

28 

BYTE 

̲TO̲ DINT 

変換先の数バイトへバイナリ転写 

29 

BYTE 

̲TO̲ INT 

変換先の数バイトへバイナリ転写 

30 

BYTE 

̲TO̲ SINT 

バイナリ転写 

31 

BYTE 

̲TO̲ ULINT 

変換先の数バイトへバイナリ転写 

32 

BYTE 

̲TO̲ UDINT 

変換先の数バイトへバイナリ転写 

33 

BYTE 

̲TO̲ UINT 

変換先の数バイトへバイナリ転写 

background image

79 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表25−ビット及び数値データ型のデータ型変換(続き) 

No. 

変換ファンクション 

変換詳細 

34 

BYTE 

̲TO̲ USINT 

バイナリ転写 

35 

BOOL 

̲TO̲ LINT 

値は0又は1になる 

36 

BOOL 

̲TO̲ DINT 

値は0又は1になる 

37 

BOOL 

̲TO̲ INT 

値は0又は1になる 

38 

BOOL 

̲TO̲ SINT 

値は0又は1になる 

39 

BOOL 

̲TO̲ ULINT 

値は0又は1になる 

40 

BOOL 

̲TO̲ UDINT 

値は0又は1になる 

41 

BOOL 

̲TO̲ UINT 

値は0又は1になる 

42 

BOOL 

̲TO̲ USINT 

値は0又は1になる 

43 

LREAL ̲TO̲ LWORD 

バイナリ転写 

44 

REAL 

̲TO̲ DWORD 

バイナリ転写 

45 

LINT 

̲TO̲ LWORD 

バイナリ転写 

46 

LINT 

̲TO̲ DWORD 

右端の数バイトを変換先へバイナリ転写 

47 

LINT 

̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

48 

LINT 

̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

49 

DINT 

̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは0 

50 

DINT 

̲TO̲ DWORD 

バイナリ転写 

51 

DINT 

̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

52 

DINT 

̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

53 

INT 

̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは 0 

54 

INT 

̲TO̲ DWORD 

変換先の数バイトへバイナリ転写,残りは 0 

55 

INT 

̲TO̲ WORD 

バイナリ転写 

56 

INT 

̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

57 

SINT 

̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは 0 

58 

SINT 

̲TO̲ DWORD 

変換先の数バイトへバイナリ転写,残りは 0 

59 

SINT 

̲TO̲ WORD 

バイナリ転写 

60 

SINT 

̲TO̲ BYTE 

バイナリ転写 

61 

ULINT ̲TO̲ LWORD 

バイナリ転写 

62 

ULINT ̲TO̲ DWORD 

右端の数バイトを変換先へバイナリ転写 

63 

ULINT ̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

64 

ULINT ̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

65 

UDINT ̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは 0 

66 

UDINT ̲TO̲ DWORD 

バイナリ転写 

67 

UDINT ̲TO̲ WORD 

右端の数バイトを変換先へバイナリ転写 

68 

UDINT ̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

69 

UINT 

̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは 0 

70 

UINT 

̲TO̲ DWORD 

変換先の数バイトへバイナリ転写,残りは 0 

71 

UINT 

̲TO̲ WORD 

バイナリ転写 

72 

UINT 

̲TO̲ BYTE 

右端の1バイトを変換先へバイナリ転写 

73 

USINT ̲TO̲ LWORD 

変換先の数バイトへバイナリ転写,残りは 0 

74 

USINT ̲TO̲ DWORD 

変換先の数バイトへバイナリ転写,残りは 0 

75 

USINT ̲TO̲ WORD 

バイナリ転写 

76 

USINT ̲TO̲ BYTE 

バイナリ転写 

background image

80 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.2.5.6 

日付及び時刻のデータ型変換 

日付及び時刻のデータ型変換は,表26による。 

表26−日付及び時刻のデータ型変換 

No. 

変換ファンクション 

変換詳細 

LTIME ̲TO̲ TIME 

値範囲エラーは実装固有の結果になり,起こり得る精度低下が起こってもよ
い。 

TIME 

̲TO̲ LTIME 

値範囲エラーは実装固有の結果になり,起こり得る精度低下が起こってもよ
い。 

LDT 

̲TO̲ DT 

値範囲エラーは実装固有の結果になり,起こり得る精度低下が起こってもよ
い。 

LDT 

̲TO̲ DATE 

収納されている日付だけを変換する。値範囲エラーは実装固有の結果になる。 

LDT 

̲TO̲ LTOD 

収納されている時刻だけを変換する。 

LDT 

̲TO̲ TOD 

収納されている時刻だけを変換する。起こり得る精度低下が起こってもよい。 

DT 

̲TO̲ LDT 

値範囲エラーは実装固有の結果になり,起こり得る精度低下が起こってもよ
い。 

DT 

̲TO̲ DATE 

収納されている日付だけを変換する。値範囲エラーは実装固有の結果になる。 

DT 

̲TO̲ LTOD 

収納されている時刻だけを変換する。値範囲エラーは実装固有の結果になる。 

10 

DT 

̲TO̲ TOD 

収納されている時刻だけを変換する。値範囲エラーは実装固有の結果になる。 

11 

LTOD 

̲TO̲ TOD 

値保持変換 

12 

TOD 

̲TO̲ LTOD 

値範囲エラーは実装固有の結果になり,起こり得る精度低下が起こってもよ
い。 

6.6.2.5.7 

文字型のデータ型変換 

文字型のデータ型変換は,表27による。 

表27−文字型のデータ型変換 

No. 

変換ファンクション 

変換詳細 

WSTRING ̲TO̲ STRING 

データ型STRINGで実装によってサポートされた文字を変換する。他の文字
は実装依存で変換する。 

WSTRING ̲TO̲ WCHAR 

文字列の最初の文字を転送する。すなわち,文字列が空の場合,変換先の変
数は不定である。 

STRING 

̲TO̲ WSTRING 実装によって定義された文字列の文字を,適切なJIS X 0221(UTF-16)文字に

変換する。 

STRING 

̲TO̲ CHAR 

文字列の最初の文字を転送する。すなわち,文字列が空の場合,変換先の変
数は不定である。 

WCHAR 

̲TO̲ WSTRING 一文字の実際のサイズ分の文字列を与える。 

WCHAR 

̲TO̲ CHAR 

データ型CHARで実装によってサポートされた文字を変換する。他の文字は実
装によって指定する方法で変換する。 

CHAR 

̲TO̲ STRING 

一文字の実際のサイズ分の文字列を与える。 

CHAR 

̲TO̲ WCHAR 

実装によって定義された文字列の文字を,適切なJIS X 0221(UTF-16)文字に
変換する。 

6.6.2.5.8 

数値演算ファンクション及び算術演算ファンクション 

一つの数値変数に対するファンクションの標準のグラフィック表現,ファンクション名,入力,出力変

数の型,及び機能仕様は,表28に規定するとおりでなければならない。これらのファンクションは,そ

こで規定する総称型に対して多重定義されなければならない。また,データ型指定されてもよい。これら

のファンクションでは,入力及び出力の型は同一でなければならない。 

background image

81 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

二つ以上の変数に対する算術演算ファンクションの標準のグラフィック表現,ファンクション名,記号

及び仕様は,表29に示しているとおりでなければならない。これらのファンクションは,全ての数値型

に対して多重定義されなければならない。また,データ型指定されてもよい。 

数値演算ファンクションの精度は実装者が説明しなければならない。 

これらのファンクションのいずれかの演算結果が,ファンクション出力のデータ型で定まる値の範囲を

超えた場合,又は0除算が行われようとした場合はエラーである。 

表28−数値演算ファンクション及び算術演算ファンクション 

No. 

説明(ファンクション名) 

I/O型 

解説 

グラフィック表現 
 

+ ----- + 

*-- | ** | -- * 

+ ----- + 

(*) -入出力(I/O)のデータ型 
(**) -ファンクション名 

ST言語の用例 
A :=SIN(B); 
(ST言語) 

一般ファンクション 

ABS(x) 

ANY̲NUM 

絶対値 

SQRT(x) 

ANY̲REAL 

平方根 

対数ファンクション 

LN(x) 

ANY̲REAL 

自然対数 

LOG(x) 

ANY̲REAL 

常用対数 

EXP(x) 

ANY̲REAL 

自然指数関数 

三角関数ファンクション 

SIN(x) 

ANY̲REAL 

ラジアン値を入力とする正弦 

COS(x) 

ANY̲REAL 

ラジアン値を入力とする余弦 

TAN(x) 

ANY̲REAL 

ラジアン値を入力とする正接 

ASIN(x) 

ANY̲REAL 

逆正弦(主値) 

10 

ACOS(x) 

ANY̲REAL 

逆余弦(主値) 

11 

ATAN(x) 

ANY̲REAL 

逆正接(主値) 

12 

ATAN2(y,x) 
 

+ ----- + 

| ATAN2 | 

ANY̲REAL -- | Y 

| -- ANY̲REAL 

ANY̲REAL -- | X 

+ ----- + 

ANY̲REAL 

面のプラスx軸とその上の座標(x,y)によって
与えられる点の間の角度。角度は反時計回り角
(上半面,y>0)はプラスで,時計回り角(下半
面,y<0)ではマイナスである。 

background image

82 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表29−算術演算ファンクション 

No. 

a), b) 

説明 

名前 

記号 

(演算子) 

解説 

グラフィック表現 
 

+ ----- + 

 ANY̲NUM -- | *** | -- ANY̲NUM 
 ANY̲NUM -- | 

-- | 

-- | 

 ANY̲NUM -- | 

+ ----- + 

 (***) -名前又は記号 

STの用例 
ファンクション呼出しとして 
 A :=ADD(B, C, D); 
又は 
演算子(記号)として 
 A :=B + C + D; 

拡張可能な算術演算ファンクション 

1 c) 

加算 

ADD 

+ 

OUT :=IN1+IN2+...+ INn 

乗算 

MUL 

OUT :=IN1 * IN2 *... * INn 

拡張できない算術演算ファンクション 

3 c) 

減算 

SUB 

− 

OUT :=IN1−IN2 

4 d) 

除算 

DIV 

OUT :=IN1 / IN2 

5 e) 

剰余 

MOD 

OUT :=IN1 modulo IN2 

6 f) 

べき乗 

EXPT 

** 

OUT :=IN1IN2 

7 g) 

代入 

MOVE 

:= 

OUT :=IN 

注記1 空でない記号列の項目は,テキスト言語の演算子として使用するのに適している。 
注記2 記法IN1,IN2,...,INnは,上から下の順の入力を指している。OUTは,出力を示している。 
注記3 用例及び解説は,ST言語による。 
注a) ファンクションの名前表現をサポートする場合,規格順守対照表では,添字“n”で示さなければならない。 

例えば,“1n”は,記法“ADD”を表す(1nはNo.1のNameを意味し名前列を示す。)。 

b) ファンクションの記号表現をサポートする場合,規格順守対照表では,添字“s”で示さなければならない。 

例えば,“1s”は,記法“+”を表す(1sはNo.1のSymbolを意味し記号列を示す。)。 

c) これらのファンクションの入力及び出力の総称型は,ANY̲MAGNITUDEである。 

d) 整数の除算結果は,その型の数を0方向に切り捨てた整数でなければならない。 

例えば,7/3 = 2,(−7)/3=−2となる。 

e) このファンクションでは,IN1及びIN2は,総称型ANY̲INTでなければならない。このMODファンクションの

演算結果は,ST言語で書かれた次の文と等価でなければならない。 

IF (IN2=0) 
  THEN OUT:=0; 
  ELSE OUT:=IN1−(IN1/IN2)*IN2; 
END̲IF 

f) このファンクションでは,IN1はANY̲REAL型,IN2はANY̲NUM型でなければならない。出力はIN1と同じ型

でなければならない。 

g) MOVEファンクションは,ただ一つのANY型の入力IN及び一つのANY型の出力OUTをもつ。 

6.6.2.5.9 

ビット列ファンクション及びビットごとのブールファンクション 

一つのビット列変数に対するシフトファンクションの標準のグラフィック表現,ファンクション名及び

記述は,表30に規定するとおりでなければならない。これらのファンクションは,全てのビット列型に

対して多重定義しなければならない。また,データ型指定されてもよい。 

ビットごとのブール演算ファンクションの標準のグラフィック表現,ファンクション名,記号及び仕様

は,表31に規定しているとおりでなければならない。これらのファンクションは,NOTを除き拡張可能

でなければならず,全てのビット列型に対して多重定義されなければならず,また,データ型指定されて

background image

83 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

もよい。 

表30−ビットシフトファンクション 

No. 

説明 

名前 

解説 

グラフィック表現 

用例 a) 

+ ---- + 

| *** | 

ANY̲BIT -- | IN | -- ANY̲BIT 
ANY̲INT -- | N 

+ ---- + 

 (***) -ファンクション名 

A :=SHL(IN:=B, N:=5); 
(ST言語) 

左シフト 

SHL 

OUT :=INをNビット左にシフトし,右は0で埋めた値。 

右シフト 

SHR 

OUT :=INをNビット右にシフトし,左は0で埋めた値。 

左ローテート 

ROL 

OUT :=INをNビット左にローテートした値。 

右ローテート 

ROR 

OUT :=INをNビット右にローテートした値。 

注記1 表記OUTは,ファンクション出力を指す。 

例 

IN :=2#0001̲1001 of type BYTE, N=3 
SHL(IN, 3)=2#1100̲1000 
SHR(IN, 3)=2#0000̲0011 
ROL(IN, 3)=2#1100̲1000 
ROR(IN, 3)=2#0010̲0011 

注記2 型BOOL(1ビット)のINは,意味をなさない。 
注a) 

Nの値が0未満の場合,エラーになる。 

表31−ビットごとのブールファンクション 

No.a), b) 

説明 

名前 

記号 

解説c) 

グラフィック表現 
 

+ ----- + 

 ANY̲BIT -- | *** | -- ANY̲BIT 
 ANY̲BIT -- | 

-- | 

-- | 

 ANY̲BIT -- | 

+ ----- + 

 (***) -名前又は記号 

用例d) 

A :=AND(B, C, D); 
 

又は 

A :=B & C & D; 

論理積 

AND 

& e) 

OUT :=IN1 & IN2 &... & INn 

論理和 

OR 

>=1 f) 

OUT :=IN1 OR IN2 OR... OR INn 

排他的論理和 

XOR 

=2k+1 f)  OUT :=IN1 XOR IN2 XOR... XOR INn 

否定 

NOT 

OUT :=NOT IN1 g) 

注a) ファンクションの名前表現をサポートする場合,規格順守対照表では,添字“n”で示さなければならない。例

えば,“1n”は,記法“AND”を表す(1nはNo.1のNameを意味し名前列を示す。)。 

b) ファンクションの記号表現をサポートする場合,規格順守対照表では,添字“s”で示さなければならない。例

えば,“1s”は,記法“&”を表す(1sはNo.1のSymbolを意味し記号列を示す。)。 

c) 記法IN1,IN2,...,INnは,上から下の順の入力を指している。OUTは,出力を指している。 

d) 用例及び説明は,ST言語による。 

e) この記号は,表68及び表71に示すようにテキスト言語の演算子としての使用に適している。 

f) この記号は,テキスト言語の演算子としての使用に適していない。 

g) ブール型記号のグラフィック表現の否定も遂行される。 

background image

84 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.2.5.10 選択ファンクション及び比較ファンクション 

選択ファンクション及び比較ファンクションは,全てのデータ型に対して多重定義されなければならな

い。選択ファンクションの標準のグラフィック表現,ファンクション名及び記述は,表32に示すとおり

とする。 

比較ファンクションの標準のグラフィック表現,ファンクション名,記号及び内容は,表33に規定する

とおりとする。全ての比較ファンクション(NEを除く。)は,拡張可能でなければならない。 

ビット列データの比較は,最も左側のビットから最も右側のビットまでビットごとにされなければなら

ず,短いビット列を,それより長いビット列と比較するときは,左側が0で埋められていると仮定して行

う。すなわち,ビット列変数の比較は,符号なし整数変数の比較と同じ結果にならなければならない。 

表32−選択ファンクション 

No. 

説明 

名前 

グラフィック表現 

解説/例 

代入a), d) 

MOVE  

+ ----- + 

| MOVE | 

ANY -- | IN 

| - ANY 

+ ----- + 

OUT :=IN 

2入力マル
チプレクサ

d) 

SEL 

+ ----- + 

| SEL | 

BOOL -- | G 

| - ANY 

ANY -- | IN0 | 

ANY -- | IN1 | 

+ ----- + 

OUT :=IN0 if G= 0 
OUT :=IN1 if G= 1 
例 
A := SEL (G   :=0, 
 

IN0 :=X, 

IN1 :=5); 

拡張可能最
大値ファン
クション 

MAX 

+ ----- + 

| MAX | 

ANY̲ELEMENTARY - | IN1 | - ANY̲ELEMENTARY 
 

: - | 

ANY̲ELEMENTARY - | INn | 
 

+ ----- + 

OUT := 
MAX(IN1, IN2, ..., INn); 
例 
A :=MAX(B, C , D); 

拡張可能最
小値ファン
クション 

MIN 

+ ----- + 

| MIN | 

ANY̲ELEMENTARY - |IN1 | - ANY̲ELEMENTARY 
 

: -- | 

ANY̲ELEMENTARY - |INn | 
 

+ ----- + 

OUT := 
MIN (IN1, IN2,..., INn) 
例 

A :=MIN(B, C, D); 

リミッタ 

LIMIT  

+ ----- + 

| LIMIT | 

ANY̲ELEMENTARY - |MN 

| - ANY̲ELEMENTARY 

ANY̲ELEMENTARY - |IN 

ANY̲ELEMENTARY - |MX 

+ ----- + 

OUT :=MIN 
(MAX(IN, MN),MX); 
例 
A :=LIMIT(IN :=B, 
 

MN :=0, 

MX :=5); 

拡張可能マ
ルチプレク
サb), c), d), e) 

MUX 

+ ----- + 

| MUX | 

ANY̲ELEMENTARY - |K 

| - ANY̲ELEMENTARY 

ANY̲ELEMENTARY - |IN0 | 
ANY̲ELEMENTARY - |IN1 | 
 

+ ----- + 

a), b), c): 

入力Kに応じてN個の入力か
ら一つを選択する。 
例 
A :=MUX(0, B, C, D); 
は,次の文と同じ結果になる。 
A :=B; 

background image

85 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表32−選択ファンクション(続き) 

注記1 記法IN0,IN1,...,INn(No.2及びNo.6)及び記法IN1,IN2,...,INn(No.2及びNo.6以外の項目)は,

上から下の順の入力を指している。OUTは,出力を指している。 

注記2 用例は,ST言語による。 
注a) MOVEファンクションは,ただ一つのANY型入力IN及びANY型の出力OUTをもつ。 

b) MUXファンクションの名前付けをしていない入力は,上から順番に,デフォルト名IN0,IN1,...,INn-1が

付けられているとしなければならない。ただし,nを総入力数とする。これらの名前のグラフィック表現を表示
してもよいが,その必要はない。 

c) MUXファンクションは,MUX̲*̲**の形式でデータ型指定できる。ここで,*は入力Kの型,**はその他の入力

及び出力の型である。 

d) 実装者がユーザ定義データ型変数の選択機能をサポートすることは認められるが,この機能に順守するために

はそのサポートは必須ではない。 

e) MUXファンクションの入力Kの実際の値が{0..n-1}の範囲でない場合,エラーである。 

表33−比較ファンクション 

No. 

説明 

名前a) 記号b) 

解説 

(2個以上のオペランドが拡張可能な場合) 

グラフィック表現 
 

+ --- + 

ANY̲ELEMENTARY -- | *** | -- BOOL 
 

-- | 

ANY̲ELEMENTARY -- | 

+ --- + 

(***) 名前又は記号 

用例 
A :=GT(B, C, D);  

// 名前 

 又は 
A :=(B>C) & (C>D); // 記号 

より大 

GT 

OUT := 
(IN1>IN2)& (IN2>IN3) &.. & (INn-1 > INn) 

より大きいか又は等しい 

GE 

>= 

OUT := 
(IN1>=IN2)&(IN2>=IN3)&.. 

(INn-1 

>=INn) 

等しい 

EQ 

OUT := 
(IN1=IN2)&(IN2=IN3) &..  & (INn-1= INn) 

より小さいか又は等しい 

LE 

<= 

OUT := 
(IN1<=IN2)&(IN2<=IN3)&.. 

(INn-1 

<=INn) 

より小 

LT 

OUT := 
(IN1<IN2)& (IN2<IN3) &.. & (INn-1 < INn) 

等しくない 

NE 

<> 

OUT :=(IN1<>IN2) (拡張可能でない) 

注記1 記法IN1,IN2,...,INnは,上から下の順の入力を指している。OUTは,出力を指している。 
注記2 この表の全ての記号は,テキスト言語の演算子としての使用に適している。 
注記3 用例及び解説は,ST言語による。 
注記4 標準比較ファンクションは,例えば,ラダーのような定義言語依存でもよい。 
注a) ファンクションの名前表現をサポートする場合,規格順守対照表では,添字“n”で示さなければならない。例

えば,“1n”は,記法“GT”を表す(1nは,No.1のNameを意味し名前列を示す。)。 

b) ファンクションの記号表現をサポートする場合,規格順守対照表では,添字“s”で示さなければならない。例

えば,“1s”は,記法“>”を表す(1sは,No.1のSymbolを意味し記号列を示す。)。 

6.6.2.5.11 文字列ファンクション 

表33は,文字列に適用できなければならない。単一文字列の代わりに,データ型CHAR又はWCHAR

の変数をそれぞれ使用してもよい。 

background image

86 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

異なる長さの二つの文字列の比較では,短い方の文字列の右側に長い方の文字列の長さまで値が0であ

る文字が付け加えられているとみなされなければならない。比較は,左から右に向かって,文字セットの

文字コードの数値比較に基づいて行わなければならない。 

例 文字列“Z”は,文字列'AZ' ('Z' > 'A')より大きく,また,“AZ”は,'ABC' ('A' = 'A'及び 'Z' 

> 'B')より大きい。 

付加的な文字列ファンクションの標準のグラフィック表現,ファンクション名及び説明は,表34に示し

たとおりでなければならない。この演算では,Lを文字列長とすると,文字列中の文字位置は,最も左側

の文字から1,2,...,Lと番号付けられなければならない。 

次のいずれかの場合,エラーとしなければならない。 

・ 表34でANY̲INTと指定されたいずれかの入力の実際の値が0未満であるとき。 

・ ファンクションの評価で(1)文字列中の存在しない文字位置にアクセスしようとしたか,又は(2)

実装固有の最大文字列長よりも長い文字列を生成しようとしたとき。 

・ データ型STRING又はCHARの引数及びデータ型WSTRING又はWCHARの引数が,同じファンクショ

ンに混在したとき。 

表34−文字列ファンクション 

No. 

説明 

グラフィック表現 

例 

文字列長 

+ -------- + 

ANY̲STRING -- | LEN | -- ANY̲INT 
 

+ -------- + 

文字列長 
A :=LEN('ASTRING');は,次と等価。 

A :=7; 

左端文字
抽出 

+ -------- + 

| LEFT | 

ANY̲STRING -- | IN 

| -- ANY̲STRING 

ANY̲INT 

-- | L 

+ -------- + 

INの最も左側のL文字 
A :=LEFT(IN:='ASTR', L:=3); 
  は,次と等価。A :='AST'; 

右端文字
抽出 

+ -------- + 

| RIGHT | 

ANY̲STRING -- | IN 

| -- ANY̲STRING 

ANY̲INT 

-- | L 

+ -------- + 

INの最も右側のL文字 
A :=RIGHT(IN:='ASTR', L:=3); 
  は,次と等価。A :='STR'; 

中間文字
抽出 

+ -------- + 

| MID | 

ANY̲STRING -- | IN 

| -- ANY̲STRING 

ANY̲INT 

-- | L 

ANY̲INT 

-- | P 

+ -------- + 

INのP番目の文字から始まるL文字 
A :=MID(IN:='ASTR', L:=2, P:=2); 
  は,次と等価。A :='ST'; 

拡張可能
な連結 

+ -------- + 

| CONCAT | 

ANY̲CHARS -- | 

| -- ANY̲STRING 

-- | 

ANY̲CHARS -- | 

+ -------- + 

拡張可能な連結 
A :=CONCAT('AB','CD','E'); 
  は,次と等価。A :='ABCDE'; 

background image

87 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表34−文字列ファンクション(続き) 

No. 

説明 

グラフィック表現 

例 

挿入 

+ -------- + 

| INSERT | 

ANY̲STRING -- | IN1 

| -- ANY̲STRING 

ANY̲CHARS -- | IN2 

ANY̲INT 

-- | P 

+ -------- + 

IN1のP番目の文字位置の後にIN2を挿入す
る。 

A:=INSERT(IN1:='ABC', IN2:='XY', 
P=2); 
  は,次と等価。A :='ABXYC' ; 

削除 

+ -------- + 

| DELETE | 

ANY̲STRING -- | IN 

| -- ANY̲STRING 

ANY̲INT 

-- | L 

ANY̲INT 

-- | P 

+ -------- + 

INのP番目の文字位置から始まるL文字を
削除する。 

:=DELETE(IN:='ABXYC', 

L:=2, 

P:=3); 
  は,次と等価。A :='ABC'; 

置換 

+ -------- + 

| REPLACE | 

ANY̲STRING -- | IN1 

| -- ANY̲STRING 

ANY̲CHARS -- | IN2 

ANY̲INT 

-- | L 

ANY̲INT 

-- | P 

+ -------- + 

IN1のP番目の文字位置から始まるL文字を
IN2で置き換える。 

:=REPLACE(IN1:='ABCDE', 

IN2:='X', L:=2, P:=3); 
  は,次と等価。A :='ABXE'; 

検索 

+ -------- + 

| FIND | 

ANY̲STRING -- | IN1 

| -- ANY̲INT 

ANY̲CHARS -- | IN2 

+ -------- + 

IN1中に最初に見つかった文字列IN2の文字
位置。IN2が見つからない場合は,OUT :=0. 
 A 

:=FIND(IN1:='ABCBC', 

IN2:='BC'); 
  は,次と等価。A :=2; 

注記1 例は,ST言語による。 
注記2 CONCATの入力は全てANY̲CHARSである。すなわち,CHAR型又はWCHAR型であることもある。 
注記3 ファンクションINSERT,REPLACE,FINDの入力IN2は,ANY̲CHARSの入力である。すなわち,CHAR型

又は WCHAR型であることもある。 

6.6.2.5.12 日付ファンクション及び継続時間ファンクション 

比較ファンクション,選択ファンクションのほか,表35に示す時間データ型の入力及び出力の組合せが,

対応するファンクションで可能でなければならない。 

これらのファンクションを評価した結果が出力データ型の実装固有の値の範囲を超えていた場合,エラ

ーとしなければならない。 

background image

88 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表35−時間データ型ファンクション及び継続時間データ型の数値演算ファンクション 

No. 

説明(ファンクション名) 

記号 

IN1 

IN2 

OUT 

1a 

ADD 

+ 

TIME, LTIME 

TIME, LTIME 

TIME, LTIME 

1b 

ADD̲TIME 

+ 

TIME 

TIME 

TIME 

1c 

ADD̲LTIME 

+ 

LTIME 

LTIME 

LTIME 

2a 

ADD 

+ 

TOD, LTOD 

LTIME 

TOD, LTOD 

2b 

ADD̲TOD̲TIME 

+ 

TOD 

TIME 

TOD 

2c 

ADD̲LTOD̲LTIME 

+ 

LTOD 

LTIME 

LTOD 

3a 

ADD 

+ 

DT, LDT 

TIME, LTIME 

DT, LDT 

3b 

ADD̲DT̲TIME 

+ 

DT 

TIME 

DT 

3c 

ADD̲LDT̲LTIME 

+ 

LDT 

LTIME 

LDT 

4a 

SUB 

− 

TIME, LTIME 

TIME, LTIME 

TIME, LTIME 

4b 

SUB̲TIME 

− 

TIME 

TIME 

TIME 

4c 

SUB̲LTIME 

− 

LTIME 

LTIME 

LTIME 

5a 

SUB 

− 

DATE 

DATE 

TIME 

5b 

SUB̲DATE̲DATE 

− 

DATE 

DATE 

TIME 

5c 

SUB̲LDATE̲LDATE 

− 

LDATE 

LDATE 

LTIME 

6a 

SUB 

− 

TOD, LTOD 

TIME, LTIME 

TOD, LTOD 

6b 

SUB̲TOD̲TIME 

− 

TOD 

TIME 

TOD 

6c 

SUB̲LTOD̲LTIME 

− 

LTOD 

LTIME 

LTOD 

7a 

SUB 

− 

TOD, LTOD 

TOD, LTOD 

TIME, LTIME 

7b 

SUB̲TOD̲TOD 

− 

TOD 

TOD 

TIME 

7c 

SUB̲TOD̲TOD 

− 

LTOD 

LTOD 

LTIME 

8a 

SUB 

− 

DT, LDT 

TIME, LTIME 

DT, LDT 

8b 

SUB̲DT̲TIME 

− 

DT 

TIME 

DT 

8c 

SUB̲LDT̲LTIME 

− 

LDT 

LTIME 

LDT 

9a 

SUB 

− 

DT, LDT 

DT, LDT 

TIME, LTIME 

9b 

SUB̲DT̲DT 

− 

DT 

DT 

TIME 

9c 

SUB̲LDT̲LDT 

− 

LDT 

LDT 

LTIME 

10a 

MUL 

TIME, LTIME 

ANY̲NUM 

TIME, LTIME 

10b 

MUL̲TIME 

TIME 

ANY̲NUM 

TIME 

10c 

MUL̲LTIME 

LTIME 

ANY̲NUM 

LTIME 

11a 

DIV 

TIME, LTIME 

ANY̲NUM 

TIME, LTIME 

11b 

DIV̲TIME 

TIME 

ANY̲NUM 

TIME 

11c 

DIV̲LTIME 

LTIME 

ANY̲NUM 

LTIME 

注記 これらの標準ファンクションは多重定義をサポートするが,データ型(TIME,DT,DATE,TOD)及びデータ型

(LTIME,LDT,LDATE,LTOD)の両方の集合の中だけである。 

例 ST言語文 

X :=DT#1986-04-28-08:40:00; 

Y :=DT̲TO̲TOD(X); 

W :=DT̲TO̲DATE(X);  

は,“抽出”データと同じ結果になる。 

X :=DT#1986-04-28-08:40:00; 

Y :=TIME̲OF̲DAY#08:40:00; 

W :=DATE#1986-04-28; 

表36に示すように,結合ファンクション及び分割ファンクションは,日時を扱うために定義する。さら

background image

89 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

に,曜日を得るために定義する。 

これらのファンクションを評価した結果が出力データ型の実装者の固有値の範囲を超えていた場合,エ

ラーとしなければならない。 

表36−時間データ型CONCAT及びSPLITの追加ファンクション 

No. 

説明 

グラフィック表現 

例 

結合時間データ型  

1a 

CONCAT̲DATE̲
TOD 

+ --------------- + 

| CONCAT̲DATE̲TOD | 

DATE -- | DATE 

| --DT 

TOD -- | TOD 

+ --------------- + 

日付を結合する: 

VAR 
 myD: DT;  
END̲VAR 
myD :=CONCAT̲DATE̲TOD  
 (D#2010-03-12, TOD#12:30:00); 

1b 

CONCAT̲DATE̲
LTOD 

+ --------------- + 

|CONCAT̲DATE̲LTOD| 

DATE -- | DATE 

| --LDT 

LTOD -- | LTOD 

+ --------------- + 

日付と時刻とを結合する: 

VAR 
 myD: LDT;  
END̲VAR 
myD :=CONCAT̲DATE̲LTOD  
 (D#2010-03-12,  
   TOD#12:30:12.1223452); 

CONCAT̲DATE 

+ --------------- + 

| CONCAT̲DATE | 

ANY̲INT -- | YEAR 

| --DATE 

ANY̲INT -- | MONTH 

ANY̲INT -- | DAY 

+ --------------- + 

日付を結合する: 
VAR 
 myD: DATE;  
END̲VAR 
myD :=CONCAT̲DATE (2010,3,12); 

3a 

CONCAT̲TOD 

+ --------------- + 

CONCAT̲TOD 

ANY̲INT -- | HOUR 

| --TOD 

ANY̲INT -- | MINUTE 

ANY̲INT -- | SECOND 

ANY̲INT -- | MILLISECOND 

+ --------------- + 

時刻を結合する: 
VAR 
 myTOD: TOD;  
END̲VAR 
myTD :=CONCAT̲TOD (16,33,12,0); 

3b 

CONCAT̲LTOD 

+ --------------- + 

| CONCAT̲LTOD | 

ANY̲INT -- | HOUR 

| --LTOD 

ANY̲INT -- | MINUTE 

ANY̲INT -- | SECOND 

ANY̲INT -- | MILLISECOND 

+ --------------- + 

時刻を結合する: 
VAR 
 myTOD: LTOD; 
END̲VAR 
myTD :=CONCAT̲LTOD (16,33,12,0); 

4a 

CONCAT̲DT 

+ --------------- + 

CONCAT̲DT 

ANY̲INT -- | YEAR 

| --DT 

ANY̲INT -- | MONTH 

ANY̲INT -- | DAY 

ANY̲INT -- | HOUR 

ANY̲INT -- | MINUTE 

ANY̲INT -- | SECOND 

ANY̲INT -- | MILLISECOND 

+ --------------- + 

日時を結合する: 

VAR 
 myDT: DT;   
 Day: USINT;  
END̲VAR 
Day  :=17; 
myDT :=CONCAT̲DT  
 

(2010,3,Day,12,33,12,0); 

background image

90 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表36−時間データ型CONCAT及びSPLITの追加ファンクション(続き) 

No. 

説明 

グラフィック表現 

例 

4b 

CONCAT̲LDT 

+ --------------- + 

CONCAT̲LDT 

ANY̲INT -- | YEAR 

| --LDT 

ANY̲INT -- | MONTH 

ANY̲INT -- | DAY 

ANY̲INT -- | HOUR 

ANY̲INT -- | MINUTE 

ANY̲INT -- | SECOND 

ANY̲INT -- | MILLISECOND 

+ --------------- + 

日時を結合する: 
VAR 
 myDT: LDT;   
 Day: USINT;  
END̲VAR 
Day  :=17; 
myDT :=CONCAT̲LDT  
 

(2010,3,Day,12,33,12,0); 

分割時間データ型  

SPLIT̲DATE 

+ --------------- + 

SPLIT̲DATE 

DATE -- | IN           YEAR | -- ANY̲INT 
 

MONTH | -- ANY̲INT 

DAY | -- ANY̲INT 

+ --------------- + 

注記2参照 

日付を分割する: 
VAR  
myD: DATE:=DATE#2010-03-10;  
 myYear: UINT;  
 myMonth,  
 myDay: USINT; 
END̲VAR 
SPLIT̲DATE 
(myD,myYear,myMonth,myDay); 

6a 

SPLIT̲TOD 

+ --------------- + 

SPLIT̲TOD 

 TOD -- | IN           HOUR | -- ANY̲INT 
 

MINUTE | -- ANY̲INT 

SECOND | -- ANY̲INT 

MILLISECOND | -- ANY̲INT 

+ --------------- + 

注記2参照 

時刻を分割する: 
VAR myTOD: TOD:=TOD#14:12:03;  
 myHour, myMin, mySec: USINT;  
 myMilliSec: UINT; 
END̲VAR 
SPLIT̲TOD(myTOD, myHour, myMin, 
   mySec,myMilliSec); 

6b 

SPLIT̲LTOD 

+ --------------- + 

SPLIT̲LTOD 

LTOD -- | IN           HOUR | -- ANY̲INT 
 

MINUTE | -- ANY̲INT 

SECOND | -- ANY̲INT 

MILLISECOND | -- ANY̲INT 

+ --------------- + 

注記2参照 

時刻を分割する: 
VAR myTOD: LTOD:=TOD#14:12:03;  
 myHour, myMin, mySec: USINT;  
 myMilliSec: UINT; 
END̲VAR 
SPLIT̲LTOD(myTOD, 

myHour, 

myMin, 
   mySec,myMilliSec); 

background image

91 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表36−時間データ型CONCAT及びSPLITの追加ファンクション(続き) 

No. 

説明 

グラフィック表現 

例 

7a 

SPLIT̲DT 

+ --------------- + 

SPLIT̲DT 

 DT-- | IN 

YEAR | -- ANY̲INT 

MONTH | -- ANY̲INT 

DAY | -- ANY̲INT 

HOUR | -- ANY̲INT 

MINUTE | -- ANY̲INT 

SECOND | -- ANY̲INT 

MILLISECOND | -- ANY̲INT 

+ --------------- + 

注記2参照 

日時を分割する: 
VAR myDT: DT 
   :=DT#2010-03-10-14:12:03:00;  
 myYear, myMilliSec: UINT;  
 myMonth, myDay, myHour, myMin,  
  mySec: USINT; 
END̲VAR 
SPLIT̲DT(myDT, myYear, myMonth, 
myDay, 
   
myHour,myMin,mySec,myMilliSec); 

7b 

SPLIT̲LDT 

+ --------------- + 

SPLIT̲LDT 

 LDT -- | IN           YEAR | -- ANY̲INT 
 

MONTH | -- ANY̲INT 

DAY | -- ANY̲INT 

HOUR | -- ANY̲INT 

MINUTE | -- ANY̲INT 

SECOND | -- ANY̲INT 

MILLISECOND | -- ANY̲INT 

+ --------------- + 

注記2参照 

日時を分割する: 
VAR myDT: LDT 
   :=DT#2010-03-10-14:12:03:00;  
 myYear, myMilliSec: UINT;  
 myMonth, myDay, myHour, myMin,  
  mySec: USINT; 
END̲VAR 
SPLIT̲LDT(myDT, 

myYear, 

myMonth, myDay, 
   
myHour,myMin,mySec,myMilliSec); 

曜日を得る 

DAY̲OF̲WEEK 

+ --------------- + 

| DAY̲OF̲WEEK | 

 DATE-- | IN 

| - ANY̲INT 

+ --------------- + 

注記2参照 

曜日を得る: 
VAR myD: DATE:=DATE#2010-03-10;  
 myDoW: USINT;  
END̲VAR 
myDoW:=DAY̲OF̲WEEK(myD); 

ファンクションDAY̲OF̲WEEKは,日曜日は0,月曜日は1,…,土曜日は6を戻す。 

注記1 入力YEARでのデータ型は,有効な年値をサポートするため,少なくとも16ビットでなければならない。 
注記2 実装者は,ANY̲INT出力に提供するデータ型を指定する。 
注記3 実装者は,サポートされている精度,例えば,マイクロ秒及びナノ秒に従って追加入力又は出力を定義して

もよい。 

6.6.2.5.13 エンディアン変換ファンクション 

エンディアン変換ファンクションは,実装者が指定する,PLCの内部使用エンディアンから要求されて

いるエンディアンへ又はその逆に変換する。 

エンディアンは,より長いデータ型又は変数内のバイトの順序付けである。 

ビッグエンディアンのデータのデータ値は,メモリ配置上の左端バイトに先頭,右端バイトに終端が配

置される。 

リトルエンディアンのデータのデータ値は,メモリ配置上の右端バイトに先頭,左端バイトに終端が配

置される。 

エンディアンと関係なく,ビットオフセット0は,データ型の最も右側のビットをアドレス指定する。 

元の数字より小さい数字で部分アクセスを用いることによって,指定エンディアンと関係なく,より右

background image

92 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

側の部分を返す。 

例1 エンディアン 

TYPE D: DWORD :=16#1234̲5678; END̲TYPE;  

メモリ配置 

 ビッグエンディアンの場合: 

16#12, 16#34, 16#56, 16#78 

 リトルエンディアンの場合: 

16#78, 16#56, 16#34, 16#12. 

例2 エンディアン 

TYPE L: ULINT :=16#1234̲5678̲9ABC̲DEF0; END̲TYPE; 

メモリ配置 

 ビッグエンディアンの場合: 

16#12, 16#34,16#56, 16#78, 16#9A, 16#BC, 

16#DE, 16#F0 

 リトルエンディアンの場合: 

16#F0, 16#DE, 16#BC, 16#9A, 16#78, 16#56, 

16#34, 16#12. 

次のデータ型は,エンディアン変換ファンクションの入力又は出力としてサポートする。 

・ 16ビット以上のサイズのANY̲INT 

・ 16ビット以上のサイズのANY̲BIT 

・ ANY̲REAL 

・ WCHAR 

・ TIME  

・ これらのデータ型の配列 

・ これらのデータ型の構成要素を含む構造体 

他のデータ型は変換されないが,変換するために構造内に含まれてもよい。 

エンディアン変換ファンクションは,表37による。 

表37−エンディアン変換ファンクション 

No. 

説明 

グラフィック表現 

テキスト表現 

TO̲BIG̲ENDIAN 

+------------------ + 

| TO̲BIG̲ENDIAN 

 ANY -- | IN 

| --ANY 

+------------------ + 

ビッグエンディアンデータ書式への変
換 
A:=TO̲BIG̲ENDIAN(B); 

TO̲LITTLE̲ENDIAN  

+------------------ + 

| TO̲LITTLE̲ENDIAN | 

 ANY -- | IN 

| --ANY 

+------------------ + 

リトルエンディアンデータ書式への変
換 
B:=TO̲LITTLE̲ENDIAN(A); 

BIG̲ENDIAN̲TO 

+------------------ + 

| FROM̲BIG̲ENDIAN | 

 ANY -- | IN 

| --ANY 

+------------------ + 

ビッグエンディアンデータ書式からの
変換 

A:=FROM̲BIG̲ENDIAN(B); 

LITTLE̲ENDIAN̲TO  

+------------------ + 

|FROM̲LITTLE̲ENDIAN | 

 ANY -- | IN 

| --ANY 

+------------------ + 

リトルエンディアンデータ書式からの
変換 
A:=FROM̲LITTLE̲ENDIAN(B); 

注記1 入力側及び出力側のデータ型は同じでなければならない。 
注記2 変数が既に要求されたデータ書式の場合,ファンクションはデータ表現を変更しない。 

background image

93 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.2.5.14 列挙データ型ファンクション 

表38に記載した選択ファンクション及び比較ファンクションは,列挙データ型の入力にも適用できる。 

表38−列挙データ型ファンクション 

No. 

説明/ファンクション名 

記号 

表yの中の項目番号x 

SEL 

なし 

表32の項目No.2 

MUX 

なし 

表32の項目No.6 

3 a) 

EQ 

表33の項目No.3 

4 a) 

NE 

<> 

表33の項目No.6 

注記 表33の注記1及び注記2の規定は,この表に適用する。 
注a) 表33の注a)及び注b)の規定は,この項目に適用する。 

6.6.2.5.15 バリデートファンクション 

バリデートファンクションは,入力パラメータが有効な値を含むか確認する。 

多重定義ファンクションIS̲VALIDは,データ型REAL及びLREALに対して定義する。実数が非数(NaN)

又は無限(+Inf,−Inf)の場合,バリデートファンクションの結果はFALSEである。 

実装者は,バリデートファンクションIS̲VALIDによる追加データ型をサポートしてもよい。これらの

式の結果は,実装固有のものである。 

多重定義ファンクションIS̲VALID̲BCDは,データ型BYTE,WORD,DWORD及びLWORDに対して定義

する。値がBCD定義に合致しない場合,バリデートファンクションの結果はFALSEである。 

バリデートファンクションの項目のリストは,表39による。 

表39−バリデートファンクション 

No. 

説明 

グラフィック表現 

テキスト表現 

IS̲VALID 

+------------+ 

| IS̲VALID | 

ANY̲REAL -- | IN 

| --BOOL 

+------------+ 

REALの有効性確認 
VAR R: REAL; END̲VAR 
IF IS̲VALID(R) THEN ... 

IS̲VALID̲BCD 

+------------+ 

|IS̲VALID̲BCD| 

ANY̲BIT -- | IN 

| --BOOL 

+------------+ 

BCDワードの有効性確認 
VAR W: WORD; END̲VAR 
IF IS̲VALID̲BCD(W) THEN ... 

6.6.3 

ファンクションブロック 

6.6.3.1 

概要 

ファンクションブロックは,プログラムの明確に定義された部分をモジュール化及び構造化する目的で

表現するプログラム構成ユニット(POU)である。 

ファンクションブロックの概念は,ファンクションブロック型及びファンクションブロックインスタン

スによって実現される。 

・ ファンクションブロック型は,次で構成する。 

− 入力,出力及び内部変数に分割されたデータ構造の定義,及び 

− ファンクションブロック型のインスタンスが呼び出されたときに,データ構造に対して実行される

演算の集合。 

・ ファンクションブロックインスタンス 

94 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− ファンクションブロックインスタンスは,ファンクションブロック型の複数の名称付き使用(イン

スタンス)。 

− 個々のインスタンスは,対応する識別子(インスタンス名),静的入力,出力及び内部変数を包含す

るデータ構造をもたなければならない。 

静的変数は,ファンクションブロックインスタンスの実行から次の実行までその値を保持しなけ

ればならない。したがって,入力パラメータが同じファンクションブロックの呼出しは,必ずしも

同じ出力値を返す必要はない。 

POUの共通特性をファンクションブロックに適用する。 

・ オブジェクト指向ファンクションブロック ファンクションブロックは,オブジェクト指向特性群に

よって拡張できる。 

オブジェクト指向ファンクションブロックは,クラスに準じている。 

6.6.3.2 

ファンクションブロック型宣言 

ファンクションブロック型は,ファンクションの宣言と同じように宣言しなければならない。 

ファンクションブロック型宣言の項目は,表40に規定する。 

a) 予約語FUNCTION̲BLOCKに続けて,宣言するファンクションブロック名を示す識別子を指定 

b) ボディを構成する演算の集合 

c) ファンクションブロックボディの後に終了予約語END̲FUNCTION̲BLOCK 

d) 必要な場合は,VAR̲INPUT,VAR̲OUTPUT及びVAR̲IN̲OUTによる構文,変数名及び型を明記する。 

e) VAR̲EXTERNAL構文を通じて宣言する変数の値は,ファンクションブロック内から変更できる。 

f) 

VAR̲EXTERNAL CONSTANT構文を通じて宣言する変数の値は,ファンクションブロック内から変更

できない。 

g) 可変長配列は,VAR̲IN̲OUTとして使用してもよい。 

h) 入力,出力及び静的変数は初期化してもよい。 

i) 

EN/ENO入力及び出力は,入力変数及び出力変数と同じように宣言しなければならない。 

次の項目は,ファンクションブロック固有のものである(ファンクションとは異なる。)。 

j) 

必要であれば,VAR...END̲VAR構文及びVAR̲TEMP...END̲VAR構文,ファンクションブロックの

内部変数の名前及び型を明記する。 

k) VAR部の(静的)変数は,PUBLIC又はPRIVATEと宣言できる。アクセス修飾子PRIVATEがデフォ

ルトである。PUBLIC変数は,FB出力へのアクセスと同様な構文法を用いてFBの外側からアクセス

してもよい。 

l) 

RETAIN又はNON̲RETAIN修飾子は,表40に示すように,ファンクションブロックの入力,出力及

び内部変数に使用できる。 

m) テキスト表現の宣言では,R̲EDGE及びF̲EDGE修飾子は,ブール入力のエッジ検出ファンクション

を示すために使用しなければならない。これは,必要なエッジ検出を行うためにこのファンクション

ブロックにおいて型R̲TRIG又はF̲TRIGのファンクションブロックそれぞれの暗黙の宣言をもたら

さなければならない。 

この構成の例については,表40参照。 

n) 立上りエッジ及び立下りエッジ検出のグラフィック表現の宣言では,図示構文を用いなければならな

い。文字セットを使用するときは,ファンクションブロックの縁に“より大きい”(>)か,“より小

さい”(<)がなければならない。 

background image

95 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

o) 表16に定義するアスタリスク表記が,ファンクションブロックの内部変数の宣言で使用可能である。 

p) 標準ファンクションブロックの入力,出力の宣言で総称データ型が用いられる場合,そのようなファ

ンクションブロック型の実際の出力の型を推測するための規則がファンクションブロック型定義の一

部でなければならない。 

q) 他のファンクションブロック,クラス及びオブジェクト指向ファンクションブロックのインスタンス

は,VAR̲TEMP部を除く全ての変数部で宣言できる。 

r) ファンクションブロック型内のファンクションブロックインスタンスは,曖昧さを避けるために同じ

名前解決スコープ内のファンクションと同じ名前を使用してはならない。 

表40−ファンクションブロック型宣言 

No. 

説明 

例 

ファンクションブロック型の宣言 
FUNCTION̲BLOCK ... 
END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK 

myFB 

... 

END̲FUNCTION̲BLOCK 

2a 

入力の宣言 
VAR̲INPUT ... END̲VAR 

VAR̲INPUT IN: BOOL; T1: TIME; END̲VAR 

2b 

出力の宣言 
VAR̲OUTPUT ... END̲VAR 

VAR̲OUTPUT OUT: BOOL; ET̲OFF: TIME; 
END̲VAR 

2c 

入出力の宣言 
VAR̲IN̲OUT ... END̲VAR 

VAR̲IN̲OUT A: INT; END̲VAR 

2d 

一時的変数の宣言 
VAR̲TEMP  ... END̲VAR 

VAR̲TEMP I: INT; END̲VAR 

2e 

静的変数の宣言 
VAR ... END̲VAR 

VAR B: REAL; END̲VAR 

2f 

外部変数の宣言 
VAR̲EXTERNAL ... END̲VAR 

VAR̲EXTERNAL B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL 

2g 

外部変数の宣言 
VAR̲EXTERNAL CONSTANT ... END̲VAR 

VAR̲EXTERNAL CONSTANT B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL 

3a 

入力の初期化 

VAR̲INPUT  MN:  INT :=0; 

3b 

出力の初期化 

VAR̲OUTPUT RES: INT :=1; 

3c 

静的変数の初期化 

VAR B: REAL :=12.1; 

3d 

一時変数の初期化 

VAR̲TEMP I: INT :=1; 

− 

EN/ENO 入力及び出力 

表18に定義 

4a 

入力変数に対するRETAIN修飾子の宣言 

VAR̲INPUT RETAIN  X: REAL; END̲VAR 

4b 

出力変数に対するRETAIN修飾子の宣言 

VAR̲OUTPUT RETAIN  X: REAL; END̲VAR 

4c 

入力変数に対するNON̲RETAIN修飾子の宣言 

VAR̲INPUT NON̲RETAIN  X: REAL; END̲VAR 

4d 

出力変数に対するNON̲RETAIN修飾子の宣言 

VAR̲OUTPUT NON̲RETAIN X: REAL; END̲VAR 

4e 

静的変数に対するRETAIN修飾子の宣言 

VAR RETAIN X: REAL; END̲VAR 

4f 

静的変数に対するNON̲RETAIN修飾子の宣言 

VAR NON̲RETAIN X: REAL; END̲VAR 

5a 

ローカルFBインスタンスに対するRETAIN修飾子の
宣言 

VAR RETAIN TMR1: TON; END̲VAR 

5b 

ローカルFBインスタンスに対するNON̲RETAIN修飾
子の宣言 

VAR NON̲RETAIN TMR1: TON; END̲VAR 

background image

96 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表40−ファンクションブロック型宣言(続き) 

No. 

説明 

例 

6a 

立上りエッジ入力のテキスト表現宣言 

FUNCTION̲BLOCK AND̲EDGE 
VAR̲INPUT X: BOOL R̲EDGE; 
 

Y: BOOL F̲EDGE; 

END̲VAR 
VAR̲OUTPUT Z: BOOL; END̲VAR 
 Z :=X AND Y; (* ST language example *) 
END̲FUNCTION̲BLOCK 

6b 

立下りエッジの入力(テキスト表現) 

上記を参照 

7a 

立上りエッジ入力のグラフィック表現宣言(>) 

FUNCTION̲BLOCK 
  (*外部インタフェース*) 
 

+ -------- + 

| AND̲EDGE | 

 BOOL -- > X 

Z | --BOOL 

 BOOL -- < Y 

+ -------- + 

  (* FB ボディ*) 
 

+ ---- + 

| & | 

X -- | 

| --Z 

Y -- | 

+ ---- + 

END̲FUNCTION̲BLOCK 

7b 

立下りエッジ入力のグラフィック表現宣言(<) 

上記を参照 

注記 この表の項目No.1〜No.3は,ファンクションと同等。表19参照。 

FB型宣言の例は,次による。 

例1 ファンクションブロック型宣言 

FUNCTION̲BLOCK DEBOUNCE 

(*** 外部インタフェース ***) 

  VAR̲INPUT 

    IN: BOOL; 

(* デフォルト値=0 *) 

    DB̲TIME: TIME :=t#10ms; (* デフォルト値=t#10ms *) 

  END̲VAR 

  VAR̲OUTPUT 

    OUT: BOOL; 

(* デフォルト値=0 *) 

    ET̲OFF : TIME; 

(* デフォルト値=t#0s *) 

  END̲VAR 

  VAR DB̲ON: TON; 

(** 内部変数 **) 

    DB̲OFF:  TON; 

(** FB インスタンス **) 

    DB̲FF:   SR; 

97 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  END̲VAR 

(***ファンクションブロックボディ***) 

  DB̲ON (IN :=IN, PT :=DB̲TIME); 

  DB̲OFF(IN :=NOT IN, PT :=DB̲TIME); 

  DB̲FF (S1 :=DB̲ON.Q, R :=DB̲OFF.Q); 

  OUT :=DB̲FF.Q1; 

  ET̲OFF :=DB̲OFF.ET; 

 END̲FUNCTION̲BLOCK    

a) テキスト表現宣言(ST言語) 

FUNCTION̲BLOCK 

(* 外部パラメータ インタフェース *) 

+ ----------------- + 

DEBOUNCE 

BOOL--- | IN 

OUT | ---BOOL 

TIME--- | DB̲TIME 

ET̲OFF | ---TIME 

+ ----------------- + 

(* ファンクションブロック型ボディ *) 

DB̲ON 

DB̲FF 

+------ + 

+ ----- + 

| TON | 

| SR | 

IN--- + ----- | IN 

Q | ----- | S1 Q | ---OUT 

| + -- | PT ET | + -- | R 

| | 

+ ---- + | + ----- + 

| | 

| | 

DB̲OFF 

| | 

+---- + 

| | 

| TON | 

+ - |--O | IN Q |----+ 

DB̲TIME-- +--- | PT ET | --------------ET̲OFF 

+---- + 

END̲FUNCTION̲BLOCK 

b) グラフィック表現宣言(FBD言語) 

次の例は,表40に示すファンクションブロックにおける入出力変数の宣言及びグラフィック表現使用法

の例を示す。 

98 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例2 

+----------- + 

ACCUM 

 INT--- | A---------A | --INT 

 INT--- | X 

+----------- + 

+ --- + 

A--- | + | ---A 

X--- | 

+ --- + 

FUNCTION̲BLOCK ACCUM 

  VAR̲IN̲OUT A: INT; END̲VAR 

  VAR̲INPUT  X: INT; END̲VAR 

  A :=A+X; 

END̲FUNCTION̲BLOCK 

a) ファンクションブロック型及びファンクションのグラフィック表現宣言及びテキスト表現宣言 

ACC1 

+ ----- + 

| ACCUM | 

 ACC------- | A---A | ---ACC 

+ -- + | 

X1-- | * | -- | X 

X2-- | | + ----- + 

+ -- + 

VAR 

  ACC: INT; 

  X1:  INT; 

  X2:  INT; 

END̲VAR 

この宣言の実行の作用は次のとおり。 

ACC :=ACC+X1*X2 ; 

b) ファンクションブロックインスタンス及びファンクションの正しい使用例 

ACC1 

ACC2 

+ ----- + 

+ ----- + 

| ACCUM | 

| ACCUM | 

 ACC----- | A---A | ----------- | A---A | --ACC 

+ -- + | 

+ -- + | 

X1-- | * | -- | X 

| X3-- | * | -- | X 

X2-- | | +------+ X4-- | | + ----- + 

+ -- + 

+ -- + 

b)のような宣言が既に行われて

いるとする。 

ACC,X1,X2,X3及びX4; 

実行の作用は次のとおり。 

ACC :=ACC+X1*X2+X3*X4; 

c) ファンクションブロックインスタンスの正しい使用例 

99 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ACC1 

+ ----- + 

| ACCUM | 

 X3------- | A---A | --- X4 

+ -- + | 

X1-- | * | -- | X 

X2-- | | + ----- + 

+ -- + 

VAR 

  X1: INT; 

  X2: INT; 

  X3: INT; 

  X4: INT; 

END̲VAR 

この宣言の実行の作用は次のとおり。 

X3 :=X3+X1*X2; 

X4 :=X3; 

d) ファンクションブロックインスタンス及びファンクションの正しい使用例−出力への代入による 

ACC1 

+ -- + + ----- + 

 X1-- | * | | ACCUM | 

 X2-- | | -- | A---A | --ACC 

+ -- + | 

 X3--------- | X---- | 

+ ----- + 

不正な使用法 

入出力変数Aへの接続が変数でもファ

ンクションブロック名でもない。 

e) FBインスタンスの不正な使用例 

次の例は,表40で用いられているファンクションブロックAND̲EDGEを示す。 

例3 ファンクションブロック型宣言AND̲EDGE 

表40(項目No.6a,項目No.7a)の上記例でのファンクションブロックAND̲EDGEの宣言は,

次に等しい。 

FUNCTION̲BLOCK AND̲EDGE 

  VAR̲INPUT 

    X: BOOL; 

    Y: BOOL; 

  END̲VAR 

  VAR 

    X̲TRIG: R̲TRIG; 

    Y̲TRIG: F̲TRIG; 

  END̲VAR 

  VAR̲OUTPUT 

    Z: BOOL; 

  END̲VAR 

   

  X̲TRIG(CLK :=X); 

  Y̲TRIG(CLK :=Y); 

  Z :=X̲TRIG.Q AND Y̲TRIG.Q; 

background image

100 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

END̲FUNCTION̲BLOCK 

エッジ検出ファンクションブロックR̲TRIG及びF̲TRIGについては,表44参照。 

6.6.3.3 

ファンクションブロックインスタンス宣言 

ファンクションブロックインスタンスは,構造化変数についての記述と同じように宣言しなければなら

ない。 

ファンクションブロックインスタンスを宣言するとき,ファンクションブロックインスタンスの入力,

出力又はパブリック変数の初期値は,表41に示すようにファンクションブロック型識別子の後ろの代入

演算子に続く,括弧付きリストの中で宣言することができる。 

初期値が上記の初期化リストの中に記載されていない要素は,ファンクションブロック型宣言の中で宣

言されたデフォルト値をもつ。 

表41−ファンクションブロックインスタンスの宣言 

No. 

説明 

例 

FBインスタンスの宣言 

VAR 
 FB̲instance̲1, 

FB̲instance̲2: 

my 

FB̲Type; 
 T1, T2, T3: TON; 
END̲VAR 

その変数を初期化したFBインスタンスの宣言 

VAR 
 TempLoop: 

PID 

:=(PropBand 

:=2.5, 

Integral :=T#5s); 
END̲VAR 
初期値をファンクションブロックインスタンスの入
力及び出力に割り当てる。 

6.6.3.4 

ファンクションブロック呼出し 

6.6.3.4.1 

概要 

ファンクションブロックのインスタンスの呼出しは,テキスト表現又はグラフィック表現で表現できる。 

ファンクションブロック呼出し(正式呼出し及び略式呼出しを含む。)の特性は,ファンクションの特性

に次の拡張を加えたものと同じである。 

a) FBのテキスト表現呼出しは,ファンクションブロックのインスタンス名に続くパラメータリストで構

成する。 

b) グラフィック表現では,ファンクションブロックのインスタンス名はブロックの上に位置しなければ

ならない。 

c) ファンクションブロックのインスタンスの入力変数及び出力変数は格納され,構造データ型の要素と

して表現できる。したがって,ファンクションブロックの入力への代入及び出力へのアクセスは,次

ができなければならない。 

1) ファンクションブロックの呼出し時;これは代表的な使用法である。 

2) 呼出しから分離できる。これらの分離代入は,ファンクションブロックの次の呼出しで有効になら

なければならない。 

3) 割り付けられていない又は接続されていないファンクションブロックの入力は,それぞれの初期値,

又はある場合には,その一つ前の呼出しからの値を保持しなければならない。 

入出力変数又は別のファンクションブロック型の入力変数に対しては実パラメータを指定しないことが

background image

101 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

可能である。しかしながら,インスタンスは,例えば,ファンクションブロック(ボディ)で用いられる

前に初期化若しくは前の呼出しによって保存される,又はメソッドによって保存される有効値を備えてい

なければならない。そうでなければ,ランタイムエラーの原因になる。 

ファンクションブロック呼出しには更なる規則を適用する。 

d) ファンクションブロックがEN=0で呼び出される場合,実装者は,インスタンスに入力及び入出力変

数がセットされるか明記しなければならない。 

e) ファンクションブロックインスタンス名は,VAR̲INPUT宣言の中で入力変数として宣言されている

場合,又はVAR̲IN̲OUT宣言の中でファンクションブロックインスタンスの入出力変数として宣言さ

れている場合,ファンクションブロックインスタンスに対する入力として使用できる。 

f) 

VAR̲INPUT,VAR̲IN̲OUT又はVAR̲EXTERNAL構文経由で名前がファンクションブロックに渡され

るそれぞれ異なるファンクションブロックインスタンスの出力値は,アクセスできるが,ファンクシ

ョンブロックの中で変更できない。 

g) ファンクションブロックにVAR̲IN̲OUT又はVAR̲EXTERNAL構文でファンクションブロックのイン

スタンス名を渡すと,それをファンクションブロックの中から呼び出すことができる。 

h) 変数及びファンクションブロックインスタンス名だけが,VAR̲IN̲OUT構文を用いてファンクション

ブロックに渡すことができる。 

表42は,ファンクションブロック呼出しの項目を含む。 

表42−ファンクションブロック呼出し 

No. 

説明 

例 

完全な正式呼出し(テキスト表現だけ) 
 
呼出しでEN/ENOが必要な場合に用いられる。 

YourCTU(EN :=not B, 
 

CU :=r,  

PV :=c1,  

ENO=> next, 

Q => out, 

CV=> c2); 

不完全な正式呼出し(テキスト表現だけ) 

YourCTU(Q => out, 
 

CV=> c2); 

EN,CU,PV変数は,直前の呼出しの値又は以前に呼
出しがなければ初期値をもつことになる。 

グラフィック表現呼出し 

YourCTU 

+ ------ + 

| CTU | 

B -- | EN ENO | -- next 

r -- | CU Q | -- out  

c1 -- | PV CV | -- c2 

+ ------ + 

否定されたブール入力及び出力によるグラフィック
表現呼出し 

YourCTU 

+ ------ + 

| CTU | 

B -0 | EN ENO | -- next 

r -- | CU Q | 0- out  

c1 -- | PV CV | -- c2 

+ ------ + 

これらの構文の使用は入出力変数には禁止されてい
る。 

background image

102 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表42−ファンクションブロック呼出し(続き) 

No. 

説明 

例 

5a 

VAR̲IN̲OUTによるグラフィック表現呼出し 

5b 

変数へのVAR̲IN̲OUTの代入によるグラフィック表
現呼出し 

6a 

入力の分離代入によるテキスト表現呼出し 

FB̲Instance.Input :=x; YourTon.IN :=r; 
YourTon.PT :=t; 
YourTon(not Q=> out); 

6b 

入力の分離代入によるグラフィック表現呼出し 

+ ------ + 

 r-- | MOVE | --YourCTU.CU 
 

+ ------ + 

+ ------ + 

 c-- | MOVE | --YourCTU.PV 
 

+ ------ + 

YourCTU 

+ ------ + 

| CTU | 

1 -- | EN ENO | -- next 

-- | CU Q | 0- out  

-- | PV CV | -- 

+ ------ + 

FB呼出し後のテキスト表現出力読出し 
x:=FB̲Instance.Output; 

8a 

FB呼出しに代入したテキスト表現出力 

8b 

否定によるFB呼出しに代入したテキスト表現出力 

9a 

入力としてのファンクションブロックインスタンス
名によるテキスト表現呼出し 

VAR̲INPUT I̲TMR: TON; END̲VAR 
EXPIRED :=I̲TMR.Q; 
 
変数EXPIRED及びA̲VARは,この中及び次の例の中
でブール型の宣言をされていると仮定する。 

9b 

入力としてのファンクションブロックインスタンス
名によるグラフィック表現呼出し 

10a 

VAR̲IN̲OUTとしてファンクションブロックインス
タンス名によるテキスト表現呼出し 

VAR̲IN̲OUT IO̲TMR: TOF; END̲VAR 
 IO̲TMR (IN :=A̲VAR, PT :=T#10S); 
 EXPIRED :=IO̲TMR.Q; 

10b 

VAR̲IN̲OUTとしてファンクションブロックインス
タンス名によるグラフィック表現呼出し 

11a 

外部変数としてファンクションブロックインスタン
ス名によるテキスト表現呼出し 

VAR̲EXTERNAL EX̲TMR: TOF; END̲VAR 
 EX̲TMR(IN :=A̲VAR, PT :=T#10S); 
 EXPIRED :=EX̲TMR.Q; 

11b 

外部変数としてファンクションブロックインスタン
ス名によるグラフィック表現呼出し 

103 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例 直接及び分離パラメータ代入によるファンクションブロック呼出し 

YourCTU 

+ ------- + 

| CTU | 

B-0 | EN ENO | -- 

r-- | CU 

Q | 0-out 

c-- | PV 

CV | -- 

+ ------- + 

YourCTU (EN :=not b,  

CU :=r,  

PV :=c,  

not Q=> out); 

a) 入力の直接代入によるFB呼出し(代表的な使用法) 

+ ----- + 

 r-- | MOVE | --YourCTU.CU 

+ ----- + 

+ ----- + 

 c-- | MOVE | --YourCTU.PV 

+ ----- + 

YourCTU 

+ ----- + 

| CTU | 

-- | EN ENO | -- 

-- | CU 

Q | 0-out 

-- | PV CV | -- 

+ ------- + 

YourCTU.CU :=r; 

 YourCTU.PV :=V; 

 YourCTU(not Q=> out); 

b) 入力の分離代入によるFB呼出し 

YourCTU 

+ ----- + 

+ -- + 

| CTU | 

 a-- | NE | --0 | EN ENO | -- 

 b-- | | r-- | CU 

Q | 0-out 

+ -- + -- | PV CV | -- 

+ ------- + 

VAR a, b, r, out: BOOL;  

     YourCTU: CTU; END̲VAR 

  YourCTU (EN  :=NOT (a <> b), 

CU  :=r, 

NOT Q=> out); 

c) 出力への直接アクセスによるFB呼出し(代表的な使用法) 

また,否定の入力及び出力も許される。 

104 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

FF75 

+ ------- + 

SR 

bIn1 -- | S1 

Q1 | -- bOut3 

bIn2 -- | R 

+ ------- + 

VAR FF75: SR; END̲VAR (*宣言*) 

 FF75(S1 :=bIn1,     (* 呼出し *) 

R :=bIn2); 

 bOut3 :=FF75.Q1; 

(* 出力の代入 *) 

d) テキスト表現分離出力代入によるFB呼出し(呼出し後) 

TONs[12] 

+ ------- + 

| TON | 

bIn1 -- | IN 

Q | -- 

 T#10ms -- | PT 

ET | -- 

+ ------- + 

TONs[i] 

+ ------- + 

| TON | 

bIn1 -- | IN 

Q | -- 

 T#20ms -- | PT 

ET | -- 

+ ------- + 

VAR  

  TONs: array [0..100] OF TON; 

  i: INT; 

END̲VAR  

 TON[12](IN:=bIn1, PT:=T#10ms); 

 TON[i](IN:=bIn1, PT:=T#20ms); 

e) インスタンス配列を用いたFB呼出し 

myCooler.Cooling 

+ ------- + 

| TOF | 

bIn1 -- | IN 

Q | -- 

 T#30s -- | PT 

ET | -- 

+ ------- + 

TYPE  

  Cooler: STRUCT 

    Temp: INT; 

    Cooling: TOF;  

  END̲STRUCT; 

END̲TYPE 

VAR 

  myCooler: Cooler; 

END̲VAR  

 myCooler.Cooling(IN:=bIn1, PT:=T#30s); 

f) 構造体要素としてインスタンスを用いたFB呼出し 

6.6.3.4.2 

入力パラメータ及び出力パラメータの使用法 

図13及び図14は,ファンクションブロックの呼出しに関連したファンクションブロックの入力及び出

力パラメータの使用規則を要約したものである。 

入力及び入出力パラメータへの代入は,ファンクションブロックが次に呼び出されたときに有効になる。 

background image

105 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

FUNCTION̲BLOCK FB̲TYPE 
VAR̲INPUT 

In: 

REAL; END̲VAR 

VAR̲OUTPUT Out: 

REAL; END̲VAR 

VAR̲IN̲OUT In̲out: 

REAL; END̲VAR 

VAR 

M: 

REAL; END̲VAR 

END̲FUNCTION̲BLOCK 
VAR FB̲INST: FB̲TYPE; A, B, C: REAL; END̲VAR 

使用法 

a) ファンクションブロックの内部 

b) ファンクションブロックの外部 

1) 入力読出し 

M :=In; 

A:= FB̲INST.In;不許可 

[a)及びb)] 

2) 入力代入 

不許可a) 

//即時パラメータ代入による呼出し 
FB̲INST(In :=A); 
 
//分離代入 
FB̲INST.In :=A; 

3) 出力読出し 

M :=Out; 

//即時パラメータ代入による呼出し 
FB̲INST(Out=> B);  
 
//分離代入 
B :=FB̲INST.Out; 

4) 出力代入 

Out :=M; 

不許可a) 

5) 入出力読出し 

M :=In̲out; 

FB̲INST(In̲out=> C); 不許可 
C := FB̲INST.In̲out; 不許可 

6) 入出力代入 

In̲out :=M; c) 

//即時パラメータ代入による呼出し 
FB̲INST(In̲out :=C); 
FB̲INST.In̲out := C; 不許可 

注a) この表で“不許可”となっている使用は,実装者固有の予期せぬ副作用を起こし得る。 

b) ファンクションブロックの入力,出力パラメータ及び内部変数は,JIS B 3501に規定する“通信機能の特性”,

“ヒューマンマシンインタフェース機能(HMI機能)の特性”又は“プログラミング,デバッグ,監視,試験
及び文書化機能の特性”に従って読み書きしてもよい。 

c) VAR̲IN̲OUTブロックで宣言された変数は,ファンクションブロック内で変更してもよい。 

図13−ファンクションブロック入力及び出力パラメータの使用法(規則) 

図13の規則によって定義する入力及び出力パラメータの使用法は,図14による。 

 タグ1a,1bなどは,図13の規則である。 

図14−ファンクションブロック入力及び出力パラメータの使用法(規則の図解) 

入力 

出力 

入出力 

入出力 

1a 

4a 

2a 

3a 

5a 

6a 

1b 

FB̲INST 

4b 

3b 

5b 

6b 

2b 

 : 不許可 

 : 許可 

タグ 

106 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

次の例は,パラメータ及び外部変数としてのファンクションブロック名のグラフィック表現使用例であ

る。 

例 パラメータ及び外部変数としてのファンクションブロック名のグラフィック表現使用法 

FUNCTION̲BLOCK 

(* 外部インタフェース *) 

+--------------+ 

INSIDE̲A 

TON-- | I̲TMR EXPIRED | --BOOL 

+--------------+ 

(* ファンクションブロックボディ *) 

+----+ 

|MOVE| 

I̲TMR.Q-- | 

| --EXPIRED 

+----+ 

END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK 

(* 外部インタフェース *) 

+--------------+ 

| EXAMPLE̲A | 

BOOL-- | GO 

DONE | --BOOL 

+--------------+ 

(* ファンクションブロックボディ *) 

E̲TMR 

+------ + I̲BLK 

| TON | 

+--------------+ 

GO-- | IN 

Q | 

INSIDE̲A 

t#100ms-- | PT ET | 

E̲TMR-- | I̲TMR EXPIRED | --DONE 

+------ + 

+--------------+ 

END̲FUNCTION̲BLOCK 

a) 入力変数としてのファンクションブロックのインスタンス(注記参照) 

FUNCTION̲BLOCK 

(* 外部インタフェース *) 

+--------------+ 

INSIDE̲B 

TON-- |I̲TMR----I̲TMR| --TON 

BOOL-- |TMR̲GO EXPIRED| --BOOL 

+--------------+ 

107 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

(* ファンクションブロックボディ *) 

I̲TMR 

+------ + 

| TON | 

TMR̲GO-- | IN 

Q | --EXPIRED 

| PT ET | 

+------ + 

END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK 

(* 外部インタフェース *) 

+--------------+ 

| EXAMPLE̲B | 

BOOL-- | GO 

DONE | --BOOL 

+--------------+ 

(* ファンクションブロックボディ *) 

E̲TMR 

+------ + 

I̲BLK 

| TON | 

+--------------+ 

| IN 

Q | 

INSIDE̲B 

t#100ms-- | PT ET | 

E̲TMR-- |I̲TMR----I̲TMR| 

+ ------ + 

GO-- | TMR̲GO EXPIRED| --DONE 

+--------------+ 

END̲FUNCTION̲BLOCK 

b) 入出力変数としてのファンクションブロックのインスタンス名 

FUNCTION̲BLOCK 

(* 外部インタフェース *) 

+--------------+ 

INSIDE̲C 

BOOL-- |TMR̲GO EXPIRED| --BOOL 

+--------------+ 

VAR̲EXTERNAL X̲TMR: TON; END̲VAR 

108 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

(* ファンクションブロックボディ *) 

X̲TMR 

+------ + 

| TON | 

TMR̲GO-- | IN 

Q | --EXPIRED 

| PT ET | 

+------ + 

END̲FUNCTION̲BLOCK 

PROGRAM 

(* 外部インタフェース *) 

+--------------+ 

| EXAMPLE̲C | 

BOOL-- | GO 

DONE | --BOOL 

+--------------+ 

VAR̲GLOBAL X̲TMR: TON; END̲VAR 

(* プログラムボディ *) 

I̲BLK 

+--------------+ 

INSIDE̲C 

GO -- |TMR̲GO EXPIRED| -- DONE 

+--------------+ 

END̲PROGRAM 

c) 外部変数としてのファンクションブロックのインスタンス名 

注記 これは図13規則3)及び4)によって禁止されているINSIDE̲A内のI̲TMRの呼出しを示唆して

いるので,I̲TMRは,ここではグラフィック表現はしない。 

6.6.3.5 

標準ファンクションブロック 

6.6.3.5.1 

概要 

全てのプログラマブルコントローラ用プログラム言語で共通な標準ファンクションブロックの定義は,

次による。実装者は,追加の標準ファンクションブロックを規定してもよい。 

この箇条で標準ファンクションブロックのグラフィック表現を宣言しているところでは,表44の例のよ

うに,同等のテキスト表現宣言も同時に記載している場合もある。 

標準ファンクションブロックは,多重定義をしてもよく,拡張入力及び拡張出力をもっていてもよい。

そのようなファンクションブロック型の定義では,これらの入力及び出力の数及びデータ型に関する制約

を記載しなければならない。非標準のファンクションブロックでこのような機能を使用することは,この

規格の適用範囲外である。 

6.6.3.5.2 

双安定要素 

標準の双安定要素のグラフィック表現及びファンクションブロックボディは,表43による。 

background image

109 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表43−標準双安定ファンクションブロックa) 

No. 

説明/グラフィック表現 

ファンクションブロックボディ 

1a 

双安定ファンクションブロック(セット優先):SR(S1, R, Q1) 

+ ------ + 

| SR | 

 BOOL -- | S1 Q1 | -- BOOL 
 BOOL -- | R 

+ ------ + 

+ --- + 

 S1 -------------- | >=1 | -- Q1 
 

+ --- + | 

 R ------O | & | -- | 

 Q1 ------ | 

| | 

+ --- + + --- + 

1b 

ロング入力名による双安定ファンクションブロック(セット優先): 
SR(SET1, RESET, Q1) 

+ -------- + 

SR 

 BOOL -- | SET1 Q1 | -- BOOL 
 BOOL -- | RESET 

+ -------- + 

+ --- + 

 SET1 ------------ | >=1 | -- Q1 
 

+ --- + | 

 RESET --O | & | -- | 

 Q1 ------ | 

| | 

+ --- + + --- + 

2a 

双安定ファンクションブロック(リセット優先):RS(S, R1, Q1)  

+ ------ + 

| RS | 

 BOOL -- | S Q1 | -- BOOL 
 BOOL -- | R1 

+ ------ + 

+ --- + 

 R1 -------------O | & | -- Q1 
 

+ --- + | 

 S ------- | >=1 | -- | 

 Q1 ------ | 

| | 

+ --- + + --- + 

2b 

ロング入力名による双安定ファンクションブロック(リセット優
先): RS(SET, RESET1, Q1) 

+ -------- + 

RS 

 BOOL -- | SET Q1 | -- BOOL 
 BOOL -- | RESET1 | 
 

+ -------- + 

+ --- + 

 RESET1 ---------0 | & | -- Q1 
 

+ --- + | 

 SET ----- | >=1 | -- | 

 Q1 ------ | 

| | 

+ --- + + --- + 

注a) 出力変数Q1の初期状態は,ブール型変数の通常のデフォルト値である0でなければならない。 

6.6.3.5.3 

エッジ検出(R̲TRIG及びF̲TRIG) 

標準の立上りエッジ,立下りエッジ検出ファンクションブロックのグラフィック表現は,表44に示すと

おりでなければならない。これらのブロックの挙動は,この表の規定と等価でなければならない。この挙

動は,次の規則に一致する。 

a) R̲TRIGファンクションブロックのQ出力は,CLK入力が0から1に変化した直後のファンクション

ブロックの実行から次の実行まで,値がBOOL#1にならなければならない。また,次の実行で値が0

に戻らなければならない。 

b) F̲TRIGファンクションブロックのQ出力は,CLK入力が1から0に変化した直後のファンクション

ブロックの実行から次の実行まで,値がBOOL#1にならなければならない。また,次の実行で値が0

に戻らなければならない。 

background image

110 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表44−標準エッジ検出ファンクションブロック 

No. 

説明/グラフィック表現 

定義(ST言語) 

立上りエッジ検出器:R̲TRIG(CLK, Q) 

+ ------ + 

| R̲TRIG | 

 BOOL -- | CLK Q | -- BOOL 
 

+ ------ + 

FUNCTION̲BLOCK R̲TRIG 
  VAR̲INPUT  CLK: BOOL; END̲VAR 
  VAR̲OUTPUT Q: BOOL;   END̲VAR 
  VAR M: BOOL; END̲VAR 
   Q :=CLK AND NOT M; 
   M :=CLK; 
END̲FUNCTION̲BLOCK 

立下りエッジ検出器:F̲TRIG(CLK, Q) 

+ ------ + 

| F̲TRIG | 

 BOOL -- | CLK Q | -- BOOL 
 

+ ------ + 

FUNCTION̲BLOCK F̲TRIG 
  VAR̲INPUT CLK: BOOL; END̲VAR 
  VAR̲OUTPUT Q:  BOOL; END̲VAR 
  VAR M: BOOL;   END̲VAR 
   Q :=NOT CLK AND NOT M; 
   M :=NOT CLK; 
END̲FUNCTION̲BLOCK 

注記 R̲TRIG型インスタンスのCLK入力が値BOOL#1に接続している場合,“コールド再始動”からの最初の実行で

Q出力がBOOL#1になる。Q出力は,その後の実行ではBOOL#0になる。同じことは,CLK入力が未接続又は
FALSEに接続しているF̲TRIGのインスタンスに対しても当てはまる。 

6.6.3.5.4 

カウンタ 

標準カウンタファンクションブロックのグラフィック表現並びにその関係する入力及び出力は,表45

に示すとおりでなければならない。これらのファンクションブロックの演算は,対応するファンクション

ブロックボディに記述しているとおりでなければならない。 

表45−標準カウンタファンクションブロック 

No. 

説明/グラフィック表現 

ファンクションブロックボディ(ST言語) 

アップカウンタ 

1a 

CTU̲INT(CU, R, PV, Q, CV)又はCTU(..) 

+ ------ + 

| CTU | 

 BOOL -- > CU Q | -- BOOL 
 BOOL -- | R 

 INT -- | PV CV | -- INT 
 

+ ------ + 

次のグラフィック表現でもよい。 

+ -------- + 

| CTU̲INT | 

 BOOL -- > CU 

Q | -- BOOL 

 BOOL -- | R 

 INT -- | PV 

CV | -- INT 

+ -------- + 

VAR̲INPUT CU: BOOL R̲EDGE; ... 
/*データ型R̲EDGEによって内部的にエッジが検出
される。*/ 
 
IF R  
THEN CV :=0; 
ELSIF CU AND (CV < PVmax) 
   THEN  
   CV :=CV+1; 
END̲IF; 
 Q :=(CV >=PV); 

1b 

CTU̲DINT 

PV, CV: DINT 

1a参照 

1c 

CTU̲LINT 

PV, CV: LINT 

1a参照 

1d 

CTU̲UDINT 

PV, CV: UDINT 

1a参照 

1e 

CTU̲ULINT(CD, LD, PV, CV) PV, CV: ULINT 1a参照 

background image

111 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表45−標準カウンタファンクションブロック(続き) 

No. 

説明/グラフィック表現 

ファンクションブロックボディ(ST言語) 

ダウンカウンタ 

2a 

CTD̲INT(CD, LD, PV, Q, CV)又はCTD 

+ ------ + 

| CTD | 

 BOOL -- > CD Q | -- BOOL 
 BOOL -- | LD 

 INT -- | PV CV | -- INT 
 

+ ------ + 

次のグラフィック表現でもよい。 
 

+ -------- + 

| CTD̲INT | 

 BOOL -- > CU 

Q | -- BOOL 

 BOOL -- | LD 

 INT -- | PV 

CV | -- INT 

+ -------- + 

VAR̲INPUT CU: BOOL R̲EDGE; ... 
//データ型R̲EDGEによって内部的にエッジが検出
される。 
 
IF LD  
THEN  CV :=PV; 
ELSIF CD AND (CV > PVmin) 
   THEN CV :=CV-1; 
END̲IF; 
 Q :=(CV <=0); 

2b 

CTD̲DINT 

PV, CV: DINT 

2a参照 

2c 

CTD̲LINT 

PV, CV: LINT 

2a参照 

2d 

CTD̲UDINT 

PV, CV: UDINT 

2a参照 

2e 

CTD̲ULINT 

PV, CV: UDINT 

2a参照 

アップダウンカウンタ 

3a 

CTUD̲INT(CD, LD, PV, Q, CV)又はCTUD(..) 

+ -------- + 

| CTUD | 

 BOOL -- > CU 

QU | -- BOOL 

 BOOL -- > CD 

QD | -- BOOL 

 BOOL -- | R 

 BOOL -- | LD 

 INT -- | PV 

CV | -- INT 

+ -------- + 

次のグラフィック表現でもよい。 
 

+ -------- + 

| CTUD̲INT | 

 BOOL -- > CU 

QU | -- BOOL 

 BOOL -- > CD 

QD | -- BOOL 

 BOOL -- | R 

 BOOL -- | LD 

 INT -- | PV 

CV | -- INT 

+ -------- + 

VAR̲INPUT CU, CD: BOOL R̲EDGE; ... 
//データ型R̲EDGEによって内部的にエッジが検出
される。 
 

IF R  
THEN CV :=0; 
ELSIF LD  
  THEN CV :=PV; 
  ELSE 
    IF NOT (CU AND CD)  
    THEN 
      IF CU AND (CV < PVmax) 
      THEN CV :=CV+1; 
      ELSIF CD AND (CV > PVmin) 
        THEN CV :=CV-1; 
      END̲IF; 
    END̲IF; 
 END̲IF; 
 QU :=(CV >=PV); 
 QD :=(CV <=0); 

3b 

CTUD̲DINT 

PV, CV: DINT 

3a参照 

3c 

CTUD̲LINT 

PV, CV: LINT 

3a参照 

3d 

CTUD̲UDINT 

PV, CV: UDINT 

3a参照 

3e 

CTUD̲ULINT 

PV, CV: ULINT 

3a参照 

注記 リミット変数PVmin及びPVmaxの数値は,実装者依存である。 

background image

112 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.3.5.5 

タイマ 

標準タイマファンクションブロックのグラフィック表現は,表46のとおりでなければならない。これら

のファンクションブロックの演算は,図15に示したタイミングダイアグラムに規定するとおりとする。 

標準タイマファンクションブロックは,TIME又はLTIMEで多重定義して使用できる。又は標準タイマ

の基本データ型は,TIME又はLTIMEとして指定できる。 

表46−標準タイマファンクションブロック 

No. 

説明 

記号 

グラフィック表現 

1a 

多重定義パルス 

TP 

***: TP 

+ ------ + 

| *** | 

 BOOL -- | IN Q | -- BOOL 
 TIME -- | PT ET | -- TIME 
 

+ ------ + 

 
PT: 注記を参照 
IN: 入力(開始) 
PT: プリセット時間 
Q: 出力 
ET: 経過時間 

1b 

TIMEを用いたパルス 

TP̲TIME 

1c 

LTIMEを用いたパルス 

TP̲LTIME 

2a 

多重定義オン・ディレイ 

TON 

TON 

2b 

TIMEを用いたオン・ディレイ 

TON̲TIME 

2c 

LTIMEを用いたオン・ディレイ 

TON̲LTIME 

2d a) 

多重定義オン・ディレイ(グラフィック表現) 

T---0 

3a 

多重定義オフ・ディレイ 

TOF 

TOF 

3b 

TIMEを用いたオフ・ディレイ 

TOF̲TIME 

3c 

LTIMEを用いたオフ・ディレイ 

TOF̲LTIME 

3d a) 

多重定義オフ・ディレイ(グラフィック表現) 

0---T 

注記 計時動作中にPTの値を変更したときの効果,例えば,PTをt#0sにセットするとTPインスタンスの動作がリ

セットするなどは,実装者依存パラメータである。 

注a) テキスト言語では,項目No.2d及び3dを使用しない。 

図15は,標準タイマファンクションブロックのタイミングダイアグラムを示す。 

+ --------- + ++ ++ 

+---------+ 

IN | 

| || || 

-- + 

+ -- ++--++ --- + 

+ ------ 

t0 

t1 t2 t3 

t4 

t5 

+ ------ + 

+ ----- + + ----- + 

Q | 

| | 

-- + 

+ ----- + 

+ -- + 

+ --------- 

t0 

t0+PT 

t2 t2+PT t4 

t4+PT 

PT 

+ -- + 

+ -- + 

/| 

ET 

/ | 

: / 

0- + 

+ -- + 

+ -- + 

+ ------ 

t0 

t1 t2 

t4 

t5 

a) パルス(TP)のタイミングダイアグラム 

図15−標準タイマファンクションブロック−タイミングダイアグラム(規則) 

113 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+---------+ 

+ -- + + ---------- + 

 IN 

| | | 

-- + 

+ ----- + + -- + 

+ ------ 

t0 

t1 

t2 t3 t4 

t5 

+ -- + 

+ -- + 

| | 

| | 

-------- + + -------------------- + + ------ 

t0+PT t1 

t4+PT t5 

PT 

+ --+ 

+ -- + 

ET : 

/| 

/ | 

0 -- + 

+ ----- + 

+ -- + 

+ ------ 

t0 

t1 

t2 

t3 t4 

t5 

b) オン・ディレイ(TON)のタイミングダイアグラム 

+---------+ 

+ --- + 

+ ------- + 

 IN 

-- + 

+ ----- + 

+ ---- + 

+ ------------- 

t0 

t1 

t2 t3 

t4 

t5 

+ ------------ + +------------------------ + 

| | 

-- + 

+ -- + 

+ ------ 

t0 

t1+PT t 

t5+PT 

PT 

+ -- + 

+ ------ 

ET : 

/| 

/ | 

0---------+ 

+ -- + 

+ -------- + 

t1 

t3 

t5 

c) オフ・ディレイ(TOF)のタイミングダイアグラム 

図15−標準タイマファンクションブロック−タイミングダイアグラム(規則)(続き) 

6.6.3.5.6 

通信ファンクションブロック 

IEC 61131-5で,プログラマブルコントローラ用の標準通信ファンクションブロックを規定している。

これらのファンクションブロックは,装置の確認,ポーリングによるデータ収集,プログラムによるデー

タ収集,パラメトリック制御,インタロック制御,プログラムによる警報の通知及び接続の管理及び保護

といった通信機能を提供する。 

background image

114 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.4 

プログラム 

JIS B 3501で,プログラムは“全てのプログラム言語要素の論理的組合せで,PLCシステムによる機械

又はプロセスの制御のために必要な,意図された信号処理のためのプログラムの集合体”と規定している。 

プログラムの宣言及び利用法は,表47に示す付加的な項目及び次に示す違いのほかは,ファンクション

ブロックと全く同じである。 

a) プログラム宣言の区切り予約語は,PROGRAM...END̲PROGRAMとする。 

b) プログラムは,VAR̲ACCESS...END̲VAR構文を含むことができる。それは,IEC 61131-5で詳細に

規定している通信サービスの幾つかでアクセスできる名前付き変数を指定する方法を提供する。アク

セスパスによって,それらの変数をプログラムの入力,出力及び内部変数に関連付ける。 

c) プログラムは,リソースの中だけでインスタンス化できる。他方,ファンクションブロックは,プロ

グラム又はファンクションブロックの中でだけインスタンス化できる。 

d) プログラムは,そのグローバル変数及び内部変数の宣言の中で位置の割付けを含むことができる。不

完全な指定の直接表現による位置の割付け(例えば,6.5.5.4参照)は,プログラムの内部変数の宣言

でだけ使用できる。 

e) プログラムのオブジェクト指向項目は,この規格の適用範囲外である。 

表47−プログラム宣言 

No. 

説明 

例 

プログラムの宣言 
PROGRAM ... END̲PROGRAM 

PROGRAM myPrg ... END̲PROGRAM 

2a 

入力の宣言 
VAR̲INPUT ... END̲VAR 

VAR̲INPUT IN: BOOL; T1: TIME; END̲VAR 

2b 

出力の宣言 
VAR̲OUTPUT ... END̲VAR 

VAR̲OUTPUT OUT: BOOL; ET̲OFF: TIME; 
END̲VAR 

2c 

入出力の宣言 

VAR̲IN̲OUT ... END̲VAR 

VAR̲IN̲OUT A: INT; END̲VAR 

2d 

一時的変数の宣言 
VAR̲TEMP  ... END̲VAR 

VAR̲TEMP I: INT; END̲VAR 

2e 

静的変数の宣言 

VAR ... END̲VAR 

VAR B: REAL; END̲VAR 

2f 

外部変数の宣言 
VAR̲EXTERNAL ... END̲VAR 

VAR̲EXTERNAL B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL 

2g 

外部変数(定数)の宣言 

VAR̲EXTERNAL CONSTANT ... END̲VAR 

VAR̲EXTERNAL CONSTANT B: REAL; END̲VAR 
次に対応する。 
VAR̲GLOBAL B: REAL 

3a 

入力の初期化 

VAR̲INPUT  MN:  INT :=0; 

3b 

出力の初期化 

VAR̲OUTPUT RES: INT :=1; 

3c 

静的変数の初期化 

VAR B: REAL :=12.1; 

3d 

一時的変数の初期化 

VAR̲TEMP I: INT :=1; 

4a 

入力変数に対するRETAIN修飾子の宣言 

VAR̲INPUT RETAIN  X: REAL; END̲VAR 

4b 

出力変数に対するRETAIN修飾子の宣言 

VAR̲OUTPUT RETAIN  X: REAL; END̲VAR 

4c 

入力変数に対するNON̲RETAIN 修飾子の宣言 

VAR̲INPUT NON̲RETAIN  X: REAL; END̲VAR 

4d 

出力変数に対するNON̲RETAIN 修飾子の宣言 

VAR̲OUTPUT NON̲RETAIN X: REAL; END̲VAR 

4e 

静的変数に対するRETAIN修飾子の宣言 

VAR RETAIN X: REAL; END̲VAR 

4f 

静的変数に対するNON̲RETAIN修飾子の宣言 

VAR NON̲RETAIN X: REAL; END̲VAR 

background image

115 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表47−プログラム宣言(続き) 

No. 

説明 

例 

5a 

ローカルFBインスタンスに対するRETAIN修飾子の
宣言 

VAR RETAIN TMR1: TON; END̲VAR 

5b 

ローカルFBインスタンスに対するNON̲RETAIN修飾
子の宣言 

VAR NON̲RETAIN TMR1: TON; END̲VAR 

6a 

立上りエッジ入力のテキスト表現宣言 

PROGRAM AND̲EDGE 
VAR̲INPUT X: BOOL R̲EDGE; 
 

Y: BOOL F̲EDGE; 

END̲VAR 
VAR̲OUTPUT Z: BOOL; END̲VAR 
 Z :=X AND Y; (* ST 言語の例 *) 
END̲PROGRAM 

6b 

立下りエッジ入力のテキスト表現宣言 

上記を参照。 

7a 

立上りエッジ入力のグラフィック表現宣言(>) 

PROGRAM 
      (* 外部インタフェース *) 
 

+ --------- + 

| AND̲EDGE | 

 BOOL-- > X 

Z | --BOOL 

 BOOL-- < Y 

+ --------- + 

 
      (* FB ボディ *) 
 

+ -- + 

| & | 

X-- | | --Z 

Y-- | | 

+ -- + 

END̲PROGRAM 

7b 

立下りエッジ入力のグラフィック表現宣言(<) 

上記を参照。 

8a 

PROGRAM内でのVAR̲GLOBAL...END̲VAR宣言 

VAR̲GLOBAL  z1: BYTE;  END̲VAR 

8b 

PROGRAM型宣言内でのVAR̲GLOBAL CONSTANT宣言 VAR̲GLOBAL CONSTANT  z2: BYTE;  END̲VAR 

PROGRAM内でのVAR̲ACCESS...END̲VAR宣言 

VAR̲ACCESS 
  ABLE: STATION̲1.%IX1.1: BOOL READ̲ONLY ; 
  BAKER: 

STATION̲1.P1.x2: 

UINT 

READ̲WRITE; 
END̲VAR 

注記 項目No.2aからNo.7bまでは,ファンクションブロックに関する表40の同じ項目に相当する。 

6.6.5 

クラス 

6.6.5.1 

概要 

クラスは,オブジェクト指向の考え方を取り入れた言語要素であり,次の概念が特徴である。 

・ 公開される変数と隠蔽される変数とに区別したデータ構造の定義 

・ データ構造の要素の下で実行されるメソッド 

・ メソッド(アルゴリズム)及びデータ構造からなるクラス 

・ メソッドのプロトタイプをもつインタフェース及びインタフェースの実装 

background image

116 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ インタフェース及びクラスの継承 

・ クラスのインスタンス化 

注記 C#,C++,Java,UMLなどのようなITプログラム言語で用いる用語であるクラス及びオブジ

ェクトは,この規格のPLCプログラム言語で用いる用語である型及びインスタンスに相当する。

これを次に示す。 

ITプログラム言語:C#,C++,Java,UML 

標準のPLC言語 

クラス 

(=クラスの型) 

ファンクションブロック及びクラスの型 

オブジェクト (=クラスのインスタンス) 

ファンクションブロック及びクラスのイ
ンスタンス 

実装及び拡張メカニズムを用いたインタフェース及びクラスの継承は,図16による。 

図16−継承及びインタフェース実装の概要 

クラスは,オブジェクト指向プログラミングのために用意したPOUである。クラスは,基本的に変数及

びメソッドを含む。クラスは,メソッドの呼出し又は変数へのアクセスの前にインスタンス化しなければ

ならない。 

6.6.5.2 

クラス宣言 

クラス宣言の項目は,表48に規定する。 

a) 予約語CLASSに続けて,宣言するクラス名を示す識別子 

b) 終了予約語END̲CLASS 

c) VAR̲EXTERNAL構文によって宣言される変数の値は,クラス内から変更できる。 

d) VAR̲EXTERNAL CONSTANT構文によって宣言される定数の値は,クラス内から変更できない。 

e) 必要であれば,VAR...END̲VAR構文でクラスの変数の名前と型とを指定する。 

f) 

変数は初期化してもよい。 

g) VAR構文(静的)の変数は,PUBLIC宣言してもよい。パブリック変数は,FB出力へのアクセスと同

じ構文を用いて,クラス外からアクセスしてもよい。 

h) RETAIN又はNON̲RETAIN修飾子は,クラスの内部変数に使用できる。 

i) 

表16に規定するアスタリスク“*”表記は,クラスの内部変数の宣言で使用してもよい。 

j) 

変数には,PUBLIC,PRIVATE,INTERNAL又はPROTECTEDを指定してもよい。アクセス修飾子

PROTECTEDがデフォルトである。 

k) クラスは,基底クラスを拡張するために,他のクラスの継承をサポートしてもよい。 

l) 

クラスは,複数のインタフェースを実装してもよい。 

m) 他のファンクションブロック,クラス及びオブジェクト指向ファンクションブロックのインスタンス

インタフェース 

 クラス 

ファンクションブロック 

拡張する 

拡張する 

拡張する 

実装する 

実装する 

background image

117 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

は,変数宣言部VAR及びVAR̲EXTERNAL内で宣言できる。 

n) クラス内で宣言したクラスインスタンスは,曖昧さを排除するために(同じ名前解決範囲の)ファン

クションと同じ名前を使用しないほうがよい。 

クラスは,ファンクションブロックとは,次の差異がある。 

1) 予約語FUNCTION̲BLOCK及びEND̲FUNCTION̲BLOCKは,それぞれCLASS及びEND̲CLASSに

よって置き換えられる。 

2) 変数は,VAR構文の中でだけ宣言できる。VAR̲INPUT,VAR̲OUTPUT,VAR̲IN̲OUT及びVAR̲TEMP

では宣言できない。 

3) クラスにはボディはない。クラスはメソッドだけを定義してもよい。 

4) クラスのインスタンスの呼出しはできない。クラスのメソッドだけが呼出しできる。 

クラスの実装者は,表48に規定する項目の本質的に一貫したサブセットを提供しなければならない。 

表48−クラス 

No. 

説明 

解説 

CLASS ... END̲CLASS 

クラス定義 

1a 

FINAL指定子 

クラスは,基底クラスとして使用できない。 

ファンクションブロックから適用 

2a 

変数VAR ... END̲VARの宣言 

VAR B: REAL; END̲VAR 

2b 

変数の初期化 

VAR B: REAL :=12.1; END̲VAR 

3a 

内部変数に対するRETAIN修飾子 

VAR RETAIN X: REAL; END̲VAR 

3b 

内部変数に対するNON̲RETAIN修飾子 

VAR NON̲RETAIN X: REAL; END̲VAR 

4a 

クラス型宣言内でのVAR̲EXTERNAL宣言 

等価例については,表40参照 

4b 

クラス型宣言内でのVAR̲EXTERNAL 
CONSTANT宣言 

等価例については,表40参照 

メソッド及び指定子 

METHOD...END̲METHOD 

メソッド定義 

5a 

PUBLIC指定子 

メソッドはどこから呼び出してもよい。 

5b 

PRIVATE指定子 

メソッドは,定義されたPOUの内側からだけ呼出しできる。 

5c 

INTERNAL指定子 

メソッドは,同じ名前空間の内側からだけ呼出しできる。 

5d 

PROTECTED指定子 

メソッドは,定義されたPOUの内側及びその派生物からだけ呼
出しできる(デフォルト)。 

5e 

FINAL指定子 

メソッドはオーバライドされない。 

継承 

これらの項目は,表53の継承と同じである。 

EXTENDS 

クラスから継承したクラス(注記 FBからの継承はできない。) 

OVERRIDE 

メソッドは基底メソッドにオーバーライドする(6.6.7.3参照)。 

ABSTRACT 

抽象クラス−少なくとも一つのメソッドが抽象的である。 
抽象メソッド−このメソッドが抽象的である。 

アクセス参照 

9a 

THIS 

自身のメソッドの参照に用いる。 

9b 

SUPER 

基底クラス内のメソッドのアクセス参照に用いる。 

変数アクセス修飾子 

10a 

PUBLIC指定子 

変数は,どこからアクセスしてもよい。 

10b 

PRIVATE指定子 

変数は,定義されたPOUの内側からだけ呼出しできる。 

10c 

INTERNAL指定子 

変数は,同じ名前空間の内側からだけ呼出しできる。 

10d 

PROTECTED指定子 

変数は,定義されたPOUの内側及びその派生物からだけ呼出し
できる(デフォルト)。 

background image

118 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表48−クラス(続き) 

No. 

説明 

解説 

多態性 

11a 

VAR̲IN̲OUTによる多態性 

(基底)クラスのVAR̲IN̲OUTは,派生クラスのインスタンス
を代入してもよい。 

11b 

参照による多態性 

(基底)クラスの参照は,派生クラスのインスタンスの参照を
代入してもよい。 

次の例は,クラス宣言及びその使用法を示すものである。 

例 クラス宣言 

Class CCounter 

  VAR 

    m̲iCurrentValue: INT; 

(* デフォルトは0である *) 

    m̲bCountUp: BOOL:=TRUE; 

  END̲VAR 

  VAR PUBLIC 

    m̲iUpperLimit: INT:=+10000; 

    m̲iLowerLimit: INT:=−10000; 

  END̲VAR 

METHOD Count  (* ボディだけ *) 

    IF (m̲bCountUp AND m̲iCurrentValue < m̲iUpperLimit) THEN 

        m̲iCurrentValue:=m̲iCurrentValue+1; 

    END̲IF; 

    IF (NOT m̲bCountUp AND m̲iCurrentValue > m̲iLowerLimit) THEN 

        m̲iCurrentValue:=m̲iCurrentValue-1; 

    END̲IF; 

END̲METHOD 

METHOD SetDirection 

  VAR̲INPUT 

     bCountUp: BOOL; 

  END̲VAR 

  m̲bCountUp:=bCountUp; 

END̲METHOD 

END̲CLASS 

6.6.5.3 

クラスインスタンス宣言 

クラスインスタンスは,構造体変数の定義と同じように宣言しなければならない。 

クラスインスタンスを宣言するとき,表49に示すとおり,クラスインスタンスのパブリック変数は,ク

ラス識別子の後に,代入演算子に続けて括弧でくくった初期化リストで初期化できる。 

background image

119 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ 初期化リストに指定されていない要素は,クラス宣言の初期値をもたなければならない。 

表49−クラスインスタンス宣言 

No. 

説明 

例 

デフォルト初期化を伴うクラスインスタンスの宣
言 

VAR  
 MyCounter1: CCounter; 
END̲VAR 

パブリック変数の初期化を伴うクラスインスタン
スの宣言 

VAR 
MyCounter2: CCounter := 
 

(m̲iUpperLimit:=20000, m̲iLowerLimit:=

−20000); 
END̲VAR 

6.6.5.4 

クラスのメソッド 

6.6.5.4.1 

概要 

プログラマブルコントローラ言語では,オブジェクト指向プログラミングでよく知られているメソッド

の概念は,クラス定義の中に定める付加的な言語要素として採用する。 

メソッドは,クラスインスタンスのデータに対して行う演算を定義するために採用してもよい。詳細は,

次の細分箇条に定義する。 

6.6.5.4.2 

シグネチャ 

この規格では,3.87で定義するシグネチャは,METHODのパラメータインタフェースの同一性を明確に

定義する情報の集合である。 

シグネチャは,次で構成する。 

・ メソッド名 

・ 結果型 

・ 変数名,データ型及び全てのそのパラメータの順序,すなわち,入力,出力及び入出力変数 

ローカル変数は,シグネチャの一部ではない。VAR̲EXTERNAL及びコンスタント変数は,シグネチャに

関係しない。 

PUBLIC又はPRIVATEのようなアクセス修飾子は,シグネチャには関係しない。 

6.6.5.4.3 

メソッドの宣言及び実行 

クラスは,メソッドをもってもよい。 

メソッドの宣言は,次の規則を順守しなければならない。 

a) メソッドは,クラスのスコープ内で宣言する。 

b) メソッドは,この規格で指定するいずれかのプログラム言語で定義してもよい。 

c) テキスト形式の宣言では,メソッドはクラスの変数宣言の後に記載する。 

d) メソッドは,自身のVAR̲INPUT,内部一時変数VAR及びVAR̲TEMP,VAR̲OUTPUT,VAR̲IN̲OUT

及びメソッド結果を宣言してもよい。 

予約語VAR̲TEMP及びVARは同じ意味をもち,両方共内部変数用に許される(VARはファンクシ

ョンで用いる。)。 

e) メソッドの宣言は,アクセス修飾子PUBLIC,PRIVATE,INTERNAL又はPROTECTEDの一つを含ま

なければならない。アクセス修飾子が与えられていなければ,メソッドはデフォルトでPROTECTED

とする。 

120 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

f) 

メソッドの宣言は,追加の予約語OVERRIDE又はABSTRACTを含んでもよい。 

注記1 メソッドの多重定義は,この規格の適用範囲外である。 

メソッドの実行は,次の規則を順守しなければならない。 

g) 実行するとき,メソッドはその入力を読み込み,一時変数を用いて,その出力及び結果を計算する。 

h) メソッドの結果は,メソッド名に代入する。 

i) 

全てのメソッドの変数及び結果は(ファンクションの変数のように)一時的なものである。すなわち,

値はあるメソッドの実行から次のメソッドの実行まで保存されない。したがって,メソッド出力変数

の評価は,メソッド呼出しの直接のコンテキスト内だけで可能である。 

j) 

各メソッドの変数名及びクラスの変数名は,それぞれ異なる(固有の)ものでなければならない。 

それぞれ異なるメソッドのローカル変数名は,同じでもよい。 

k) 全てのメソッドは,クラス内で宣言された静的変数及び外部変数への読出し/書込みのアクセスをも

つ。 

l) 

全ての変数及び結果は,多値でもよい。すなわち,配列又は構造体でもよい。 

ファンクションと同様に定義されるので,メソッドの結果は式内のオペランドとして用いてもよい。 

m) 実行するとき,メソッドはこのクラス内で定める別のメソッドを使用してもよい。このクラスインス

タンスのメソッドは,予約語THISを用いて呼び出さなければならない。 

次の例は,クラスの簡略化された宣言を二つのメソッド及びメソッドの呼出しで,図解する。 

background image

121 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例1 

注記2 

メソッドのアルゴリズムは,

それら自身のデータ及びクラ

スデータへのアクセスをも

つ。 

(一時パラメータは括弧でく

くる。) 

メソッドをもつクラス(型)の宣言 

CLASS name 

 VAR vars; END̲VAR 

 VAR̲EXTERNAL externals; END̲VAR 

METHOD name̲1 

 VAR̲INPUT  inputs;  END̲VAR 

 VAR̲OUTPUT outputs; END̲VAR 

END̲METHOD 

METHOD name̲i 

 VAR̲INPUT  inputs;  END̲VAR 

 VAR̲OUTPUT outputs; END̲VAR 

END̲METHOD 

END̲CLASS 

注記3 

メソッドのこのグラフィック

表現は,図解のためだけのも

のである。 

メソッドの呼出し 
a) 結果の使用法(結果は宣言されている) 

 R1:= I.method1(inm1 :=A, outm1=> 

Y); 
b) 呼出しの使用法(結果の宣言は任意で

ある。) 

 I.method1(inm1 :=A, outm1=> Y); 

外部からのメソッド入力の代入 

I.inm1  := A;// 認められない; 

外部からのメソッド出力の読出し 

Y := I.outm1;// 認められない, 

例2 カウントアップのための二つのメソッドをもつクラスCOUNTER。メソッドUP5は同じクラス

のメソッドの呼出し方法を示す。 

CLASS COUNTER 

  VAR 

    CV: UINT; 

    Max: UINT :=1000; 

  END̲VAR 

// カウンタの現在値 

Class (形) 

externals 

vars 

Object (インスタンス) 

(vars) 

(inputs) 

(result) 

m̲1 algorithm 

(outputs) 

(vars) 

Method name̲i 

(inputs) 

(result) 

m̲i algorithm 

(outputs) 

Method name̲1 

(in-outs) 

inm1 

ClassX.name̲1 

outm1 

A

122 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  METHOD PUBLIC UP: UINT 

  VAR̲INPUT INC: UINT; END̲VAR 

  VAR̲OUTPUT QU: BOOL; END̲VAR 

    IF CV <=Max - INC  

       THEN CV :=CV + INC; 

QU :=FALSE; 

       ELSE QU :=TRUE; 

    END̲IF 

    UP :=CV; 

  END̲METHOD 

  METHOD PUBLIC UP5: UINT 

  VAR̲OUTPUT QU: BOOL; END̲VAR 

   UP5 :=THIS.UP(INC :=5, QU=> QU); 

  END̲METHOD 

END̲CLASS 

// INCによるカウントアップのメソッド 

// インクリメント 

// 上限の検出 

// 現在値のカウントアップ 

// 上限に到達 

// メソッドの結果 

// 5カウントアップ 

// 上限に到達 

// 内部のメソッド呼出し 

6.6.5.4.4 

メソッドの呼出し表現 

メソッドは,テキスト言語(表50)及びグラフィック言語で呼び出すことができる。 

全ての言語表現で,メソッドの呼出しには二つの異なるケースがある。 

a) 内部呼出し 自身のクラスインスタンスのメソッドの内部呼出し。メソッド名は,“THIS.”の後にな

ければならない。この呼出しは,自身のクラスインスタンス内の,別のメソッドから実行してもよい。 

b) 外部呼出し 別のクラスのインスタンスのメソッドの外部呼出し。テキスト言語では,メソッド名は,

インスタンス名及び“.”の後になければならない。この呼出しは,インスタンスが宣言されるメソッ

ド又はファンクションブロックボディから実行してもよい。 

注記 次の構文を用いる。 

− 構文A()は,グローバルファンクションAを呼び出すために用いる。 

− 構文THIS.A()は,自身のインスタンスのメソッドを呼び出すために用いる。 

− 構文I1.A()は,別のインスタンスI1のメソッドAを呼び出すために用いる。 

6.6.5.4.5 

テキスト形式の呼出し表現 

結果を伴うメソッドは,式のオペランドとして呼び出す。 

結果を伴わないメソッドは,式の内部で呼び出さない。 

メソッドは,正式又は略式で呼び出すことができる。 

メソッドの外部呼出しは,外部クラスインスタンスの名前も必要とする。 

例1 ... class̲instance̲name.method̲name (parameters) 

メソッドの内部呼出しは,インスタンス名の代わりにTHISを用いる。 

例2 ... THIS.method̲name (parameters) 

background image

123 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表50−メソッドのテキスト形式の呼出し−正式及び略式パラメータリスト 

No. 

説明 

例 

1a 

完全な正式呼出し(テキスト形式だけ) 

A :=COUNTER.UP(EN:=TRUE, INC :=B,  
 

START:=1, ENO=>%MX1, QU=> C); 

1b 

不完全な正式呼出し(テキスト形式だけ) 

A :=COUNTER.UP(INC :=B, QU=> C); 
 
START変数のデフォルト値は0(ゼロ)になる。 

略式呼出し(テキスト形式だけ) 
(順序どおり全てのパラメータを記述する。) 
 
EN/ENOを使用する場合には,項目No.1a又は項目
No.1bを使用する。 

A :=COUNTER.UP(B, 1, C); 
 
この呼出しは項目No.1aに等しいが,EN/ENOはない。 

6.6.5.4.6 

グラフィック表現 

メソッド呼出しのグラフィック表現は,ファンクション又はファンクションブロックの表現と類似して

いる。メソッド呼出しのグラフィック表現は,ブロックの左側に入力があり,ブロックの右側に出力があ

る長方型のブロックである。 

メソッド呼出しは,表18に定義するEN及びENOをサポートしてもよい。 

・ 内部呼出しは,ピリオドによって分けられたクラス名及びメソッド名をブロックの内側に示す。 

予約語THISは,ブロックの上に位置しなければならない。 

・ 外部呼出しは,ピリオドによって分けられたクラス名及びメソッド名をブロックの内側に示す。 

クラスインスタンス名は,ブロックの上に位置しなければならない。 

6.6.5.4.7 

エラー 

メソッド呼出しと無関係であるメソッド出力の使用は,エラーとして扱わなければならない。 

次の例を参照。 

例 内部及び外部メソッド呼出し 

  VAR 

  CT:  

COUNTER;  

  LIMIT: BOOL; 

  VALUE: UINT; 

  END̲VAR 

a) 構造化テキスト(ST)では 

1) メソッドの内部呼出し 

VALUE :=THIS.UP (INC :=5, QU=> LIMIT); 

2) メソッドの外部呼出し 

VALUE :=CT.UP (INC :=5, QU=> LIMIT); 

124 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

b) ファンクションブロック図(FBD)では 

1) メソッドの内部呼出し 

THIS 

+ ---------- + 

On -- | COUNTER.UP | -- VALUE 

| ---------- | 

5 -- | INC 

QU | -- LIMIT 

+ ---------- + 

別のメソッドによってクラス内で呼ばれる。 

THISは必須である。 

メソッドUPは結果を返す。 

グラフィック表現は,図解のためだけのもの

である。 

変数Onは,メソッド呼出しを有効にする。 

2) メソッドの外部呼出し 

CT 

+ ---------- + 

On -- | COUNTER.UP | -- VALUE 

| ---------- | 

5 -- | INC 

QU | -- LIMIT 

+ ---------- + 

CTは,別のクラス又はFB内で宣言されたク

ラスインスタンスである。 

メソッド又はファンクションブロックボディ

によって呼び出す。 

メソッドUPは結果を返す。 

グラフィック表現は,図解のためだけのもの

である。 

変数Onは,メソッド呼出しを有効にする。 

c) エラー:グラフィック形式及びテキスト形式の呼出しがないメソッド出力の使用 

CT.UP 

VALUE 

| ----- | | -----(  )--- 

 VALUE := CT.UP; 

メソッドがある実行から次の実行までその出

力を保存しないため,メソッド出力のこの評

価は不可能である。 

6.6.5.5 

クラス継承(EXTENDS,SUPER,OVERRIDE,FINAL) 

6.6.5.5.1 

概要 

PLC言語では,一般オブジェクト指向プログラミングに定める継承の概念を,新しい要素を作り出す方

法として適用させる。 

クラスの継承は,図17に示す。既存のクラスに基づいて,一つ以上のクラスは派生してもよい。これは,

複数回繰り返してもよい。 

注記 “多重継承“は,サポートされていない。 

派生(子)クラスは,一般的に追加メソッドによって基底(親)クラスを拡張する。 

用語である“基底”クラスは,全ての“祖先”,すなわち,親及びそれらの親クラスなどを表す。 

background image

125 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

図17−クラスの継承(図解) 

6.6.5.5.2 

クラスのEXTENDS 

クラスは,予約語EXTENDSを用いた一つの既存のクラス(基底クラス)から派生してもよい。 

例 CLASS X1 EXTENDS X; 

次の規則を適用しなければならない。 

a) 派生クラスは,次の例外を除いて,更なる宣言なしにその基底クラスから全てのメソッド(ある場合

には)を継承する。 

・ PRIVATEメソッドは,継承されない。 

・ INTERNALメソッドは,名前空間の外側からは継承されない。 

b) 派生クラスは,その基底クラスから全ての変数(ある場合には)を継承する。 

c) 派生クラスは,一つの基底クラスからだけ継承する。 

多重継承は,この規格ではサポートしていない。 

注記 クラスは,(予約語IMPLEMENTSを用いて)一つ以上のインタフェースを実装してもよい。 

d) 派生クラスは,基底クラスを拡張してもよい。すなわち,派生クラスは基底クラスの継承したメソッ

ド,変数に加えて,自身のメソッド及び変数をもってもよい。したがって,新しい機能をつくりだし

てもよい。 

e) 基底クラスとして用いられるクラスは,自身が派生クラスでもよい。そのとき,クラスは継承してい

たメソッド及び変数も派生クラスに渡す。 

これは複数回繰り返してもよい。 

f) 

基底クラスの定義を変更すれば,全ての派生クラス(及びそれらの子クラス)もそれらの機能を変更

する。 

6.6.5.5.3 

メソッドのOVERRIDE 

派生クラスは,メソッドの自身の実装によって,一つ以上の継承したメソッドをオーバライド(置換)

してもよい。基底メソッドをオーバライドするには,次の規則を適用する。 

a) 継承したメソッドをオーバライドするメソッドは,派生クラスのスコープ内で同じシグネチャ(メソ

ッド名及び変数)をもたなければならない。 

b) 継承したメソッドをオーバライドするメソッドは,次の特性をもたなければならない。 

・ 予約語OVERRIDEが予約語METHODの後に続く。 

・ 派生クラスは,同じ名前空間内のPUBLIC,PROTECTED又はINTERNALである基底のメソッドに

CLASS X11 EXTENDS X1 

METHOD (ma), (mb), (mc), (md), mf 

CLASS X12 EXTENDS X1 

METHOD (ma), (mb), (mc), (md), mg 

CLASS C 

METHOD mf 

EXTENDSを用いた 

クラス継承 

CLASS C1 EXTENDS C 

METHOD (mf), mg 

EXTENDS 

CLASS X 

METHOD (ma), (mb), (mc), md 

CLASS X1 EXTENDS X 

METHOD OVERRIDE mb 

METHOD (ma), mb, (mc), (md) 

EXTENDS 

126 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

アクセスする。 

・ 新しいメソッドは,同じアクセス修飾子をもたなければならない。FINAL指定子は,オーバライド

されたメソッドに使用してもよい。 

例 METHOD OVERRIDE mb; 

6.6.5.5.4 

クラス及びメソッドのFINAL 

FINAL指定子をもつメソッドは,オーバライドしてはならない。 

FINAL指定子をもつクラスは,基底クラスにはなれない。 

例1 METHOD FINAL mb;  

例2 CLASS FINAL c1;  

6.6.5.5.5 

EXTENDS,SUPER,OVERRIDE,FINALのエラー 

次の状況は,エラーとして扱わなければならない。 

a) 派生クラスが,その基底クラスの中で定義又は継承されている変数の名前を用いて,変数を定義して

いる。この規則は,PRIVATE変数には適用しない。 

b) 派生クラスが,その基底クラスの中に既に含まれている変数名を用いて,メソッドを定義している。 

c) 派生クラスが,直接であれ間接的であれ,それ自身の派生クラスから派生している。すなわち,再帰

は認められない。 

d) クラスは,基底クラスのメソッドをオーバライドしていないメソッドを予約語OVERRIDEを用いて定

義している。 

例 継承及びオーバライド 

クラスLIGHTROOMを拡張するクラス 

CLASS LIGHTROOM  

VAR LIGHT: BOOL; END̲VAR 

METHOD PUBLIC DAYTIME 

  LIGHT :=FALSE; 

END̲METHOD 

METHOD PUBLIC NIGHTTIME 

  LIGHT :=TRUE; 

END̲METHOD 

END̲CLASS 

CLASS LIGHT2ROOM EXTENDS LIGHTROOM  

VAR LIGHT2: BOOL; END̲VAR // 二つ目のLIGHT 

METHOD PUBLIC OVERRIDE DAYTIME  

  LIGHT  :=FALSE; 

// 親クラスの変数へのアクセス 

  LIGHT2 :=FALSE; 

//   固有の実装 

END̲METHOD 

127 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

METHOD PUBLIC OVERRIDE NIGHTTIME  

  LIGHT  :=TRUE; 

// 親クラスの変数へのアクセス 

  LIGHT2 :=TRUE; 

//   固有の実装 

END̲METHOD 

END̲CLASS 

6.6.5.6 

動的名前束縛(OVERRIDE) 

名前束縛は,メソッド名とメソッド実装との関連付けである。プログラムを実行する前の名前の束縛(例

えば,コンパイラによる。)は静的又は“事前”束縛と呼ぶ。プログラム実行中に行われる束縛は,動的又

は“実行時”束縛と呼ぶ。 

内部メソッドの呼出しの場合,予約語OVERRIDEによるオーバライド機能は,名前束縛の静的形式と動

的形式との違いを生じる。 

・ 静的束縛 内部メソッド呼出しを用いてメソッド名をクラスのメソッド実装に結び付ける,又は内部

メソッド呼出しを行うメソッドを含む。 

・ 動的束縛 メソッド名をクラスインスタンスの実際の型のメソッド実装に結び付ける。 

例1 動的名前束縛 

束縛に影響を及ぼすオーバライド 

// 宣言 

CLASS CIRCLE 

METHOD PUBLIC PI: LREAL 

// メソッドは,より正確でないPIを与える。 

  PI :=3.1415; 

END̲METHOD 

METHOD PUBLIC CF: LREAL 

// メソッドは,円周を与える。 

  VAR̲INPUT DIAMETER: LREAL; END̲VAR 

  CF :=THIS.PI() * DIAMETER; 

// メソッドPIの内部呼出し 

END̲METHOD 

// PIの動的束縛を使用 

END̲CLASS 

CLASS CIRCLE2 EXTENDS CIRCLE 

// PIをオーバライドするメソッドをもつクラス 

METHOD PUBLIC OVERRIDE PI: LREAL // メソッドは,より正確なPIを与える。 

  PI :=3.1415926535897; 

END̲METHOD 

END̲CLASS 

PROGRAM TEST 

VAR 

background image

128 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  CIR1: 

CIRCLE; 

// CIRCLEのインスタンス 

  CIR2: 

CIRCLE2; 

// CIRCLE2のインスタンス 

  CUMF1: LREAL; 

  CUMF2: LREAL; 

  DYNAMIC: BOOL; 

END̲VAR 

  CUMF1 :=CIR1.CF(1.0); 

// CIR1のメソッドの呼出し 

  CUMF2 :=CIR2.CF(1.0); 

// CIR2のメソッドの呼出し 

  DYNAMIC :=CUMF1 <> CUMF2; 

// 動的束縛の結果,真となる。 

END̲PROGRAM 

この例では,クラスCIRCLEは円の円周を計算(CF)する精度が低いメソッドPIの内部呼出しを含む。 

派生クラスCIRCLE2は,より正確なPIの精度でこのメソッドをオーバライドする。 

メソッドPIの呼出しは,CFの呼出しが実行されたインスタンスの型によって,CIRCLE.PI又は

CIRCLE2.PIのいずれかを参照。ここではCUMF2がCUMF1より正確である。 

例2 上記テキスト形式の例の簡略図 

6.6.5.7 

自クラス及び基底クラスのメソッド呼出し(THIS,SUPER) 

6.6.5.7.1 

概要 

自クラスの内側又は外側で定義されたメソッドにアクセスするために,予約語THIS及びSUPERが利用

できる。 

CLASS CIRCLE2 EXTENDS CIRCLE 

METHOD PUBLIC CF // 継承された 
VAR̲INPUT Diameter 
 CF :=THIS.PI()*Diameter; 

CLASS CIRCLE 

METHOD PUBLIC PI  
 PI :=3.1415; 

METHOD PUBLIC CF 
VAR̲INPUT Diameter 
 CF :=THIS.PI()*Diameter; 

(CIR1) 

(CIR2) 

PROGRAM TEST 
VAR 
CIR1:CIRCLE; 
CIR2:CIRCLE2; 
... 

EXTENDS 

宣言 

METHOD PUBLIC OVERRIDE PI 
 PI :=3.1415926535897; 

 CUMF1 :=CIR1.CF(1.0); 
    // CUMF1 =3.1415 

 CUMF2 :=CIR2.CF(1.0); 
// CUMF2 =3.1415926535897 

129 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.5.7.2 

THIS 

THISは,自クラスインスタンスへの参照である。 

予約語THISを用いて,このクラスのインスタンスの別のメソッドによって自クラスインスタンスのメ

ソッドを呼び出すことができる。 

THISは,INTERFACEの型の変数に渡してもよい。 

予約語THISは,別のインスタンス付きで使用できない。例えば,式myInstance.THISは許されない。 

例 予約語THISの使用 

これらの例は,便宜のために上記例をコピーしたものである。 

INTERFACE ROOM 

   METHOD DAYTIME   END̲METHOD 

// 昼の間に呼び出す。 

   METHOD NIGHTTIME END̲METHOD 

// 夜の間に呼び出す。 

END̲INTERFACE 

FUNCTION̲BLOCK ROOM̲CTRL 

// 

  VAR̲INPUT 

    RM: ROOM; // 入力変数の型としてのインタフェースROOM 

  END̲VAR 

  VAR̲EXTERNAL 

    Actual̲TOD: TOD; // グローバルの時間定義 

  END̲VAR 

  IF (RM=NULL) 

// 重要:有効なリファレンスをテストしてください! 

  THEN RETURN; 

  END̲IF; 

  IF Actual̲TOD >=TOD#20:15 OR Actual̲TOD <=TOD#6:00 

  THEN RM.NIGHTTIME(); 

// RMのメソッド呼出し 

  ELSE RM.DAYTIME(); 

  END̲IF; 

END̲FUNCTION̲BLOCK 

// 自インスタンスを割付けるために予約語THISを適用する 

CLASS DARKROOM IMPLEMENTS ROOM 

// 上記のROOM参照 

VAR̲EXTERNAL 

  Ext̲Room̲Ctrl: ROOM̲CTRL; 

// 上記のROOM̲CTRL参照 

END̲VAR 

METHOD PUBLIC DAYTIME;  

END̲METHOD 

METHOD PUBLIC NIGHTTIME; 

END̲METHOD 

METHOD PUBLIC EXT̲1 

  Ext̲Room̲Ctrl(RM :=THIS); // 自身のインスタンスでExt̲Room̲Ctrlを呼び出す。 

130 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

END̲METHOD 

END̲CLASS 

6.6.5.7.3 

SUPER 

SUPERは,基底クラス実装のメソッドに対するアクセスを提供する。 

予約語SUPERを用いて,基底(親)クラスインスタンスで有効なメソッドを呼び出すことができる。し

たがって,静的名前束縛が行われる。 

予約語SUPERは,別のインスタンス付きで使用できない。例えば,式myRoom.SUPER.DAYTIME()は

許されない。 

予約語SUPERは,さらなる派生メソッドにアクセスするために使用できない。例えば,

SUPER.SUPER.aMethodはサポートされていない。 

例 予約語SUPERの使用及び多態性 

上記例への代替実装としてSUPERを用いたLIGHT2ROOM 

便宜上,前述の例の一部を転記する。 

INTERFACE ROOM 

   METHOD DAYTIME   END̲METHOD 

// 昼の間に呼び出す。 

   METHOD NIGHTTIME END̲METHOD 

// 夜の間に呼び出す。 

END̲INTERFACE 

CLASS LIGHTROOM IMPLEMENTS ROOM 

VAR LIGHT: BOOL; END̲VAR 

METHOD PUBLIC DAYTIME 

  LIGHT :=FALSE; 

END̲METHOD 

METHOD PUBLIC NIGHTTIME 

  LIGHT :=TRUE; 

END̲METHOD 

END̲CLASS 

FUNCTION̲BLOCK ROOM̲CTRL 

  VAR̲INPUT  

    RM: ROOM; // 変数の型としてのインタフェースROOM 

  END̲VAR 

  VAR̲EXTERNAL 

    Actual̲TOD: TOD; // グローバルの時間定義 

  END̲VAR 

  IF (RM=NULL) 

// 重要:有効なリファレンスをテストしてください! 

  THEN RETURN; 

131 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  END̲IF; 

  IF Actual̲TOD >=TOD#20:15 OR  

Actual̲TOD <=TOD#06:00  

  THEN RM.NIGHTTIME(); 

// LIGHTROOM.NIGHTTIME又は 

// LIGHT2ROOM.NIGHTTIMEに対する 

// RM(動的束縛)のメソッドを呼び出す。 

  ELSE RM.DAYTIME(); 

  END̲IF; 

END̲FUNCTION̲BLOCK 

// 基底クラスのメソッドを呼び出すために予約語SUPERを適用する 

CLASS LIGHT2ROOM EXTENDS LIGHTROOM 

// 上記参照 

VAR LIGHT2: BOOL; END̲VAR 

// 二つ目のLIGHT 

METHOD PUBLIC OVERRIDE DAYTIME 

  SUPER.DAYTIME(); // LIGHTROOMのメソッドの呼出し 

  LIGHT2 :=TRUE; 

END̲METHOD 

METHOD PUBLIC OVERRIDE NIGHTTIME 

  SUPER.NIGHTTIME() // LIGHTROOMのメソッドの呼出し 

  LIGHT2 :=FALSE; 

END̲METHOD 

END̲CLASS 

// 多態性及び動的束縛の使用 

PROGRAM C 

VAR 

  MyRoom1: LIGHTROOM; 

// 上記参照 

  MyRoom2: LIGHT2ROOM; 

// 上記参照 

  My̲Room̲Ctrl: ROOM̲CTRL; // 上記参照 

END̲VAR 

 My̲Room̲Ctrl(RM :=MyRoom1); 

// LIGHTROOMのメソッドを呼び出す。 

My̲Room̲Ctrlの呼出し 

 My̲Room̲Ctrl(RM :=MyRoom2); 

// LIGHT2ROOMのメソッドを呼び出す。 

My̲Room̲Ctrlの呼出し 

END̲PROGRAM 

6.6.5.8 

ABSTRACTクラス及びABSTRACTメソッド 

6.6.5.8.1 

概要 

ABSTRACTモディファイアは,クラス又は単一メソッドと一緒に使用してもよい。実装者は,表48に

従ってこれらの項目の実装を宣言しなければならない。 

132 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.5.8.2 

抽象クラス 

クラス宣言内でのABSTRACTモディファイアの使用は,クラスは継承で用いられる別のクラスの基底型

になるように作られていることを示す。 

例 CLASS ABSTRACT A1 

抽象クラスは,次の特性をもつ。 

・ 抽象クラスは,インスタンス化できない。 

・ 抽象クラスは,少なくとも一つの抽象メソッドを含まなければならない。 

抽象クラスから派生した(非抽象)クラスは,全ての継承した抽象メソッドの実際の実装を含まなけれ

ばならない。 

抽象クラスは,入力又は入出力パラメータの型として使用してもよい。 

6.6.5.8.3 

抽象メソッド 

抽象クラスから派生するクラスは,派生クラス自身がABSTRACTと示されていない限り,抽象クラス内

のABSTRACTと示される,全てのメソッドを実装しなければならない。 

インタフェースからクラスに引き継がれるメソッドは,実装されていなければ,予約語ABSTRACTを

使用しなければならない。 

予約語ABSTRACTは,予約語OVERRIDEを組み合わせて使用してはならない。 

予約語ABSTRACTは,抽象クラスのメソッドに対してだけ使用できる。 

例 METHOD PUBLIC ABSTRACT M1 

6.6.5.9 

メソッドアクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

メソッドごとに,どこからメソッドの呼出しが許容されるかを定義しなければならない。それらは,予

約語METHODに続けて,次のアクセス修飾子の一つを用いて定義する。 

・ PROTECTED 継承を実装する場合に,アクセス修飾子PROTECTEDが適用できる。それらのメソッド

はクラスの内側から及び全ての派生クラスの内側からだけアクセス可能であることを示している。 

PROTECTEDはデフォルトであり,省略できる。 

注記 継承を実装しない場合,デフォルトのアクセス修飾子PROTECTEDは,PRIVATEと同じ結果

になる。 

・ PUBLIC アクセス修飾子PUBLICは,クラスを使用できる任意の場所からアクセスできるメソッド

であることを示す。 

・ PRIVATE アクセス修飾子PRIVATEは,クラス自身の内側からだけアクセスできるメソッドである

ことを示す。 

・ INTERNAL 名前空間を実装する場合,アクセス修飾子INTERNALが適用できる。INTERNALは,ク

ラスを宣言するNAMESPACE内からだけメソッドにアクセスできないことを表す。 

メソッドのプロトタイプへのアクセスは,暗黙で常にPUBLICである。したがって,メソッドのプロト

タイプに対してはアクセス修飾子を用いない。 

不適切な使用は,全てエラーとして扱わなければならない。 

例 メソッド用アクセス修飾子 

クラスCで定義されているメソッドのアクセス可否(呼出し)の図 

a) アクセス修飾子:PUBLIC,PRIVATE,INTERNAL,PROTECTED 

− PUBLIC クラスB(クラスCでも)の内側からの呼出しM1によってM1にアクセス可

能 

background image

133 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− PRIVATE クラスCの内側だけからの呼出しM2によってM2にアクセス可能 

− INTERNAL NAMESPACE A(クラスB,クラスCでも)の内側からの呼出しM3によ

ってM3にアクセス可能 

− PROTECTED クラスC̲derived(クラスCでも)の内側からの呼出しM4によってM4

にアクセス可能 

b) 内側又は外側からのメソッド呼出し 

− M2は,クラスCの内側から予約語THISを付けて呼び出す。 

− M1,M3及びM4は,クラスCの外側から呼び出す。ただし,M4の場合は,予約語SUPER

を付けて呼び出す。 

6.6.5.10 変数アクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

VAR構文では,どこから変数のアクセスが許容されるかを定義しなければならない。それらは,予約語

VARに続けて,次のアクセス修飾子の一つを用いて定義する。 

注記 アクセス修飾子は,RETAIN又はCONSTANTのような別の指定子と任意の順番で組み合わせて

もよい。 

・ PROTECTED 継承を実装する場合,アクセス修飾子PROTECTEDが適用できる。アクセス修飾子

PROTECTEDは,クラスの内側から又は全ての派生クラスの内側からだけ変数にアクセスできること

を表す。PROTECTEDはデフォルトであり,省略できる。 

継承が実装されていても使用されない場合,PROTECTEDはPRIVATEと同じ結果になる。 

・ PUBLIC アクセス修飾子PUBLICは,クラスを使用できる任意の場所からアクセスできる変数であ

ることを示す。 

・ PRIVATE アクセス修飾子PRIVATEは,クラス自身の内側からだけアクセスできる変数であること

を示す。 

継承が実装されない場合,PRIVATEはデフォルトであり,省略してもよい。 

・ INTERNAL 名前空間を実装する場合,アクセス修飾子INTERNALが適用できる。INTERNALは,ア

クセス修飾子クラスが宣言されているNAMESPACE内からだけ変数にアクセスできることを表す。 

不適切な使用は,全てエラーとして扱わなければならない。 

呼出し M1 

NAMESPACE A  

CLASS B 

CLASS C 

 PRIVATE METHOD M2 

 PUBLIC METHOD M1 

 INTERNAL METHOD M3 

 PROTECTED METHOD M4 

CLASS C̲derived 

呼出しM2 

呼出し M3 

a)メソッド呼出し 

My̲Class 

My̲Class̲derived 

METHOD Mx 

呼出しM4 

SUPER 

THIS 

background image

134 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.6 

インタフェース 

6.6.6.1 

概要 

オブジェクト指向プログラミングでは,インタフェースの概念は,クラスとしてのその実装からインタ

フェース仕様の分離を規定するために導入する。これによって,共通のインタフェース仕様に対し,異な

る実装が可能になる。 

インタフェースの定義は,予約語INTERFACEとそれに続くインタフェース名から始まり,予約語

END̲INTERFACEで終わる(表51参照)。 

インタフェースは,(暗黙的にパブリックな)メソッドプロトタイプの集合を含んでもよい。 

6.6.6.2 

インタフェースの使用法 

インタフェース仕様は,二つの方法で使用してもよい。 

a) クラス宣言内において これらは,クラスがどのメソッドを実装しなければならないかを指定する。

例えば,図18に示すようにインタフェース仕様の再使用に用いる。 

b) 変数の型として 型がインタフェースである変数は,(実装)クラスのインスタンスのリファレンスで

あり,使用前に代入しなければならない。インタフェースは,入出力変数として使用してはならない。 

表51−インタフェース 

No. 

説明 

予約語 

解説 

INTERFACE ... END̲INTERFACE 

インタフェースの定義 

メソッド及び指定子 

METHOD ... END̲METHOD 

メソッドの定義 

継承 

EXTENDS 

インタフェースを継承したインタフェースであることを示す。 

インタフェースの使用法 

4a 

IMPLEMENTS インタフェース 

クラス宣言においてインタフェースを実装する。 

4b 

IMPLEMENTS 複数のインタフェース 

クラス宣言において複数のインタフェースを実装する。 

4c 

変数の型としてのインタフェース 

インタフェースの実装(ファンクションブロックインスタンス)
へのリファレンス。 

6.6.6.3 

メソッドプロトタイプ 

メソッドプロトタイプは,インタフェースとともに使用される限定的なメソッド宣言である。メソッド

プロトタイプは,メソッド名,VAR̲INPUT,VAR̲OUTPUT及びVAR̲IN̲OUT変数,並びにメソッドの(型)

を含む。メソッドプロトタイプの定義は,アルゴリズム(コード)及び一時変数を含まない。すなわち,

メソッドプロトタイプは,実装を含むものではない。 

メソッドプロトタイプへのアクセスは,暗黙的に常にPUBLICである。そのため,メソッドプロトタイ

プではアクセス修飾子は使用しない。 

INTERFACE general̲driveについての図解 

a) メソッドプロトタイプ(アルゴリズムなし)  

b) クラスdrive̲A及びクラスdrive̲B(INTERFACE general̲driveを実装する。) 

これらのクラスは,アルゴリズムが異なるメソッドをもつ。 

background image

135 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

図18−派生クラスを伴うインタフェース(図解) 

6.6.6.4 

クラス宣言でのインタフェースの使用法(IMPLEMENTS) 

6.6.6.4.1 

概要 

クラスは,予約語IMPLEMENTSを用いて一つ以上のINTERFACEを実装できる。 

例 CLASS B IMPLEMENTS A1, A2; 

クラスは,INTERFACE仕様に含まれるメソッドプロトタイプによって指定される全てのメソッドアル

ゴリズムを実装しなければならない。 

実装しないメソッドプロトタイプがあるクラスは,ABSTRACTを付す必要があり,インスタンス化もで

きない。 

注記 メソッドプロトタイプの実装は,メソッド内に追加の一時変数をもつことができる。 

6.6.6.4.2 

エラー 

次の状況は,エラーとして扱わなければならない。 

a) 基底(親)インタフェースで定義された全て又は一部のメソッドを実装していないクラスをインスタ

ンス化する場合 

b) インタフェースでの定義と同名ではあるが,シグネチャが異なるメソッドをクラスが実装する場合 

c) インタフェースでの定義と同名ではあるが,アクセス修飾子PUBLIC又はINTERNALが付いていない

メソッドをクラスが実装する場合 

6.6.6.4.3 

例 

次の例は,クラス内のインタフェースの宣言及びメソッドの外部呼出しによる使用法を示す。 

例 クラスがインタフェースを実装する。 

// 宣言 

INTERFACE ROOM 

  METHOD DAYTIME   END̲METHOD 

//日中に呼び出される 

  METHOD NIGHTTIME END̲METHOD  

//夜間に呼び出される 

END̲INTERFACE 

b) クラスがインタフェースを実装する 

a) メソッドプロトタイプ 

それぞれ異なるアルゴリズムの

メソッド 

METHOD stop 

入力及び出力及び入出力 

アルゴリズムY 

INTERFACE 

general̲drive 

METHOD start 

入力及び出力及び入出力 

(アルゴリズムなし) 

CLASS drive̲A 

IMPLEMENTS general̲drive 

METHOD start 

入力及び出力及び入出力 

アルゴリズムX 

CLASS drive̲B 

IMPLEMENTS general̲drive 

METHOD start 

入力及び出力及び入出力 

アルゴリズムV 

METHOD stop 

入力及び出力及び入出力 

アルゴリズムW 

METHOD stop 

入力及び出力及び入出力 

(アルゴリズムなし) 

136 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

CLASS LIGHTROOM IMPLEMENTS ROOM 

  VAR LIGHT: BOOL; END̲VAR 

  METHOD PUBLIC DAYTIME 

    LIGHT :=FALSE; 

  END̲METHOD 

  METHOD PUBLIC NIGHTTIME 

    LIGHT :=TRUE; 

  END̲METHOD 

END̲CLASS 

//使用法(メソッドの外部呼出しによる。) 

PROGRAM A 

  VAR  MyRoom : LIGHTROOM; END̲VAR; 

// クラスのインスタンス化 

  VAR̲EXTERNAL Actual̲TOD: TOD; END̲VAR; 

// TOD型のグローバル変数を参照。 

  IF Actual̲TOD >=TOD#20:15 OR Actual̲TOD <=TOD#6:00 

   THEN MyRoom.NIGHTTIME(); 

   ELSE MyRoom.DAYTIME(); 

  END̲IF; 

END̲PROGRAM 

6.6.6.5 

変数の型としてのインタフェースの使用法 

6.6.6.5.1 

概要 

インタフェースは,変数の型として使用してもよい。その変数は,このインタフェースを実装するクラ

スのインスタンスへのリファレンスである。その変数は,使用前にクラスのインスタンスを代入しなけれ

ばならない。この規則は,変数を使用可能な全ての場合に適用する。 

次の値は,INTERFACE型の変数に代入してもよい。 

a) インタフェースを実装するクラスのインスタンス 

b) インタフェースを実装するクラスから(EXTENDSによって)派生したクラスのインスタンス 

c) INTERFACEと同じ型又は派生した型の別の変数 

d) 無効なリファレンスを示す特殊な値NULL。他に初期化されていなければ変数の初期値にもなる。 

INTERFACE型の変数は,等価性について,同じINTERFACE型の別の変数と比較してもよい。変数が

同じインスタンスを参照する場合,又は両方の変数がNULLに等しい場合,結果はTRUEでなければなら

ない。 

6.6.6.5.2 

エラー 

インタフェース型の変数は,使用前に値が代入され,適切なクラスのインスタンスが代入されたことが

検証されなければならない。そうでない場合,実行時エラーが発生する。 

注記 実行時エラーを避けるために,プログラミングツールは,デフォルトの“ダミー”手段を提供

137 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

してもよい。もう一つの方法は,代入されたかどうかを前もって確認することである。 

6.6.6.5.3 

例 

例1及び例2は,変数の型としてのインタフェースの宣言及び使用法を示す。 

例1 インタフェースのメソッドの呼出しを伴うファンクションブロック型 

// 宣言 

INTERFACE ROOM 

  METHOD DAYTIME   END̲METHOD 

//日中に呼び出される。 

  METHOD NIGHTTIME END̲METHOD 

//夜間に呼び出される。 

END̲INTERFACE 

CLASS LIGHTROOM IMPLEMENTS ROOM  

  VAR LIGHT : BOOL; END̲VAR 

  METHOD PUBLIC DAYTIME 

    LIGHT :=FALSE; 

  END̲METHOD 

  METHOD PUBLIC NIGHTTIME 

    LIGHT :=TRUE; 

  END̲METHOD 

END̲CLASS 

FUNCTION̲BLOCK ROOM̲CTRL 

  VAR̲INPUT RM: ROOM; END̲VAR 

// (入力)変数の型としてのインタフェース 

  VAR̲EXTERNAL  

   Actual̲TOD: TOD; END̲VAR 

// TOD型のグローバル変数を参照。 

  IF (RM=NULL) 

// 重要:有効なリファレンスのテスト 

  THEN RETURN; 

  END̲IF; 

  IF  Actual̲TOD >=TOD#20:15 OR 

      Actual̲TOD <=TOD#06:00  

  THEN RM.NIGHTTIME(); 

// RMのメソッドの呼出し 

  ELSE RM.DAYTIME(); 

  END̲IF; 

END̲FUNCTION̲BLOCK 

138 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

// 使用法 

PROGRAM B 

  VAR 

// インスタンス化 

    My̲Room:  

LIGHTROOM; 

// LIGHTROOMがROOMを実装することを参照 

    My̲Room̲Ctrl: ROOM̲CTRL; 

// 上記のROOM̲CTR参照 

  END̲VAR 

  My̲Room̲Ctrl(RM :=My̲Room); 

// クラスのインスタンスを入力とするFBの呼出し 

END̲PROGRAM 

この例では,ファンクションブロックは,インタフェース型の変数をパラメータとして宣言

している。ファンクションブロックインスタンスの呼出しは,インタフェースを実装するクラ

スのインスタンス(参照)を(ファンクションブロックの入力,出力,入出力又は結果として)

この変数に渡す。その後,クラス内で呼び出されたメソッドは,渡されたクラスのインスタン

スのメソッドを使用する。この使用によって,インタフェースを実装するそれぞれ異なるクラ

スのインスタンスを渡すことができる。 

宣言: 

二つのメソッドをもつインタフェースROOM及びそのインタフェースを実装するクラス

LIGHTROOM 

インタフェースROOM型の入力変数RMをもつファンクションブロックROOM̲CTRL 

ROOM̲CTRLは,入力変数RMに代入されたインスタンスのメソッドを呼び出す。 

使用法: 

プログラムBは,クラスLIGHTROOM及びファンクションブロックROOM̲CTRLをインスタ

ンス化し,クラスインスタンスMy̲RoomをインタフェースROOM型の入力変数RMへ渡してフ

ァンクションブロックインスタンスMy̲Room̲Ctrlを呼び出す。 

background image

139 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例2 上記例1における関係の図解 

注記 ファンクションブロックには実装されたメソッドはないが,渡されたクラスインスタン

スのメソッドを呼び出す。 

6.6.6.6 

インタフェースの継承(EXTENDS) 

6.6.6.6.1 

概要 

PLC言語では,一般のオブジェクト指向プログラミングで定義する継承及び実装の概念を,図19 a),b)

又はc)のいずれかに示す新しい要素を作り出すために採用する。 

FB ROOM̲CTRL 

 VAR̲INPUT  
          RM : ROOM; 
 
... RM.DAYTIME ... 
... RM.NIGHTTIME ... 

(クラス形) 

METHOD DAYTIME 

METHOD NIGHTTIME 

CLASS LIGHTROOM 

(FB形) 

METHOD DAYTIME 

METHOD NIGHTTIME 

INTERFACE ROOM 

宣言: 

使用法: 

a)FB宣言内のINTERFACE 

FBがインタフェースを実装する 

使用法: 

b)変数RMの形としてのINTERFACE ROOM  

FB ROOM̲CTRL 

VAR̲INPUT  
  RM : ROOM; 
 
... RM.DAYTIME ... 
... RM.NIGHTTIME ... 

My̲Room 

使用法: 

My̲Room̲Ctrl 

d)インスタンス化:ROOM̲CTRL 

c)インスタンス化:My̲Room 

METHOD DAYTIME 

METHOD NIGHTTIME 

CLASS LIGHTROOM 

My̲Room 

e)呼出し: 

FBインスタンスを渡す 

background image

140 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

a) インタフェースの継承 派生(子)インタフェースは,既に定義された基底(親)インタフェースを

継承(EXTENDS)する。 

b) クラスでの実装 派生クラスは,既に定義された一つ以上のインタフェースを実装(IMPLEMENTS)

する。 

c) クラスの継承 派生クラスは,既に定義された基底クラスを継承(EXTENDS)する。 

継承の階層の図解 

a) 予約語EXTENDSを用いたインタフェースの継承 
b) 予約語IMPLEMENTSを用いたクラスでのインタフェースの実装 
c) 予約語EXTENDS及びOVERRIDEを用いたクラスの継承 
 

図19−インタフェース及びクラスの継承(図解) 

図19 a)に示すインタフェースの継承では,既存のインタフェースに基づいて,一つ以上のインタフェー

スを派生させることができる。 

インタフェースは,予約語EXTENDSを用いて,一つ以上の既存のインタフェース(基底インタフェー

ス)から派生してもよい。 

例 INTERFACE A1 EXTENDS A 

次の規則を適用しなければならない。 

1) 派生(子)インタフェースは,追加の宣言なしにその基底(親)インタフェースから全てのメソッド

プロトタイプを継承する。 

2) 派生インタフェースは,任意の数の基底インタフェースを継承できる。 

CLASS X EXTENDS B 

METHOD (ma), (mb), (mc), md 

CLASS X1 EXTENDS X 
METHOD OVERRIDE mb 

METHOD (ma), mb, (mc), (md) 

CLASS X11 EXTENDS X1 

METHOD (ma), (mb), (mc), (md), mf 

CLASS X12 EXTENDS X1 

METHOD (ma), (mb), (mc), (md), mg 

INTERFACE A 

METHOD ma 

INTERFACE A1 EXTENDS A 

METHOD (ma), mb 

INTERFACE A2 EXTENDS A 

METHOD (ma), mc 

CLASS C 

METHOD mf 

c)クラスの継承 
  (EXTENDS) 

b)クラスでの実装 
  (IMPLEMENTS) 

IMPLEMENTS 

EXTENDS 

EXTENDS 

多重継承は禁止 

多重実装 

CLASS B IMPLEMENTS A1, A2 

METHOD (ma),  (mb),  (mc) 

EXTENDS 

a)インタフェースの継承 
  (EXTENDS) 

(ABSTRACTとして部分

的に実装する場合もあ

る。) 

CLASS C1 EXTENDS C 

METHOD (mf), mg 

141 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3) 派生インタフェースは,メソッドプロトタイプの集合を拡張してもよい。すなわち,派生インタフェ

ースは,その基底インタフェースにないメソッドプロトタイプを追加してもよい。これによって新た

な機能を追加できる。 

4) 基底インタフェースとして使用されるインタフェースは,それ自身派生インタフェースでもよい。す

なわち,そのようなインタフェースは,その派生インタフェースとして継承したメソッドプロトタイ

プも渡す。これを複数回繰り返してもよい。 

5) 基底インタフェースの定義を変更した場合,全ての派生インタフェース(及びそれぞれの子)もこの

変更した機能をもつ。 

6.6.6.6.2 

エラー 

次の状況はエラーとして扱わなければならない。 

a) インタフェースが,その基底インタフェースのメソッドプロトタイプと同じ名前である追加のメソッ

ドプロトタイプを[6.6.6.6.1の3)の規則に従って]定義する。 

b) インタフェースが,直接又は間接的にかかわらず,その自身の基底インタフェースである。すなわち,

再帰は認められない。 

注記 クラスに関して6.6.5.5に規定するOVERRIDE特性は,インタフェースには適用しない。 

6.6.6.7 

実装評価代入 

6.6.6.7.1 

概要 

実装評価代入は,インスタンスが特定のインタフェースを実装するかどうかを評価するために用いる(表

52参照)。これはクラス及びファンクションブロック型に適用できる。 

参照したインスタンスがインタフェースを実装するクラス又はファンクションブロック型のものであれ

ば,実装評価代入の結果はこのインスタンスに対して有効なリファレンスになる。そうでない場合,実装

評価代入の結果はNULLである。 

実装評価代入構文は,インタフェースのリファレンスからクラス(又はファンクションブロック)のリ

ファレンスへ安全な型変換(キャスト),又は基底型の一つのリファレンスから派生型のリファレンスへの

安全な型変換(ダウンキャスト)のためにも使用できる。 

実装評価代入の結果は,使用する前にNULLと同じでないことを評価しなければならない。 

6.6.6.7.2 

テキスト表現 

命令リスト(IL)では,演算子“ST?”(保存)は,次の例に示すように用いる。 

例1 

LD 

interface2 

// ILの場合 

ST? 

interface1 

構造化テキスト(ST)では,演算子“?=”は,次の例に示すように用いる。 

例2 

interface1 ?=interface2; 

// STの場合 

6.6.6.7.3 

グラフィック表現 

グラフィック言語では,次のファンクションを使用する。 

例1 

+ ------------ + 

 interface2 -- | 

?= 

| -- interface1 

+ ------------ + 

142 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例2 インタフェースのリファレンスによる実装評価代入 

インタフェースのリファレンスによる実装評価代入の成功例及び失敗例 

// 宣言 

CLASS C IMPLEMENTS ITF1, ITF2 

END̲CLASS 

// 使用法 

PROGRAM A 

  VAR 

     inst : C; 

     interf1 : ITF1; 

     interf2 : ITF2; 

     interf3 : ITF3; 

  END̲VAR 

interf1 :=inst; 

// interf1に有効なリファレンスを代入する。 

interf2 ?=interf1; // interf2 :=inst;と同様に,interf2に有効なリファレン

スが代入される。 

interf3 ?=interf1; // interf3にはNULLが代入される。 

END̲PROGRAM 

例3 リファレンスによる実装評価代入 

// 宣言 

CLASS ClBase IMPLEMENTS ITF1, ITF2 

END̲CLASS 

CLASS ClDerived EXTENDS ClBase 

END̲CLASS 

// 使用法 

PROGRAM A 

  VAR   

     instBase : ClBase; 

     instDerived :ClDerived; 

     rinstBase1, rinstBase2 : REF̲TO ClBase; 

     rinstDerived1, rinstDerived2 : REF̲TO ClDerived; 

     rinstDerived3, rinstDerived4 : REF̲TO ClDerived; 

background image

143 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

     interf1 : ITF1; 

     interf2 : ITF2; 

     interf3 : ITF3; 

  END̲VAR 

rinstBase1 :=REF(instBase); 

// rinstBase1に基底クラスを参照。

rinstBase2 :=REF(instDerived); 

// rinstBase2に派生クラスを参照。 

rinstDerived1 ?=rinstBase1; 

// rinstDerived1==NULL 

rinstDerived2 ?=rinstBase2; 

// rinstDerived2にはinstDerivedの有効

なリファレンスが代入される。 

interf1 := instBase; 

// interf1に基底クラスを参照。 

interf2 := instDerived; 

// interf2に派生クラスを参照。 

rinstDerived3 ?=interf1; // rinstDerived3==NULL 

rinstDerived4 ?=interf2; // rinstDerived4にはinstDerivedの有効なリファ

レンスが代入される。 

END̲PROGRAM 

実装評価代入の結果は,使用する前にNULLに等しくないことを評価しなければならない。 

表52−実装評価代入 

No. 

説明 

解説 

?=を用いるインタフェースによる実装評価代入 

上記参照 

?=を用いる参照による実装評価代入 

上記参照 

6.6.7 

ファンクションブロックのオブジェクト指向特性 

6.6.7.1 

概要 

クラスに関して定義する概念を用いたオブジェクト指向パラダイムに対応するため,JIS B 3503:2012の

ファンクションブロック概念を拡張する。 

・ ファンクションブロックにメソッドを追加 

・ ファンクションブロックによるインタフェースの実装を追加 

・ ファンクションブロックの継承を追加 

オブジェクト指向ファンクションブロックでは,表40に規定するファンクションブロックの全ての項目

を適用できる。 

さらに,オブジェクト指向ファンクションブロックの実装者は,表53に規定するオブジェクト指向ファ

ンクションブロック項目の,本質的に一貫性があるサブセットを提供しなければならない。 

background image

144 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表53−オブジェクト指向ファンクションブロック 

No. 

説明 

予約語 

解説 

オブジェクト指向ファンクション
ブロック 

ファンクションブロック概念のオブジェクト指向拡張 

1a 

FINAL指定子 

ファンクションブロックは,基底ファンクションブロックとして使用でき
ない。 

メソッド及び指定子 

METHOD...END̲METHOD 

メソッド定義 

5a 

PUBLIC修飾子 

メソッドは,どこからでも呼び出すことができる。 

5b 

PRIVATE 修飾子 

メソッドは,そのメソッドを定義するPOUの内側からだけ呼出しできる。 

5c 

INTERNAL 修飾子 

メソッドは,同じ名前空間の内側からだけ呼び出すことができる。 

5d 

PROTECTED 修飾子 

メソッドは,そのメソッドを定義するPOUとその派生物の内側からだけ呼
び出すことができる(デフォルト)。 

5e 

FINAL指定子 

メソッドは,オーバライドしてはならない。 

インタフェースの使用法 

6a 

IMPLEMENTSインタフェース 

ファンクションブロック宣言内でインタフェースを実装する。 

6b 

IMPLEMENTS複数のインタフェ
ース 

ファンクションブロック宣言内で複数のインタフェースを実装する。 

6c 

変数の型としてのインタフェース インタフェースの実装(ファンクションブロックインスタンス)のリファ

レンス。 

継承 

7a 

EXTENDS 

ファンクションブロックは基底ファンクションブロックを継承する。 

7b 

EXTENDS 

ファンクションブロックは基底クラスを継承する。 

OVERRIDE 

メソッドは基底メソッドをオーバライドする−動的名前束縛をリファレン
ス。 

ABSTRACT 

抽象ファンクションブロック−少なくとも一つのメソッドが抽象メソッ
ド。 
抽象メソッド−このメソッドは未実装である。 

アクセス参照 

10a THIS 

自己のメソッドの参照に用いる。 

10b SUPER 

基底ファンクションブロック内のメソッドのアクセス参照に用いる。 

10c SUPER() 

基底ファンクションブロックのボディへのアクセス参照。 

変数アクセス修飾子 

11a PUBLIC修飾子 

変数は,どこからアクセスしてもよい。 

11b PRIVATE修飾子 

変数は,定義されたPOUの内側からだけアクセスできる。 

11c INTERNAL修飾子 

変数は,同じ名前空間の内側からだけアクセスできる。 

11d PROTECTED修飾子 

変数は,定義されたPOUの内側及びその派生物からだけアクセスできる(デ
フォルト)。 

多態性 

12a VAR̲IN̲OUTによる多態性 

シグネチャが同一の場合 

(基底)FB型のVAR̲IN̲OUTは,追加のVAR̲IN̲OUT, VAR̲INPUT又
はVAR̲OUTPUT-変数がない派生FB型のインスタンスを代入してもよい。 

12b VAR̲IN̲OUTによる多態性 

シグネチャが互換の場合 

(基底)FB型のVAR̲IN̲OUTは,追加のVAR̲IN̲OUT-変数がない派生
FB型のインスタンスを代入してもよい。 

12c リファレンスによる多態性 

シグネチャが同一の場合 

(基底)FB型のリファレンスは,追加のVAR̲IN̲OUT,VAR̲INPUT又は
VAR̲OUTPUT-変数がない派生FB型のリファレンスを代入してもよい。 

12d リファレンスによる多態性 

シグネチャが互換の場合 

(基底)FB型のリファレンスは,追加のVAR̲IN̲OUT-変数がない派生FB
型のリファレンスを代入してもよい。 

145 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.7.2 

ファンクションブロックのメソッド 

6.6.7.2.1 

概要 

ファンクションブロック型定義内に追加できる言語要素の集合として,メソッドの概念を採用する。 

メソッドは,ファンクションブロックインスタンスのデータに対して行う演算を定義するために適用し

てもよい。 

6.6.7.2.2 

ファンクションブロックの類型 

ファンクションブロックは,ファンクションブロックボディ及び追加としてメソッドの集合をもっても

よい。FBボディ及び/又はメソッドが省略できることから,ファンクションブロックには三つの類型があ

る。これを図20 a),b)及びc)に例示する。 

a) FBボディ本体だけを伴うファンクションブロック これは,JIS B 3503:2012から知られているファ

ンクションブロックである。 

この場合,ファンクションブロックにはメソッドは実装されていない。ファンクションブロックの

要素(入力,出力など)及びファンクションブロックの呼出しは,図20 a)の例に示す。 

b) FBボディ及びメソッドを伴うファンクションブロック メソッドは,メソッド内定義変数だけでな

く,ファンクションブロック宣言部内に定義する入力変数,出力変数又は内部変数へのアクセスをサ

ポートしなければならない。 

c) メソッドだけを伴うファンクションブロック この場合,ファンクションブロックは,空のファンク

ションブロックのボディが実装されている。ファンクションブロックの要素及びメソッドの呼出しを

図20 b)に示す。 

この場合,このファンクションブロックもクラスとして宣言できる。 

background image

146 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ボディ及び/又はメソッドを伴うファンクションブロックの要素及び呼出しの図解。 
例は,代入及び入出力の読出しの可否を示す。 

a) ボディだけを伴うファンクションブロック/ファンクションブロックの呼出し 
− FB入力,出力は静的であり,外部からアクセス可能である。 
− また,FB呼出しに依存しない。 

このFB呼出しのグラフィック表現
は,図解のためだけのものである。 
 
一時パラメータは括弧でくくる。 

 
I (in1 :=A, inout :=B, out1=> Y); 
 
外部からの入力の代入 
I.in1   :=A; 
I.inout := B;//禁止 呼出しの中だけ
許される。 
 
外部からの出力の読出し。 
Y :=I.out1; 

//許される。c)と違

う。 

 
c) メソッドだけを伴うファンクションブロック(すなわち,空のボディ)/メソッド呼出し 
− メソッドの入力,出力,変数及び結果は,一時的である(静的でない。)。 
− しかし外部からアクセス可能である−呼出しの中だけで許される。 

a)のFBの続き 

このメソッド呼出しのグラフィック
表現は,図解のためだけのものであ
る。 
 
一時パラメータは括弧でくくる。 

R1:=I.method1(inm1:=A, outm1=>Y); 
   //結果の使用は任意のものである。 
 

I.method1(inm1 :=A, outm1=> Y); 
 
外部からのメソッド入力の代入 
I.inm1  := A;//禁止 呼出しの中だけで
許される。 
 
外部からのメソッド出力の読出し 
Y := I.outm1; //禁止 呼出しの中だけ
で許される。 

b) ボディ及びメソッドを伴うファンクションブロック。a)及びc)を含む。 

図20−ボディ及びメソッドを伴うファンクションブロック(図解) 

6.6.7.2.3 

メソッド宣言及び実行 

ファンクションブロックは,図20 c)に表すようにメソッドの集合をもってもよい。 

メソッドの宣言は,クラスのメソッドに関する規則に加えて,次の規則を順守しなければならない。 

a) メソッドは,ファンクションブロック型の範囲内で宣言する。 

b) テキスト表現宣言では,メソッドはファンクションブロック宣言とファンクションブロックボディと

の間に記載する。 

メソッドの実行は,クラスのメソッドに対する規則に加えて,次の規則を順守しなければならない。 

c) メソッドは,ファンクションブロック内で宣言する静的変数を読み書きできなければならない。 

対象となるのは,(データ型BOOL R̲EDGE又はBOOL F̲EDGEを除く。)入力変数,出力変数,静

的変数及び外部変数である。 

d) メソッドは,FBの一時変数であるVAR̲TEMP及びVAR̲IN̲OUTにアクセスできない。 

m̲1アルゴリズム 

(内部 

変数) 

method̲i 

(入力 

変数) 

(結果) 

m̲iアルゴリズム 

(出力変数) 

(入出力変数)

(内部 

変数) 

(入力 

変数) 

(結果) 

method̲1 

(出力変数) 

inm1 

FB.method1 

outm1  

FB形 

FBボディ 

アルゴリズム 

外部変数 

内部変数 

(一次変数) 

出力 

変数 

入力 
変数 

FBインスタンス 

(入出力変数) 

in1 

inout 

out1 

inout

147 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

e) メソッド内の変数は,FBボディ(アルゴリズム)によってアクセスできない。 

6.6.7.2.4 

メソッド呼出し表現 

メソッドは,テキスト言語及びグラフィック言語でクラスに対して定義したのと同様に呼び出すことが

できる。 

6.6.7.2.5 

メソッドアクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

メソッドごとに,どこからメソッドの呼出しが許容されるかを定義しなければならない。 

6.6.7.2.6 

変数アクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

VAR構文では,どこから変数のアクセスが許容されるかを定義しなければならない。 

入力変数及び出力変数へのアクセスは,暗黙的に常にPUBLICである。したがって,入力変数部及び出

力変数部にはアクセス修飾子は用いない。出力変数は,暗黙的に読出し専用である。入出力変数は,ファ

ンクションブロックボディ内及び呼出し文内だけで使用する。VAR̲EXTERNAL部の変数へのアクセスは,

暗黙的に常にPROTECTEDである。したがって,これらの変数にはアクセス修飾子は用いない。 

6.6.7.2.7 

ファンクションブロックの継承(EXTENDS,SUPER,OVERRIDE,FINAL) 

6.6.7.2.8 

概要 

ファンクションブロックの継承は,クラスの継承に似ている。既存のクラス又はファンクションブロッ

ク型に基づいて,一つ以上ファンクションブロック型を派生させることができる。これは,複数回繰り返

してもよい。 

6.6.7.2.9 

派生ファンクションブロックのボディでのSUPER() 

派生ファンクションブロック及びそれらの基底ファンクションブロックは,それぞれがファンクション

ブロックボディをもってもよい。ファンクションブロックボディは,基底ファンクションブロックを自動

的に継承するのではなく,デフォルトでは空である。基底ファンクションブロックのボディは,SUPER()

を用いて呼び出すことができる。 

この場合,ファンクションブロックのEXTENDSに対する上記規則に加えて,次の規則を適用する。 

a) 派生ファンクションブロック型のボディ(ある場合)は,ファンクションブロックが呼び出されたと

きに実行される。 

b) 派生ファンクションブロック内で基底ファンクションブロック(ある場合)のボディを追加として実

行するには,SUPER()の呼出しを使用しなければならない。SUPER()の呼出しにはパラメータはない。 

注記 SUPER()の呼出しは,ファンクションブロックボディの中で一回だけ発生するものであり,

ループ内にあってはならない。 

c) 基底及び派生ファンクションブロック内の変数名は,一意でなければならない。 

d) ファンクションブロックの呼出しは,動的に束縛されなければならない。 

1) 派生ファンクションブロック型は,その基底ファンクションブロック型を使用できる全ての場所で

用いることができる。 

2) 派生ファンクションブロック型は,その基底クラス型が使用できる全ての場所で用いることができ

る。 

e) SUPER()は,ファンクションブロックボディ内だけで呼び出すことができ,ファンクションブロック

のメソッド内で呼び出すことはできない。 

SUPER()の例は,図21による。 

background image

148 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

図21−SUPER()を用いたファンクションブロックボディの継承(例) 

6.6.7.2.10 メソッドのOVERRIDE 

派生ファンクションブロック型は,一つ以上の継承されるべきメソッドを自らの実装でオーバライド(差

替え)してもよい。 

6.6.7.2.11 ファンクションブロック及びメソッドのFINAL 

指定子FINALを伴うメソッドは,オーバライドしてはならない。 

指定子FINALを伴うファンクションブロックは,基底ファンクションブロックにはならない。 

6.6.7.3 

動的名前束縛(OVERRIDE) 

名前束縛は,メソッド又はファンクションブロックの名前と実装との関連付けであり,ファンクション

ブロックのメソッドについても6.6.5.6に規定するとおりに用いる。 

6.6.7.4 

自己の及び基底FB(THIS,SUPER)のメソッド呼出し及び多態性 

自己のファンクションブロック内及び外部で定めるメソッドにアクセスする際,予約語THIS及び

SUPERを利用できる。 

 VAR̲INPUT  a: INT; 

 VAR̲OUTPUT x: INT; 

 (* body:*) 
 x :=a+1; 
 NIGHTTIME 

(FB形) 

 VAR̲INPUT b: INT; 

 SUPER(); 

 (* includes here the 

body of    BASE*) 

 x :=3*x+b; 

FB DERIVED̲1 

EXTENDS BASE 

(FB形) 

FB BASE 

 VAR̲INPUT  a: INT; 
 VAR̲INPUT  b: INT; 
 VAR̲OUTPUT x: INT; 

 x := a+1; 

 
 x :=3*x+b; 

FB DERIVED̲1  
EXTENDS BASE 

左記のFB DERIVED̲1を展開すると 

(FB形) 

(FB形) 

FB DERIVED̲2 

EXTENDS DERIVED̲1 

 VAR̲IN̲OUT c: INT; 

 SUPER();(*includes here 

the body of DERIVED̲1 *)

 
 c :=x/c; 

 a :=a+1; 

 x :=3*x+b; 

 
 c :=x/c;  

 VAR̲INPUT  a: INT; 
 VAR̲INPUT  b: INT; 
 VAR̲IN̲OUT c: INT; 
 VAR̲OUTPUT x: INT; 

FB DERIVED̲2 

EXTENDS DERIVED̲1 

左記のFB DERIVED̲2を展開すると 

(FB形) 

149 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.6.7.5 

ABSTRACTファンクションブロック及びABSTRACTメソッド 

ABSTRACTモディファイアはファンクションブロックにも用いることができる。ファンクションブロッ

クの実装者は,これらの項目の実装を宣言しなければならない。 

6.6.7.6 

メソッドアクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

クラスでの定義と同様に,メソッドごとに,どこからメソッドの呼出しが許容されるかを定義しなけれ

ばならない。 

6.6.7.7 

変数アクセス修飾子(PROTECTED,PUBLIC,PRIVATE,INTERNAL) 

クラスへの参照での定義と同様に,VAR構文では,どこから変数のアクセスが許容されるかを定義しな

ければならない。 

入力変数及び出力変数へのアクセスは,暗黙的に常にPUBLICである。したがって,入力変数部及び出

力変数部にはアクセス修飾子は用いない。出力変数は,暗黙的に読出し専用である。入出力変数は,ファ

ンクションブロックボディ内及び呼出し文内だけで使用する。VAR̲EXTERNAL構文の変数へのアクセスは,

暗黙的に常にPROTECTEDである。したがって,これらの変数にはアクセス修飾子は用いない。 

6.6.8 

多態性 

6.6.8.1 

概要 

6.6.8.2,6.6.8.3,6.6.8.4及び6.6.8.5で示す四つの場合で多態性が生じる。 

6.6.8.2 

INTERFACEを伴う多態性 

インタフェースはインスタンス化できないので,派生型だけがインタフェースの参照に代入できる。そ

のため,インタフェースの参照によるメソッドの呼出しは,動的束縛となる。 

6.6.8.3 

VAR̲IN̲OUTを伴う多態性 

ある型の入出力変数には,その型から派生したファンクションブロック型に入出力変数が追加されてい

ないのであれば,その派生ファンクションブロック型のインスタンスを代入してもよい。追加の入力変数

及び出力変数を伴う派生ファンクションブロック型のインスタンスを代入できるか否かは,実装依存であ

る。 

そのため,VAR̲IN̲OUTに指定されたインスタンスを介したファンクションブロックの呼出し及びファ

ンクションブロックメソッドの呼出しは,動的束縛となる。 

例1 ファンクションブロック呼出しの動的束縛(FB型BASE及びDERIVED̲2については,図21

参照)。 

background image

150 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

派生ファンクションブロックが入出力変数を追加する場合,ファンクションブロック呼出し

の動的束縛は,未代入の入出力変数cの評価が行われINDIRECT̲3になり,実行時エラーを引

き起こす。したがって,派生ファンクションブロックのインスタンスのこの代入はエラーであ

る。 

例2 

CLASS LIGHTROOM 

  VAR LIGHT: BOOL; END̲VAR 

  METHOD PUBLIC SET̲DAYTIME 

  VAR̲INPUT: DAYTIME: BOOL; END̲VAR 

     LIGHT :=NOT(DAYTIME); 

  END̲METHOD 

(FB形) 

FB INDIRECT 

 VAR̲IN̲OUT BASE̲1: 

 BASE; 

VAR 
BASE̲A: BASE 
DERIVED̲2̲A: DERIVED̲2; 
END̲VAR; 

BASE 

a        x 

123

BASE̲1

FB INDIRECT 

 VAR̲IN̲OUT B: BASE; 

BASE̲A

INDIRECT̲1 

 ◊ x :=a+1 //x=124 

BASE 

a        x 

123 

BASE̲1 

FB INDIRECT 

 VAR̲IN̲OUT BASE̲1:  

 BASE; 

 
 
 ◊ x :=a+1; 
  x :=3*x+b; 
  x :=.. 

INDIRECT̲2 

DERIVED̲1̲A

BASE 

a        x 

123 

BASE̲1 

FB INDIRECT 

 VAR̲IN̲OUT BASE̲1:  

 BASE; 

 ◊ error 

INDIRECT̲3 

DERIVED̲2̲A

BASE 

a        x 

123 

BASE̲1 

動的に束縛する

許されない

151 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

END̲CLASS 

CLASS LIGHT2ROOM EXTENDS LIGHTROOM 

  VAR  LIGHT2: BOOL; END̲VAR 

// 二つ目のLIGHT 

  METHOD PUBLIC OVERRIDE SET̲DAYTIME 

   VAR̲INPUT: DAYTIME: BOOL; END̲VAR 

    SUPER.SET̲DAYTIME(DAYTIME); 

// LIGHTROOM.SET̲DAYTIMEの呼出し 

    LIGHT2 :=NOT(DAYTIME); 

  END̲METHOD 

END̲CLASS 

FUNCTION̲BLOCK ROOM̲CTRL 

  VAR̲IN̲OUT RM: LIGHTROOM; END̲VAR 

  VAR̲EXTERNAL Actual̲TOD: TOD; END̲VAR // TOD型のグローバル変数を参照。 

// この場合,呼び出すクラスのメソッドは,動的に束縛される。 

// RMは派生クラスを参照してもよい。 

    RM.SET̲DAYTIME(DAYTIME :=(Actual̲TOD <=TOD#20:15)AND(Actual̲TOD 

>=TOD#6:00)); 

END̲FUNCTION̲BLOCK 

// リファレンスによる多態性及び動的束縛の使用 

PROGRAM D 

VAR 

  MyRoom1: LIGHTROOM; 

  MyRoom2: LIGHT2ROOM; 

  My̲Room̲Ctrl: ROOM̲CTRL; 

END̲VAR 

   My̲Room̲Ctrl(RM :=MyRoom1); 

   My̲Room̲Ctrl(RM :=MyRoom2); 

END̲PROGRAM; 

6.6.8.4 

リファレンスによる多態性 

派生型のインスタンスは,基底クラスへのリファレンスに代入してもよい。 

ある型の変数には,その型から派生したファンクションブロック型に入出力変数が追加されていないの

であれば,その派生ファンクションブロック型のリファレンスを代入してもよい。追加の入力変数及び出

力変数を伴う派生ファンクションブロック型のリファレンスを代入できるか否かは,実装依存である。 

したがって,リファレンスのリファレンス解除を介したファンクションブロックの呼出し及びファンク

ションブロックメソッドの呼出しは,動的束縛となる。 

例 ライトルームの例の代替実装 

FUNCTION̲BLOCK LIGHTROOM  

VAR LIGHT: BOOL; END̲VAR 

VAR̲INPUT: DAYTIME: BOOL; END̲VAR 

LIGHT :=NOT(DAYTIME); 

END̲FUNCTION̲BLOCK 

152 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

FUNCTION̲BLOCK LIGHT2ROOM EXTENDS LIGHTROOM 

VAR LIGHT2: BOOL; END̲VAR // 二つ目のLIGHT 

SUPER(); 

// LIGHTROOMの呼出し 

LIGHT2 :=NOT(DAYTIME); 

END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK ROOM̲CTRL 

  VAR̲INPUT RM: REF̲TO LIGHTROOM; END̲VAR 

  VAR̲EXTERNAL Actual̲TOD: TOD; END̲VAR 

// TOD型のグローバル変数を参照。 

// この場合,呼び出すファンクションブロックは,動的に束縛される。 

// RMは派生ファンクションブロック型を参照してもよい。 

IF RM <> NULL THEN 

RM^.DAYTIME 

:=(Actual̲TOD 

<=TOD#20:15) 

AND 

(Actual̲TOD 

>=TOD#6:00)); 

END̲IF 

END̲FUNCTION̲BLOCK 

// リファレンスによる多態性及び動的束縛の使用 

PROGRAM D 

VAR 

  MyRoom1: LIGHTROOM;  

// 上記参照 

  MyRoom2: LIGHT2ROOM; 

// 上記参照 

  My¬̲Room̲Ctrl: ROOM̲CTRL; // 上記参照 

END̲VAR 

My̲Room̲Ctrl(RM :=REF(MyRoom1));  

My̲Room̲Ctrl(RM :=REF(MyRoom2));  

END̲PROGRAM; 

6.6.8.5 

THISによる多態性 

実行中,THISは,現在のファンクションブロック型又はその全ての派生ファンクションブロック型の

参照を保持できる。したがって,THISを介したファンクションブロックメソッドの呼出しは動的束縛と

なる。 

注記 特殊な場合,例えば,ファンクションブロック型若しくはメソッドがFINALの場合,又は派生

ファンクションブロック型がない場合,入出力変数の型,参照又はTHISは,コンパイル時に

十分に決定可能である。この場合,動的束縛は不要である。 

6.7 

シーケンシャルファンクションチャート(SFC)の各要素 

153 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.7.1 

概要 

この細分箇条では,シーケンシャルファンクションチャート(SFC)の要素を規定する。それらを用い

ることによって,この規格に規定する言語のいずれかで記述されたプログラマブルコントローラ用プログ

ラム構成ユニットの内部構成を構造化し,シーケンス制御機能を実行することができる。この細分箇条中

での規定は,IEC 60848に由来している。ただし,プログラマブルコントローラのプログラム構成ユニッ

ト用に,文書標準の表現を一連の実行制御要素に変換するために必要な変更を行った。 

SFC要素は,プログラマブルコントローラのプログラム構成ユニットを,有向接続線で接続されたステ

ップとトランジションとに分割する方法を提供する。それぞれのステップには一連のアクションを関連付

け,それぞれのトランジションにはトランジション条件を関連付ける。 

SFC要素では状態情報を格納する領域が必要なので,この要素を用いて構造化できるプログラム構成ユ

ニットは,ファンクションブロック及びプログラムである。 

プログラム構成ユニットの一部をSFC要素によって分割する場合は,必ずそのプログラム構成ユニット

全体も同様にSFC要素で分割する。プログラム構成ユニットがSFC要素で分割しない場合は,そのプロ

グラム構成ユニット全体を,その呼出し元の制御下で実行される一つのアクションとみなさなければなら

ない。 

6.7.2 

ステップ 

ステップは,ある状態を表す。その状態では,プログラム構成ユニットの入出力に関する挙動は,ステ

ップに対応するアクションで規定する一連の規則に従う。ステップは,活性又は非活性である。いかなる

ときでも,プログラム構成ユニットの状態は,一連の活性なステップ,並びに内部及び外部変数の値で定

まる。 

表54に示すように,ステップは,識別子の形式のステップ名をもつブロックとしてグラフィック形式で

表すか,STEP...END̲STEP構文によってテキスト形式で表さなければならない。グラフィック形式では,

ステップへ向かう有向接続線は,ステップの上端に取り付けられた垂直線で表すことができる。ステップ

から出る有向接続線は,ステップの下端に取り付けられた垂直線で表すことができる。また,テキスト形

式では,有向接続線は,TRANSITION..END̲TRANSITION構文で表すことができる。 

表54に示すように,ステップフラグ(ステップの活性又は不活性状態)は,ブール型の構造体要素***.X 

(***はステップ名)の論理値で表すことができる。対応するステップが活性状態の場合,この変数の値

は1になり,非活性状態の場合,0になる。表54に示すように,この変数の状態は,ステップ右側のグラ

フィック形式接続で取得できる。 

同様に,表54に示すように,ステップ初期化からの経過時間***.Tは,TIME型の構造体要素で表すこ

とができる。ステップが非活性になった後でも,ステップ経過時間は,ステップが非活性化したときの値

のままでなければならない。ステップが活性化されたとき,ステップ経過時間は,t#0sにリセットされ

なければならない。 

ステップ名,ステップフラグ及びステップ経過時間の適用範囲は,ステップを含んでいるプログラム構

成ユニットに対してローカルでなければならない。 

プログラム構成ユニットの初期状態は,その内部変数及び出力変数の初期値,一連の初期ステップ(初

期状態で活性なステップ)で表す。個々のSFCネットワーク,また,それと同等なテキスト表現には,た

だ一つの初期ステップがなければならない。 

初期ステップは,グラフィック形式では境界線として二重線で描くことができる。6.1.1に規定する文字

セットを描画用に使用する場合,初期ステップは,表54に示すように描かれなければならない。 

background image

154 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

システム初期化では,ステップ経過時間のデフォルトの初期値はt#0s,通常ステップのデフォルトの

初期状態はBOOL#0,初期ステップのデフォルトの初期状態はBOOL#1である。しかし,ファンクション

ブロックのインスタンス又はプログラムが保持属性付きと宣言された場合は,そのプログラム又はファン

クションブロックに含まれる全てのステップの状態及び(サポートしている場合)経過時間もまた,保持

属性付きとして扱われなければならない。 

SFC当たりのステップの最大数,及びステップ経過時間の精度は,実装依存である。 

次のような場合は,エラーとしなければならない。 

a) 一つのSFCネットワークに一つの初期ステップがない場合 

b) ユーザプログラムが直接にステップ状態又はステップ時間に対して値を代入しようとした場合 

表54−SFCステップ 

No. 

説明 

表現 

1a 

ステップ−有向接続線付きグラフィック形式 

+ ---- + 

| *** | 

+ ---- + 

1b 

初期ステップ−有向接続線付きグラフィック形式 

+ ======= + 

|| *** || 

|| 

|| 

+ ======= + 

2a 

ステップ−有向接続線なしのテキスト形式 

STEP *** : 
  (*ステップボディ*) 
END̲STEP 

2b 

初期ステップ−有向接続線なしのテキスト形式 

INITIAL̲STEP *** : 
  (*ステップボディ *) 
END̲STEP 

3a a) 

ステップフラグ−一般型 ***.X=BOOL#1 
(*** が活性なとき),BOOL#0(それ以外のとき) 

***.X 

3b a) 

ステップフラグ−ブール型変数***.Xのステップ 
右側への直接接続 

+ ---- + 

| *** | --- 

+ ---- + 

4 a) 

ステップ経過時間−一般型 
***.T=TIME型の変数 

***.T 

注記1 前置ステップがない場合,初期ステップの上部につながる有向接続線は存在しない。 
注記2 ***=ステップ名 
注a) 項目No.3a,No.3b,No.4のいずれかがサポートされる場合,ユーザプログラムで対応する変数を変更しようと

したときはエラーにならなければならない。例えば,S4がステップ名であるとき,7.3に規定するST言語によ
る次の文はエラーになる。 

S4.X :=1 ; (* ERROR *) 
S4.T :=t#100ms ; (*ERROR *) 

6.7.3 

トランジション 

トランジションとは,トランジションの前の一つ以上のステップからトランジションの後の一つ以上の

155 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ステップへ,対応する有向接続線に沿って制御が移動する条件のことである。トランジションは,鉛直方

向の有向接続線と交差する水平線とで表さなければならない。 

有向接続線に沿って進む進行方向は,前置ステップの下端から後置ステップの上端に向かってでなけれ

ばならない。 

個々のトランジションには,ただ一つのブール式を評価した結果であるトランジション条件が連結され

ていなければならない。常に真となるトランジション条件は,1又は予約語TRUEで表されなければなら

ない。 

表55に示すように,トランジション条件は,次に挙げるいずれかの方法でトランジションと連結するこ

とができる。 

a) ST言語で書かれたブール式を垂直な有向接続線から論理的又は物理的に隣接して置く方法。 

b) LD言語で書かれたラダー図ネットワークを垂直な有向接続線から論理的又は物理的に隣接して配置

する方法。 

c) 8.3に規定するFBD言語で書かれたネットワークを垂直な有向接続線から論理的又は物理的に隣接し

て配置する方法。 

d) LD又はFBDネットワークの出力をコネクタ経由で垂直な有向接続線に交差させる方法。 

e) ST言語で書かれたTRANSITION...END̲TRANSITION構文による方法。これは,次のもので構成す

る。 

・ 予約語TRANSITION FROMに続けて,トランジションの前置ステップのステップ名(トランジショ

ンの前置ステップが複数ある場合は,括弧でくくったステップ名のリスト)。 

・ 予約語TOに続けて,トランジションの後置ステップのステップ名(トランジションの後置ステッ

プが複数ある場合は,括弧でくくったステップ名のリスト)。 

・ 代入演算子(:=)に続けてトランジション条件を規定するST言語で書かれたブール式。 

・ 終了予約語END̲TRANSITION。 

f) 

IL言語で書かれたTRANSITION...END̲TRANSITION構文による方法。これは,次のもので構成す

る。 

・ 予約語TRANSITION FROMに続けて,トランジションの前置ステップのステップ名(トランジショ

ンの前置ステップが複数ある場合は,括弧でくくったステップ名のリスト),更に続けてコロン(:)。 

・ 予約語TOに続けて,トランジションの後置ステップのステップ名(トランジションの後置ステッ

プが複数ある場合は,括弧でくくったステップ名のリスト)。 

・ 別の行から始めてIL言語の命令文リスト。その評価結果がトランジション条件を決める。 

・ 別の行に終了予約語END̲TRANSITION。 

g) 識別子の形式をしたトランジション名を有向接続線の右側に書く方法。この識別子は,次のいずれか

で定義するTRANSITION...END̲TRANSITION構文を指し示す。そこでの評価結果は,トランジシ

ョン名を変数名とする変数にブール値として代入されなければならない。 

・ LD又はFBD言語のネットワーク 

・ IL言語の命令文のリスト 

・ ST言語のブール式の代入 

トランジション名の適用範囲は,トランジションがあるプログラム構成ユニットに対してローカルでな

ければならない。 

トランジション条件の評価中に“副作用”が起こった場合(トランジション名以外の変数への値の代入

background image

156 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

など),エラーとしなければならない。 

1SFC当たり及び1ステップ当たりの最大トランジション数は,実装者に依存する。 

表55−SFCトランジション及びトランジション条件 

No. 

説明 

例 

1 a) 

トランジションに物理的又は論理的に隣接してい
るST言語を使用したトランジション条件 

+ ------ + 

| STEP7 | 

+ ------ + 

+ bvar1 & bvar2 

+ ------ + 

| STEP8 | 

+ ------ + 

2 a) 

トランジションに物理的又は論理的に隣接してい
るLD言語を使用したトランジション条件 

+ ------ + 

| STEP7 | 

+ ------ + 

| bvar1  bvar2 | 

+ ---||----||--- +  

+ ------ + 

| STEP8 | 

+ ------ + 

3 a) 

トランジションに物理的又は論理的に隣接してい
るFBD言語を使用したトランジション条件 

+ ------ + 

| STEP7 | 

+ ----- + + ------ + 

| & | 

 bvar1 -- | 

|---- + 

 bvar2 -- | 

+ ----- + + ------ + 

| STEP8 | 

+ ------ + 

4 a) 

コネクタの使用 

+ ------ + 

| STEP7 | 

+ ------ + 

>TRANX>--------- + 

+ ------ + 

| STEP8 | 

+ ------ + 

background image

157 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表55−SFCトランジション及びトランジション条件(続き) 

No. 

説明 

例 

5 a) 

トランジション条件:LD言語による 

| bvar1  bvar2 

+ --||-----||---->TRANX> 

6 a) 

トランジション条件:FBD言語による 

+ ------ + 

| & | 

bvar1 -- | 

| -->TRANX> 

bvar2 -- | 

+ ------ + 

7 b) 

No.1に同等なST言語を使用したテキスト形式 

STEP STEP7: END̲STEP 
TRANSITION FROM STEP7 TO STEP8 
  :=bvar1 & bvar2; 
END̲TRANSITION 
STEP STEP8: END̲STEP 

8 b) 

No.1に同等なIL言語を使用したテキスト形式 

STEP STEP7: END̲STEP 
TRANSITION FROM STEP7 TO STEP8: 
  LD  bvar1 
  AND bvar2 
END̲TRANSITION 
STEP STEP8: END̲STEP 

9 a) 

トランジション名の使用 

+ ------ + 

| STEP7 | 

+ ------ + 

+ TRAN7 TO STEP8 

+ ------ + 

| STEP8 | 

+ ------ + 

10 a) 

LD言語を使用したトランジション条件 

TRANSITION TRAN78 FROM STEP7 TO STEP8: 
 

| bvar1  bvar2  TRAN78 | 

+ --||----||-----( )-- + 

END̲TRANSITION 

11 a) 

FBD言語を使用したトランジション条件 

TRANSITION TRAN78 FROM STEP7 TO STEP8: 
 

+ ------ + 

| & | 

bvar1 -- | 

| --TRAN78 

bvar2 -- | 

+ ------ + 

END̲TRANSITION 

12 b) 

IL言語を使用したトランジション条件 

TRANSITION TRAN78 FROM STEP7 TO STEP8: 
      LD bvar1 
      AND bvar2 
END̲TRANSITION 

background image

158 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表55−SFCトランジション及びトランジション条件(続き) 

No. 

説明 

例 

13 b) 

ST言語を使用したトランジション条件 

TRANSITION TRAN78 FROM STEP7 TO STEP8 
  :=bvar1 & bvar2; 
END̲TRANSITION 

注a) 表54のNo.1をサポートする場合,この表のNo.1,2,3,4,5,6,9,10又は11のうち一つ以上をサポート

しなければならない。 

b) 表54のNo.2をサポートする場合,この表のNo.7,8,12又は13のうち一つ以上をサポートしなければならな

い。 

6.7.4 

アクション 

6.7.4.1 

概要 

アクションは,ブール型変数,IL言語の命令の集まり,ST言語の文の集まり,LD言語のラダー回路の

集まり及びFBD言語のネットワークの集まり,又はシーケンシャルファンクションチャート(SFC)で記

述できる。 

アクションは,6.7.4.1で定義する,一つ以上の仕組みによって宣言され,テキスト形式のステップ・ボ

ディ又はグラフィック形式のアクションブロックによってステップに連結しなければならない。アクショ

ンの制御は,アクションクオリファイアで表現されなければならない。 

ブール型変数の値で使用するアクション名を変更する処理はエラーとする。同じSFCの中で一つ以上の

アクション名として使用した場合はエラーとする。 

SFC要素をサポートするプログラマブルコントローラの実装では,アクションの宣言のために表56に

規定する仕組みを一つ以上用意しなければならない。アクション宣言の適用範囲は,その宣言を含むプロ

グラム構成ユニットに対してローカルでなければならない。 

6.7.4.2 

宣言 

各ステップには,0個以上のアクションが連結されなければならない。アクションが連結しないステッ

プは,後続のトランジション条件が真になるまで待つ,待機機能と考えられなければならない。 

表56−アクションのSFC宣言 

No. 

説明a), b) 

例 

VAR若しくはVAR̲OUTPUTブロック,又はそれらと
同等のグラフィック形式中に宣言された全てのブー
ル型変数は,アクションになり得る。 

2l 

LD言語におけるグラフィック形式宣言 

 + ------------------------------ + 
 | 

ACTION̲4 

 + ------------------------------ + 
 | | bvar1  bvar2  S8.X  bOut1 | | 
 | +--||----||-----||---( )--+ | 
 | | 

| | 

 | | + ------ + 

| | 

 | + -- | EN ENO | 

bvar2 | | 

 | | C- | LT | --------(S)-- + | 
 | | D- | 

| | 

 | | + ------ + 

| | 

 + ------------------------------ + 

background image

159 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表56−アクションのSFC宣言(続き) 

No. 

説明a), b) 

例 

2s 

アクションにおけるSFC要素の包含 

 +----------------------------------- + 
 | 

OPEN̲VALVE̲1 

 +----------------------------------- + 
 | 

| ... 

 | + =============== + 

 | || VALVE̲1̲READY || 

 | + =============== + 

 | 

 | 

+ STEP8.X 

 | 

 | + --------------- + +--+---------+ | 
 | | VALVE̲1̲OPENING |- |N|VALVE̲1̲FWD| | 
 | + --------------- + +--+--------- + | 
 | 

| ... 

 +----------------------------------- + 

2f 

FBD言語におけるグラフィック形式宣言 

 + ------------------------------ + 
 | 

ACTION̲4 

 + ------------------------------ + 
 | 

+ -- + 

 | 

bvar1-- | & | 

 | 

bvar2-- | 

| --bOut1 

 | S8.X------ | 

 | 

+ -- + FF28 

 | 

+ ---- + 

 | 

| SR | 

 | 

+ --- + | Q1 | -bOut2 | 

 | 

C-- | LT | -- | S1 | 

 | 

D-- | 

| + ---- + 

 | 

+ --- + 

 + ------------------------------ + 

3s 

ST言語におけるテキスト形式宣言 

ACTION ACTION̲4: 
  bOut1 :=bvar1 & bvar2 & S8.X ; 
  FF28(S1 :=(C<D)); 
  bOut2 :=FF28.Q; 
END̲ACTION 

3i 

IL言語におけるテキスト形式宣言 

ACTION     ACTION̲4: 
  LD 

S8.X 

  AND 

bvar1 

  AND 

bvar2 

  ST 

bOut1 

  LD 

  LT 

  S1 

FF28 

  LD 

FF28.Q 

  ST 

bOut2 

END̲ACTION 

注記 この表の例で,ステップフラグS8.Xは,S8が不活性なときにbOut2:=0という結果を得るために用いられて

いる。 

background image

160 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表56−アクションのSFC宣言(続き) 

注a) 表54のNo.1をサポートする場合,この表の1個以上の項目,又は表57のNo.4をサポートしなければならな

い。 

b) 表54のNo.2をサポートする場合,この表のNo.1,No.3s,又はNo.3iを1個以上サポートしなければならない。 

6.7.4.3 

ステップとの連結 

SFC要素をサポートするプログラマブルコントローラの実装では,アクションとステップとを連結する

ために,表57に規定する仕組みを一つ以上用意しなければならない。1ステップに対するアクションブロ

ックの最大数は,実装依存である。 

表57−ステップ/アクションの連結 

No. 

説明 

例 

ステップに物理的又は論理的に隣接したアクション
ブロック 

 + -- + + ------ + -------- +---- + 
 | S8 | -- | L 

| ACTION̲1 | DN1 | 

 + -- + | t#10s | 

+ ------ + -------- +---- + 

+ DN1 

ステップに物理的又は論理的に隣接したアクション
ブロックの結合 

 + -- + + ------ + -------- + ---- + 
 | S8 | -- | L 

| ACTION̲1 | DN1 | 

 +---+ | t#10s | 

+ ------ + --------+-----+ 

+ DN1 | P 

| ACTION̲2 | 

+ ------ + -------- + ---- + 

| N 

| ACTION̲3 | 

+ ------ + -------- + ---- + 

テキスト形式のステップ・ボディ 

STEP S8: 
  ACTION̲1(L,t#10s,DN1); 
  ACTION̲2(P); 
  ACTION̲3(N); 
END̲STEP 

4 a) 

アクションブロック“d”フィールド 

+ ------ + ----------------- + ---- + 

 -- | N 

ACTION̲4 

| -- 

+ ------ + ----------------- + ---- + 

| bOut1 :=bvar1 & bvar2 & S8.X; | 

| FF28 (S1 :=(C<D)); 

| bOut2 :=FF28.Q; 

+ ------ + ----------------- + ---- + 

注a) No.4を用いる場合,これと同一のアクション名を他のアクションブロックで使用することはできない。 

6.7.4.4 

アクションブロック 

表58に示すように,アクションブロックは,連結アクションの規則に基づいて,アクションを有効状態

にするためにアクションクオリファイアの一つとブール型変数との組合せのためのグラフィック形式要素

である。 

アクションブロックは,表58の“c”フィールドで示されるブール型“インジケータ”変数を選択指定

する手段を提供する。この変数は,その完了,タイムアウト,エラー状態などを指定するために特定のア

background image

161 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

クションによってセットできる。“c”フィールドが存在せず,また,“b”フィールドがアクションをブー

ル型変数として指定する場合,この変数は必要に応じて“c”フィールド変数として解釈する。“c”フィ

ールドが定義されず,また,“b”フィールドがブール型変数として指定されない場合,“インジケータ”

変数の値は,常にFALSEとみなす。 

アクションブロックが表57に示したようにグラフィカルに結合される場合,この様な結合は,複数のイ

ンジケータ変数をもつことができるが,全ての結合ブロックに対して同時に働く共通のブール入力変数を

ただ一つだけもつようにしなければならない。 

“インジケータ”変数の使用は,非推奨である。 

ステップとの連結だけでなく,アクションブロックは,LD言語又はFBD言語のグラフィック要素とし

ても用いることができる。 

表58−アクションブロック 

No. 

説明 

グラフィック形式/例 

1 a) 

"a":アクションクオリファイア(6.7.4.5を参照) 

+ ---- + ---------- + ---- + 

 -- | "a" | 

"b" 

| "c" | -- 

+ ---- + ---------- + ---- + 

"d" 

+ --------------------- + 

"b":アクション名 

3 b) 

"c":ブール型“インジケータ”変数(非推奨) 

"d":次を用いるアクション 

4i 

IL言語 

4s 

ST言語 

4l 

LD言語 

4f 

FBD言語  

5l 

アクションブロックLD言語の使用 

| S8.X  bIn1 + -- + --- + --- + OK1 | 

+ -||---||-- | N | ACT1 | DN1 | --( )-- + 

+ -- + --- + --- + 

5f 

FBD言語におけるアクションブロックの使用 

+ -- + + -- + ---- + ---- + 

 S8.X-- | & | -- | N | ACT1 | DN1 | --OK1 
 bIn1-- | 

| + -- + ---- + ---- + 

+ -- + 

注a) アクションクオリファイアが“N”の場合,“a”フィールドは,省略可。 

b) インジケータ変数を用いない場合,“c”フィールドは,省略可。 

6.7.4.5 

アクションクオリファイア 

各ステップ/アクション間の連結,又は各アクションブロックは,アクションクオリファイアによって

連結されなければならない。アクションクオリファイアは,表59に示すいずれかの値をもつ。加えて,

アクションクオリファイアL,D,SD,DS及びSLは,TIME型の持続時間型との関連付けをもたなければ

ならない。 

background image

162 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表59−アクションクオリファイア 

No. 

説明 

アクションクオリファイア 

非保持(ヌル修飾子) 

なし 

非保持 

優先リセット 

セット(保持) 

時間限定 

時間遅延 

パルス 

保持後遅延 

SD 

遅延後保持 

DS 

10 

保持後時間限定 

SL 

11 

パルス(立上りエッジ) 

P1 

12 

パルス(立下りエッジ) 

P0 

6.7.4.6 

アクション制御 

アクションの制御は,次に示す規則の適用と機能的に同等でなければならない。 

a) 各アクションは,図22及び図23に定義するACTION̲CONTROLファンクションブロックのインスタ

ンスと機能的に同等でなければならない。アクションがブール型変数で宣言される場合,このブロッ

クの出力Qは,このブール型変数の状態でなければならない。アクションが文,又はネットワークの

集まりとして定義される場合,この集まりは,ACTION̲CONTROLファンクションブロックの出力A

(活性)がBOOL#1になっている間,連続して実行されなければならない。この場合,“アクション

フラグ”と呼ばれる出力Qの状態は,読出し専用のブール型変数を読み出すことによってアクション

内でのアクセスが可能となる。そのブール型変数は,対応するアクション名と同じ名前をもっている

ファンクションブロックインスタンスの出力Qを参照する型をもっている(例えば,ACTION1.Qな

ど)。 

実装者は,図23 b)で示すような簡単な実装を選択してもよい。この場合,アクションが文,又はネ

ットワークの集まりとして宣言されるときは,この集まりは,ACTION̲CONTROLファンクションブ

ロックの出力QがBOOL#1を保持する間は,実行を続けなければならない。どんな場合でも,実装者

は,表60のいずれの項目をサポートするのか明示しなければならない。 

注記1 Q=FALSEの状態は,通常,現在の活性での最後の実行を実行していることをアクションが

判断するために使用される。 

注記2 P0及びP1アクションクオリファイアによって呼び出されるアクションが実行中の間,Q

の値は,常にFALSEとなる。 

注記3 P0又はP1アクションクオリファイアによって呼び出されるアクションが1回だけ実行さ

れる間,Aの値は,TRUEとなる。他の全てのアクションクオリファイアでは,Q立下りエ

ッジの後,もう1回実行される間,Aは,TRUEとなる。 

注記4 連結するアクションの外側からのACTION̲CONTROLファンクションブロックの出力Q又

はAの機能的等価物へのアクセスは,実装者固有の項目である。 

b) ACTION̲CONTROLファンクションブロックのBOOL型入力は,ステップへの連結をもつという。

ACTION̲CONTROLファンクションブロックのBOOL型入力は,対応するアクションクオリファイア

が,入力名(N,R,S,L,D,P,P0,P1,SD,DS又はSL)と同じ場合,アクションブロックへの

163 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

連結をもつという。連結しているステップが活性である場合,又は連結しているアクションブロック

への入力がBOOL#1である場合,連結は活性であるという。アクションの活性連結は,

ACTION̲CONTROLファンクションブロックへの全入力の活性連結の組と同等である。 

少なくとも一つの活性連結がある場合,ACTION̲CONTROLファンクションブロックへのブール入

力は,BOOL#1をもたなければならず,それ以外は,BOOL#0でなければならない。 

c) ACTION̲CONTROLファンクションブロックへの入力Tの値は,活性連結の時間関連アクションクオ

リファイア(L,D,SD,DS又はSL)の持続時間型の値でなければならない。そのような連結がない

場合,入力Tの値は,t#0sでなければならない。 

d) 次に示す条件が一つ以上ある場合,エラーである。 

・ 二つ以上の活性連結が時間関連アクションクオリファイア(L,D,SD,DS又はSL)をもっている。 

・ SL̲FFブロックの出力Q1がBOOL#1のとき,ACTION̲CONTROLファンクションブロックの入力

SDがBOOL#1をもつ。 

・ SD̲FFブロックの出力Q1がBOOL#1のとき,ACTION̲CONTROLファンクションブロックの入力

SLがBOOL#1をもつ。 

e) ACTION̲CONTROLファンクションブロック自体を実装する必要はないが,アクションの制御は,前

述の規則に従っていなければならない。図24に示すように,個々のアクション要求に応じたアクショ

ン制御の部分だけが実装される必要がある。特に,後者の連結が“N”アクションクオリファイアだ

けの場合,単純なMOVE(:=)及びORファンクションだけで,ブール型変数アクションの制御にと

って十分である点に留意する。 

図22及び図23は,ACTION̲CONTROLファンクションブロックの引数インタフェース及びボディを要

約するものである。アクションコントロールの例は,図24による。 

+ ----------------- + 

| ACTION̲CONTROL | 

 BOOL | N 

Q | --BOOL 

 BOOL--| R 

A | --BOOL 

 BOOL--| S 

 BOOL--| L 

 BOOL--| D 

 BOOL--| P 

 BOOL--| P1 

 BOOL--| P0 

 BOOL--| SD 

 BOOL--| DS 

 BOOL--| SL 

 TIME--| T 

+ ----------------- + 

+ ----------------- + 

| ACTION̲CONTROL | 

 BOOL | N 

Q | --BOOL 

 BOOL--|R 

 BOOL--|S 

 BOOL--|L 

 BOOL--|D 

 BOOL--|P 

 BOOL--|P1 

 BOOL--|P0 

 BOOL--|SD 

 BOOL--|DS 

 BOOL--|SL 

 TIME--|T 

+ ----------------- + 

a) “最終スキャン”論理付 

b) “最終スキャン”論理なし 

注記 これらのインタフェースは,ユーザには見えない。 

図22−ACTION̲CONTROLファンクションブロック−外部インタフェース(要約) 

164 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ -- + 

+ ------------------------------------------------------ O | & | --Q 

+ ---- + 

| | 

 N-- | ------------------------------------------------ | >=1 | -- | | 
 

S̲FF 

+ -- + 

 R-- + 

+ ----- + 

| RS 

 S-- |---------------------- | S Q1 | ------------------- | 

+---------------------- | R1 

+ ----- + + -- + 

 L-- | ---------- + ------------------- | & | ------------- | 

L̲TMR 

+ -O | | 

+ ----- + 

+ -- + 

| TON | 

+ ---- | IN Q | --- + 

D̲TMR 

+ ----------- | PT 

+ ----- + 

+ ----- + 

| TON | 

 D-- | -- | ---------------------------- | IN Q |--------- | 

+ ---------------------------- | PT 

P̲TRIG 

+ ----- + 

+ ------ + 

| R̲TRIG | 

 P-- | -- |-----------|CLK Q | ------------------------- | 

SD̲FF + ------ + 

SD̲TMR 

| + ----- + 

+ ------ + 

| | RS 

| TON 

 SD- | -- | -- | S Q1 | ----------- | IN Q | -------------- | 

+ -- | -- | R1 

| + ---------- | PT 

| + ----- + | DS̲TMR + ------ + DS̲FF 

+-----------+ + ----- + 

+ ----- + 

| TON 

| RS 

 DS- | -- | ------------ | IN Q | ---------- | S Q1 | ----- | 

+ ------------ | PT 

+ -- | R1 

+ ------ + 

+ ----- + 

+ -- |--------------------------- + 

SL̲FF 

+ ----- + 

| RS 

+---+ 

 SL- | -- | ----- | S Q1 | -- + ------------------- | & | ---- | 

+ -- | ----- | R1 

SL̲TMR 

+ -- O | | 

+ --- + 

+ ----- + 

| + ------ + | 

+---+ 

| | TON 

| | 

+ -- | IN Q | -- + 

+ ---- + 

 T----- + ------------------- | PT 

+ ------ + 

| >=1 | 

+ ------ + 

| F̲TRIG | 

Q-- | 

| ---A 

+ ------ + 

Q-- | CLK Q | ---------- | 

| R̲TRIG | 

+ ------ + 

P1------------ | CLK Q | ---------------------------------------- | 

+ ------ + 

+ ------ + 

| F̲TRIG | 

P0---------------------------------- | CLK Q | ------------------ | 

+ ------ + 

+ ---- + 

a) “最終スキャン”論理付ボディ 

図23−ACTION̲CONTROLファンクションブロックボディ(要約) 

165 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ -- + 

+ ------------------------------------------------------ O | & | --Q 

+ ---- + 

| | 

 N-- | ------------------------------------------------ | >=1 | -- | | 
 

S̲FF 

+ -- + 

 R-- + 

+ ----- + 

| RS 

 S-- |---------------------- | S Q1 | ------------------- | 

+---------------------- | R1 

+ ----- + + -- + 

 L-- | ---------- + ------------------- | & | ------------- | 

L̲TMR 

+ -O | | 

+ ----- + 

+ -- + 

| TON | 

+ ---- | IN Q | --- + 

D̲TMR 

+ ----------- | PT 

+ ----- + 

+ ----- + 

| TON | 

 D-- | -- | ---------------------------- | IN Q |--------- | 

+ ---------------------------- | PT 

P̲TRIG 

+ ----- + 

+ ------ + 

| R̲TRIG | 

 P-- | -- |-----------|CLK Q | ------------------------- | 

SD̲FF + ------ + 

SD̲TMR 

| + ----- + 

+ ------ + 

| | RS 

| TON 

 SD- | -- | -- | S Q1 | ----------- | IN Q | -------------- | 

+ -- | -- | R1 

| + ---------- | PT 

| + ----- + | DS̲TMR + ------ + DS̲FF 

+-----------+ + ----- + 

+ ----- + 

| TON 

| RS 

 DS- | -- | ------------ | IN Q | ---------- | S Q1 | ----- | 

+ ------------ | PT 

+ -- | R1 

+ ------ + 

+ ----- + 

+ -- |--------------------------- + 

SL̲FF 

+ ----- + 

| RS 

+---+ 

 SL- | -- | ----- | S Q1 | -- + ------------------- | & | ---- | 

+ -- | ----- | R1 

SL̲TMR 

+ -- O | | 

+ ----- + 

| + ------ + | 

+---+ 

| | TON 

| | 

+ -- | IN Q | -- + 

 T----- + ------------------- | PT 

+ ----- + 

+ ------ + 

| R̲TRIG | 

 P1--------- | CLK Q |---------------------------------- | 

+ ----- + 

+ ------ + 

| F̲TRIG | 

P0---------------------------- | CLK Q | --------------- | 

+ ------ + 

+ ---- + 

b) “最終スキャン”論理なしボディ 

注記1 これらのファンクションブロック型のインスタンスは,ユーザには見えない。 
注記2 これらのファンクションブロック型の外部インタフェースを上に示す。 

図23−ACTION̲CONTROLファンクションブロックボディ(要約)(続き) 

166 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ---- + 

+ ---- + --------------- + ----------------- + 

| S22 | ---- | N | HV̲BREAKER 

| HV̲BRKR̲CLOSED 

+ ---- + 

+ ---- + --------------- + ----------------- + 

| S | START̲INDICATOR 

+ ---- +---------------------------------- + 

+ HV̲BRKR̲CLOSED 

+ ---- + 

+ ---- + --------------- + 

| S23 | ---- | SL | RUNUP̲MONITOR | 

+ ---- + 

| t#1m | 

+ ---- + --------------- + 

| D | START̲WAIT 

| t#1s | 

+ ---- + --------------- + 

+ START̲WAIT 

+ ---- + 

+ ---- + --------------- + ----------------- + 

| S24 | ---- | N | ADVANCE̲STARTER | STARTER̲ADVANCED | 

+ ---- + 

+ ---- + --------------- + ----------------- + 

| L | START̲MONITOR 

|t#30s| 

+ ---- + --------------- + ----------------- + 

+ STARTER̲ADVANCED 

+ ---- + 

+ ---- + --------------- + ----------------- + 

| S26 | ---- | N | RETRACT̲STARTER | STARTER̲RETRACTED | 

+ ---- + 

+ ---- + --------------- + ----------------- + 

+ STARTER̲RETRACTED 

+ ---- + 

+ ---- + --------------- + 

| S27 | ---- | R | START̲INDICATOR | 

+ ---- + 

+ ---- + --------------- + 

| R | RUNUP̲MONITOR | 

+ ---- + --------------- + 

a) SFC表現 

図24−アクション制御(例) 

background image

167 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

S22.X ----------------------------------------------------------HV̲BREAKER 

S24.X -----------------------------------------------------ADVANCE̲STARTER 

S26.X -----------------------------------------------------RETRACT̲STARTER 

START̲INDICATOR̲S̲FF 

+ ------ + 

| RS | 

S22.X------------------------ | S Q1 | ---------------------START̲INDICATOR 

S27.X------------------------ | R1 

+ ------ + 

START̲WAIT̲D̲TMR 

+ ------ + 

| TON | 

S23.X------------------------ | IN Q | --------------------------START̲WAIT 

t#1s------------------------- | PT 

+ ------ + 

RUNUP̲MONITOR̲SL̲FF 

+ ------ + 

| RS 

+ -- + 

S23.X ---| S Q1 | -- + ---------------------------- | & | ------RUNUP̲MONITOR 

S27.X ---| R1 

| RUNUP̲MONITOR̲SL̲TMR + -O | 

+ ------ + 

+ ------ + 

| + -- + 

| TON | 

+ -------- | IN Q | -------- + 

t#1m------------------------- | PT 

+ ------ + 

+ -- + 

S24.X-------------- + ---------------------------- | & | ------START̲MONITOR 

START̲MONITOR̲L̲TMR 

+ -O | 

+ ------ + 

| + -- + 

| TON | 

+ -------- | IN Q | -------- + 

t#30s------------------------ | PT 

+ ------ + 

b) 機能的に同等 

注記 完全なSFCネットワーク及び連結宣言は,この例では示していない。 

図24−アクション制御(例)(続き) 

表60は,二つの可能なアクション制御項目を示す。 

表60−アクション制御項目 

No. 

説明 

参照 

最終スキャン付 

図22 a)及び図23 a)による。 

最終スキャンなし 

図22 b)及び図23 b)による。 

注記 これら二つの項目は,お互いに排他的である。すなわち,二つの項目のうちの一つだけが特定のSFC実装でサ

ポートしなければならない。 

6.7.5 

展開規則 

SFCネットワークの初期状態は,ネットワークを含むプログラム又はファンクションブロックを開始す

る時点で,初期ステップが活性状態であるという特徴をもっている。 

168 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ステップの活性状態の展開は,有向接続線に沿って一つ以上のトランジションを通過することによって

行わなければならない。 

対応するトランジションに有向接続線で接続された全ての前置ステップが活性であるとき,トランジシ

ョンは通過可能となる。トランジションが通過可能で,かつ,連結したトランジション条件が真のとき,

トランジションの通過が行われる。 

対応するトランジションに有向接続線で接続された直前のステップ全てがトランジションの通過によっ

て非活性化(又はリセット)され,直後のステップ全てを活性化に導く。 

ステップ/トランジションとトランジション/ステップとの選択が,SFC要素の接続で常に維持されな

ければならない。すなわち, 

・ 二つのステップは,決して直接接続されてはならない。それらは,常にトランジションによって分離

しなければならない。 

・ 二つのトランジションは,決して直接接続されてはならない。それらは,常にステップによって分離

しなければならない。 

トランジションの通過が同時に幾つかのステップを活性化する場合,これらのステップが属するシーケ

ンスを並列シーケンスという。これらが同時に活性化した後は,それぞれのシーケンスの展開は,独立し

て行われる。そのような構文の特別な性質を強調するために,並列シーケンスの分岐及び収束は,二重水

平線で示さなければならない。 

表61のNo.2aの図に示すような優先付けされていないトランジションの選択分岐で同時に真になる可能

性がある場合は,エラーとしなければならない。ユーザは,表61のNo.2b及びNo.2cの図に示すようにこ

のエラーを回避する手段を講じることができる。 

表61にステップとトランジションとの許される組合せの構文規則及び意味論を定義する。 

トランジションの通過時間は,理論上できるだけ短いことが望ましいが,0には成り得ない。実際に,

通過時間は,プログラマブルコントローラの実装に依存する。同じ理由で,ステップの活性時間も0とみ

なすことはできない。 

同時に通過できる幾つかのトランジションは,個々のプログラマブルコントローラによるタイミングの

制約及び表61に定義する優先権の制約の範囲内で同時に通過しなければならない。 

ステップを宣言しているプログラム構成ユニット全体にステップの活性化の効果が伝わり終わるまで,

活性化ステップの後に続くトランジション条件を評価してはならない。 

前述の規則の適用は,図25による。この図では,ステップの活性状態は,対応するブロック内にアスタ

リスク(*)を付けることで示している。この表記法は,図解のためだけに用いており,要求している言語

仕様ではない。 

この箇条で示した規則の適用は,図26 a)に示すような“安全でない”SFCの作成を阻止することはでき

ない。この図は,トークンの増加を制御できないことを示している。同様に,これらの規則の適用は,図

26 b)に示すような“可達でない”SFCの作成を阻止することはできない。この図は,“ロックアップ”動

作を示す。プログラマブルコントローラは,このような状態をエラーとして取り扱わなければならない。 

表61で示す分岐・収束構文の最大数は,実装者固有である。 

background image

169 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表61−シーケンスの展開−グラフィック形式 

No. 

説明 

解説 

例 

単一シーケン
ス 

ステップ−トランジションが交互
に直列に繰り返される。 

+ ---- + 

| S3 | 

+ ---- + 

+ c 

+ ---- + 

| S4 | 

+ ---- + 

ステップS3からステップS4への展開は,ステップS3
が活性状態であり,更にトランジション条件cが真である
ときにだけ行われる。 

2a 

優先度が左か
ら右のシーケ
ンスの分岐 

幾つかのシーケンス間の選択は,
存在し得る異なった展開の数だけ
水平線の下にトランジションで表
される。アスタリスクは,トラン
ジションの優先度が左から右の順
であることを示す。 

+ ---- + 

| S5 | 

+ ---- + 

+ ---- * ---- + -... 

+ e 

+ f 

+ ---- + 

+ ---- + 

| S6 | 

| S8 | 

+ ---- + 

+ ---- + 

S5が活性で,しかも,トランジション条件eが真である
ときにだけS5からS6への展開が起こり(fの値に関係
なく),S5が活性でfが真であり,eが偽のときにだけ
S5からS8に展開する。 

2b 

分岐先に数字
を付けたシー
ケンスの分岐 

数字付き分岐先が続くアスタリス
クは,ユーザが決めたトランジシ
ョンの優先度を示しており,小さ
い数が優先度が高い。 

+ ---- + 

| S5 | 

+ ---- + 

+ ---- * ---- + -... 

| 2 

| 1 

+ e 

+ f 

+ ---- + 

+ ---- + 

| S6 | 

| S8 | 

+ ---- + 

+ ---- + 

S5が活性でしかもトランジション条件fが真であるとき
にだけS5からS8への展開が起こり,S5が活性でeが真
であり,fが偽のときにだけS5からS6に展開する。 

background image

170 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表61−シーケンスの展開−グラフィック形式(続き) 

No. 

説明 

解説 

例 

2c 

相互に排他的
なシーケンス
の分岐 

トランジション条件が互いに排他
的であることをユーザが保証しな
ければならないということを分岐
の接続(“+”)が示している。 

+ ---- + 

| S5 | 

+ ---- + 

+ ---- + ---- + -... 

| 2 

| 1 

+ e 

+ NOT e & f 

+ ---- + 

+ ---- + 

| S6 | 

| S8 | 

+ ---- + 

+ ---- + 

S5が活性でしかもトランジション条件eが真であるとき
にだけS5からS6への展開が起こり,S5が活性でfが真
であり,eが偽のときにだけS5からS8に展開する。 

シーケンスの
収束 

選択シーケンスの終わりは,終了
する選択肢の数だけ水平線の上に
トランジションで表される。 

+ ---- + 

+ ---- + 

| S7 | 

| S9 | 

+ ---- + 

+ ---- + 

+ h 

+ j 

+ ---- + ---- + -... 

+ ---- + 

| S10 | 

+ ---- + 

S7が活性でトランジション条件hが真の場合にだけS7
からS10への展開が起こり,また,S9が活性でjが真で
ある場合にだけS9からS10に展開する。 

4a 

単一トランジ
ション後の並
列分岐 

単一トランジション条件が二重水
平同期線に先行する。 

+ ---- + 

| S11 | 

+ ---- + 

+ b 

+ ==== + ==== + =... 

+ ---- + 

+ ---- + 

| S12 | 

| S14 | 

+ ---- + 

+ ---- + 

S11が活性で,しかも共通トランジションに関連付けられ
ているトランジション条件bが真である場合だけS11か
らS12,S14,.....への展開が行われる。 
S12,S14などが同時に活性化された後の各シーケンスの
展開は,独立して進行する。 

background image

171 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表61−シーケンスの展開−グラフィック形式(続き) 

No. 

説明 

解説 

例 

4b 

収束後の並列
分岐 

選択シーケンスの収束が二重水平
同期線に先行する。 

+ ---- + 

+ ---- + 

| S2 | 

| S5 | 

+ ---- + 

+ ---- + 

+ T2 

+ T6 

+ --------- + 

+==========+ ========== + 

+ ---- + 

+ ---- + 

+ ---- + 

| S3 | 

| S6 | 

| S7 | 

+ ---- + 

+ ---- + 

+ ---- + 

S2が活性で,トランジションT2が真である場合,又は
S5が活性でトランジションT6が真である場合にS3,S6
及びS7の各ステップへの展開が行われる。 

4c 

トランジショ
ン前の並列収
束 

単一トランジションが二重並列収
束線に続く。 

+ ---- + 

+ ---- + 

| S13 | 

| S15 | 

+ ---- + 

+ ---- + 

+ ==== + ==== + =... 

+ d 

+ ---- + 

| S16 | 

+ ---- + 

二重水平線に接続された上方の全てのステップが活性で,
しかも,共通トランジションに関連付けられているトラン
ジション条件dが真である場合だけS13,S15,......
からS16への展開が行われる。 

background image

172 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表61−シーケンスの展開−グラフィック形式(続き) 

No. 

説明 

解説 

例 

4d 

選択シーケン
ス前の並列収
束 

選択シーケンス分岐が二重並列収
束線に続く。 

+ ---- + 

+ ---- + 

+ ---- + 

| S5 | 

| S4 | 

| S3 | 

+ ---- + 

+ ---- + 

+ ---- + 

+==========+ ========== + 

+----------+ ---------- + 

+ T2 

+ T5 

+ T6 

+ ---- + 

+ ---- + 

| S6 | 

| S7 | 

+ ---- + 

+ ---- + 

+ T4 

+ T7 

+----------+ ---------- + 

+ ---- + 

| S8 | 

+ ---- + 

+ T8 

二重水平線に接続された上方の全てのステップが活性で,
しかも,トランジション条件T2,T5又はT6がそれぞれ
真である場合だけS5,S4及びS3からS6,S7又はS8
のステップの一つへの展開が行われる。 

5a, 
5b, 

5c 

シーケンス・
スキップ 

“シーケンス・スキップ”は,一
つ以上の分岐先にステップを伴わ
ない選択シーケンス(No.2)の特
殊な場合である。No.5a,No.5b及
びNo.5cは,それぞれNo.2a,No.2b
及びNo.2cに示すオプション表現
に相当する。 

+ ---- + 

| S30 | 

+ ---- + 

+ ---- * ---- + 

+ a 

+ d 

+ ---- + 

| S31 | 

+ ---- + 

+ b 

+ ---- + 

| S32 | 

+ ---- + 

+ c 

+ ---- + ---- + 

+ ---- + 

| S33 | 

+ ---- + 

(No.5a参照) 
aが偽であって,dが真である場合,S30からS33へ展開
する。すなわち,シーケンス(S31,S32)はスキップする。 

background image

173 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表61−シーケンスの展開−グラフィック形式(続き) 

No. 

説明 

解説 

例 

6a, 
6b, 

6c 

シーケンス・
ループ 

“シーケンス・ループ”は,一つ
以上の分岐先が前のステップに戻
るという,選択シーケンス(No.2)
の特殊な場合である。No.6a,No.6b
及びNo.6cは,それぞれNo.2a,
No.2b及びNo.2cのオプション表
現に相当する。 

+ ---- + 

| S30 | 

+ ---- + 

+ a 

+ ---------- + 

+ ---- + 

| S31 | 

+ ---- + 

+ b 

+ ---- + 

| S32 | 

+ ---- + 

* ---- + 

+ c 

+ d 

+ ---- + + ---- + 

| S33 | 

+ ---- + 

(No.6a参照) 
cが偽であって,dが真である場合,S32からS31へ展開
する。すなわち,シーケンス(S31,S32)を繰り返す。 

矢印 

制御の流れを明確にする必要があ
るときは,6.1.1で定義する文字セ
ット“小なり”(<)文字は,右か
ら左への制御の流れを示すために
用いることができる。“大なり”
(>)文字は,左から右への制御
の流れを表現するために用いるこ
とができる。 
この項目を用いるとき,対応する
文字は,二つの“-”文字の間に
なければならない。つまり,例に
示すように,文字の順番“-<-”
又は“->-”である。 

+-----+ 

| S30 | 

+-----+ 

+ a 

+ ---- < --- + 

+-----+ 

| S31 | 

+-----+ 

+ b 

+-----+ 

| S32 | 

+-----+ 

* ----- + 

+ c 

+ d | 

+-----+ + ->- + 

| S33 | 

+-----+ 

174 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ------ + 

+ ------ + + ------ + + ------ + 

| STEP10 | 

| STEP9 | | STEP13 | | STEP22 | 

| | 

* | | * | 

+ ------ + 

+ ------ + + ------ + + ------ + 

+ X 

=== + ======== + ======== + === 

+ ------ + 

+ X 

| STEP11 | 

=== + ==== + ==== + === 

+ ------ + 

+ ------ + + ------ + 

| STEP15 | | STEP16 | 

| | 

+ ------ + + ------ + 

a) トランジションが通過可能でない(注記2) 

+ ------ + 

+ ------ + + ------ + + ------ + 

| STEP10 | 

| STEP9 | | STEP13 | | STEP22 | 

* | 

| * 

| | 

* | | * | 

+ ------ + 

+ ------ + + ------ + + ------ + 

+ X 

=== + ======== + ======== + === 

+ ------ + 

+ X 

| STEP11 | 

=== + ==== + ==== + === 

+ ------ + 

+ ------ + + ------ + 

| STEP15 | | STEP16 | 

| | 

+ ------ + + ------ + 

b) トランジションは,通過可能であるが通過できない(X=0) 

図25−SFCの展開(規則) 

175 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ------ + 

+ ------ + + ------ + + ------ + 

| STEP10 | 

| STEP9 | | STEP13 | | STEP22 | 

| | 

| | 

+ ------ + 

+ ------ + + ------ + + ------ + 

+ X 

=== + ======== + ======== + === 

+ ------ + 

+ X 

| STEP11 | 

| * 

=== + ==== + ==== + === 

+ ------ + 

+ ------ + + ------ + 

| STEP15 | | STEP16 | 

| * 

| | * 

+ ------ + + ------ + 

c) トランジションを通過 (X=1) 

注記1 この図では,ステップの活性状態は,対応するブロック内にアスタリスク(*)を付けることで示している。

この表記法は,図解のためだけに用いており,要求している言語仕様ではない。 

注記2 a)では,ブール変数Xの値は,TRUE又はFALSEでもよい。 

図25−SFCの展開(規則)(続き) 

background image

176 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ------------------------------ + 

+ ====== + 

|| A || 

+ ====== + 

+ t1 

====== + =============== + =============== + ======= 

+ -- + 

+ -- + 

| B | 

| C | 

+ -- + 

+ -- + 

* ------------- + 

+ t2 

+ t3 

+ -- + 

+ -- + 

| D | 

| E | 

+ -- + 

+ -- + 

====== + =============== + =============== + ======= 

+ t4 

+ t5 

+ -- + 

+ -- + 

| F | 

| G | 

+ -- + 

+ -- + 

+ t6 

+ t7 

+ ------------------------------ +------------------------------ + 

a) SFCエラー:“安全でない”SFC 

図26−SFCエラー(例) 

background image

177 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ------------------------------ + 

+ ====== + 

|| A || 

+ ====== + 

+ t1 

====== + =============== + =============== + ======= 

+ -- + 

+ -- + 

| B | 

| C | 

+ -- + 

+ -- + 

* ------------- + 

+ t2 

+ t3 

+ -- + 

+ -- + 

| D | 

| E | 

+ -- + 

+ -- + 

====== + =============== + =============== + ======= 

+ t4 

+ t5 

+ -- + 

+ -- + 

| F | 

| G | 

+ -- + 

+ -- + 

====== + =============== + ============= + ===== 

+ t6 

+ ----------------------------------------------- + 

b) SFCエラー:“可達でない”SFC 

図26−SFCエラー(例)(続き) 

6.8 

コンフィグレーションの各要素 

6.8.1 

概要 

コンフィグレーションは,リソース,リソース内で定義するタスク,グローバル変数,アクセスパス及

びインスタンスごとの初期化部で構成する。この箇条では,これらの要素について詳細に規定する。 

簡単なコンフィグレーションの略図は,図27 a)による。対応するファンクションブロック及びプログラ

ムに用いる骨組みの宣言は,図27 b)による。図27の例の宣言は,図28による。 

background image

178 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

a) グラフィック表現 

 
FUNCTION̲BLOCK A 
  VAR̲OUTPUT 
    y1 : UINT ; 
    y2 : BYTE ; 
  END̲VAR 
END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK B 
  VAR̲INPUT  
    b1 : UINT ; 
    b2 : BYTE ; 
  END̲VAR 
END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK C 
  VAR̲OUTPUT 
    c1 : BOOL ; 
  END̲VAR 
  VAR 
    C2 AT %Q*: BYTE;  
    C3: INT; 
  END̲VAR 
END̲FUNCTION̲BLOCK 

FUNCTION̲BLOCK D 
  VAR̲INPUT 
    d1 : BOOL ; 
  END̲VAR 
  VAR̲OUTPUT 
    y2 : INT ; 
  END̲VAR 
END̲FUNCTION̲BLOCK 

b) ファンクションブロック及びプログラムの骨組みの宣言 

図27−コンフィグレーション(例) 

アクセスパス 

THETA 

OMEGA 

コンフィグレーション CELL̲1 

リソース STATION̲1 

リソース STATION̲2 

タスク 

SLOW̲1 

P1 

P2 

P1 

P4 

x

y1 

y

FB2 

FB1 

FB2 

x

FAST̲1 

SLOW̲1 

BAKER 

ABLE 

CHARLIE 

DOG 

GAMMA 

ALPHA 

BETA 

x

x

PER̲2 

HOUT1 

INT̲2

b1 

b2 

PER̲2 

COUNT 

S1̲COUNT 

C2 

C3 

タスク 

タスク 

PER̲2 

タスク 

INT̲

%IX1.1 

A

y

FB1 

y

SLOW̲1 

out

z2 

%QW5 

ZETA 

%QB25 

c

FAST̲1 

グローバル変数及び直接表現変数並びに 

インタフェースごとの初期化 

d1 

179 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

PROGRAM F 
  VAR̲INPUT 
    x1 : BOOL ; 
    x2 : UINT ; 
  END̲VAR 
  VAR̲OUTPUT 
    y1 : BYTE ; 
  END̲VAR 
  VAR 
    COUNT : INT ; 
    TIME1 : TON ; 
  END̲VAR 
END̲PROGRAM 
PROGRAM G 
  VAR̲OUTPUT 
    out1 : UINT ; 
  END̲VAR 
  VAR̲EXTERNAL 
    z1 : BYTE ; 
  END̲VAR 
  VAR 
    FB1 : A ; 
    FB2 : B ; 
  END̲VAR 
 

  FB1(...) ; 
  out1 :=FB1.y1 ; 
  z1 :=FB1.y2 ; 
  FB2(b1 :=FB1.y1, b2 :=FB1.y2) ; 
END̲PROGRAM 
PROGRAM H 
  VAR̲OUTPUT 
    HOUT1 : INT ; 
  END̲VAR 
  VAR 
    FB1 : C ; 
    FB2 : D ; 
  END̲VAR 
   
  FB1(...) ; 
  FB2(...) ; 
  HOUT1 :=FB2.y2 ; 
END̲PROGRAM 

b) ファンクションブロック及びプログラムの骨組みの宣言(続き) 

図27−コンフィグレーション(例)(続き) 

表62に,コンフィグレーション,リソース,グローバル変数,アクセスパス及びインスタンスごとの初

期化部の宣言の言語仕様を列挙する。 

・ タスク 図27は,タスク項目のうち,図27 a)に示すコンフィグレーションの例に対応するもの,及

び図27 b)のサポート宣言に関するものについて,その実例を示す。 

180 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ リソース RESOURCE...ON...END̲RESOURCE構文のON修飾子は,“信号処理機能”の種類,信号

処理機能の“ヒューマンマシンインタフェース機能”並びに“センサ及びアクチュエータのインタフ

ェース機能”といった機能を指定するのに用い,その上でリソース及びリソース関連プログラム及び

タスクの実装を行う。実装者は,図3に示すようなかかる要素の実装者固有のリソースライブラリを

供給しなければならない。このライブラリのそれぞれの要素に関連した機能は,リソース宣言で使う

ために識別子(リソース型名)がなければならない。 

注記1 ただ一つのリソースをもつコンフィグレーションでは, 

RESOURCE...ON...END̲RESOURCE構文規則は要求されない。 

・ グローバル変数 VAR̲GLOBAL宣言の適用範囲は,宣言が行われたコンフィグレーション又はリソー

スの範囲内にとどめるが,アクセスパスは,例外として,表62の項目No.10dを用いることでリソー

スのグローバル変数として宣言することができる。 

・ アクセスパス VAR̲ACCESS...END̲VAR構文は,IEC 61131-5に定義する幾つかの通信サービスか

ら遠隔アクセスを可能とするための変数名を指定する手段として用意している。アクセスパスは,そ

うしたそれぞれの変数名とプログラム又はファンクションブロックのグローバル変数,直接表現変数,

又はあらゆる入力,出力及び内部変数とを結び付ける。 

その連結は,(ある場合には)リソース名で始まり,(ある場合には)プログラムインスタンス名,

更に,(ある場合には)ファンクションブロックインスタンス名に続く階層的に結合されたインスタン

ス名で変数名を修飾することで遂行される。その変数名は,その結合の終端に結び付ける。その結合

内の全ての名前は,“.”によって区切らなければならない。そのような変数が多要素変数(構造体又

は配列)の場合,アクセスパスは,変数要素に対しても定義付けできる。 

VAR̲TEMP,VAR̲EXTERNAL又はVAR̲IN̲OUTで宣言される変数へのアクセスパスの定義を可能

にしてはならない。 

アクセスパスの方向については,READ̲WRITE又はREAD̲ONLYのような指定が可能である。通信

サービスにおいて,前者は,変数値の読出し及び変更が共に可能であり,後者は,変数値の読出しだ

け可能で変更はできないことを示す。方向について指示がない場合,デフォルトの方向はREAD̲ONLY

となる。 

CONSTANTで宣言する変数及び他の変数に外部接続されるファンクションブロック入力へのアクセ

スは,READ̲ONLYでなければならない。 

注記2 READ̲WRITEでファンクションブロック出力変数にアクセスすることの影響は,実装者に

よって異なる。 

・ コンフィグレーション VAR̲CONFIG...END̲VAR構文は,インスタンス固有の配置を記号表現変数

に割り付ける手段,及び/又はインスタンスごとの初期値を記号表現変数に割り付ける手段を提供す

る。記号表現変数は,アスタリスク(“*”)表記によって個々の目的に応じて指定している。 

その割付けは,(ある場合には)リソース名で始まり,(ある場合には)プログラムインスタンス名,

更に,(ある場合には)ファンクションブロックインスタンス名に続く階層的に結合されたインスタン

ス名で配置又は初期化されるオブジェクト名を修飾することで遂行される。その配置又は初期化され

るオブジェクト名は,(変数が構造体であれば,)構造体の要素名が続くその結合の終端に結び付ける。

その結合内の全ての名前は,“.”によって区切らなければならない。その配置の割付け又は初期値の

割付けは,構文規則及び意味論に従う。 

VAR̲CONFIG...END̲VAR構文で提供されるインスタンスごとの初期値は,常にデータ型ごとの初

background image

181 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

期値を上書きする。VAR̲TEMP,VAR̲EXTERNAL,VAR CONSTANT又はVAR̲IN̲OUTで宣言する変

数に対しては,インスタンスごとの初期設定を定義することはできない。 

表62−コンフィグレーション及びリソース宣言 

No. 

説明 

CONFIGURATION...END̲CONFIGURATION 

CONFIGURATION内でのVAR̲GLOBAL...END̲VAR 

RESOURCE...ON ...END̲RESOURCE 

RESOURCE内でのVAR̲GLOBAL...END̲VAR 

5a 

周期的TASK 

5b 

非周期的TASK 

6a 

PROGRAMとTASKとを関連付けるWITH 

6b 

FUNCTION̲BLOCKとTASKとを関連付けるWITH 

6c 

TASKと関連付けがないPROGRAM 

VAR̲GLOBAL内での直接表現変数 

8a 

PROGRAM入力への直接表現変数の接続 

8b 

PROGRAM入力へのGLOBAL変数の接続 

9a 

直接表現変数へのPROGRAM出力の接続 

9b 

GLOBAL変数へのPROGRAM出力の接続 

10a 

VAR̲ACCESS...END̲VAR 

10b 

直接表現変数へのアクセスパス 

10c 

PROGRAM入力へのアクセスパス 

10d 

RESOURCE内GLOBAL変数へのアクセスパス 

10e 

CONFIGURATION内GLOBAL変数へのアクセスパス 

10f 

PROGRAM出力へのアクセスパス 

10g 

PROGRAM内部変数へのアクセスパス 

10h 

ファンクションブロック入力へのアクセスパス 

10i 

ファンクションブロック出力へのアクセスパス 

11a 

変数へのVAR̲CONFIG...END̲VAR 
表16の“*”を伴う項目“部分的に定義された” を対応した場合に,この項目に対応しなければならない。 

11b 

構造体の要素に対するVAR̲CONFIG...END̲VAR 

12a 

RESOURCE内VAR̲GLOBAL CONSTANT 

12b 

CONFIGURATION内VAR̲GLOBAL CONSTANT 

13a 

RESOURCE内VAR̲EXTERNAL 

13b 

RESOURCE内VAR̲EXTERNAL CONSTANT 

次の図は,図27の中の例の宣言を示す。 

182 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

プログラムコード 

表62の項目 

CONFIGURATION CELL̲1 

  VAR̲GLOBAL  w: UINT;  END̲VAR 

  RESOURCE STATION̲1 ON PROCESSOR̲TYPE̲1 

    VAR̲GLOBAL  z1: BYTE;  END̲VAR 

    TASK SLOW̲1(INTERVAL :=t#20ms, PRIORITY :=2); 

5a 

    TASK FAST̲1(INTERVAL :=t#10ms, PRIORITY :=1); 

5a 

    PROGRAM P1 WITH SLOW̲1 : 

6a 

F(x1 :=%IX1.1); 

8a 

    PROGRAM P2 : G(OUT1=> w, 

9b 

FB1 WITH SLOW̲1, 

6b 

FB2 WITH FAST̲1); 

6b 

  END̲RESOURCE 

  RESOURCE STATION̲2 ON PROCESSOR̲TYPE̲2 

    VAR̲GLOBAL  z2      : BOOL ; 

AT %QW5 : INT  ; 

    END̲VAR 

    TASK PER̲2(INTERVAL :=t#50ms, PRIORITY :=2) ; 

5a 

    TASK INT̲2(SINGLE :=z2,       PRIORITY :=1) ; 

5b 

    PROGRAM P1 WITH PER̲2 : 

6a 

F(x1 :=z2, x2 :=w);  

8b 

    PROGRAM P4 WITH INT̲2 : 

6a 

H(HOUT1=> %QW5, 

9a 

FB1 WITH  PER̲2); 

6b 

  END̲RESOURCE 

  VAR̲ACCESS 

10a 

    ABLE 

: STATION̲1.%IX1.1 

: BOOL READ̲ONLY ; 

10b 

    BAKER 

: STATION̲1.P1.x2 

: UINT READ̲WRITE; 

10c 

    CHARLIE 

: STATION̲1.z1 

: BYTE ; 

10d 

    DOG 

: w  

: UINT READ̲ONLY; 

10e 

    ALPHA 

: STATION̲2.P1.y1 

: BYTE READ̲ONLY; 

10f 

    BETA 

: STATION̲2.P4.HOUT1 : INT READ̲ONLY; 

10f 

    GAMMA  

: STATION̲2.z2 

: BOOL READ̲WRITE; 

10d 

    S1̲COUNT 

: STATION̲1.P1.COUNT : INT; 

10g 

    THETA 

: STATION̲2.P4.FB2.d1 

: BOOL READ̲WRITE; 

10h 

    ZETA 

: STATION̲2.P4.FB1.c1 

: BOOL READ̲ONLY; 

10i 

    OMEGA 

: STATION̲2.P4.FB1.C3 

: INT READ̲WRITE; 

10k 

  END̲VAR 

10a 

  VAR̲CONFIG 
    STATION̲1.P1.COUNT : INT :=1; 
    STATION̲2.P1.COUNT : INT :=100; 
    STATION̲1.P1.TIME1 : TON :=(PT :=T#2.5s); 
    STATION̲2.P1.TIME1 : TON :=(PT :=T#4.5s); 
    STATION̲2.P4.FB1.C2 AT %QB25 : BYTE; 
  END̲VAR 

11 

END̲CONFIGURATION 

注記1 これらの項目の表記をグラフィック又はセミグラフィック表現で行ってもよいが,この規格の適用範囲外と

なる。 

注記2 VAR̲ACCESS文の中でデータ型宣言された一つの変数が,別の場所で等しくないデータ型宣言をするのはエ

ラーである。例えば,変数BAKERがWORD型で宣言される場合は,エラーである。 

図28−CONFIGURATION及びRESOURCE宣言(例) 

183 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

6.8.2 

タスク 

この規格の目的において,タスクは,周期的又は指定したブール変数の立上りでプログラム構成ユニッ

トの組(プログラム及びプログラムの宣言でインスタンスが指定されたファンクションブロック)を呼び

出すことがのできる実行制御要素として定義する。 

リソース当たりのタスクの最大数及びタスクが実行される周期の細かさは,実装者によって異なるもの

である。 

タスク及びそれぞれのタスクとプログラム構成ユニットとの関連については,表63に示すように,WITH

構文を用いることによって,コンフィグレーション範囲内にリソースの一部としてグラフィック形式又は

テキスト形式で表現することも可能である。タスクは,仕組みに基づき,その関連するリソースによって

暗黙的に有効又は無効にされる。有効なタスクによるプログラム構成ユニットの制御は,次の規則に従わ

なければならない。 

a) 関連付けされたプログラム構成ユニットは,タスクのSINGLE入力立上りごとに,実行がスケジュー

ルされなければならない。 

b) INTERVAL入力が0でない場合,関連付けされたプログラム構成ユニットは,SINGLE入力が0(ゼ

ロ)である限り,特定間隔で周期的に実行するようにスケジュールされなければならない。INTERVAL

入力が0の場合(デフォルト値),関連付けされたプログラム構成ユニットは,周期的スケジューリン

グが起きないようにしなければならない。 

c) タスクのPRIORITY入力は,関連付けされたプログラム構成ユニットのスケジューリング上の優先順

位を規定することとなり,0(ゼロ)が最上位で,数字が大きくなるに従って下位となる。表63に示

すように,プログラム構成ユニットの優先順位(すなわち,関連付けされたタスクの優先順位)は,

プリエンプティブスケジューリングに使用することも,ノンプリエンプティブスケジューリングに使

用することもできる。 

・ ノンプリエンプティブスケジューリングにおける処理能力は,プログラム構成ユニットの実行が完

了するか,又はオペレーティングシステムの機能が完了すると,リソース内で利用可能となる。処

理能力が利用可能となると,最上位の優先順位をもつプログラム構成ユニットの実行が始まらなけ

ればならない。複数のプログラム構成ユニットが優先順位最上位で実行待ちしている場合は,優先

順位最上位であって,かつ,待ち時間が最も長いプログラム構成ユニットを実行しなければならな

い。 

・ プリエンプティブスケジューリングでは,プログラム構成ユニットをスケジュールすると,同一リ

ソース内の優先順位下位のプログラム構成ユニットに割り込むことが可能となる。すなわち,優先

順位下位のユニットの実行を一時中断して,優先順位高位のユニットを先に完了させる。プログラ

ム構成ユニットは,優先順位が自分と同位以上のプログラム構成ユニットに割込みを行うことはで

きない。 

スケジュールの優先順位によっては,プログラム構成ユニットがスケジュールされたそのときに実行し

ない場合がある。ただし,表63に示す実例では,プログラム構成ユニットは全てデッドラインを守るよ

うになっている。すなわち,プログラム構成ユニットは,全て実行を完了した状態でその後の実行予定を

待つ。実装者は,提供するコンフィグレーションが,全てのデッドラインを守れるか否かについて判断で

きる十分な情報をユーザに提供しなければならない。 

d) プログラムにタスクとの関連付けを設けない場合は,そのプログラムのシステム優先順位を最下位と

しなければならない。そうしたプログラムは,当該リソースの“始動”で実行となるようにスケジュ

background image

184 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ールし,実行が終わり次第,その後の実行のために再スケジュールされなければならない。 

e) ファンクションブロックインスタンスにタスクとの関連付けをもたせる場合は,そのファンクション

ブロックの実行をそのタスクの排他制御下に置かなければならない。そのタスクと関連付けられたそ

のファンクションブロックインスタンスが宣言されるプログラム構成ユニットの評価規則とは,独立

の関係でなければならない。 

f) 

タスクと直接の関連付けをもたないファンクションブロックインスタンスの実行は,ファンクション

ブロックインスタンスを宣言したプログラム構成ユニット(このプログラム構成ユニット自体タスク

の管理下となる場合があり得る。)に用いる言語要素の評価順序の一般的規定に従う。 

注記1 クラスインスタンスは,タスクと関連付けをもたせることはできない。 

注記2 ファンクションブロックのメソッド,又はクラスのメソッドは,それらが呼び出される

POU内で実行される。 

g) プログラム内のファンクションブロックの実行は,データの同時性(concurrency)の達成を保証する

ため,次に挙げる規則に従って同期しなければならない。 

・ ファンクションブロックが一つ以上の入力を自分以外のファンクションブロックから受信する場合

は,受信するファンクションブロック実行時に,送信するファンクションブロックからの全ての入

力は,同じ時点の評価結果でなければならない。 

・ 仮に二つ以上のファンクションブロックが同一のファンクションブロックから入力を受け,それら

の“受信”ファンクションブロックが全て明示的又は暗黙的に同一のタスクに関連付けられている

場合,評価時点の全ての“受信”ファンクションブロックへの入力は,“送信”ファンクションブロ

ックの同じ評価結果でなければならない。 

明示的なタスクと関連をもつファンクション若しくはファンクションブロックの出力の格納領域又は明

示的なタスクと関連をもつプログラム構成ユニットへの入力用の格納領域のいずれかを上記の規則を満た

すために用意しなければならない。 

過大なリソース要求又はタスクスケジューリングの競合によって,タスクがスケジュール失敗又は実行

デッドラインを満たせない場合は,エラーとしなければならない。 

表63−タスク 

No. 

説明 

例 

1a 

テキストによる周期的TASKの宣言 

(表62の項目No.5aに対応) 

1b 

テキストによる非周期的TASKの宣言 

(表62の項目No.5bに対応) 

TASKのグラフィック表現(一般形式) 

TASKNAME 

+ ---------- + 

TASK 

 BOOL-- | SINGLE 

 TIME-- | INTERVAL | 
 UINT-- | PRIORITY | 
 

+ ---------- + 

2a 

周期的TASK(INTERVALを伴う)のグラフィ
ック表現 

SLOW̲1 

FAST̲1 

+ ---------- + 

+ ---------- + 

TASK 

TASK 

-- | SINGLE 

-- | SINGLE 

 t#20ms-- | INTERVAL | t#10ms-- | INTERVAL | 
 

2-- | PRIORITY | 

1-- | PRIORITY | 

+ ---------- + 

+ ---------- + 

background image

185 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表63−タスク(続き) 

No. 

説明 

例 

2b 

非周期的TASK(SINGLEを伴う)のグラフィッ
ク表現 

INT̲2 

+ ---------- + 

TASK 

z2-- | SINGLE 

-- | INTERVAL | 

1-- | PRIORITY | 

+ ---------- + 

3a 

PROGRAMとのテキスト形式関連付け 

(表62の項目No.6aに対応) 

3b 

ファンクションブロックとのテキスト形式関連
付け 

(表62の項目No.6bに対応) 

4a 

PROGRAMとのグラフィック形式関連付け 

RESOURCE STATION̲2 
 

P1 

P4 

+ ------ + 

+ ------ + 

| F 

| H 

+ ------ + 

+ ------ + 

| PER̲2 | 

| INT̲2 | 

+ ------ + 

+ ------ + 

END̲RESOURCE 

4b 

PROGRAM内のファンクションブロックとのグ
ラフィック形式関連付け 

 P2 
 + --------------------------------------- + 
 | 

 | 

 | 

FB1 

FB2 

 | 

+ ------ + 

+ ------ + 

 | 

A | 

| B | 

 | 

 | 

 | 

+ ------ + 

+ ------ + 

 | 

| SLOW̲1 | 

| FAST̲1 | 

 | 

+ ------ + 

+ ------ + 

 + --------------------------------------- + 
END̲RESOURCE 

5a 

ノンプリエンプティブスケジューリング 

図28参照 

5b 

プリエンプティブスケジューリング 

図28参照 

注記1 RESOURCE及びPROGRAMの詳細については示してない。 
注記2 表記X@Yは,プログラム構成ユニットXが優先順位Yでスケジュールされている,又は実行されていること

を示す。 

次の例は,表63のNo.5a及びNo.5bに規定するノンプリエンプティブ及びプリエンプティブスケジュー

リングを示す。 

background image

186 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例1 ノンプリエンプティブ及びプリエンプティブスケジューリング 

1) ノンプリエンプティブスケジューリング 

− 図28で構成されたRESOURCE STATION̲1 

− 実行時間:P1=2 ms,P2=8 ms 
− P2,FB1=P2.FB2=2 ms(注記1参照) 
− STATION̲1はt=0で始動する。 

スケジュール(40 msごとに繰り返す。) 

時間 

ms 

実行 

待機 

P2.FB2@1 

P1@2, P2.FB1@2, P2 

P1@2 

P2.FB1@2, P2 

P2.FB1@2 

P2 

P2 

10 

P2 

P2.FB2@1 

14 

P2.FB2@1 

P2 

16 

P2 

(P2 リスタート) 

20 

P2 

P2.FB2@1, P1@2, P2.FB1@2 

24 

P2.FB2@1 

P1@2, P2.FB1@2, P2 

26 

P1@2 

P2.FB1@2, P2 

28 

P2.FB1@2 

P2 

30 

P2.FB2@1 

P2 

32 

P2 

40 

P2.FB2@1 

P1@2, P2.FB1@2, P2 

− 図28で構成されたRESOURCE STATION̲1 
− 実行時間:P1=2 ms,P2=8 ms,P2.FB1=P2.FB2=2 ms 
− STATION̲1はt=0で始動する。 

スケジュール 

時間 

ms 

実行 

待機 

P1@2 

P4.FB1@2 

25 

P1@2 

P4.FB1@2, P4@1 

30 

P4@1 

P4.FB1@2 

35 

P4.FB1@2 

50 

P4@1 

P1@2, P4.FB1@2 

55 

P1@2 

P4.FB1@2 

85 

P4.FB1@2 

90 

P4.FB1@2 

P4@1 

95 

P4@1 

100 

P1@2 

P4.FB1@2 

background image

187 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

2) プリエンプティブスケジューリング 

表63のNo.5b参照 

− 図28で構成されたRESOURCE STATION̲1 

− 実行時間:P1=2 ms,P2=8 ms,P2.FB1=P2.FB2=2 ms 
− STATION̲1はt=0で始動する。 

スケジュール 

時間 

ms 

実行 

待機 

P2.FB2@1 

P1@2, P2.FB1@2, P2 

P1@2 

P2.FB1@2, P2 

P2.FB1@2 

P2 

P2 

10 

P2.FB2@1 

P2 

12 

P2 

16 

P2 

(P2 リスタート) 

20 

P2.FB2@1 

P1@2, P2.FB1@2, P2 

− 図28で構成されたRESOURCE STATION̲2 
− 実行時間:P1=30 ms,P4=5 ms,P4.FB1=10 ms(注記2参照) 

− INT̲2はt=25,50,90,...msでトリガする。 
− STATION̲2はt=0で始動する。 

スケジュール 

時間 

ms 

実行 

待機 

P1@2 

P4.FB1@2 

25 

P4@1 

P1@2, P4.FB1@2 

30 

P1@2 

P4.FB1@2 

35 

P4.FB1@2 

50 

P4@1 

P1@2, P4.FB1@2 

55 

P1@2 

P4.FB1@2 

85 

P4.FB1@2 

90 

P4@1 

P4.FB1@2 

95 

P4.FB1@2 

100 

P1@2 

P4.FB1@2 

注記1 P2.FB1及びP2.FB2の実行時間は,P2の実行時間に含まれない。 

注記2 P4.FB1の実行時間は,P4の実行時間に含まれない。 

188 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例2 ファンクションブロックインスタンスへのタスク関連付け 

RESOURCE R1 
PROGRAM X 
 

Y1 

Y2 

+ ----- + 

+ ----- + 

| Y | 

| Y | 

 -- | A 

C | -- + ----- | A 

C | -- 

 -- | B 

D | -- | -- + -- | B 

D | -- 

+ ----- + | | + ----- + 

| slow1 | | | | fast1 | 

+ ----- + | | + ----- + 

| | 

| | 

Y3 

| | + ----- + 

| | | Y | 

+ -- | -- | A 

C | -- 

+ -- | B 

D | -- 

+ ----- + 

| fast1 | 

+ ----- + 

END̲PROGRAM 

a) 明示的にタスクと関連付けられたファンクションブロック 

fast1 

+---------+ 

| TASK | 

 t#10ms-- | INTERVAL | 
 

1-- | PRIORITY | 

+---------+ 

slow1 

+---------+ 

| TASK | 

 t#20ms-- | INTERVAL | 
 

2-- | PRIORITY | 

+---------+ 

P1 
PROGRAM X 
 

Y1 

Y2 

+ ----- + 

+ ----- + 

| Y | 

| Y | 

 -- | A 

C | -- + ----- | A 

C | -- 

 -- | B 

D | -- | -- + -- | B 

D | -- 

+ ----- + | | + ----- + 

| fast1 | | | 

+ ----- + | | 

| | 

| | 

Y3 

| | + ----- + 

| | | Y | 

+ -- | -- | A 

C | -- 

+ -- | B 

D | -- 

+ ----- + 

END̲PROGRAM 
slow1 

b) 暗黙的にタスクと関連付けされたファンクションブロック 

189 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

RESOURCE R1 
 

fast1 

+---------+ 

| TASK | 

 t#10ms-- | INTERVAL | 
 

1-- | PRIORITY | 

+---------+ 

 
 

slow1 

+---------+ 

| TASK | 

 t#20ms-- | INTERVAL | 
 

2-- | PRIORITY | 

+---------+ 

P1 

PROGRAM X 
 

Y1 

Y2 

+ ----- + 

+ ----- + 

| Y | 

| Y | 

 -- | A 

C | -- + ----- | A 

C | -- 

 -- | B 

D | -- | -- + -- | B 

D | -- 

+ ----- + | | + ----- + 

| fast1 | | | | slow1 | 

+ ----- + | | + ----- + 

| | 

| | 

Y3 

| | + ----- + 

| | | Y | 

+ -- | -- | A 

C | -- 

+ -- | B 

D | -- 

+ ----- + 

| slow1 | 

+ ----- + 

END̲PROGRAM 

c) b)と等価な明示的なタスクとの関連付け 

注記3 これらの例におけるグラフィック形式表現は説明目的だけのためであり,規定ではない。 

6.9 

名前空間 

6.9.1 

概要 

プログラマブルコントローラ用プログラム言語の目的上,名前空間は他の言語要素を一つに結合する言

語要素である。 

ある名前空間で宣言された言語要素と同じ名前を,他の名前空間内で使用してもよい。 

名前空間を指定していない型及び名前空間は,グローバル名前空間の要素である。グローバル名前空間

は,グローバルスコープ内で宣言された名前を含む。標準ファンクション及び標準ファンクションブロッ

クは,全てグローバル名前空間の要素である。 

名前空間は,入れ子にしてもよい。 

名前空間内で宣言された型及び名前空間は,その名前空間の要素である。名前空間の要素は,名前空間

のローカルスコープ内にある。 

名前空間によってモジュール又はライブラリを実装できる。名前空間は,識別子の曖昧さを排除するた

めに使用できる。名前空間は,オブジェクト指向プログラミングとともに用いられることが多い。 

6.9.2 

宣言 

名前空間宣言は,予約語NAMESPACEで始まり,任意のアクセス修飾子INTERNAL,名前空間の名前が

続き,予約語END̲NAMESPACEで終了する。名前空間は,言語要素の集合を含む。それぞれは,次のアク

190 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

セス修飾子が任意で続く。 

・ INTERNALは,名前空間自体の中だけのアクセス用である。 

アクセス修飾子は,次の言語要素の宣言に適用できる。 

・ 使用者が決めたデータ型−予約語TYPEを用いる。 

・ ファンクション 

・ プログラム 

・ ファンクションブロック型及びそれぞれの変数及びメソッド 

・ クラス及びその変数並びにメソッド 

・ インタフェース 

・ 名前空間 

アクセス修飾子が規定されない場合,名前空間の言語要素は,名前空間の外側からアクセス可能である。

すなわち,名前空間は,デフォルトではパブリックである。 

名前空間宣言及び入れ子にされた名前空間宣言は,例1及び例2による。 

例1 名前空間宣言 

NAMESPACE Timers 

  FUNCTION INTERNAL TimeTick: DWORD 

   // ... 宣言と演算の記載 

  END̲FUNCTION 

// 指定子のない他の名前空間要素は,デフォルトでPUBLICとなる。 

  TYPE 

    LOCAL̲TIME: STRUCT  

      TIMEZONE: STRING [40]; 

      DST:      BOOL;  // Daylight saving time 

      TOD:      TOD; 

      END̲STRUCT; 

  END̲TYPE; 

  ... 

  FUNCTION̲BLOCK TON 

   // ... 宣言と演算の記載 

  END̲FUNCTION̲BLOCK 

  ... 

  FUNCTION̲BLOCK TOF 

   // ... 宣言と演算の記載 

  END̲FUNCTION̲BLOCK 

END̲NAMESPACE (*Timers*) 

例2 入れ子にされた名前空間宣言 

  NAMESPACE Standard 

// 名前空間は,デフォルトでPUBLIC 

191 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  NAMESPACE Timers 

// 名前空間は,デフォルトでPUBLIC 

    FUNCTION INTERNAL TimeTick: DWORD 

    // ... 宣言と演算の記載 

    END̲FUNCTION 

  // 指定子のない他の名前空間要素は,デフォルトでPUBLICとなる。 

    TYPE 

      LOCAL̲TIME: STRUCT  

        TIMEZONE: STRING [40]; 

        DST:      BOOL;  // 夏時間 

        TOD:      TOD; 

        END̲STRUCT; 

    END̲TYPE; 

    ... 

    FUNCTION̲BLOCK TON  // 新しい名前をもったTONの実装を定義する。 

    // ... 宣言と演算の記載 

    END̲FUNCTION̲BLOCK 

    ... 

    FUNCTION̲BLOCK TOF  // 新しい名前をもったTONの実装を定義する。 

    // ... 宣言と演算の記載 

    END̲FUNCTION̲BLOCK 

    CLASS A  

       METHOD INTERNAL M1 

       ... 

       END̲METHOD 

       METHOD PUBLIC M2 // アクセス修飾子をPUBLICに設定し,デフォルトである

PROTECTEDの設定を変更する。 

       ... 

       END̲METHOD 

    END̲CLASS 

    CLASS INTERNAL B  

       METHOD INTERNAL M1 

       ... 

       END̲METHOD 

       METHOD PUBLIC M2 

       ... 

background image

192 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

       END̲METHOD 

    END̲CLASS 

  END̲NAMESPACE (*Timers*) 

  NAMESPACE Counters 

    FUNCTION̲BLOCK CUP 

    // ... 宣言と演算の記載 

    END̲FUNCTION̲BLOCK 

    ... 

    FUNCTION̲BLOCK CDOWN 

    // ... 宣言と演算の記載 

    END̲FUNCTION̲BLOCK 

  END̲NAMESPACE (*Counters*) 

END̲NAMESPACE (*Standard*) 

ファンクションブロックの名前空間要素,メソッド及び変数に対する名前空間の内外からのアクセシビ

リティは,名前空間宣言時の名前空間修飾子及び言語要素と一緒に変数又はメソッドのアクセス修飾子に

よって決まる。 

アクセシビリティの規則は,図29に要約する。 

名前空間修飾子 

PUBLIC 

(デフォルト,修飾子なし) 

INTERNAL 

言語要素,変数又
はメソッドのア
クセス修飾子 

名前空間の外部
からのアクセス 

名前空間の内側
からであるが
POUの外側から
のアクセス 

名前空間の外側からのアクセス 

名前空間の内側
からであるが
POUの外側から
のアクセス 

親名前空間を除
く全ての名前空
間 

親名前空間 

PRIVATE 

いいえ 

いいえ 

いいえ 

いいえ 

いいえ 

PROTECTED 

いいえ 

いいえ 

いいえ 

いいえ 

いいえ 

INTERNAL 

いいえ 

はい 

いいえ 

いいえ 

はい 

PUBLIC 

はい 

はい 

いいえ 

はい 

はい 

図29−名前空間を用いたアクセシビリティ(規則) 

階層型名前空間の場合,外側名前空間は,追加としてアクセスを制限できる。すなわち,既に内部名前

空間の内側にあるユニット要素に追加のアクセスを認めることができない。 

例3 入れ子にされた名前空間及びアクセス修飾子 

NAMESPACE pN1 

   NAMESPACE pN11 

     FUNCTION pF1  ... END̲FUNCTION 

//どこからでもアクセス可能 

     FUNCTION INTERNAL iF2  ... END̲FUNCTION //pN11の中からアクセス可能 

     FUNCTION̲BLOCK pFB1  

//どこからでもアクセス可能 

       VAR PUBLIC pVar1: REAL: ... END̲VAR 

//どこからでもアクセス可能 

       VAR INTERNAL iVar2: REAL ... END̲VAR 

//pN11の中からアクセス可能 

       ... 

193 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

     END̲FUNCTION̲BLOCK 

     FUNCTION̲BLOCK INTERNAL iFB2  

//pN11の中からアクセス可能 

        VAR PUBLIC pVar3: REAL: ... END̲VAR 

//pN11の中からアクセス可能 

       VAR INTERNAL iVar4: REAL ... END̲VAR 

//pN11の中からアクセス可能 

       ... 

     END̲FUNCTION̲BLOCK 

     CLASS pC1 

       VAR PUBLIC pVar5: REAL: ... END̲VAR 

//どこからでもアクセス可能 

       VAR INTERNAL iVar6: REAL ... END̲VAR 

//pN11の中からアクセス可能 

       METHOD pM1   ... END̲METHOD 

//どこからでもアクセス可能 

       METHOD INTERNAL iM2   ... END̲METHOD 

//pN11の中からアクセス可能 

     END̲CLASS 

     CLASS INTERNAL iC2 

       VAR PUBLIC pVar7: REAL: ... END̲VAR 

//pN11の中からアクセス可能 

       VAR INTERNAL iVar8: REAL ... END̲VAR 

//pN11の中からアクセス可能 

       METHOD pM3   ... END̲METHOD 

//pN11の中からアクセス可能 

       METHOD INTERNAL iM4   ... END̲METHOD 

//pN11の中からアクセス可能 

     END̲CLASS 

   END̲NAMESPACE 

   NAMESPACE INTERNAL iN12 

     FUNCTION pF1  ... END̲FUNCTION 

//pN1の中からアクセス可能 

     FUNCTION INTERNAL iF2  ... END̲FUNCTION //iN12の中からアクセス可能 

     FUNCTION̲BLOCK pFB1  

//pN1の中からアクセス可能 

       VAR PUBLIC pVar1: REAL: ... END̲VAR 

//pN1の中からアクセス可能 

       VAR INTERNAL iVar2: REAL ... END̲VAR 

//iN12の中からアクセス可能 

       ... 

     END̲FUNCTION̲BLOCK 

     FUNCTION̲BLOCK INTERNAL iFB2  

//iN12の中からアクセス可能 

       VAR PUBLIC pVar3: REAL: ... END̲VAR 

//iN12の中からアクセス可能 

       VAR INTERNAL iVar4: REAL ... END̲VAR 

//iN12の中からアクセス可能 

       ... 

     END̲FUNCTION̲BLOCK 

     CLASS pC1 

       VAR PUBLIC pVar5: REAL: ... END̲VAR 

//pN1の中からアクセス可能 

       VAR INTERNAL iVar6: REAL ... END̲VAR 

//iN12の中からアクセス可能 

       METHOD pM1   ... END̲METHOD 

//pN1の中からアクセス可能 

       METHOD INTERNAL iM2   ... END̲METHOD 

//iN12の中からアクセス可能 

     END̲CLASS 

     CLASS INTERNAL iC2 

       VAR PUBLIC pVar7: REAL: ... END̲VAR 

//iN12の中からアクセス可能 

background image

194 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

       VAR INTERNAL iVar8: REAL ... END̲VAR 

//iN12の中からアクセス可能 

       METHOD pM3   ... END̲METHOD 

//iN12の中からアクセス可能 

       METHOD INTERNAL iM4   ... END̲METHOD 

//iN12の中からアクセス可能 

     END̲CLASS 

   END̲NAMESPACE 

END̲NAMESPACE 

名前空間用に定義された項目は,表64による。 

表64−名前空間 

No. 

説明 

例 

1a 

パブリック名前空間(アクセス修飾子な
し) 

NAMESPACE name 
   declaration(s) 
   declaration(s) 
END̲NAMESPACE 
 
収納要素は,それぞれのアクセス修飾子に応じてアクセス可能と
する。 

1b 

内部名前空間(INTERNAL修飾子付き) 

NAMESPACE INTERNAL name 
   declaration(s) 
   declaration(s) 
END̲NAMESPACE 
 
修飾子又はアクセス修飾子PUBLICが付いていない収納要素は,
レベルが一つ上の名前空間内でアクセス可能とする。 

入れ子にされた名前空間 

例2参照 

変数アクセス修飾子INTERNAL 

CLASS C1 
  VAR INTERNAL myInternalVar: INT; END̲VAR 
  VAR PUBLIC   myPublicVar: INT; END̲VAR 
END̲CLASS 

メソッドアクセス修飾子INTERNAL 

CLASS C2 
  METHOD INTERNAL myInternalMethod: INT; ... 
END̲METHOD 
  METHOD PUBLIC   myPublicMethod: INT; ... 
END̲METHOD 
END̲CLASS 

アクセス修飾子INTERNAL付き言語要素 
・ 使用者が決めたデータ型(予約語

TYPEを用いる) 

・ ファンクション 
・ ファンクションブロック型 
・ クラス 
・ インタフェース 

CLASS INTERNAL 
  METHOD INTERNAL myInternalMethod: INT; ... 
END̲METHOD 
  METHOD PUBLIC   myPublicMethod: INT; ... 
END̲METHOD 
END̲CLASS 

名前空間の名前は単一識別子でもよいし,又は,ドット(“.”)で区切る名前空間修飾子のシーケンス

で構成する完全に記述した識別子でもよい。後者の形式は,複数の名前空間宣言を単語によって入れ子に

することなく入れ子にされた名前空間の宣言を認める。後者は,追加的な宣言によってさらなる言語要素

をもつ既存の名前空間の拡張もサポートする。 

単語によって入れ子にされた名前空間は,表65の三つの項目の最初に示す本文のように入れ子にされた

background image

195 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

予約語NAMESPACE付きの多数の名前空間宣言によって宣言される。三つの項目は同じ名前空間

Standard.Timers. HighResolution.に言語要素を与える。2番目の項目は,完全に記述した名前に

よって宣言された同じ名前空間の拡張を示す。3番目の項目は,完全に記述した名前によって又は単語に

よって入れ子にされたNAMESPACE予約語による名前空間宣言を混ぜ合わせて名前空間に別のPOUを追加

する。 

入れ子にされた名前空間宣言オプションに定義された項目は,表65による。 

表65−入れ子にされた名前空間宣言オプション 

No. 

説明 

例 

単語によって入れ子にされた名前空間宣言 
表64の項目No.2に相当 

NAMESPACE Standard 
    NAMESPACE Timers 
        NAMESPACE HighResolution 
 

    FUNCTION PUBLIC TimeTick: DWORD 

     // ... 宣言と演算の記載 

    END̲FUNCTION 

        END̲NAMESPACE (*HighResolution*) 
    END̲NAMESPACE (*Timers*) 
END̲NAMESPACE (*Standard*) 

完全に記述した名前による入れ子にされた名前空
間宣言 

NAMESPACE Standard.Timers.HighResolution 
 

  FUNCTION PUBLIC TimeResolution: 

DWORD 
 

   // ... 宣言と演算の記載 

  END̲FUNCTION 

END̲NAMESPACE 
(*Standard.Timers.HighResolution*) 

単語によって入れ子にされた混合名前空間,及び
完全に記述された名前によって入れ子にされた名
前空間 

NAMESPACE Standard.Timers 
    NAMESPACE HighResolution 
 

  FUNCTION PUBLIC TimeLimit: DWORD 

   // ... 宣言と演算の記載 

  END̲FUNCTION 

    END̲NAMESPACE (*HighResolution*) 
END̲NAMESPACE (*Standard.Timers*) 

注記 同じ完全に記述された名前をもつ多数の名前空間宣言は同じ名前空間を提供する。この表の中の例では,ファ

ンクションTimeTick,TimeResolution及びTimeLimitは,例えば,それぞれ異なる構造化テキスト形式
プログラム内で別々の名前空宣言で定義されたものであるにもかかわらず,同じ名前空間
Standard.Timers.HighResolutionの一部である。 

6.9.3 

使用法 

名前空間の要素は,“.”が続く名前空間の名前を前に置くことによって名前空間の外側からアクセスで

きる。これは名前空間の内側からは不要であるが,許される。 

INTERNALアクセス修飾子付きで宣言された言語要素は,自身の名前空間を除き,名前空間の外側から

アクセスできない。 

入れ子にされた名前空間内の要素は,例に示すように全ての親名前空間に名前を付けることによってア

クセスできる。 

例 名前空間Standard.TimersからのタイマTONの使用法 

FUNCTION̲BLOCK Uses̲Timer 

VAR 

196 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   Ton1: Standard.Timers.TON; 

(*立上りエッジでタイマを開始, 立下りエッジでタイマをリセット *) 

   Ton2: PUBLIC.TON; (*標準タイマを使用する*) 

bTest: BOOL; 

END̲VAR 

   Ton1(In :=bTest, PT :=t#5s); 

END̲FUNCTION̲BLOCK 

6.9.4 

名前空間指令USING 

USING名前空間指令は,名前空間,POU,ファンクション又はメソッドの名前及び結果宣言の名前に続

いて規定してもよい。 

ファンクションブロック,クラス又は構造体の中でUSING指令が用いられる場合,その直後に型名が続

かなければならない。 

ファンクション又はメソッドの中でUSING指令が用いられる場合,その直後にファンクション又はメソ

ッドの結果型宣言が続かなければならない。 

USING指令は,表64の項目No.2に示すような名前空間の完全に記述した一つの名前又は名前のリスト

が続く予約語USINGから始まる。USING指令は,それが含まれる定義スコープ(POU定義又はメソッド

定義)内において,指定された名前空間内の言語要素の使用を可能にする。グローバル名前空間であって

も,USING指令を用いてもよい。 

USING名前空間指令を含む名前空間内の一部宣言内で,指定した名前空間に含まれる型は直接参照でき

る。次に示す例では,名前空間Infeedの一部宣言内では,Standard.Timersの型一部を直接利用でき,

またファンクションブロックUses̲Timerは,修飾なしにファンクションブロックTONを宣言できる。 

次の例は,名前空間指令USINGの使用法を示す。 

例1 名前空間指令USING 

NAMESPACE Counters 

  FUNCTION̲BLOCK CUP 

   // 宣言と演算の記載 

  END̲FUNCTION̲BLOCK 

END̲NAMESPACE (*Standard.Counters*) 

NAMESPACE Standard.Timers 

  FUNCTION̲BLOCK TON 

   // ... 宣言と演算の記載 

  END̲FUNCTION̲BLOCK 

END̲NAMESPACE (*Standard.Timers*) 

NAMESPACE Infeed  

FUNCTION̲BLOCK Uses̲Std  

USING Standard.Timers; 

 VAR 

   Ton1: TON; 

197 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  (*立上りエッジでタイマを開始, 立下りエッジでタイマをリセット*) 

   Cnt1: Counters.CUP; 

   bTest: BOOL; 

 END̲VAR 

   Ton1(In :=bTest, PT :=t#5s); 

END̲FUNCTION̲BLOCK 

END̲NAMESPACE 

USING名前空間指令は,指定した名前空間内に含まれる型の使用を可能にするが,本質的に入れ子にさ

れた名前空間に含まれる型を使用可能にしない。USING名前空間指令は,Standardに含まれる型を使用

可能にしない。すなわち,Uses̲Timer宣言内のTimers.TONの参照は,Standardと名前を付けられ

た一部が範囲内にないのでコンパイルした時にエラーになる。 

例2 入れ子にされた名前空間の無効なインポート 

NAMESPACE Standard.Timers 

  FUNCTION̲BLOCK TON 

   // ... 宣言と演算の記載 

  END̲FUNCTION̲BLOCK 

END̲NAMESPACE (*Standard.Timers*) 

NAMESPACE Infeed 

USING Standard; 

USING Standard.Counters; 

FUNCTION̲BLOCK Uses̲Timer 

VAR 

   Ton1: Timers.TON; // ERROR: 入れ子の名前空間は,インポートできない 

  (* 立上りエッジでタイマを開始, 立下りエッジでタイマをリセット *) 

   bTest: BOOL; 

END̲VAR 

   Ton1(In :=bTest, PT=t#5s); 

END̲FUNCTION̲BLOCK 

END̲NAMESPACE (*Infeed *) 

名前空間の言語要素をグローバル名前空間内で使用するためには,予約語USING及び名前空間識別子を

使用しなければならない。 

名前空間指令USINGのために規定された項目は,表66による。 

background image

198 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表66−名前空間指令USING 

No. 

説明 

例 

グローバル名前空間内のUSING 

USING Standard.Timers; 
 FUNCTION PUBLIC TimeTick: DWORD 
  VAR 
   Ton1: TON; 
  END̲VAR // ...宣言と演算の記載 
 END̲FUNCTION 

他の名前空間内のUSING 

NAMESPACE Standard.Timers.HighResolution  
    USING Counters; 
 

  FUNCTION PUBLIC TimeResolution: DWORD 

   // ...宣言と演算の記載  

  END̲FUNCTION 

END̲NAMESPACE 
(*Standard.Timers.HighResolution*) 

POU内のUSING 
・ ファンクション 
・ ファンクションブロック型 
・ クラス 
・ メソッド 
・ インタフェース 

FUNCTION̲BLOCK Uses̲Std  
    USING Standard.Timers, Counters; 
 VAR 
   Ton1: TON; 
  (* starts timer with rising edge, resets timer 
with falling edge *) 
   Cnt1: CUP; 
   bTest: BOOL; 
 END̲VAR 
   Ton1(In :=bTest, PT :=t#5s); 
END̲FUNCTION̲BLOCK 
 

FUNCTION myFun: INT 
    USING Lib1, Lib2; 
    USING Lib3; 
 VAR .... 
.... 
END̲FUNCTION 

テキスト形式言語 

7.1 

共通要素 

この規格では,テキスト言語として,IL言語(命令リスト)及びST言語(構造化テキスト)について

規定する。シーケンシャルファンクションチャート(SFC)は,これらの言語のいずれとも併用すること

ができる。 

7.2では,附属書Aに規定する構文規則をもつIL言語(命令リスト)の意味を定義する。7.3では,規

定する構文規則をもつST言語(構造化テキスト)の意味を定義する。 

箇条6に規定するテキスト形式要素は,箇条7で規定するテキスト言語(IL言語及びST言語)と共通

でなければならない。特に,図30に示すプログラム構成要素は,テキスト言語と共通でなければならな

い。 

199 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

TYPE 

...END̲TYPE 

VAR 

...END̲VAR 

VAR̲INPUT 

...END̲VAR 

VAR̲OUTPUT 

...END̲VAR 

VAR̲IN̲OUT 

...END̲VAR 

VAR̲EXTERNAL 

...END̲VAR 

VAR̲TEMP 

...END̲VAR 

VAR̲ACCESS 

...END̲VAR 

VAR̲GLOBAL 

...END̲VAR 

VAR̲CONFIG 

...END̲VAR 

FUNCTION 

...END̲FUNCTION 

FUNCTION̲BLOCK 

...END̲FUNCTION̲BLOCK 

PROGRAM 

...END̲PROGRAM 

METHOD 

...END̲METHOD 

STEP 

 ...END̲STEP 

TRANSITION 

...END̲TRANSITION 

ACTION 

...END̲ACTION 

NAMESPACE  

...END̲NAMESPACE 

図30−共通テキスト形式要素(要約) 

7.2 

命令リスト(IL言語) 

7.2.1 

概要 

この言語はアセンブラに似た言語であり,時代遅れである。したがって,この言語は非推奨であり,こ

の規格の次の改正では含まない予定である。 

7.2.2 

命令 

命令リストは,命令の列で構成する。各命令は新しい行から始まりモディファイアを付す場合もある演

算子を必ず含まなければならない。また,個々の演算で必要な場合は,一つ以上のオペランドをコンマで

区切って表記する。オペランドは,リテラル,列挙型数値及び変数のどのようなデータ表現でもよい。 

命令は,後にコロン(:)を付けた識別ラベルを置いてから表記してもよい。命令と命令との間に,空

白行を置いてもよい。 

例 命令リストの表記 

ラベル 

演算子 

オペランド 

コメント 

START: 

LD 

%IX1 

(* 押しボタン   *) 

ANDN 

%MX5 

(* 非抑制 *) 

ST 

%QX2 

(* ファン ON        *) 

7.2.3 

演算子,モディファイア及びオペランド 

7.2.3.1 

概要 

使用可能なモディファイア及びオペランド付きの標準演算子は,表68に示すとおりでなければならない。 

7.2.3.2 

“現在の結果” 

表68に別段の定義がない限り,演算子の意味は,次のとおりでなければならない。 

result :=result OP operand 

すなわち,評価中の式の値は,演算子がオペランドに対して操作すると,その式の現在の値で置き換え

られる。 

例1 命令“AND %IX1”は,result :=result AND %IX1と解釈する。 

background image

200 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

比較演算子は,現在の値を比較の左側に,オペランドを右側にした,ブール演算結果で解釈する。 

例2 命令“GT %IW10”は,現在の結果が入力ワード10よりも大となると,ブール結果が1となり,

それ以外では0となる。 

7.2.3.3 

モディファイア 

モディファイア“N”は,オペランドのビットごとのブール否定(1の補数)を表す。 

例1 命令“ANDN %IX2”は,result :=result AND NOT %IX2と解釈する。 

現在の結果とオペランドとが同じデータ型でない場合,又は数値演算の結果がそのデータ型の値の範囲

を超えた場合は,エラーとしなければならない。 

左括弧モディファイア“(”は,演算子の評価は,右側の括弧演算子“)”に出会うまで先送りにしなけ

ればならないことを表す。表67に括弧でくくった一連の命令の二つの等価式を示す。表67の両方の項目

は,次のように解釈する。 

result :=result AND (%IX1 OR %IX2) 

演算子は,6.3に定めるリテラル,列挙値又は変数でなければならない。 

ファンクション REF ( )及びリファレンス解除演算子“^”は,演算子の定義で使用しなければならな

い。表67は,括弧でくくった式を示す。 

表67−IL言語の括弧でくくった式 

No. 

説明 

例 

明示的な演算子で始まる括弧を使った表現 

AND( 
LD  %IX1   (注記参照) 
OR  %IX2 

括弧を使った表現(略式) 

AND(  %IX1 
OR    %IX2 

注記 項目No.1では,LD演算子にモディファイアを付けるか,又はLD演算子が他の演算若しくはファンクション

呼出しに置き換えられてもよい。 

モディファイア“C”は,現在の評価結果の値がブール1の場合(又は,演算子に“N”モディファイア

が付いている場合は,ブール0の場合)に限り所定の命令を実行しなければならないことを表す。命令リ

スト演算子は,表68による。 

background image

201 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表68−命令リスト演算子 

No. 

説明 

演算子a) 

モディファイア 

(注* 参照) 

解説 

LD 

現在の結果をオペランドと同じにする。 

ST 

現在の結果をオペランドの位置に代入する。 

S e),R e) 

現在の結果がブール値1の場合,オペランドを1にセットする。 
現在の結果がブール値1の場合,オペランドを0にリセットする。 

AND 

N,( 

論理AND 

N,( 

論理AND 

OR 

N,( 

論理OR 

XOR 

N,( 

排他的論理OR 

NOT d) 

論理NOT(1の補数) 

ADD 

加算 

10 

SUB 

減算 

11 

MUL 

乗算 

12 

DIV 

除算 

13 

MOD 

剰余除算 

14 

GT 

比較:> 

15 

GE 

比較:>= 

16 

EQ 

比較:= 

17 

NE 

比較:<> 

18 

LE 

比較:<= 

19 

LT 

比較:< 

20 

JMP b) 

C,N 

ラベルジャンプ 

21 

CAL c) 

C,N 

ファンクションブロック呼出し(表69参照) 

22 

RET f) 

C,N 

呼び出されたファンクション呼出し,ファンクションブロック又は
プログラムから戻る。 

23 

先送りしていた演算を評価 

24 

ST? 

実装評価代入 試験付代入 

注*  式の評価及びモディファイアについては,ここまでの本文を参照。 
注a) 特に断りがない限り,これらの演算子は,多重定義又は記述しなければならない。 

b) JMP命令のオペランドは,実行が移行される命令のラベルとしなければならない。JMP命令が

ACTION...END̲ACTION構文に含まれる場合,そのオペランドは,同じ構文内のラベルとしなければならない。 

c) この命令のオペランドは,呼び出されるファンクションブロックインスタンス名としなければならない。 

d) この演算結果は,現在結果のビットごとのブール否定(1の補数)としなければならない。 

e) この命令のオペランド型は,BOOL型である。 

f) この命令は,オペランドをもたない。 

7.2.4 

ファンクション及びファンクションブロック 

7.2.4.1 

概要 

ファンクション呼出し及びファンクションブロック呼出しに関する一般規則及び項目は,IL言語にも適

用する。 

ファンクションブロック及びファンクションの呼出しに関する項目は,表69に定義する。 

7.2.4.2 

ファンクション 

ファンクションは,演算子の場所にファンクション名を置いて呼び出さなければならない。引数は,一

つのオペランドの場所に全て一緒に指定するか,又はそれぞれの引数をオペランドの場所に行ごとに指定

する。 

background image

202 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

略式呼出しの場合,ファンクションの最初の引数は引数内に含まれる必要はないが,現在の結果はファ

ンクションの最初の引数として用いなければならない。必要に応じて追加の引数(2番目から始まる)は,

それらの宣言の順序でコンマで区切ったオペランドの場所に指定しなければならない。 

ファンクションに結果があってもよい。表69の項目No.3に示すように,RET命令が首尾よく実行され

た時点,又はPOUの終端に達した時点で,POUは,結果を“現在の結果”として返す。 

結果をもたないファンクションが呼び出された場合,“現在の結果”は不定値となる。 

7.2.4.3 

ファンクションブロック 

ファンクションブロックは,演算子の場所に予約語CALを置き,オペランドの場所にファンクショブロ

ックインスタンス名を置いて呼び出さなければならない。引数を全て一緒に指定してもよいし,各引数を

オペランドの場所においてもよい。 

ファンクションブロックは,EN演算子によって条件付き又は条件なしで呼び出すことができる。 

条件付きファンクションブロック呼出し時の引数リストの中に定める全ての引数の代入は,条件が成立

した場合だけ呼出しとともに実行されなければならない。 

ファンクションブロックインスタンスが呼び出された場合,“現在の結果”は不定値になる。 

7.2.4.4 

メソッド 

メソッドは,演算子の場所にファンクションブロックインスタンス名に続けて単一ピリオド“.”及びメ

ソッド名を置いて呼び出さなければならない。引数は,一つのオペランドの場所に全て一緒に指定する,

又はそれぞれの引数をオペランドの場所の行ごとに指定してもよい。 

略式呼出しの場合,メソッドの最初の引数は引数内に含まれる必要はないが,現在の結果はメソッドの

最初の引数として用いなければならない。必要に応じて追加の引数(2番目から始まる)は,それらの宣

言の順序でコンマで区切ったオペランドの場所に指定しなければならない。 

メソッドに結果があってもよい。表69の項目No.4に示すように,RET命令が首尾よく実行された時点,

又はPOUの終端に達した時点で,POUは,結果を“現在の結果”として返す。 

結果をもたないメソッドが呼び出された場合,“現在の結果”は不定値になる。 

IL言語の呼出しは,表69による。 

表69−IL言語の呼出し 

No. 

説明 

例(注記) 

1a 

略式引数リストによるファンクションブロックの呼
出し 

CAL C10(%IX10, FALSE, A, OUT, B) 
CAL CMD̲TMR(%IX5, T#300ms, OUT, ELAPSED) 

1b 

正式引数リストによるファンクションブロックの呼
出し 

CAL C10( 

// FB インスタンス名 

    CU :=%IX10, 
    R 

:=FALSE,     

    PV :=A, 
    Q 

=> OUT, 

    CV => B) 
 CAL CMD̲TMR( 
    IN :=%IX5, 
    PT :=T#300ms, 
    Q 

=> OUT, 

    ET => ELAPSED, 
    ENO => ERR) 

background image

203 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表69−IL言語の呼出し(続き) 

No. 

説明 

例(注記) 

引数にロード/ストアを用いたファンクションブロ
ックの呼出し 

LD 

ADD 

ST 

C10.PV 

LD 

%IX10 

ST 

C10.CU 

CAL 

C10 

// FB インスタンス名 

LD  

C10.CV 

// 現在の結果 

3a 

正式引数リストによるファンクション呼出し 

LIMIT( 

// ファンクション名 

 EN 

:=COND, 

 IN 

:=B, 

 MN 

:=1, 

 MX 

:=5, 

 ENO 

=> TEMPL 


ST 

// 新しい現在の結果 

3b 

略式引数リストによるファンクション呼出し 

LD 

// 現在の結果を設定 

LIMIT B, 5 

// INとして使用 

ST 

// 新しい現在の結果 

4a 

正式引数リストによるメソッド呼出し 

FB̲INST.M1( 

// メソッド名 

 EN 

:=COND, 

 IN 

:=B, 

 MN 

:=1, 

 MX 

:=5, 

 ENO 

=> TEMPL 


ST 

// 新しい現在の結果 

4b 

略式引数リストによるメソッド呼出し 

LD 

// 現在の結果を設定 

FB̲INST.M1 B, 5 

// INとして使用 

ST 

// 新しい現在の結果 

注記 上記,記載例は,次のような宣言が前提となる。 

VAR 
C10 

: CTU; 

CMD̲TMR 

: TON; 

A, B 

: INT; 

ELAPSED 

: TIME; 

OUT, ERR, TEMPL, COND : BOOL; 
END̲VAR 

表70に規定する標準ファンクションブロックの標準入力演算子は,表69の項目No.2(ロード/ストア)

とともに用いることができる。この呼出しは,入力演算子の名前の変数をただ一つ含む引数リストをもつ

CAL命令と等価である。 

提供されない引数は,前回代入時の値か,値がない場合は初期値を設定する。この項目は,予測可能な

事象で一つの変数だけが呼出しによって変化する状況に対応している。 

例1 次の宣言に基づく。 

VAR C10: CTU; END̲VAR 

次の命令のシーケンスは, 

background image

204 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

LD 

15 

PV 

C10 

次と同じ結果となる。 

CAL 

C10(PV:=15) 

指定されていない入力R及びCUは,前回値を保持している。CU入力は立上りエッジを検出

するので,この呼出しによってPV入力値だけが設定され,提供されない引数を変化させるこ

とはできないという理由で発生をカウントすることはできない。これに対して,次のシーケン

スは,入力%IX10の変化量に応じて,最大で2回の呼出しで1回のカウントとなる。全ての呼

出しであらかじめPV及びRに設定された値を用いる。 

LD 

%IX10 

CU 

C10 

例2 双安定ファンクションブロックで次の宣言をすると, 

VAR FORWARD: SR; END̲VAR 

この結果は,非明示的な条件付き動作となる。次のシーケンスは, 

LD 

FALSE 

S1 

FORWARD 

FORWARDの双安定状態を変更することはできない。次のシーケンス 

LD 

TRUE 

FORWARD 

は,双安定をリセットする。 

表70−IL言語における標準ファンクションブロック演算子 

No. 

ファンクションブロック 

入力演算子 

出力演算子 

SR 

S1,R 

RS 

S,R1 

F/R̲TRIG 

CLK 

CTU 

CU,R,PV  

CV,Q,RESET 

CTD 

CD,PV 

CV,Q 

CTUD 

CU,CD,R,PV 

CV,QU,QD,RESET 

TP 

IN,PT 

CV,Q 

TON 

IN,PT 

CV,Q 

TOF 

IN,PT 

CV,Q 

注記 LD(ロード)は機能的にPVに含まれるため,標準ファンクションブロックの入力演算子としては必要ない。 

指定されない引数は,前回代入時の値か,値がない場合は初期値を設定する。この項目は,予測可能な

事象で一つの変数だけが呼出しによって変化する状況に対応している。 

7.3 

構造化テキスト(ST言語) 

7.3.1 

概要 

この規格でのテキスト形式のプログラム言語“構造化テキストST言語”は,プログラム言語パスカル

の用法に基づいている。 

7.3.2 

式 

ST言語では,テキスト形式行の末尾はスペース(SP)文字と同様に扱われなければならない。 

205 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

式は,評価されると,データ型のどれか一つに応じた値を返す構文である。許容される式の最大長は,

実装依存である。 

式は,演算子及びオペランドで構成する。オペランドは,リテラル,列挙値,変数,結果を伴うファン

クション呼出し,結果を伴うメソッドの呼出し,結果を伴うファンクションブロックインスタンスの呼出

し,及びその他の式とする。 

ST言語の演算子は,表71に要約する。 

実装者は,明示的型変換及び暗黙的型変換を定義しなければならない。 

式の評価は,次の規則を適用する。 

a) 表71に示す演算子順位に規定する順位に従って,演算子をオペランドに適用する。式の中で,優先順

位が最上位の演算子を最初に適用し,次の優先順位の演算子を適用し,それを繰り返し,評価を完了

する。 

例1 A,B,C及びDのそれぞれの値がINT型の1,2,3及び4の場合,次のとおりとなる。 

A+B-C*ABS(D) 

の評価は−9,また, 

(A+B-C)*ABS(D) 

の評価は0。 

b) 優先順位が同位の演算子は,式の中で左から右に書かれている順番に従って適用しなければならない。 

例2 A+B+Cは,(A+B)+Cとして評価される。 

c) 演算子にオペランドが二つ付いている場合は,一番左側のオペランドをまず評価する。 

例3 式SIN(A)*COS(B)では,式SIN(A)を最初に評価し,その次にCOS(B)を評価し,その次

にこれらの演算結果を評価しなければならない。 

d) ブール型の式は,起こり得る副作用を含め,その式で帰結する値を判定するのに必要な程度まで評価

するにとどめてもよい。ブール型の式の評価範囲は実装者依存である。 

例4 例えば,A<=Bの場合,式(A>B)だけを評価した時点で, 

式(A>B)&(C<D) 

の値をFALSEとする。 

e) ファンクション及びメソッドは,括弧でくくった引数リストが続くファンクション名又はメソッド名

で構成する式の要素として呼び出してもよい。 

f) 

式の中の演算子が多重定義ファンクションの一つとして表せるときは,オペランドの変換及びその結

果は,ここで規定する規則及び実例に従わなければならない。 

演算子の実行が次の状態のときには,エラーとして扱われなければならない。 

1) 0で除算しようとしたとき。 

2) オペランドが演算にとって,正しいデータ型ではないとき。 

3) 数値演算の結果が,そのデータ型の値の範囲を超えたとき。 

background image

206 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表71−ST言語の演算子 

No. 

説明 

演算a) 

記号 

例 

順位 

括弧 

(式) 

(A+B/C),(A+B)/C, A/(B+
C) 

12(最上位) 

ファンクション及びメソッドの結果の評価 
− 結果が宣言される場合 

識別子 

(引数リスト) 

LN(A), MAX(X,Y),  
myclass.my̲method(x) 

11 

ポインタ参照 

R^ 

10 

否定 

− 

−A,− A 

単項プラス 

+ 

+B,+ B 

補数 

NOT 

NOT C 

べき乗b) 

** 

A**B,B ** B 

乗算 

A*B,A * B 

除算 

A/B,A / B / D 

10 

剰余算 

MOD 

A MOD B 

11 

加算 

+ 

A+B,A + B + C 

12 

減算 

− 

A-B,A ‒ B − C 

13 

比較 

< , > , <=, 

>= 

A<B,A < B < C 

14 

等式 

A=B,A=B & B=C 

15 

不等式 

<> 

A<>B,A <> B 

16a 論理積AND 

A&B,A & B, A & B & C 

16b 論理積AND 

AND 

A AND B 

17 

排他的論理和XOR 

XOR 

A XOR B 

18 

論理和OR 

OR 

A OR B 

1(最下位) 

注a) 対応する標準ファンクションの入力と同じ規則が,上記演算子のオペランドに適用される。 

b) 式A**Bの評価結果は,ファンクションEXPT(A,B)の評価結果と同じでなければならない。 

7.3.3 

文 

7.3.3.1 

概要 

ST言語の文を表72にまとめる。許容される文の最大長は,実装依存である。 

表72−ST言語の文 

No. 

説明 

例 

代入 変数 :=式 

1a 

基本データ型の変数及び式 

A :=B; CV :=CV+1; C :=SIN(X); 

1b 

図11に従った暗黙的型変換を伴うそれぞれ
異なる基本データ型の変数及び式 

A̲Real :=B̲Int; 

1c 

ユーザ定義型の変数及び式 

A̲Struct1  :=B̲Struct1; 
C̲Array1  :=D̲Array1; 

1d 

ファンクションブロック型のインスタンス 

A̲Instance1 :=B̲Instance1; 

呼出し 

2a a) 

ファンクションの呼出し 

FCT(17); 

2b a) 

ファンクションブロックの呼出し及びFB
出力使用法 

CMD̲TMR(IN :=bIn1, PT :=T#300ms); 
A :=CMD̲TMR.Q ; 

2c a) 

メソッドの呼出し 

FB̲INST.M1(17); 

RETURN 

RETURN; 

background image

207 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表72−ST言語の文(続き) 

No. 

説明 

例 

選択 

IF ... 
THEN ... 
  ELSIF ... 
  THEN ... 
ELSE ...END̲IF 

D :=B*B ‒ 4.0*A*C; 
IF D < 0.0  
THEN NROOTS :=0; 
   ELSIF D=0.0  
   THEN  
     NROOTS :=1; 
     X1 :=−B/(2.0*A); 
   ELSE  
     NROOTS :=2 ; 
     X1 :=(−B+SQRT(D))/(2.0*A); 
     X2 :=(−B−SQRT(D))/(2.0*A); 
END̲IF; 

CASE ... OF 
  ... 
  ELSE ... 
END̲CASE 

TW :=WORD̲BCD̲TO̲INT(THUMBWHEEL); 
TW̲ERROR :=0; 
CASE TW OF 
  1,5: 

DISPLAY :=OVEN̲TEMP; 

  2: 

DISPLAY :=MOTOR̲SPEED; 

  3: 

DISPLAY :=GROSS−TARE; 

  4,6..10: 

DISPLAY 

:=STATUS(TW−4); 

  ELSE 

DISPLAY  :=0; 

TW̲ERROR :=1; 

END̲CASE; 
QW100 :=INT̲TO̲BCD(DISPLAY); 

繰返し 

FOR ... TO ... BY ... DO   
  ... 
END̲FOR 

J :=101 ; 
FOR I :=1 TO 100 BY 2 DO 
   IF WORDS[I]='KEY' THEN 
     J :=I; 
     EXIT; 
   END̲IF; 
END̲FOR; 

WHILE ... DO  
... 
END̲WHILE 

J :=1; 
WHILE J <=100 & WORDS[J] <> 'KEY' DO 
   J :=J+2; 
END̲WHILE ; 

REPEAT ... 
  UNTIL ... 
END̲REPEAT 

J :=-1; 
REPEAT 
   J :=J+2; 
   UNTIL J=101 OR WORDS[J]='KEY' 
END̲REPEAT; 

9 b) 

CONTINUE 

J :=1;  
WHILE (J <=100 AND WORDS[J] <> 'KEY') DO 
..IF (J MOD 3=0) THEN  
     CONTINUE;  
   END̲IF; 
(*j=1, 2, 4, 5, 7, 8, ...の場合,実行される*); 
   ... 
END̲WHILE; 

background image

208 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表72−ST言語の文(続き) 

No. 

説明 

例 

10 b) 

EXIT 

EXIT;(項目No.6も参照) 

11 

空文 

注a) ファンクション,ファンクションブロック型,又はメソッドが結果を提供し,呼出しが代入式の中にない場合,

結果は破棄される。 

b) EXIT又はCONTINUE文(項目No.9又はNo.10)をサポートしている場合は,その実装でサポートした繰返し

文(FOR,WHILE,REPEAT)の全てに対してサポートしなければならない。 

7.3.3.2 

代入(比較,結果,呼出し) 

7.3.3.2.1 

概要 

代入文は,単一要素の変数又は複数要素の変数の現在値を式評価の結果と置き換える。代入文は,変数

参照を左側に置き,続いて代入演算子“:=”を置き,続いて,評価したい式を置いて構成する。 

例えば,両方共INT型の場合又は変数Bが暗黙的にINT型に変換可能な場合に,変数Aの単一データ

値を変数Bの現在値で置き換えたいときは,次のようにする。 

A :=B; 

A及びBが複数要素の変数である場合,A及びBのデータ型は同じでなければならない。この場合,変

数Aの要素の値は,変数Bの要素の値となる。 

例えば,A及びBのいずれも型がANALOG̲CHANNEL̲CONFIGURATION型である場合,構造化変数Aの

あらゆる要素が変数Bの対応する要素の現在の値と置き換わる。 

7.3.3.2.2 

比較 

比較は,その結果をブール値として返す。比較は,変数参照を左側に置き,続いて比較演算子,続いて,

変数参照を右側に置いて構成する。変数は,単一要素変数又は複数要素変数である。 

A及びBのいずれもが同じデータ型のものである場合,又は変数の一つがもう一つの変数のデータ型に

暗黙的に変換できる場合は,変数Aのデータ値を変数Bのデータ値と比較するために次のような比較を用

いる。 

A=B 

変数A及び変数Bが複数要素変数の場合,変数A及び変数Bのデータ型は同じでなければならない。こ

の場合,変数Aの要素の値と変数Bの要素の値とを比較する。 

7.3.3.2.3 

結果 

代入は,ファンクション,ファンクションブロック型,又はメソッドの結果を代入するためにも用いる。

このPOUのために結果が定義されている場合,このPOUの名前に対する少なくとも一つの代入を行わな

ければならない。返された値は,かかる代入の最近の評価の結果でなければならない。少なくとも一つの

そうした代入がなされた場合を除き,ENOの値が真か,ENO出力が存在しないようなファンクションの評

価はエラーとなる。 

7.3.3.2.4 

呼出し 

ファンクション,メソッド及びファンクションブロック制御文には,このPOUを呼び出すための仕組み,

及びPOUの物理的終端の前に呼出し元に制御を返すための仕組みがある。 

・ FUNCTION ファンクションは,文で呼び出すこととし,その文は,表72に記載しているように,フ

ァンクションの名前に引数の並びを括弧でくくって続ける。 

ファンクションの呼出しに関する6.6.1.7に規定する規則及び項目を適用する。 

209 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ FUNCTION̲BLOCK ファンクションブロックは,文で呼び出すこととし,その文は,表72に記載し

ているように,ファンクションブロックインスタンスの名前に引数の並びを括弧でくくって続ける。 

・ METHOD メソッドは,文で呼び出すこととし,その文は,インスタンスの名前にʻ.ʼ,メソッド名及

び引数の並びを括弧でくくって続ける。 

・ RETURN RETURN文は,(例えば,IF文の評価結果として)ファンクション及びファンクションブロ

ック,又はプログラムを途中で終了させるために使用する。 

7.3.3.3 

条件文(IF,CASE) 

7.3.3.3.1 

概要 

条件文は,IF文及びCASE文のことをいう。条件文は,指定した条件を下に,実行のための要素文の中

から一つ(又はグループ)を選択する。条件文の表記例は,表72による。 

7.3.3.3.2 

IF 

IF文は,関連付けされたブール式の評価結果が値1(TRUE)となる場合に限り文のグループを実行す

ることを指定する文である。指定された条件が偽となると,文を実行しないか又はELSE予約語(若しく

は,関連するブール条件が真のときは,ELSIF予約語)に続く文のグループを実行するかのいずれかとな

る。 

7.3.3.3.3 

CASE 

CASE文は,基本データ型の変数(“選択肢”)を評価する式,一つ若しくは一つ以上の整数,列挙値又

は整数値の範囲でラベルが付いた一連の文のグループで構成する。これらのラベルのデータ型は,選択肢

変数のデータ型に一致しなければならない。すなわち,選択肢変数は,ラベルと比較できなければならな

い。 

CASE文は,選択肢の演算結果の値が範囲内となる最初のグループの文を実行すべきことを指定する文

である。選択肢の値がどの場合にも該当しない場合,予約語ELSEがCASE文にある場合,そのELSEに

続く文のシーケンスを実行しなければならない。そうでない場合,どの文シーケンスも実行されない。 

CASE文の最大許容選択数は,実装依存である。 

7.3.3.4 

繰返し文(WHILE,REPEAT,EXIT,CONTINUE,FOR) 

7.3.3.4.1 

概要 

繰返し文は,所定の文のグループを繰り返し実行することを指定する文である。 

WHILE命令文及びREPEAT命令文は,例えば,外部要因で終了させる“待機ループ”など,プロセス間

同期をさせる用途に用いてはならない。この用途には,SFC要素を用いなければならない。 

WHILE命令文又はREPEAT命令文を用いるアルゴリズムが,ループ終了条件の満足又はEXIT文の実行

を保証できないアルゴリズムの場合は,エラーにならなければならない。 

繰返し回数を前もって決めることができる場合にFOR文を用いる。そうでない場合,WHILE又はREPEAT

構文を用いる。 

7.3.3.4.2 

FOR文 

FOR文は,END̲FOR予約語までの文のシーケンスを繰り返し実行しなければならないことを指定する文

で,その間,FORループ制御変数に変数の進み具合が代入される。制御変数,初期値及び最終値は,同じ

整数型(例えば,SINT,INT,DINT)の式となるものとし,繰返し文そのものによっては,決して変更

が加えられてはならない。 

FOR文は,制御変数を初期値から最終値まで,式の値で決まる増減値で増減する。もしBY構文による

増減値の指定が省略されている場合には,この増減値のデフォルトは1である。 

210 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例 FOR I :=3 TO 1 BY 

-1 DO ...;によって記述されるFORループは,この変数Iの値が

0になったときに終了する。 

初期値が最終値を超える値の場合は,文のシーケンスの実行を行わないように,各繰返しの始めで終了

条件をテストする。すなわち,増加がそれぞれプラス及びマイナスである場合,制御変数の値がそれぞれ

最終値より大きい又は小さい。FORループ完了後の制御変数の値は,実装依存である。 

制御変数の値がTO構文が指定する範囲外である場合に繰返しが終了する。 

FOR文の用い方の追加例を,表72の項目No.6に示す。この例では,FORループは,添字範囲(1...100)

の文字列WORDSの奇数番号要素の中で,文字列'KEY'(ある場合には)が最初に見つかったインデックス

Jを決定するのに用いられている。'KEY'が見つからないと,インデックスJの値は101となる。 

7.3.3.4.3 

WHILE 

WHILE命令文は,END̲WHILE予約語までの文のシーケンスを,所定のブール式が偽となるまでの間,

繰り返し実行する。式が当初から偽の場合は,文のグループは一切実行されない。 

例えば,表72に示すFOR...END̲FORの例は,表72に示すWHILE...END̲WHILE構文を用いて書き

直すことができる。 

7.3.3.4.4 

REPEAT 

REPEAT命令文は,UNTIL予約語までの文のシーケンスを,所定のブール条件が真となるまでの間,(最

低1回)繰り返し実行する。 

例えば,WHILE...END̲WHILEの例は,表72に示すREPEAT...UNTIL構文を用いて書き直すことが

できる。 

7.3.3.4.5 

CONTINUE 

CONTINUE命令文は,CONTINUEがループ終止符(END̲FOR,END̲WHILE又はEND̲REPEAT)より前

に置かれている繰返しループの残りの文を飛び越すために使用しなければならない。 

例 文を実行した後,変数SUMの値は,ブール変数FLAGが0となる場合は15となり,FLAG=1の

場合は9になる。 

SUM :=0 ; 

FOR I :=1 TO 3 DO 

  FOR J :=1 TO 2 DO 

    SUM :=SUM+1; 

    IF FLAG THEN 

       CONTINUE; 

    END̲IF ; 

    SUM :=SUM+1; 

  END̲FOR ; 

  SUM :=SUM+1; 

END̲FOR ; 

7.3.3.4.6 

EXIT 

終了条件を満足しないうちに繰返しを終了させたい場合は,EXIT文を用いなければならない。 

入れ子された繰返し構文の中にEXIT文が置かれたとき,EXIT文が置かれている一番内側のループか

ら抜け出さなければならない。つまり,EXIT文に続く最初のループ終止符(END̲FOR,END̲WHILE,

END̲REPEAT)の後の文に制御が移らなければならない。 

211 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例 文を実行した後,変数SUMの値は,ブール変数FLAGが0となる場合は15となり,FLAG=1の

場合は6となる。 

SUM :=0 ; 

FOR I :=1 TO 3 DO 

  FOR J :=1 TO 2 DO 

    SUM :=SUM+1 ; 

    IF FLAG THEN  

        EXIT ; 

    END̲IF ; 

    SUM :=SUM+1 ; 

  END̲FOR ; 

  SUM :=SUM+1 ; 

END̲FOR ; 

グラフィック言語 

8.1 

共通要素 

8.1.1 

概要 

この規格に規定するグラフィック言語は,LD言語(ラダー図)及びFBD言語(ファンクションブロッ

ク図)である。シーケンスファンクションチャート(SFC)の要素は,これらの言語とともに用いること

ができる。 

この箇条に規定する要素は,この規格の両方のグラフィック言語,すなわち,LD言語(ラダー図),FBD

言語(ファンクションブロック図)及びシーケンシャルファンクションチャート(SFC)の要素のグラフ

ィック表現に適用する。 

8.1.2 

変数及びインスタンスの表現 

サポートされているデータ型は,グラフィック言語のオペランド又はパラメータとしてアクセス可能で

なければならない。 

サポートされているインスタンスの宣言は,グラフィック言語でアクセス可能でなければならない。 

パラメータとして,又は配列の添字としての式の使用は,この規格の適用範囲外である。 

212 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

例 

TYPE  
  SType: STRUCT 
    x: BOOL; 
    a: INT; 
    t: TON; 
    END̲STRUCT; 
END̲TYPE; 

型宣言 

VAR 
  x: BOOL; 
  i: INT; 
  Xs: ARRAY [1..10] OF BOOL; 
  S:  SType; 
  Ss: ARRAY [0..3]  OF SType; 
  t:  TON; 
  Ts: ARRAY [0..20] OF TON; 
END̲VAR 

変数宣言 

a) 型及び変数宣言 

+ ------- + 

| myFct | 

----| |---- | IN 

+ ------- + 

オペランドを次として用いる。 

基本変数として 

+ ------- + 

Xs[3] 

| myFct | 

----| |---- | IN 

+ ------- + 

 
 

定数添字を伴う配列要素として 

+ ------- + 

Xs[i] 

| myFct | 

----| |---- | IN 

+ ------- + 

 
 

変数添字を伴う配列要素として 

+ ------- + 

S.x 

| myFct | 

----| |---- | IN 

+ ------- + 

 
 

構造体の要素として 

+ ------- + 

Ss[3].x 

| myFct | 

----| |---- | IN 

+ ------- + 

 
 

構造化配列の要素として 

b) オペランドの表現 

213 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

+ ------- + 

t.Q 

| myFct2 | 

----| |---- | aTON 

+ ------- + 

パラメータとして用いるインスタンス 

ノーマルインスタンスとして 

+ ------- + 

Ts[10].Q | myFct2 | 

----| |---- | aTON 

+ ------- + 

 
 

定数添字を伴う配列要素として 

+ ------- + 

Ts[i].Q 

| myFct2 | 

----| |---- | aTON 

+ ------- + 

 
 

変数添字を伴う配列要素として 

+ ------- + 

S.t 

| myFct2 | 

----| |---- | aTON 

+ ------- + 

 
 

構造体の要素として 

+ ------- + 

Ss[2].t 

| myFct2 | 

----| |---- | aTON 

+ ------- + 

 
 

構造化配列の要素として 

c) パラメータとしてのインスタンスの表現 

+ ------- + 

| TON  | 

----| |---- | IN 

Q | 

| PT ET | 

+ ------- + 

次としてのインスタンス 

普通インスタンス 

Ts[12] 

+ ------- + 

| TON  | 

----| |---- | IN 

Q | 

| PT ET | 

+ ------- + 

 
 

定数添字を伴う配列要素 

Ts[i] 

+ ------- + 

| TON  | 

----| |---- | IN 

Q | 

| PT ET | 

+ ------- + 

 
 

変数添字を伴う配列要素 

s.t 

+ ------- + 

| TON  | 

----| |---- | IN 

Q | 

| PT ET | 

+ ------- + 

 
 

構造体の要素 

Ss[i].t 

+ ------- + 

| TON  | 

----| |---- | IN 

Q | 

| PT ET | 

+ ------- + 

 
 

構造体配列の要素 

d) インスタンスの呼出しの表現 

214 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

8.1.3 

線及びブロックの表現 

グラフィック要素の表現のための文字,セミグラフィック及びグラフィックの使用は実装依存であり,

要求事項ではない。 

箇条8に規定するグラフィック言語要素は,文字セットの文字を使用した線要素を用いて描く。次に例

を示す。 

線は,コネクタを用いて拡張できる。データ又はデータ要素との関連付けの格納は,コネクタの使用に

関連付けてはならない。したがって,コネクタのラベルとして用いている識別子が,同一プログラム構成

ユニットの中で他の名前付き要素と同じ名前のときは,曖昧さを排除するために,エラーとしなければな

らない。 

特定の実装でのネットワークトポロジーの制限は,実装依存として表現しなければならない。 

例 グラフィック要素 

水平線 

-------- 

垂直線 

水平線/垂直接続(ノード) 

----+---- 

接続がない交差する線(ノードなし) 

------|------ 

接続及び非接続コーナ(ノード) 

 ------+ 

+----- 

---------- + +----- 
 

| | | 

接続された線をもつブロック 

+ ----- + 

--- | 

| --- 

--- | 

+ ----- + 

コネクタ及び継続 

-------->OTTO> 

>OTTO>-------- 

8.1.4 

ネットワークの流れ方向 

ネットワークは,LD言語のネットワークでの左・右の母線を除いた線で接続されたグラフィック要素

の最大集合として定義する。右側にコロン(:)で区切られたネットワークラベルを,グラフィック言語

で書かれた各ネットワーク又はネットワーク群に関連付けなければならない。このラベルは,識別子又は

符号なし10進数の表記をもたなければならない。ネットワーク及びそのラベルの適用範囲は,そのネット

ワークがあるプログラム構成ユニットに対してローカルでなければならない。 

グラフィック言語は,制御動作を表す一つ以上のネットワークを通る概念的な量の流れを示すのに用い

215 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

る。 

・ パワーフロー パワーフローは,リレーラダー図で典型的に用いられており,電磁リレーシステムの

電気の流れに相当する。 

LD言語のパワーフローは,左から右に流れなければならない。 

・ シグナルフロー シグナルフローは,ファンクションブロック図で典型的に用いられており,信号処

理系間の信号の流れに相当する。 

FBD言語におけるシグナルフローは,ファンクション又はファンクションブロックの出力側(右側)

からそれに接続しているファンクション又はファンクションブロックの入力側(左側)へ流れなけれ

ばならない。 

・ アクティビティフロー アクティビティフローは,SFCで典型的に用いられており,組織要素間又は

電気機器式シーケンスのステップ間の制御フローに相当する。 

SFC要素間のアクティビティフローは,移行したトランジションに沿ってステップの下から対応す

る後置ステップの上まで流れなければならない。 

8.1.5 

ネットワークの評価 

8.1.5.1 

概要 

ネットワーク及びその要素を評価する順序は,それらが分類又は表示される順序と必ずしも同じではな

い。同様に,決まったネットワークの評価が繰り返される前に,全てのネットワークを評価することも必

要ではない。 

しかし,プログラム構成ユニットのボディが,一つ以上のネットワークから成り立っているとき,その

ボディの中でのネットワークの評価の結果は,機能上,次の規則を守ることと等価でなければならない。 

a) 一つのネットワークのどの要素も,全ての入力の状態が評価されるまで評価してはならない。 

b) ネットワーク要素の評価は,全ての出力の状態が評価されるまで,完了してはならない。 

c) ネットワークの評価は,たとえネットワークが実行制御要素の一つを含んでいたとしても,全ての要

素の出力が評価されるまで完了してはならない。 

d) ネットワークを評価する順序は,LD言語及びFBD言語の規定に従わなければならない。 

8.1.5.2 

フィードバック経路 

ファンクション又はファンクションブロックの出力を,そのネットワークの中で先に現れたファンクシ

ョン又はファンクションブロックに対する入力として用いるとき,フィードバック経路が,ネットワーク

中に存在するという。関連する変数は,フィードバック変数と呼ぶ。 

例えば,ブール変数RUNは,次の例に示す例の中のフィードバック変数である。フィードバック変数は,

また,ファンクションブロックデータ構造の出力要素でもあってもよい。 

フィードバック経路は,規定グラフィック言語の中でも,次の規則に従って用いることができる。 

a) 次の例a)に見られるような明示的ループは,FBD言語の中にだけ表示されなければならない。 

b) 例えば,次の例b)に示すような暗黙的フィードバックループを型成するフィードバック変数を選択す

ることによって,使用者は明示的ループ内の各要素の実行順序を決める実装者固有の方法を利用でき

なければならない。 

c) フィードバック変数は,仕組みの一つによって,初期化されなければならない。初期値は,ネットワ

ークの最初の評価のときに使用しなければならない。フィードバック変数が初期化されていない場合,

エラーとしなければならない。 

d) 一度,出力としてのフィードバック変数をもった要素が評価されると,フィードバック変数のその新

216 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

しい値を,その要素が次に評価されるまで使用しなければならない。 

例 フィードバック経路 

+ -- + 

ENABLE-- | & |---RUN---+ 

+ -- | | 

+----+ 

| + -- + 

 START1--- | >=1 |----+ 

 START2--- | 

+-- | 

| +----+ 

+-----------------------------+ 

a) 明示的ループ 

+ -- + 

ENABLE-- | & | ---RUN 

+ -- | | 

+----+ 

| + -- + 

 START1--- | >=1 |----+ 
 START2--- | 

RUN--- | 

+----+ 

b) 暗黙的ループ 

 | START1 

ENABLE 

RUN 

 + ---| |--- + ---| |-------( )--- + 
 | START2 | 

 + ---| |--- + 

 | 

RUN 

 + ---| |--- + 

 | 

c) LD言語相当 

8.1.6 

実行制御要素 

LD言語,FBD言語におけるプログラム制御の移行は,表73に示すグラフィック要素によって表現しな

ければならない。 

ジャンプ命令は,終端が二重矢印で終了するブール信号線で表現しなければならない。ジャンプ条件の

信号線は,“ブール変数”,“ファンクション若しくはファンクションブロックのブール出力”又は“ラダー

図のパワーフロー線上”を起点としなければならない。指定されたネットワークラベルへのプログラム制

御の移行は,信号線上のブール値が1(TRUE)のときに行わなければならない。したがって,無条件ジャ

ンプは,条件付きジャンプの特別な場合である。 

ジャンプのターゲットは,ジャンプが発生したプログラム構成ユニットボディ内又はメソッドボディ内

のネットワークラベルでなければならない。ジャンプが,“ACTION...END̲ACTION”構文内で発生する

場合,ジャンプのターゲットは,同じ構文内になければならない。 

ファンクション及びファンクションブロックからの条件付きリターンは,表73に示すRETURN構文で

実装しなければならない。プログラムの実行は,ブール入力が1(TRUE)のとき,呼出し元へ戻り,ブー

ル入力が0(FALSE)のとき,通常どおり続けなければならない。無条件リターンは,表73に示すように

ファンクション若しくはファンクションブロックの物理的終端でもたらされるか,又はLD言語の左母線

background image

217 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

に接続されたRETURN要素によってもたらされなければならない。 

表73−グラフィック実行制御要素 

No. 

説明 

解説 

無条件ジャンプ 

1a 

FBD言語 

1---->>LABELA 

1b 

LD言語 

+---->>LABELA 

条件付きジャンプ 

2a 

FBD言語 

例: 
ジャンプの条件,ジャンプ先 
 

X---->>LABELB 

+ -- + 

bvar0---| & | -->>NEXT 

bvar50--| | 

+ -- + 

NEXT: 

+ ---- + 

bvar5---| >=1 | ---bOut0 

bvar60--| 

+ ---- + 

2b 

LD言語 

例: 
ジャンプの条件,ジャンプ先 
 

+--| |--->>LABELB 

| bvar0 bvar50 

+---| |---| |--->>NEXT 

NEXT: 

| bvar5 

bOut0 | 

+ --| |-- + --( )-- + 

| bvar60 | 

+ --| |-- + 

条件付きリターン 

3a 

LD言語 

+---| |---<RETURN> 

3b 

FBD言語  

X---<RETURN> 

無条件リターン 

LD言語 

+-----<RETURN> 

background image

218 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

8.2 

ラダー図(LD) 

8.2.1 

概要 

8.2では,プログラマブルコントローラのラダー図プログラムのためのLD言語を規定する。 

LDプログラムは,標準化したグラフィック記号で,プログラマブルコントローラをテストしたり,デ

ータの変更をすることができるようにする。これらの記号は,リレーラダー図の“はしご段”とよく似た

ネットワークに配置する。LDネットワークは,右及び左の母線で境界付ける。 

グラフィック要素の表現のための文字,セミグラフィック形式又はグラフィックの使用は,実装者固有

のものであり,要求事項ではない。 

8.2.2 

母線 

表74に示すLDネットワークは,左は左母線として知られている垂直接続線で,右は右母線として知ら

れている垂直接続線で区切られなければならない。右母線は,明示してもよいし,明示しなくてもよい。 

8.2.3 

接続要素及び状態 

表74に示したように,接続要素には,水平及び垂直がある。接続要素の状態は,ブールリテラルの値が,

1であるか0であるかに対応して,それぞれ“ON”又は“OFF”と表されなければならない。接続状態は,

パワーフローと同義でなければならない。 

左の母線状態は,いつでもONとみなされなければならない。右の母線は,状態としては定義しない。 

水平の接続要素は,水平に引かれた線で表さなければならない。水平接続要素は,すぐ左側の要素状態

をすぐ右側の要素に伝える。 

垂直接続要素は,それぞれの側で一つ以上の水平接続要素と交差する垂直線からなる。垂直接続の状態

は,その左側に接続された全ての水平接続のONの状態のORを表す。つまり,垂直接続状態は,次に示す

ようでなければならない。 

・ 垂直接続線の左側の全ての水平接続状態がOFFならばOFF 

・ 垂直接続線の左側における一つ以上の水平接続状態がONならばON 

垂直接続線の状態は,その右側に接続された全ての水平接続線に伝えられなければならない。垂直接続

線の状態は,その左側のいずれの水平接続線にも伝えられてはならない。 

表74−母線及び接続要素 

No. 

説明 

解説 

左母線 
(水平接続線に接続している。) 

+ --- 

右母線 
(水平接続線に接続している。) 

--- + 

 水平接続 

-------- 

垂直接続 
(水平接続線に接続している。) 

--- + --- 

--- + 

+ --- 

8.2.4 

接点 

接点は,水平方向接続の右側に状態を伝える要素で,それは関連付けられたブール入力,出力又はメモ

background image

219 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

リ変数の関数演算結果と,水平接続左側の状態とのANDと同じ意味である。接点は,関連付けられたブ

ール変数の値を変化させることはない。標準接点記号は,表75による。 

表75−接点 

No. 

説明 

解説 

静的接点 

a接点 

*** 

---|  |--- 

関連付けられているブール変数(“***”で示す。)の状態がONのとき,左側の
状態が右側に伝えられる。そうでない場合,右側の状態はOFFである。 

b接点 

*** 

---| / |--- 

関連付けられたブール変数の状態がOFFのとき,左側の状態が右側に伝えられ
る。そうでない場合,右側の状態はOFFである。 

トランジション検出接点 

立上り検出接点 

*** 

---| P |--- 

関連付けられた変数のOFFからONへのトランジションが検出されたときに,ち
ょうど左側の状態がONになっていれば,この要素の次の評価までの間,右側の
状態はONになる。それ以外のときはいつも,右側の状態はOFFになる。 

立下り検出接点 

*** 

---| N |--- 

関連付けられた変数のONからOFFへのトランジションが検出されたときに,ち
ょうど左側の状態がONになっていれば,この要素の次の評価までの間,右側の
状態はONになる。それ以外のときはいつも,右側の状態はOFFになる。 

5a 

比較接点(データ型指定) 

<cmp>

<operand 1>

<operand 2>

 DT

左側の状態がONでオペランド1及び2の<cmp>結果が真のときに,この要素の
次の評価までの間,右側の状態はONになる。 
そうでない場合,右側の状態はOFFでなければならない。 
<cmp>は,特定のデータ型に有効な比較ファンクションの一つに取って代わられ
てもよい。 
DTは,両方の特定のオペランドのデータ型である。 
例: 

左側がONで整数値1が整数値2より大きい場合,右側はONに切り替わる。整
数値1 及び整数値2は,両方共INTのデータ型である。 

<オペランド1> 

<オペランド2> 

整数値1 

整数値2 

background image

220 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表75−接点(続き) 

No. 

説明 

解説 

5b 

比較接点,(多重定義) 

<cmp>

<operand 1>

<operand 2>

左側の状態がONでオペランド1及び2の<cmp>結果が真のときに,この要素の
次の評価までの間,右側の状態はONになる。 
右側の状態はOFFでなければならない。 
そうでない場合,<cmp>は,特定のデータ型に有効な比較ファンクションの一つ
に取って代わられてもよい。6.6.1.7に規定する規則を適用しなければならない。 
例 

左側がONで値1と値2とが一致しない場合,右側はONに切り替わる。 

8.2.5 

コイル 

コイルは,左側の接続している状態を右側にそのまま伝える。また,左側の状態又はトランジションの

適切な関連ファンクションを,関連付けられているブール変数の中に格納する。標準コイル記号は,表76

による。 

例 次に示すラダー回路の場合,ブール出力aの値は常にTRUEであり,このラダー回路の評価が完

了したときの,出力c,d及びeの値は入力bと等しい。 

+ ---( )---| |--- + ---( )---( )--- + 

+ ------( )------ + 

<オペランド1> 

<オペランド2> 

値1 

値2 

background image

221 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表76−コイル 

No. 

説明 

解説,記号 

一般コイル 

コイル 

*** 

---(  )--- 

左側の状態が,関連付けられているブール変数に転送され右側へ伝える。 

否定コイル 

*** 

---( / )--- 

左側の状態を右側へ伝える。左側の状態の逆が,関連付けられているブール変数
に伝えられる。すなわち,左側の状態がOFFの場合,関連付けられた変数はON
になる。逆も同様の動作を行う。 

ラッチコイル 

セット(ラッチ)コイル 

*** 

---( S )--- 

左側の状態がONになると,関連付けられたブール変数はONとなり,RESETコ
イルによってリセットされるまで,セット状態を保つ。 

リセット(ラッチ解除)コ
イル 

*** 

---( R )--- 

左側の状態がONになると,関連付けられているブール変数はOFFにリセットさ
れ,SETコイルによってセットされるまでリセット状態を保つ。 

トランジション検出コイル 

立上り検出コイル 

*** 

---( P )--- 

左側の接続のOFFからONへのトランジションが検出されると,この要素の次の
評価までの間,関連付けられているブール変数の状態はONになる。左側の状態
は,常に右側に伝わる。 

立下り検出コイル 

*** 

---( N )--- 

左側の接続のONからOFFへのトランジションが検出されると,この要素の次の
評価までの間,接続ブール変数の状態はONになる。左側の状態は,常に右側に
伝わる。 

8.2.6 

ファンクション及びファンクションブロック 

LD言語のファンクション,メソッド及びファンクションブロックの表現は,次による。 

a) 実変数の接続は,ブロック内部に書かれた正式変数名に隣接して,ブロックの外部に適切なデータ又

は変数で任意選択で示す。 

b) 少なくとも,一つのブール入力及び一つのブール出力は,ブロックを通るパワーフローのためにそれ

ぞれのブロックになければならない。 

8.2.7 

ネットワークの評価順序 

LD言語で書かれたプログラム構成ユニットの中で,この順序が実行制御要素によって修正される場合

を除いて,ラダー図の中で出てくるとおりに,先頭から終わりの順で,ネットワークは評価しなければな

らない。 

8.3 

ファンクションブロック図(FBD) 

8.3.1 

概要 

6.8では,FBD言語を定義する。ファンクションブロック図は,可能な限りJIS C 0617-12と一貫性を保

つようにしたプログラマブルコントローラ向けのグラフィック言語である。この規格とJIS C 0617-12と

222 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

の間に矛盾がある箇所は,FBD言語によるプログラマブルコントローラのプログラミングに,この規格の

規定を適用する。 

8.3.2 

要素の組合せ 

FBD言語の要素は,8.1.4の規定に従って信号線によって相互接続しなければならない。 

ファンクションブロックの出力は,一緒に接続してはならない。特に,LD言語の“OR接続”構文は,

FBD言語中には許されない。すなわち,次の例に示すように,明示的ブール“OR”ブロックが代わりに必

要である。 

例 ブール変数 OR 

+ --| |-- + --( )-- + 

+ --| |-- + 

 
 

+----+ 

 a--- | >=1 | ---c 
 b--- | 

+----+ 

a) LD言語での“OR接続” 

b) FBD言語でのファンクション 

8.3.3 

ネットワーク評価の順序 

FBD言語で記述したプログラム構成ユニットが一つ以上のネットワークを含む場合,ネットワークの実

行順序を使用者が判断できるような実装依存の方法を実装者が提供しなければならない。 

223 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書A 

(規定) 

言語要素の形式仕様 

テキスト表現言語の構文規則を“拡張BNF”(拡張Backus Naur 形式)の改良版に定義する。 

このEBNFの構文規則は,次のとおりである。 

この規格の目的のため,終端文字記号は,対のシングルクォーテーションで囲まれた文字列からなる。

文字列ABCで表す終端記号は,'ABC'となる。 

非終端テキスト表現記号は,大文字で始まって,一連の小文字,数字及びアンダースコア( ̲ )によっ

て表現する。 

生成規則 

プログラマブルコントローラのテキスト表現プログラム言語の生成規則は,次の形式のものである。 

non̲terminal̲symbol : extended̲structure ; 

この規則は,次のように解釈する。“一つのnon̲terminal̲symbolは一つのextended̲structure

から成り立つ。” 

拡張構造は,次の規則によって構成する。 

終端記号は,拡張構造である。 

非終端記号は,拡張構造である。 

Sが拡張構造である場合,次の式も拡張構造である。 

(S)はS自身を意味する。 

(S)*は閉包であり,Sが0以上の連結を意味する。 

(S)+は閉包であり,Sが1以上の連結を意味する。 

(S)?はオプションであり,Sが0又は一つ発生することを意味する。 

S1及びS2が拡張構造である場合,次の式もまた拡張構造である。 

S1|S2は選択であり,S1又はS2の選択を意味する。 

S1 S2は連結であり,S2がS1に続くことを意味する。 

連結は選択に優先する。つまり 

S1|S2 S3はS1|(S2 S3)と等価であり, 

S1 S2|S3は(S1 S2)|S3と等価である。 

Sが,単一文字又は単一文字の選択を意味する拡張構造である場合,次も拡張構造である。 

〜(S)否定,Sでない単一文字を意味する。 

否定は,閉包,オプションに優先する。 

〜(S)*は(〜(S))*と等価である。 

特定の文字又は文字のクラスを示すために,次の記号が用いられる。 

あらゆる単一文字 

“シングルクォーテーション”文字 

改行 

復帰 

224 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

タブ 

文法内のコメントはダブルスラッシュに始まり,行の終端で終わる。 

// これはコメントである。 

// 表1−文字セット 

// 表2−識別子 

Letter 

: 'A'..'Z' | 

'̲'; 

Digit 

: '0'..'9'; 

Bit 

: '0'..'1'; 

Octal̲Digit 

: '0'..'7'; 

Hex̲Digit 

: '0'..'9' | 

'A'..'F'; 

Identifier 

: Letter ( Letter | 

Digit )*; 

//表3−コメント 

Comment 

: '//' ~( '¥n' 

'¥r' )* '¥r' ? '¥n' {$channel=HIDDEN;}  

| '(*' ( options{greedy=false;}: . )* '*)' {$channel=HIDDEN;}  

| '/*' ( options{greedy=false;}: . )* '*/' {$channel=HIDDEN;}; 

WS 

: ( ' ' 

'¥t' 

'¥r' 

'¥n' 

{$channel=HIDDEN;}; // 空白 

EOL 

: '¥n'; 

// 表4−プラグマ 

Pragma 

: '{' ( options{greedy=false;}: . )* '}' {$channel=HIDDEN;}; 

// 表5−数値リテラル 

Constant 

: Numeric̲Literal | 

Char̲Literal 

Time̲Literal

| Bit̲Str̲Literal | 

Bool̲Literal; 

Numeric̲Literal 

: Int̲Literal 

Real̲Literal; 

Int̲Literal 

: ( Int̲Type̲Name '#' )? ( Signed̲Int 

Binary̲Int

| Octal̲Int 

Hex̲Int ); 

Unsigned̲Int 

: Digit ( '̲' ? Digit )*; 

Signed̲Int 

: ( '+' 

'-' )? Unsigned̲Int; 

Binary̲Int 

: '2#' ( '̲' ? Bit )+; 

Octal̲Int 

: '8#' ( '̲' ? Octal̲Digit )+; 

Hex̲Int 

: '16#' ( '̲' ? Hex̲Digit )+; 

Real̲Literal 

: ( Real̲Type̲Name '#' )? Signed̲Int '.' Unsigned̲Int ( 'E' 

Signed̲Int )?; 

Bit̲Str̲Literal 

: ( Multibits̲Type̲Name '#' )? ( Unsigned̲Int 

|

Binary̲Int | 

Octal̲Int 

Hex̲Int ); 

Bool̲Literal 

: ( Bool̲Type̲Name '#' )? ( '0' 

'1' 

'FALSE'

| 'TRUE' ); 

// 表6−文字列リテラル 

// 表7−文字列における2文字の組合せ 

Char̲Literal 

: ( 'STRING#' )? Char̲Str; 

Char̲Str 

: S̲Byte̲Char̲Str | 

D̲Byte̲Char̲Str; 

S̲Byte̲Char̲Str 

: '¥'' S̲Byte̲Char̲Value+'¥''; 

225 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

D̲Byte̲Char̲Str 

: '"' D̲Byte̲Char̲Value+'"'; 

S̲Byte̲Char̲Value : Common̲Char̲Value | 

'$¥'' 

'"' 

'$' 

Hex̲Digit Hex̲Digit; 

D̲Byte̲Char̲Value : Common̲Char̲Value | 

'¥'' 

'$"' 

'$' 

Hex̲Digit Hex̲Digit Hex̲Digit Hex̲Digit; 

Common̲Char̲Value : ' ' 

'!' 

'#' 

'%' 

|

'&' | 

'('..'/' 

'0'..'9' 

':'..'@'

| 'A'..'Z' 

'['..'̀' 

'a'..'z'

| '{'..'~'  

| '$$' 

'$L' 

'$N' 

'$P' 

|

'$R' 

'$T'; 

// $,"及び'を除く,表記可能文字 

// 表8−持続時間型リテラル 

// 表9−日付及び時刻のリテラル 

Time̲Literal 

: Duration | 

Time̲Of̲Day 

Date 

|

Date̲And̲Time; 

Duration 

: ( Time̲Type̲Name | 

'T' 

'LT' 

'#' 

'+'

| '-' )? Interval; 

Fix̲Point 

: Unsigned̲Int ( '.' Unsigned̲Int )?; 

Interval 

: Days 

Hours 

Minutes | 

Seconds |

Milliseconds 

Microseconds 

Nanoseconds; 

Days 

: ( Fix̲Point 'd' ) | 

( Unsigned̲Int 'd' '̲' ? )? Hours ?; 

Hours 

: ( Fix̲Point 'h' ) | 

( Unsigned̲Int 'h' '̲' ? )? Minutes ?; 

Minutes 

: ( Fix̲Point 'm' ) | 

( Unsigned̲Int 'm' '̲' ? )? Seconds ?; 

Seconds 

: ( Fix̲Point 's' ) | 

( Unsigned̲Int 's' '̲' ? )? Milliseconds ?; 

Milliseconds 

: ( Fix̲Point 'ms' ) 

( Unsigned̲Int 'ms' '̲' ? )? 

Microseconds ?; 

Microseconds 

: ( Fix̲Point 'us' ) 

( Unsigned̲Int 'us' '̲' ? )? 

Nanoseconds ?; 

Nanoseconds 

: Fix̲Point 'ns'; 

Time̲Of̲Day 

: ( Tod̲Type̲Name | 

'LTIME̲OF̲DAY' ) '#' Daytime; 

Daytime 

: Day̲Hour ':' Day̲Minute ':' Day̲Second; 

Day̲Hour 

: Unsigned̲Int; 

Day̲Minute 

: Unsigned̲Int; 

Day̲Second 

: Fix̲Point; 

Date 

: ( Date̲Type̲Name | 

'D' 

'LD' ) '#' Date̲Literal; 

Date̲Literal 

: Year '-' Month '-' Day; 

Year 

: Unsigned̲Int; 

Month 

: Unsigned̲Int; 

Day 

: Unsigned̲Int; 

Date̲And̲Time 

: ( DT̲Type̲Name 

'LDATE̲AND̲TIME' ) '#' Date̲Literal '-' 

Daytime; 

// 表10−基本データ型 

Data̲Type̲Access 

: Elem̲Type̲Name 

Derived̲Type̲Access ; 

Elem̲Type̲Name 

: Numeric̲Type̲Name | 

Bit̲Str̲Type̲Name  

String̲Type̲Name 

Date̲Type̲Name |

Time̲Type̲Name ; 

Numeric̲Type̲Name : Int̲Type̲Name 

Real̲Type̲Name ; 

226 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Int̲Type̲Name 

: Sign̲Int̲Type̲Name 

Unsign̲Int̲Type̲Name ; 

Sign̲Int̲Type̲Name : 'SINT' 

'INT' 

'DINT' | 

'LINT' ; 

Unsign̲Int̲Type̲Name : 'USINT' 

'UINT' | 

'UDINT' |

'ULINT' ; 

Real̲Type̲Name 

: 'REAL' 

'LREAL' ; 

String̲Type̲Name 

: 'STRING' ( '[' Unsigned̲Int ']' )? 

'WSTRING' ( '[' 

Unsigned̲Int ']' )? | 'CHAR' | 

'WCHAR' ; 

Time̲Type̲Name 

: 'TIME' 

'LTIME' ; 

Date̲Type̲Name 

: 'DATE' 

'LDATE' ; 

Tod̲Type̲Name 

: 'TIME̲OF̲DAY' 

'TOD' 

'LTOD' ; 

DT̲Type̲Name 

: 'DATE̲AND̲TIME' | 

'DT' 

'LDT' ; 

Bit̲Str̲Type̲Name : Bool̲Type̲Name 

Multibits̲Type̲Name ; 

Bool̲Type̲Name 

: 'BOOL' ; 

Multibits̲Type̲Name 

: 'BYTE' 

'WORD' | 

'DWORD' |

'LWORD' ; 

// 表11−ユーザ定義データ型の宣言及び初期化 

Derived̲Type̲Access 

: Single̲Elem̲Type̲Access 

Array̲Type̲Access

| Struct̲Type̲Access  

| String̲Type̲Access 

Class̲Type̲Access 

|

Ref̲Type̲Access  

Interface̲Type̲Access ; 

String̲Type̲Access : ( Namespace̲Name '.' )* String̲Type̲Name ; 
Single̲Elem̲Type̲Access 

 : Simple̲Type̲Access 

Subrange̲Type̲Access

| Enum̲Type̲Access ; 

Simple̲Type̲Access : ( Namespace̲Name '.' )* Simple̲Type̲Name ; 
Subrange̲Type̲Access : ( Namespace̲Name '.' )* Subrange̲Type̲Name ; 
Enum̲Type̲Access 

: ( Namespace̲Name '.' )* Enum̲Type̲Name ; 

Array̲Type̲Access : ( Namespace̲Name '.' )* Array̲Type̲Name ; 
Struct̲Type̲Access : ( Namespace̲Name '.' )* Struct̲Type̲Name ; 
Simple̲Type̲Name 

: Identifier ; 

Subrange̲Type̲Name : Identifier ; 
Enum̲Type̲Name 

: Identifier ; 

Array̲Type̲Name 

: Identifier ; 

Struct̲Type̲Name 

: Identifier ; 

 
Data̲Type̲Decl 

: 'TYPE' ( Type̲Decl ';' )+'END̲TYPE' ; 

Type̲Decl 

: Simple̲Type̲Decl | 

Subrange̲Type̲Decl 

|

Enum̲Type̲Decl  

| Array̲Type̲Decl | 

Struct̲Type̲Decl  

| Str̲Type̲Decl 

Ref̲Type̲Decl ; 

Simple̲Type̲Decl 

: Simple̲Type̲Name ':' Simple̲Spec̲Init ; 

Simple̲Spec̲Init 

: Simple̲Spec ( ':=' Constant̲Expr )? ; 

Simple̲Spec 

: Elem̲Type̲Name 

Simple̲Type̲Access ; 

Subrange̲Type̲Decl : Subrange̲Type̲Name ':' Subrange̲Spec̲Init ; 
Subrange̲Spec̲Init : Subrange̲Spec ( ':=' Signed̲Int )? ; 
Subrange̲Spec 

: Int̲Type̲Name '(' Subrange ')' 

Subrange̲Type̲Access ; 

Subrange 

: Constant̲Expr '..' Constant̲Expr ; 

Enum̲Type̲Decl 

: Enum̲Type̲Name ':' ( ( Elem̲Type̲Name ? Named̲Spec̲Init ) 

| Enum̲Spec̲Init ) ; 

Named̲Spec̲Init 

: '(' Enum̲Value̲Spec ( ',' Enum̲Value̲Spec )* ')' ( ':=' Enum̲Value )? ; 

227 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Enum̲Spec̲Init 

: ( ( '(' Identifier ( ',' Identifier )* ')' ) 

|

Enum̲Type̲Access ) 

 ( ':=' Enum̲Value )? ; 

Enum̲Value̲Spec 

: Identifier ( ':=' ( Int̲Literal | 

Constant̲Expr ) )? ; 

Enum̲Value 

: ( Enum̲Type̲Name '#' )? Identifier ; 

Array̲Type̲Decl 

: Array̲Type̲Name ':' Array̲Spec̲Init ; 

Array̲Spec̲Init 

: Array̲Spec ( ':=' Array̲Init )? ; 

Array̲Spec 

: Array̲Type̲Access | 

'ARRAY' '[' Subrange ( ',' Subrange )* ']' 

 'OF' Data̲Type̲Access ; 

Array̲Init 

: '[' Array̲Elem̲Init ( ',' Array̲Elem̲Init )* ']' ; 

Array̲Elem̲Init 

: Array̲Elem̲Init̲Value 

Unsigned̲Int 

'(' 

Array̲Elem̲Init̲Value ? ')' ; 

Array̲Elem̲Init̲Value : Constant̲Expr | 

Enum̲Value 

Struct̲Init

| Array̲Init ; 

Struct̲Type̲Decl 

: Struct̲Type̲Name ':' Struct̲Spec ; 

Struct̲Spec 

: Struct̲Decl 

Struct̲Spec̲Init ; 

Struct̲Spec̲Init 

: Struct̲Type̲Access ( ':=' Struct̲Init )? ; 

Struct̲Decl 

:'STRUCT' 'OVERLAP' ? ( Struct̲Elem̲Decl ';' )+'END̲STRUCT' ; 

Struct̲Elem̲Decl 

: Struct̲Elem̲Name ( Located̲At Multibit̲Part̲Access ? )? ':' 

( Simple̲Spec̲Init | 

Subrange̲Spec̲Init 

|

Enum̲Spec̲Init 

Array̲Spec̲Init  

| Struct̲Spec̲Init ) ; 

Struct̲Elem̲Name 

: Identifier ; 

Struct̲Init 

: '(' Struct̲Elem̲Init ( ',' Struct̲Elem̲Init )* ')' ; 

Struct̲Elem̲Init 

: Struct̲Elem̲Name ':=' ( Constant̲Expr 

Enum̲Value

| Array̲Init 

Struct̲Init 

| Ref̲Value ) ; 

Str̲Type̲Decl 

: String̲Type̲Name ':' String̲Type̲Name ( ':=' Char̲Str )? ; 

// 表16−直接表現変数 

Direct̲Variable 

: '%' ( 'I' | 

'Q' 

'M' ) ( 'X' 

'B'

| 'W' 

'D' 

'L' 

)? 

Unsigned̲Int 

'.' 

Unsigned̲Int )* ; 

// 表12−リファレンス演算 

Ref̲Type̲Decl 

: Ref̲Type̲Name ':' Ref̲Spec̲Init ; 

Ref̲Spec̲Init 

: Ref̲Spec ( ':=' Ref̲Value )? ; 

Ref̲Spec 

: 'REF̲TO' + Data̲Type̲Access ; 

Ref̲Type̲Name 

: Identifier ; 

Ref̲Type̲Access 

: ( Namespace̲Name '.' )* Ref̲Type̲Name ; 

Ref̲Name 

: Identifier ; 

Ref̲Value 

: Ref̲Addr | 

'NULL' ; 

Ref̲Addr 

: 'REF' '(' ( Symbolic̲Variable 

FB̲Instance̲Name

| Class̲Instance̲Name ) ')' ; 

Ref̲Assign 

: Ref̲Name ':=' ( Ref̲Name | 

Ref̲Deref 

|

Ref̲Value ) ; 

Ref̲Deref 

: Ref̲Name '^' +; 

// 表13−変数の宣言,表14−変数の初期化 

Variable 

: Direct̲Variable | 

Symbolic̲Variable ; 

228 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Symbolic̲Variable : ( ( 'THIS' '.' ) | 

( Namespace̲Name '.' )+)? ( Var̲Access

| Multi̲Elem̲Var ) ; 

Var̲Access 

: Variable̲Name 

Ref̲Deref ; 

Variable̲Name 

: Identifier ; 

Multi̲Elem̲Var 

: Var̲Access ( Subscript̲List 

Struct̲Variable )+; 

Subscript̲List 

: '[' Subscript ( ',' Subscript )* ']' ; 

Subscript 

: Expression ; 

Struct̲Variable 

: '.' Struct̲Elem̲Select ; 

Struct̲Elem̲Select : Var̲Access ; 
Input̲Decls 

: 'VAR̲INPUT' ( 'RETAIN' 

'NON̲RETAIN' )? ( Input̲Decl 

';' )* 'END̲VAR' ; 

Input̲Decl 

: Var̲Decl̲Init 

Edge̲Decl 

|

Array̲Conform̲Decl ; 

Edge̲Decl 

: Variable̲List ':' 'BOOL' ( 'R̲EDGE' 

'F̲EDGE' ) ; 

Var̲Decl̲Init 

: Variable̲List ':' ( Simple̲Spec̲Init 

Str̲Var̲Decl

| Ref̲Spec̲Init )  

| Array̲Var̲Decl̲Init 

Struct̲Var̲Decl̲Init 

|

FB̲Decl̲Init 

Interface̲Spec̲Init ; 

Ref̲Var̲Decl 

: Variable̲List ':' Ref̲Spec ; 

Interface̲Var̲Decl : Variable̲List ':' Interface̲Type̲Access ; 
Variable̲List 

: Variable̲Name ( ',' Variable̲Name )* ; 

Array̲Var̲Decl̲Init 

: Variable̲List ':' Array̲Spec̲Init ; 

Array̲Conformand 

: 'ARRAY' '[' '*' ( ',' '*' )* ']' 'OF' Data̲Type̲Access ; 

Array̲Conform̲Decl : Variable̲List ':' Array̲Conformand ; 
Struct̲Var̲Decl̲Init : Variable̲List ':' Struct̲Spec̲Init ; 
FB̲Decl̲No̲Init 

: FB̲Name ( ',' FB̲Name )* ':' FB̲Type̲Access ; 

FB̲Decl̲Init 

: FB̲Decl̲No̲Init ( ':=' Struct̲Init )? ; 

FB̲Name 

: Identifier ; 

FB̲Instance̲Name 

: ( Namespace̲Name '.' )* FB̲Name '^' * ; 

Output̲Decls 

: 'VAR̲OUTPUT' ( 'RETAIN' | 

'NON̲RETAIN' )? ( Output̲Decl 

';' )* 

'END̲VAR' ; 

Output̲Decl 

: Var̲Decl̲Init 

Array̲Conform̲Decl ; 

In̲Out̲Decls 

: 'VAR̲IN̲OUT' ( In̲Out̲Var̲Decl ';' )* 'END̲VAR' ; 

In̲Out̲Var̲Decl 

: Var̲Decl | 

Array̲Conform̲Decl 

|

FB̲Decl̲No̲Init ; 

Var̲Decl 

: Variable̲List ':' ( Simple̲Spec | 

Str̲Var̲Decl 

|

Array̲Var̲Decl 

| Struct̲Var̲Decl ) ; 

Array̲Var̲Decl 

: Variable̲List ':' Array̲Spec ; 

Struct̲Var̲Decl 

: Variable̲List ':' Struct̲Type̲Access ; 

Var̲Decls 

: 'VAR' 'CONSTANT' ? Access̲Spec ? ( Var̲Decl̲Init ';' )* 'END̲VAR' ; 

Retain̲Var̲Decls 

: 'VAR' 'RETAIN' Access̲Spec ? ( Var̲Decl̲Init ';' )* 'END̲VAR' ; 

Loc̲Var̲Decls 

: 'VAR' ( 'CONSTANT' 

'RETAIN' 

|

'NON̲RETAIN' )? ( Loc̲Var̲Decl ';' )* 

'END̲VAR' ; 

Loc̲Var̲Decl 

: Variable̲Name ? Located̲At ':' Loc̲Var̲Spec̲Init ; 

Temp̲Var̲Decls 

: VAR̲TEMP' ( ( Var̲Decl 

Ref̲Var̲Decl 

|

Interface̲Var̲Decl ) ';' )* 

'END̲VAR' ; 

External̲Var̲Decls : 'VAR̲EXTERNAL' 'CONSTANT' ? ( External̲Decl ';' )* 'END̲VAR' ; 
External̲Decl 

: Global̲Var̲Name ':' 

229 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

( Simple̲Spec 

Array̲Spec 

|

Struct̲Type̲Access | 

FB̲Type̲Access 

| Ref̲Type̲Access ) ; 

Global̲Var̲Name 

: Identifier ; 

Global̲Var̲Decls 

: 'VAR̲GLOBAL' ( 'CONSTANT' 

'RETAIN' 

)? 

( Global̲Var̲Decl ';' )* 

'END̲VAR' ; 

Global̲Var̲Decl 

: Global̲Var̲Spec ':' ( Loc̲Var̲Spec̲Init |

FB̲Type̲Access ) ; 

Global̲Var̲Spec 

: ( Global̲Var̲Name ( ',' Global̲Var̲Name )* ) 

| ( Global̲Var̲Name Located̲At ) ; 

Loc̲Var̲Spec̲Init : Simple̲Spec̲Init | 

Array̲Spec̲Init | 

Struct̲Spec̲Init

| S̲Byte̲Str̲Spec 

| D̲Byte̲Str̲Spec ; 

Located̲At 

: 'AT' Direct̲Variable ; 

Str̲Var̲Decl 

: S̲Byte̲Str̲Var̲Decl 

D̲Byte̲Str̲Var̲Decl ; 

S̲Byte̲Str̲Var̲Decl 

: Variable̲List ':' S̲Byte̲Str̲Spec ; 

S̲Byte̲Str̲Spec 

: 'STRING' ( '[' Unsigned̲Int ']' )? ( ':=' S̲Byte̲Char̲Str )? ; 

D̲Byte̲Str̲Var̲Decl 

: Variable̲List ':' D̲Byte̲Str̲Spec ; 

D̲Byte̲Str̲Spec 

: 'WSTRING' ( '[' Unsigned̲Int ']' )? ( ':=' D̲Byte̲Char̲Str )? ; 

Loc̲Partly̲Var̲Decl 

: 'VAR' ( 'RETAIN' 

'NON̲RETAIN' )? Loc̲Partly̲Var * 

'END̲VAR' ; 

Loc̲Partly̲Var 

: Variable̲Name 'AT' '%' ( 'I' 

'Q' 

'M' ) '*' 

':' Var̲Spec ';' ; 

Var̲Spec 

: Simple̲Spec 

Array̲Spec 

|

Struct̲Type̲Access  

| ( 'STRING' 

'WSTRING' ) ( '[' Unsigned̲Int ']' )? ; 

// 表19−ファンクション宣言 

Func̲Name 

: Std̲Func̲Name 

Derived̲Func̲Name ; 

Func̲Access 

: ( Namespace̲Name '.' )* Func̲Name ; 

Std̲Func̲Name 

: 'TRUNC' | 

'ABS' 

'SQRT' | 

'LN' 

|

'LOG' 

'EXP'  

| 'SIN' 

'COS' 

'TAN' 

'ASIN' |

'ACOS' 

'ATAN' | 

'ATAN2 ' 

| 'ADD' 

'SUB' 

'MUL' 

'DIV' 

|

'MOD' 

'EXPT' | 

'MOVE ' 

| 'SHL' 

'SHR' 

'ROL' 

'ROR'  

| 'AND' 

'OR' 

'XOR' 

'NOT' 

| 'SEL' 

'MAX' 

'MIN' 

'LIMIT' |

'MUX ' 

| 'GT' 

'GE' 

'EQ' 

'LE' 

|

'LT' 

'NE'  

| 'LEN' 

'LEFT' | 

'RIGHT' | 

'MID' 

|

'CONCAT' 

'INSERT' 

'DELETE' 

|

'REPLACE' 

| 'FIND' ; 

// 代表例であり,全てを網羅しているわけではない。 

Derived̲Func̲Name : Identifier ; 
Func̲Decl 

'FUNCTION' 

Derived̲Func̲Name 

':' 

Data̲Type̲Access 

)? 

Using̲Directive * 

230 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

( IO̲Var̲Decls 

Func̲Var̲Decls |

Temp̲Var̲Decls )* 

Func̲Body 'END̲FUNCTION' ; 

IO̲Var̲Decls 

: Input̲Decls 

Output̲Decls 

In̲Out̲Decls ; 

Func̲Var̲Decls 

: External̲Var̲Decls 

Var̲Decls ; 

Func̲Body 

: Ladder̲Diagram 

FB̲Diagram 

Instruction̲List

| Stmt̲List 

Other̲Languages ; 

// 表40−ファンクションブロック型宣言 

// 表41−ファンクションブロックインスタンスの宣言 

FB̲Type̲Name 

: Std̲FB̲Name 

Derived̲FB̲Name ; 

FB̲Type̲Access 

: ( Namespace̲Name '.' )* FB̲Type̲Name ; 

Std̲FB̲Name 

: 'SR' 

'RS' 

'R̲TRIG' 

'F̲TRIG'

| 'CTU'| 'CTD' 

'CTUD' | 

'TP' 

'TON'

| 'TOF' ; 

// 代表例であり,全てを網羅しているわけではない。 

Derived̲FB̲Name 

: Identifier ; 

FB̲Decl 

: 'FUNCTION̲BLOCK' ( 'FINAL' 

'ABSTRACT' )? 

Derived̲FB̲Name Using̲Directive * 

( 'EXTENDS' ( FB̲Type̲Access 

Class̲Type̲Access ) )? 

( 'IMPLEMENTS' Interface̲Name̲List )? 

( FB̲IO̲Var̲Decls | 

Func̲Var̲Decls | 

Temp̲Var̲Decls

| Other̲Var̲Decls )* 

( Method̲Decl )* FB̲Body ? 'END̲FUNCTION̲BLOCK' ; 

FB̲IO̲Var̲Decls 

: FB̲Input̲Decls 

FB̲Output̲Decls |

In̲Out̲Decls ; 

FB̲Input̲Decls 

: 'VAR̲INPUT' ( 'RETAIN' 

'NON̲RETAIN' )? ( FB̲Input̲Decl 

';' )* 

'END̲VAR' ; 

FB̲Input̲Decl 

: Var̲Decl̲Init 

Edge̲Decl 

|

Array̲Conform̲Decl ; 

FB̲Output̲Decls 

: 'VAR̲OUTPUT' ( 'RETAIN' | 

'NON̲RETAIN' )? ( FB̲Output̲Decl 

';' )* 

'END̲VAR' ; 

FB̲Output̲Decl 

: Var̲Decl̲Init 

Array̲Conform̲Decl ; 

Other̲Var̲Decls 

: Retain̲Var̲Decls | 

No̲Retain̲Var̲Decls 

|

Loc̲Partly̲Var̲Decl ; 

No̲Retain̲Var̲Decls 

: 'VAR' 'NON̲RETAIN' Access̲Spec? ( Var̲Decl̲Init ';' )* 'END̲VAR' ; 

FB̲Body 

: SFC 

Ladder̲Diagram | 

FB̲Diagram 

|

Instruction̲List 

Stmt̲List 

| Other̲Languages ; 

Method̲Decl 

: 'METHOD' Access̲Spec? ( 'FINAL' | 

'ABSTRACT' 

)? 

'OVERRIDE' ? 

 Method̲Name ( ':' Data̲Type̲Access )? 

( IO̲Var̲Decls 

Func̲Var̲Decls |

Temp̲Var̲Decls )* 

Func̲Body 'END̲METHOD' ; 

Method̲Name 

: Identifier ; 

// 表48−クラス 

231 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

// 表50−メソッドのテキスト形式の呼出し−正式及び略式パラメータリスト 

Class̲Decl 

: 'CLASS' ( 'FINAL' | 

'ABSTRACT' 

)? 

Class̲Type̲Name 

Using̲Directive * 

( 'EXTENDS' Class̲Type̲Access )? ( 'IMPLEMENTS' Interface̲Name̲List )? 

( Func̲Var̲Decls 

Other̲Var̲Decls )* ( Method̲Decl )* 

'END̲CLASS' ; 

Class̲Type̲Name 

: Identifier ; 

Class̲Type̲Access : ( Namespace̲Name '.' )* Class̲Type̲Name ; 
Class̲Name 

: Identifier ; 

Class̲Instance̲Name 

: ( Namespace̲Name '.' )* Class̲Name '^' * ; 

Interface̲Decl 

: 'INTERFACE' Interface̲Type̲Name Using̲Directive * 

'EXTENDS' 

Interface̲Name̲List 

)? 

Method̲Prototype 

'END̲INTERFACE' ; 

Method̲Prototype 

: 'METHOD' Method̲Name ( ':' Data̲Type̲Access )? 

IO̲Var̲Decls * 'END̲METHOD' ; 

Interface̲Spec̲Init 

: Variable̲List ( ':=' Interface̲Value )? ; 

Interface̲Value 

: Symbolic̲Variable | 

FB̲Instance̲Name 

|

Class̲Instance̲Name | 

'NULL' ; 

Interface̲Name̲List 

: Interface̲Type̲Access ( ',' Interface̲Type̲Access )* ; 

Interface̲Type̲Name 

: Identifier ; 

Interface̲Type̲Access : ( Namespace̲Name '.' )* Interface̲Type̲Name ; 
Interface̲Name 

: Identifier ; 

Access̲Spec 

: 'PUBLIC' | 

'PROTECTED' 

'PRIVATE' 

|

'INTERNAL' ; 

// 表47−プログラム宣言 

Prog̲Decl 

: 'PROGRAM' Prog̲Type̲Name 

( IO̲Var̲Decls 

Func̲Var̲Decls | 

Temp̲Var̲Decls

| Other̲Var̲Decls  

| Loc̲Var̲Decls 

Prog̲Access̲Decls 

)* 

FB̲Body 

'END̲PROGRAM' ; 

Prog̲Type̲Name 

: Identifier ; 

Prog̲Type̲Access 

: ( Namespace̲Name '.' )* Prog̲Type̲Name ; 

Prog̲Access̲Decls : 'VAR̲ACCESS' ( Prog̲Access̲Decl ';' )* 'END̲VAR' ; 
Prog̲Access̲Decl 

: Access̲Name ':' Symbolic̲Variable Multibit̲Part̲Access ? 

 ':' Data̲Type̲Access Access̲Direction ? ; 

// 表54〜表61−シーケンシャルファンクションチャート(SFC) 

SFC 

: Sfc̲Network+; 

Sfc̲Network 

: Initial̲Step ( Step 

Transition 

|

Action )*; 

Initial̲Step 

: 'INITIAL̲STEP' Step̲Name ':' ( Action̲Association ';' )* 'END̲STEP'; 

Step 

: 'STEP' Step̲Name ':' ( Action̲Association ';' )* 'END̲STEP'; 

Step̲Name 

: Identifier; 

Action̲Association : Action̲Name '(' Action̲Qualifier ? ( ',' Indicator̲Name )* ')'; 
Action̲Name 

: Identifier; 

Action̲Qualifier 

: 'N' 

'R' 

'S' 

'P' 

|

( ( 'L' 

'D' 

'SD' 

'DS' 

|

'SL' ) ',' Action̲Time ); 

Action̲Time 

: Duration | 

Variable̲Name; 

232 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Indicator̲Name 

: Variable̲Name; 

Transition 

: 'TRANSITION' Transition̲Name ? ( '(' 'PRIORITY' ':=' Unsigned̲Int 

')' )? 

'FROM' Steps 'TO' Steps ':' Transition̲Cond  'END̲TRANSITION'; 

Transition̲Name 

: Identifier; 

Steps 

: Step̲Name | 

'(' Step̲Name ( ',' Step̲Name )+')'; 

Transition̲Cond 

: ':=' Expression ';' 

':' ( FBD̲Network 

|

LD̲Rung ) | 

':=' IL̲Simple̲Inst; 

Action 

: 'ACTION' Action̲Name ':' FB̲Body 'END̲ACTION'; 

// 表62−コンフィグレーション及びリソース宣言 

Config̲Name 

: Identifier ; 

Resource̲Type̲Name : Identifier ; 
Config̲Decl 

: 'CONFIGURATION' Config̲Name Global̲Var̲Decls ? 

 ( Single̲Resource̲Decl 

Resource̲Decl+) Access̲Decls ? 

Config̲Init ? 

 'END̲CONFIGURATION' ; 

Resource̲Decl 

: 'RESOURCE' Resource̲Name 'ON' Resource̲Type̲Name 

 Global̲Var̲Decls ? Single̲Resource̲Decl 

 'END̲RESOURCE' ; 

Single̲Resource̲Decl  : ( Task̲Config ';' )* ( Prog̲Config ';' )+; 
Resource̲Name 

: Identifier ; 

Access̲Decls 

: 'VAR̲ACCESS' ( Access̲Decl ';' )* 'END̲VAR' ; 

Access̲Decl 

: Access̲Name ':' Access̲Path ':' Data̲Type̲Access Access̲Direction ? ; 

Access̲Path 

: ( Resource̲Name '.' )? Direct̲Variable  

| ( Resource̲Name '.' )? ( Prog̲Name '.' )?  

( ( FB̲Instance̲Name 

Class̲Instance̲Name ) '.' )* 

Symbolic̲Variable ; 

Global̲Var̲Access : ( Resource̲Name '.' )? Global̲Var̲Name ( '.' Struct̲Elem̲Name )? ; 
Access̲Name 

: Identifier ; 

Prog̲Output̲Access : Prog̲Name '.' Symbolic̲Variable ; 
Prog̲Name 

: Identifier ; 

Access̲Direction 

: 'READ̲WRITE' 

'READ̲ONLY' ; 

Task̲Config 

: 'TASK' Task̲Name Task̲Init ; 

Task̲Name 

: Identifier ; 

Task̲Init 

: '(' ( 'SINGLE' ':=' Data̲Source ',' )? 

( 'INTERVAL' ':=' Data̲Source ',' )? 

'PRIORITY' ':=' Unsigned̲Int ')' ; 

Data̲Source 

: Constant | 

Global̲Var̲Access 

|

Prog̲Output̲Access | 

Direct̲Variable ; 

Prog̲Config 

: 'PROGRAM' ( 'RETAIN' 

'NON̲RETAIN' )? 

Prog̲Name ( 'WITH' Task̲Name )? ':' 

 Prog̲Type̲Access ( '(' Prog̲Conf̲Elems ')' )? ; 

Prog̲Conf̲Elems 

: Prog̲Conf̲Elem ( ',' Prog̲Conf̲Elem )* ; 

Prog̲Conf̲Elem 

: FB̲Task | 

Prog̲Cnxn ; 

FB̲Task 

: FB̲Instance̲Name 'WITH' Task̲Name ; 

Prog̲Cnxn 

: Symbolic̲Variable ':=' Prog̲Data̲Source |

Symbolic̲Variable '=>' Data̲Sink ; 

Prog̲Data̲Source 

: Constant | 

Enum̲Value 

Global̲Var̲Access

| Direct̲Variable ; 

Data̲Sink 

: Global̲Var̲Access | 

Direct̲Variable ; 

233 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Config̲Init 

: 'VAR̲CONFIG' ( Config̲Inst̲Init ';' )* 'END̲VAR' ; 

Config̲Inst̲Init 

: Resource̲Name '.' Prog̲Name '.' ( ( FB̲Instance̲Name 

| Class̲Instance̲Name ) '.' )* 

( Variable̲Name Located̲At ? ':' Loc̲Var̲Spec̲Init  

| ( ( FB̲Instance̲Name ':' FB̲Type̲Access )  

| ( Class̲Instance̲Name ':' Class̲Type̲Access ) ) ':=' Struct̲Init ) ; 

// 表64−名前空間 

Namespace̲Decl 

: 'NAMESPACE' 'INTERNAL' ? Namespace̲H̲Name Using̲Directive * 

Namespace̲Elements 

 'END̲NAMESPACE'; 

Namespace̲Elements : ( Data̲Type̲Decl | 

Func̲Decl 

FB̲Decl 

| Class̲Decl 

Interface̲Decl |

Namespace̲Decl )+; 

Namespace̲H̲Name 

: Namespace̲Name ( '.' Namespace̲Name )*; 

Namespace̲Name 

: Identifier; 

Using̲Directive 

: 'USING' Namespace̲H̲Name ( ',' Namespace̲H̲Name )* ';'; 

POU̲Decl 

: Using̲Directive * 

( Global̲Var̲Decls | 

Data̲Type̲Decl | 

Access̲Decls  

| Func̲Decl 

FB̲Decl | 

Class̲Decl 

|

Interface̲Decl  

| Namespace̲Decl )+; 

// 表67〜表70−命令リスト(IL) 

Instruction̲List 

: IL̲Instruction +; 

IL̲Instruction 

: ( IL̲Label ':' )? ( IL̲Simple̲Operation | 

IL̲Expr |

IL̲Jump̲Operation  

| IL̲Invocation 

IL̲Formal̲Func̲Call  

| IL̲Return̲Operator )? EOL+; 

IL̲Simple̲Inst 

: IL̲Simple̲Operation 

IL̲Expr |

IL̲Formal̲Func̲Call; 

IL̲Label 

: Identifier; 

IL̲Simple̲Operation 

: IL̲Simple̲Operator IL̲Operand ? 

Func̲Access 

IL̲Operand̲List ?; 

IL̲Expr 

: IL̲Expr̲Operator '(' IL̲Operand ? EOL +IL̲Simple̲Inst̲List ? ')'; 

IL̲Jump̲Operation : IL̲Jump̲Operator IL̲Label; 
IL̲Invocation 

: IL̲Call̲Operator ((( FB̲Instance̲Name 

Func̲Name

| Method̲Name 

'THIS ' 

| ( ( 'THIS' '.' ( ( FB̲Instance̲Name 

| Class̲Instance̲Name ) '.' )* ) Method̲Name ) )  

( '(' ( ( EOL+IL̲Param̲List ? ) 

IL̲Operand̲List 

')' )? ) 

| 'SUPER' '(' ')' ); 

IL̲Formal̲Func̲Call 

: Func̲Access '(' EOL+IL̲Param̲List ? ')'; 

IL̲Operand 

: Constant | 

Enum̲Value 

Variable̲Access; 

IL̲Operand̲List 

: IL̲Operand ( ',' IL̲Operand )*; 

IL̲Simple̲Inst̲List 

: IL̲Simple̲Instruction+; 

IL̲Simple̲Instruction : ( IL̲Simple̲Operation | 

IL̲Expr |

IL̲Formal̲Func̲Call ) EOL+; 

IL̲Param̲List 

: IL̲Param̲Inst * IL̲Param̲Last̲Inst; 

IL̲Param̲Inst 

: ( IL̲Param̲Assign | 

IL̲Param̲Out̲Assign ) ',' EOL+; 

IL̲Param̲Last̲Inst : ( IL̲Param̲Assign | 

IL̲Param̲Out̲Assign ) EOL+; 

234 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

IL̲Param̲Assign 

: IL̲Assignment ( IL̲Operand 

'(' 

EOL

IL̲Simple̲Inst̲List ')' ) ); 

IL̲Param̲Out̲Assign 

: IL̲Assign̲Out̲Operator Variable̲Access; 

IL̲Simple̲Operator : 'LD' 

'LDN' 

'ST' 

'STN' 

|

'ST?' 

'NOT' 

'S' 

'R'  

| 'S1' 

'R1' 

'CLK' 

'CU' 

|

'CD' 

'PV'  

| 'IN' 

'PT' 

IL̲Expr̲Operator; 

IL̲Expr̲Operator 

: 'AND' | 

'&' 

'OR' 

'XOR' 

|

'ANDN' 

'&N' 

'ORN'  

| 'XORN' | 

'ADD' 

'SUB' 

'MUL' 

|

'DIV'  

| 'MOD' 

'GT' 

'GE' 

'EQ' 

|

'LT' 

'LE' 

'NE'; 

IL̲Assignment 

: Variable̲Name ':='; 

IL̲Assign̲Out̲Operator : 'NOT' ? Variable̲Name '=>'; 
IL̲Call̲Operator 

: 'CAL' 

'CALC' | 

'CALCN'; 

IL̲Return̲Operator : 'RT' 

'RETC' | 

'RETCN'; 

IL̲Jump̲Operator 

: 'JMP' 

'JMPC' | 

'JMPCN'; 

// 表71及び表72−言語構造化テキスト(ST) 

Expression 

: Xor̲Expr ( 'OR' Xor̲Expr )*; 

Constant̲Expr 

: Expression; 

// コンスタント表現は,コンパイル時に定数値に変換する。 

Xor̲Expr 

: And̲Expr ( 'XOR' And̲Expr )*; 

And̲Expr 

: Compare̲Expr ( ( '&' 

'AND' ) Compare̲Expr )*; 

Compare̲Expr 

: ( Equ̲Expr ( ( '=' 

'<>' ) Equ̲Expr )* ); 

Equ̲Expr 

: Add̲Expr ( ( '<' | 

'>' 

'<=' 

'>=' 

Add̲Expr )*; 

Add̲Expr 

: Term ( ( '+' 

'-' ) Term )*; 

Term 

: Power̲Expr ( '*' | 

'/' 

'MOD' Power̲Expr )*; 

Power̲Expr 

: Unary̲Expr ( '**' Unary̲Expr )*; 

Unary̲Expr 

: '-' 

'+' 

'NOT' ? Primary̲Expr; 

Primary̲Expr 

: Constant | 

Enum̲Value 

Variable̲Access |

Func̲Call | 

Ref̲Value 

| '(' Expression ')'; 

Variable̲Access 

: Variable Multibit̲Part̲Access ?; 

Multibit̲Part̲Access : '.' ( Unsigned̲Int 

'%' ( 'X' 

'B'

| 'W' 

'D' 

'L' ) ? Unsigned̲Int ); 

Func̲Call 

: Func̲Access '(' ( Param̲Assign ( ',' Param̲Assign )* )? ')'; 

Stmt̲List 

: ( Stmt ? ';' )*; 

Stmt 

: Assign̲Stmt 

Subprog̲Ctrl̲Stmt 

|

Selection̲Stmt 

Iteration̲Stmt; 

Assign̲Stmt 

: ( Variable ':=' Expression ) 

Ref̲Assign 

|

Assignment̲Attempt; 

Assignment̲Attempt : ( Ref̲Name 

Ref̲Deref ) '?=' ( Ref̲Name 

|

Ref̲Deref | 

Ref̲Value ); 

Invocation 

: ( FB̲Instance̲Name 

Method̲Name 

'THIS'  

| ( ( 'THIS' '.' )? ( ( ( FB̲Instance̲Name 

| Class̲Instance̲Name ) '.' )+) Method̲Name ) ) 

'(' ( Param̲Assign ( ',' Param̲Assign )* )? ')'; 

235 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Subprog̲Ctrl̲Stmt : Func̲Call | 

Invocation 

'SUPER' '(' ')' |

'RETURN'; 

Param̲Assign 

: ( ( Variable̲Name ':=' )? Expression ) 

Ref̲Assign 

| ( 'NOT' ? Variable̲Name '=>' Variable ); 

Selection̲Stmt 

: IF̲Stmt | 

Case̲Stmt; 

IF̲Stmt 

: 'IF' Expression 'THEN' Stmt̲List ( 'ELSIF' Expression 'THEN' 

Stmt̲List )* 

( 'ELSE' Stmt̲List )? 

 'END̲IF'; 
Case̲Stmt 

: 'CASE' Expression 'OF' Case̲Selection+( 'ELSE' Stmt̲List )? 

'END̲CASE'; 

Case̲Selection 

: Case̲List ':' Stmt̲List; 

Case̲List 

: Case̲List̲Elem ( ',' Case̲List̲Elem )*; 

Case̲List̲Elem 

: Subrange | 

Constant̲Expr; 

Iteration̲Stmt 

: For̲Stmt | 

While̲Stmt 

Repeat̲Stmt 

|

'EXIT' 

'CONTINUE'; 

For̲Stmt 

: 'FOR' Control̲Variable ':=' For̲List 'DO' Stmt̲List 'END̲FOR'; 

Control̲Variable 

: Identifier; 

For̲List 

: Expression 'TO' Expression ( 'BY' Expression )?; 

While̲Stmt 

: 'WHILE' Expression 'DO' Stmt̲List 'END̲WHILE'; 

Repeat̲Stmt 

: 'REPEAT' Stmt̲List 'UNTIL' Expression 'END̲REPEAT'; 

// 表73〜表76−グラフィック言語要素 

Ladder̲Diagram 

: LD̲Rung *; 

LD̲Rung 

: // グラフィック言語の文法はここでは表記しない; 

FB̲Diagram 

: FBD̲Network *; 

FBD̲Network 

: // グラフィック言語の文法はここでは表記しない; 

// この規格の適用範囲外 

Other̲Languages 

: // その他の言語の文法はここでは表記しない; 

236 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書B 

(参考) 

第三版の主要変更点及び拡張リスト 

この規格は,IEC 61131-3:2003及びJIS B 3503:2012と完全な互換性がある。次のリストは,主要変更点

及び拡張を示す。 

編集上の改良:構造,番号付け,順序,言回し,例,項目表 

クラス,メソッド,リファレンス,シグネチャのような用語及び定義 

規格順守表書式 

新しい主要項目 

明示的レイアウト付きデータ型 

名前付き値の型 

基本データ型 

リファレンス,リファレンスを用いたファンクション及び演算 

バリデートファンクション 

ANY̲BITへの部分的アクセス 

可変長ARRAY 

初期値代入 

型変換規則,非明示的−明示的 

ファンクション−呼出し規則,ファンクション結果なし 

数値データ,ビットごとデータなどの型変換ファンクション 

時間及び日付の結合及び分割のファンクション 

メソッド,インタフェースなどを含むクラス 

メソッド,インタフェースなどを含むオブジェクト指向ファンクションブロック 

名前空間 

構造化テキスト:CONTINUEなど 

ラダー図:比較用接点(型及び多重定義) 

附属書A−言語要素の形式仕様 

削除部分(参考事項の削除) 

附属書−例 

附属書−IEC 61499規格群との相互運用性 

非推奨 

8進リテラル 

POU及びメソッドボディ内の直接表現変数の使用 

多重定義された切捨て TRUNC 

命令リスト(IL) 

237 

B 3503:2016 (IEC 61131-3:2013) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

アクションブロックの“インジケータ”変数 

参考文献 IEC 60050 (all parts),International Electrotechnical Vocabulary 

IEC 61499 (all parts),Function blocks 

ISO/IEC 14977:1996,Information technology−Syntactic metalanguage−Extended BNF 

ISO/AFNOR:1989,Dictionary of computer science 

JIS X 0001 情報処理用語−基本用語