HOME > ソフテックだより > 第17号(2006年5月10日発行) 技術レポート「ラダーとSFCの組み合わせ使用について」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第17号(2006年5月10日発行)
技術レポート

「ラダーとSFCの組み合わせ使用について」

今回は、Sequential Function Chart(以後はSFCと省略します)とラダーを組み合わせて使用したプログラムについてご紹介いたします。
まずSFCとその特徴について簡単に説明し、ラダーとSFCを組み合わせて使用するときの注意点を述べ、ラダーとSFCでどのようにプログラムを作ることが望ましいかについてまとめます。

※三菱電機製PLCのラダー作成ツールを使用して説明いたします。

1.SFCとは

Inernational Electrotechnical Commission(国際電気標準会議)規定による国際規格IEC61131-3で、SFC/FBD/LD/ST/ILの5つのPLCプログラミング言語が定められています。ここでは、その中のSFCについて簡単にご紹介いたします。
活性状態のステップの出力部と移行条件のみを実行し、非活性状態のステップの出力部と移行条件は実行しない。
というようにフローチャートのような実行方式となっています。
図 1にSFCの概念図を示します。製造指令が出されると製造が行われて、製造が完了すると搬送が行われて、搬送が完了する、という例です。
移行条件1である製造完了の条件が成立するまで出力部1である製造の処理が行われます。その間は、出力部2である搬送の処理は行われません。
移行条件1である製造完了の条件が成立すると出力部2が活性し、移行条件2である搬送完了の条件が成立するまで出力部2である搬送の処理が行われます。その間は、出力部1である製造の処理は行われません。

図 1 SFCの例
図 1 SFCの例

2.SFCの特徴

ラダーと比較したSFCの特徴について、ご紹介いたします。

(1)
状態遷移を伴う処理を作るとき

ラダーよりもSFCのほうが優れています。
ラダーで作成する場合は、自己保持やセットリセット、レジスタへ値を入れる等の方法で状態遷移を切り分ける必要がありますので、コーディング量が増えてしまいます。
また、ラダーで作成すれば、ステップ数から見ても全体を見渡しにくく、視覚的にもSFCのほうが分かりやすく作りやすいと言えます。

(2)
状態遷移を伴わない処理を作るとき

ラダーよりもSFCのほうが劣っています。
SFCは、活性状態のステップのみ処理されるため、常時計算させたい処理を作る場合はSFCで作る意味がありません。また、大量のステップの計算処理を作る場合も、視覚的にラダーのほうが分かりやすく作りやすいと言えます。

このようにSFCはラダーと比較して、優れている点もあれば劣っている点もあります。
プログラムを作る際は、これらのラダーとSFCの長所を生かして、状態遷移を管理するメインの処理をSFCで作り実際に計算する処理などをラダーで作る、というように組み合わせて作るやり方が望ましいと思われます。
次章からは、ラダーとSFCを組み合わせて使用したときに注意すべき点についてご紹介いたします。

3.ラダーとSFCを組み合わせて使用するときの注意点

結論から申し上げれば、同期に注意する、ことが必要です。
例えば、ラダーで計算した値をSFCで使おうとしたときに、同期を取るようにしていなければ、ラダーが計算する前の値をSFCで使ってしまい、計算結果がおかしくなります。
ご存じのかたは他にもあるかと思いますが、ここでは私の経験からは、この1点だけ述べたいと思います。次章では、この注意点について具体的な例でご紹介いたします。

4.ラダーとSFCの組み合わせ使用の例

ラダーとSFCを組み合わせて使用する例をご紹介いたします。
まず、同期が取られていない例を図 2と図 3に示します。
D0の値をD1に読み出す例です。読み出す処理はラダーで行い、そのラダーの処理を行うリレーをSFCでONするものとします。

図 2 ラダーとSFCで同期が取られていない例(SFC)
図 2 ラダーとSFCで同期が取られていない例(SFC)

図 3 ラダーとSFCで同期が取られていない例(ラダー)
図 3 ラダーとSFCで同期が取られていない例(ラダー)

下記の手順で操作します。

(1)
D0へ1を設定する。
(2)
D1へ0を設定する。
(3)
M0を強制OFFする。
(4)
M0を強制ONする。

手順(3)でM0をOFF→ONすると、次ステップへ移行しM1がONされるので、ラダーのMOV命令が実行されてD0がD1へ読み出されることが期待されます。しかし、この回路ではD0がD1へ読み出されません。
これは、SFCでoM1をしているブロックの移行条件が何もないためです。すでに移行条件が成立しているため、M1がONしてすぐに次ステップへ移行し、M1がOFFするため、ラダーのMOV命令が実行されません。これは、図 4に示すように、移行条件aM2を追加することで解決します。

図 4 ラダーとSFCで同期が取られている例(SFC)
図 4 ラダーとSFCで同期が取られている例(SFC)

実行するとD0がD1へ読み出されることが分かります。M2がONするまで、すなわちラダーでMOV命令が実行されるまで移行しないためです。このように、ラダーとSFCを組み合わせて使用するときには、ラダーとSFC間で同期を取る必要があります。

※SFCの記述の意味は下記のとおりです。

pM0:
M0の立ち上がりで次ステップへ移行する。
aM2:
M2がONで次ステップへ移行する。
oM1:
M1をONする。

5.ラダーとSFCを組み合わせて使用するときの注意点

今回は、ラダーとSFCを組み合わせ使用についてご紹介いたしました。
文中でも述べたように、SFCにはラダーと比較して優れている点もあれば劣っている点もあります。そのため、ラダーとSFCの長所を生かして、下記のようにプログラムを作ることが望ましいと思います。

(1)
全体の大まかな処理は、SFCで実装する。
(2)
計算や入出力の詳細処理は、ラダーで実装する。
(3)
実装するときは、ラダーとSFCの処理の同期に注意する。

以上、簡単ではありましたが、少しでも参考になれば幸いです。

(T.N.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ