![見出し画像](https://assets.st-note.com/production/uploads/images/169052673/rectangle_large_type_2_ecbb5a5dc51dc97888a06c22407378ea.png?width=1200)
IEC 61131-3テキスト → IEC 61131-10 XML変換ソフトウェア Jiecc
![IEC 61131-3テキストをIEC 61131-10 XMLに変換するソフトウェア Jiecc](https://assets.st-note.com/img/1736229991-zp0K5GT8ALHoRnO92deVaJW1.png?width=1200)
IEC 61131-3テキストをIEC 61131-10 XMLに変換するソフトウェア Jieccをリリースしました。「Jieccのダウンロードと実行方法」からソフトウェアをダウンロードできます。
Jieccの詳しい情報は、上記ページを参照ください。本記事では、Jieccを作った背景や今後の方向性などを示します。
背景
IEC 61131-10は、IEC 61131-3プログラムのXMLフォーマット規格です。IEC 61131-3規格を網羅するXMLフォーマットのソースコードを提供し、PLCメーカーのツールや外部ソフトウェア間のポータビリティ確保を目的としています。Jieccは、この外部ソフトウェアの一つといえます。
もう一つの規格、IEC 61131-3というと「ST・LD・FBD・IL・SFCの5言語をサポート!」が注目されがちですが、これはいわゆるロジック部分のことをいっています。一般的にソースコードはロジック部分だけではなく、型宣言・関数宣言・変数宣言の文法、初期化の文法等が含まれます。では、IEC 61131-3には、ロジック部分以外のソースコードの文法規定はないのかというとそんなことはなく、規格内でBNFで定義された以下に示すような立派な?テキスト表現があります。
TYPE
t: STRUCT
m0: INT;
m1: ARRAY[0..7] OF BOOL;
END_STRUCT;
END_TYPE
// mainプログラム
PROGRAM main
VAR
intv: INT;
ints: ARRAY[0..2] OF INT := [2, 3, 5];
tv: t;
END_VAR
//
FOR intv := 0 TO 2 BY 1 DO
ints[intv] := ints[intv] + intv;
END_FOR;
END_PROGRAM
即ち、ST言語やIL言語のテキスト言語に限れば※1、IEC 61131-3のソースコード全体はテキストで表現可能であり、IEC 61131-10 XML規格以前にポータビリティは確保されていたのです※2。特に、型や変数などの宣言の文法は、XMLと比べても圧倒的に少ない記述量です。
このIEC 61131-3のテキスト表現を知って欲しいし、もっと活用してFAの開発生産性を上げたい。Jieccは、このような背景を基に作られました。
※1 日本において忘れてはいけないLD言語をはじめとするグラフィカル言語については、IEC 61131-3のテキスト表現のロジック部分にIEC 61131-10のXML表現を逆導入して解決しようと考えています。私的には、IEC 61131-10には、IEC 61131-3テキストのサブセットとして、グラフィカル言語のロジック部分の表現方法だけを規定して欲しいと考えています。Jieccもこの思想で今後更新していきます。
※2 では、十分かというとそうではなく、プログラミング言語としてのライブラリのポータビリティのためのプロトタイプ宣言やimport構文(依存関係の指定)などが足りていません。
今後の機能強化予定
今後の改善や機能強化については、以下のようなことを考えています。これは、一人じゃ時間的に無理ですね。。。
IEC 61131-3 to 10変換の未実装項目
エラーコードに対応するメッセージを出力する。
済
METHODやVAR_CONFIGなど、未サポート要素の変換に対応する。
済
ブラウザ上で変換できるようにする。(サーバサイドで実行する。)IEC 61131-3テキストをJavaScript言語等のソースコードに変換する。
ST言語部分を実行するインタプリタを作る。
済
IEC 61131-10 XMLをIEC 61131-3に変換するソフトウェアを作る。済
プリプロセッサ。特にdefine関数マクロ。