「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
日本国内でのPLCのプログラミングは、いわゆる「ラダー図」による記述方式が、まだまだ主流であると思います。
しかし、海外ではラダー以外の形でのプログラミングが多いようで、国内PLCメーカー各社も数年前より国際標準に沿った対応を推し進めている様子が伺えます。
「国際電気標準会議(IEC)」が1993年に発行した国際規格「IEC61131-3」では、ラダーを含めた5つの言語が規定されていますが、今回はその1つである「ST言語」を取り上げます。
本題に入る前に、IEC61131-3で規定されている5つの言語の概要をご紹介します。
IEC61131-3で規定されている言語は、IL(= Instruction List)、LD(= Ladder Diagram)、SFC(= Sequential Function Chart)、FBD(= Function Block Diagram)、ST(= Structured Text)の5つです。
それぞれの言語の概要を、表1に示します。
名称 |
特徴・用途 |
記述イメージ |
---|---|---|
IL | アセンブリ言語のような記述方法 使用頻度は少ない |
![]() |
LD | ハードウェアによるリレー回路をイメージした、いわゆる「ラダー」言語 PLCプログラミングでは最も一般的 ILと切り替えて表示できることが多い |
![]() |
SFC | ラダーとは違い、上から下へ記述する形 条件による分岐が記述しやすく、順次動作する処理に向いている |
![]() |
FBD | 様々な機能を持ったブロックをつなげて組み合わせることによりプログラミングする 設計書類の様式の1つであるIBD(インターロックブロック図)に近い形 |
![]() |
ST | BASICやCなど、高級言語の文法に似た形で記述する Windows用プログラムなどを手がけてきた人には馴染みやすいと思われる |
![]() |
表1. 各言語の比較
ST言語の“ST”は“Structured Text(ストラクチャードテキスト)”の略で、日本語では「構造化テキスト」とも呼ばれます。
ここで言う「構造化」は、ラベル付けや処理単位の部品化を基にしたプログラム全体の「構造化」とは少し異なります。
私なりの解釈ですが、記述内容そのものは単なる文字の羅列でありながら、例えば「命令文の最後はセミコロン(;)」「“(*”と“*)”で囲まれた文はコメント」など、様々な定義によって「構造」を持たせたプログラムの文章・・・という事から「構造化テキスト」と呼ばれていると考えています。
ここからは、三菱電機製PLC開発ソフト「GX Works2」を使用し、ST言語の特徴をご紹介したいと思います。
ラダーロジックはリレー回路を元にしていることから、データの加工や計算処理を行う上では少々煩雑で見づらくなってしまう場合があります。
図1. ラダーロジックの記述例
対して、ST言語では計算式などを一般の数式に近い形式で記述できることが特徴の1つです。
図1のラダーと同じ処理をST言語で記述すると、図2のようになります。
(右側は各デバイスの現在値が表示されています)
図2. ST言語の記述例
例に挙げたのはごく単純な数式ですが、途中の計算結果を入れるデバイスも無く、ラダーよりも数式がより把握しやすい形になります。
もっと複雑な数式の場合は特にST言語で記述することの効果は大きくなります。
「ラベル」は、PLCの各デバイスにつける名前です。(人によっては「変数名」と呼んだほうがイメージしやすいかも知れません)
ラベルはST言語特有の機能ではなく他の言語でも使用することができますが、特にST言語ではラダーのように各デバイスにコメントが併記されないため、ラベルを使用することにより、プログラムの可読性が上がります。
図3. ラベルを使用したプログラミング
ラベルを定義するときは、名前を決めるだけでなく、ダブルワードや文字列などのデータ型も合わせて定義します。
また、デバイスアドレスを明示的に指定せず空欄にすることもできます。
(データ型を基に、必要なアドレスが自動的に確保されます)
プログラムの再利用性を高めることにつながりますので、アドレスを明示しないことがラベルをより有効に活用できる方法と言えます。
また、ラベルには「グローバルラベル」と「ローカルラベル」の2種類があり、図4のような違いがあります。
図4. グローバルラベルとローカルラベルの違い
ST言語によるプログラミングは、「プログラム全体をST言語のみで記述する形」と「ラダーとST言語を組み合わせて記述する形」の2種類があります。
後者の形を「インラインST」と呼びます。
図5. インラインSTのプログラミング例
「インラインST」により、これまで通り主要な処理や制御をラダーでプログラミングしつつ、複雑な計算部分のみをST言語で記述することができます。
また、ラダーとST言語を別に記述した場合、現在値のモニタを行うには2つのウィンドウを開く必要がありますが、インラインSTでは 図4のようにラダーとST言語を一括でモニタすることができます。
ST言語は文法が標準化されているため、異なるメーカー間でもプログラムの流用がしやすくなっています。
例として、GX Works2(三菱電機)で作成していたST言語のプログラムを、CX-Programmer(オムロン)へ流用したのが、図6の状態です。
図6. オムロン製PLCへの流用
ラベルはCX-Programmerで改めて1つずつ再登録する必要がありますが、各社固有のデバイスアドレスを使用していないため、プログラム部分はそのまま手直しすることなく動作しました。
ただし、一部の関数(命令)は各社で独自に拡張して備えている可能性があるため、マニュアルで確認をしたうえで、「同じ機能の関数に置き換える」「処理を自作して同じ動作をさせる」などの対応が必要となります。
I/O処理など、単純な部分もすべてST言語で記述することも可能ですが、かえってプログラミングの労力がかかり、可読性が低くなる場合が多いと思います。
色々と調べていくと、ラダーとインラインSTを使用することが一番バランスの良い組み合わせだと感じました。
今回の取り上げた内容が、ST言語を始め「構造化プログラミング」を実現するための理解の一助となれば幸いです。
最後までお読みいただき、ありがとうございました。
(S.T.)
関連ページへのリンク
関連するソフテックだより