【脱コピペ】回路を「部品」化せよ。ファンクションブロックでバグをゼロにする

  • URLをコピーしました!
\ 迷子にならないための地図 /

未経験から一人前への
「最短ルート」公開中

独学で「何から勉強すれば…?」と悩んでいませんか?
現場で戦える知識を、体系的にまとめました。

FA電気設計ロードマップを見る

その「コピペ作業」、いつまで続けますか?

「この機械にはエアシリンダが10本あるな。よし、1本目の回路を作って…」 「残り9本分はコピペして、デバイス番号を置換しよう」

X0をX10に、Y0をY10に…。 血眼になって置換作業をしている最中に、ふと思うことはありませんか? 「これ、一箇所でも修正が入ったら、10箇所全部直し直しになるのでは…?」

その予感は的中します。

試運転で「センサーの論理を逆にして」と言われた瞬間、あなたは10箇所すべての回路を修正し、再び転送し、デバッグすることになります。 たとえ世界に一台の特注機械だとしても、これは「時間の無駄」以外の何物でもありません。

なぜそんな無駄が起きるのか。 それは、あなたが回路をその場限りの「使い捨て」にしているからです。

私は9年の設計経験の中で、この無駄を徹底的に排除してきました。

プロの設計者は、単純な繰り返し作業を嫌います。回路を「部品(FB)」に変えて資産化します。一度作った「完璧な部品」をポンと置くだけ。中身を知らなくても動く。 これが、バグを根絶し、残業をゼロにする「構造化プログラミング」の真髄です。

今回は、脱・初心者のための「ファンクションブロック(FB)の作り方とメリット」を解説します。


目次

FBとは何か?「たこ焼き」で理解せよ

「ファンクションブロック(FB)」と「インスタンス」。 このカタカナ語を聞いただけで拒絶反応が出る人もいるでしょう。 しかし、これは「たこ焼き」で考えると一発で理解できます。

FB(ファンクションブロック)を「たこ焼き器の金型」、インスタンスをそこから量産された「たこ焼きの実物」に例えた解説図。一つの定義から複数の実体が作られる様子をイラスト化。

FB(定義)=「たこ焼き器(金型)」

FBとは、「どう焼くか(どう動くか)」という仕組みそのものです。 たこ焼き器(金型)を想像してください。これだけでは食べられませんし、お腹も膨れません。あくまで「作るための道具(設計図)」です。

インスタンス(実体)=「完成したたこ焼き」

その金型を使って、ポンと作り出された「実物のたこ焼き」。これがインスタンスです。 プログラムの中で実際に配置し、動作するのはこの「たこ焼き(インスタンス)」の方です。

現場でのイメージ

メインのラダー回路(テーブル)の上に、 「シリンダ制御たこ焼き1(fbCyl1)」 「シリンダ制御たこ焼き2(fbCyl2)」 …と、同じ味のたこ焼きを10個並べていくイメージです。


「FUN」と「FB」の決定的違い

ここで、新人が必ず混同する「FUN(ファンクション)」についても触れておきましょう。

PLCのFUN(ファンクション)とFB(ファンクションブロック)の違いを示す比較イラスト。FUNは「包丁(調理器具)」として描かれ、入力された野菜が一瞬で切られて出力される(記憶なし)。FBは「たこ焼き」として描かれ、生地が焼けていく「焼き加減(状態)」を内部メモリとして記憶しながら、時間経過とともに完成品へと変化していく様子が図解されている。
  • FUN(Function):ただの「調理器具」
    • 特徴: 記憶(メモリ)を持ちません。
    • 例: 包丁(切るだけ)、ミキサー(混ぜるだけ)。
    • PLC命令: 足し算(ADD)、転送(MOV)。
    • イメージ:「材料を入れたら、すぐに加工されて出てくる」。それだけです。
  • FB(Function Block):進化する「たこ焼き」
    • 特徴: 記憶(メモリ)を持ちます。
    • 例: たこ焼き(中まで火が通ったか、今の温度は何度か、という「状態」を覚えている)。
    • PLC命令: タイマー(TON)、カウンタ(CTU)。
    • イメージ:「時間経過」や「順序」を管理したいなら、記憶できるFBが必要です。

【現場の鉄則】

その瞬間の計算だけならFUN。

シリンダやコンベアの動き(シーケンス)を作るなら、迷わずFBを選んでください。


構造化設計 3つのメリット

なぜ、面倒な設定をしてまでFBを作るのか? それは、コピペラダーには絶対に真似できない3つの革命的なメリットがあるからです。

① バグが激減する(品質保証)

1個のFB(金型)を徹底的にテストして「合格」させれば、それを100回使い回してもバグはゼロです。

「コピペミス」や「置換漏れ」という概念そのものが消滅します。

② プログラムが「読書」になる(可読性)

メインのラダー画面から、ごちゃごちゃした接点回路が消えます。

代わりに「シリンダ制御」「モーター制御」と書かれた「意味のある箱」が並ぶだけになります。 他人が見ても、「あ、ここでシリンダを動かしているんだな」と一目で分かります。

③ 変更に強い(メンテナンス性)

ここが最強のメリットです。 もし「シリンダの監視時間を変更したい」となった時、どうしますか?

  • コピペラダー: 10台分、あちこちに散らばった回路をすべて修正して回る必要があります。修正漏れのリスクも大です。
  • FB(たこ焼き): 「金型(FBの中身)」を1箇所直すだけ。 そうすれば、その金型から作られた10個のたこ焼き全てが、一瞬で「新しい焼き方(修正版)」に変わります。

【判断基準】どこまでFBにする?「ロボットと司令官」の法則

PLCプログラミングにおけるFB設計の良し悪しを「ロボットと司令官」に例えた比較イラスト。左側(成功例)は、賢い司令官(ラダー)が単純な命令を出し、量産型ロボット(FB)がそれに忠実に従う様子。「仕様変更に強い」と示されている。右側(失敗例)は、ロボットの脳内に複雑な作戦(シーケンス)が埋め込まれており、司令官が困惑している様子。「仕様変更で地獄を見る」と警告されている。

FBのメリットは分かった。でも、いざ作るとなると迷いますよね。

「よくある『掴んで・回して・置く』という動作は、全部まとめて1個のFBにすべきか?」 「特注の一品モノの機械でも、わざわざFBを作る必要があるのか?」

答えは決まっています。 迷った時は、「それは『ロボット』か? それとも『司令官』か?」と問いかけてください。

① FBは「ロボット(Robot)」である

シリンダ、モーター、ハンド…。これらは、どんな機械に取り付けられても「指令が来れば動く」という能力自体は変わりません。 これらは「量産型のロボット兵」です。

  • 判定:FB化せよ(◎)
  • 理由: ロボットは量産(コピー)できるから。

たとえ世界に一台の特注機でも、シリンダが10本あれば、それは「同じ型のロボットが10体いる」のと同じこと。 あなたは「完璧なロボット(FB)」を1体設計して、あとは10体コピー(インスタンス化)して並べるだけ。 10回プログラミングする必要はありません。作業時間は1/10です。

② ラダーは「司令官(Commander)」である

逆に、「ハンドで掴む」→「反転機を回す」→「ハンドで離す」といった自動運転の流れはどうでしょう?

これは戦況(機械の仕様)によって、「今回は待て」「作戦変更」とコロコロ変わる部分です。 これはロボットではなく、ロボットに命令を出す「司令官」の仕事です。

  • 判定:ラダー/SFCのままでよし(×)
  • 理由: 作戦(シーケンス)は現場で変わるものだから。

【失敗例:ロボットに作戦を埋め込むな】

もし一連の流れを丸ごと1個のFBにしてしまうと、「ロボットの脳内に作戦を焼き付ける」のと同じことになります。

「ちょっと待機時間を変えて」と言われただけで、あなたはロボット全員の脳(FBの中身)を改造しなければなりません。

「ロボット(FB)」は命令待ちに徹し、「司令官(ラダー)」が矢継ぎ早に指令を出す。

これが、仕様変更に強い最強の布陣です。

タイミングはいつ? プログラミング界の「3回ルール」

「でも、2回出てきたくらいでFBを作るのは面倒くさい…」 その感覚、正しいです。早すぎるFB化は、かえって手間を増やします。

プログラミングの世界には「Rule of Three(3回ルール)」という有名な格言があります。(出典:Martin Fowler『リファクタリング 既存のコードを安全に改善する』)

「3度目の繰り返しでリファクタリング(FB化)せよ」

  1. 1回目: 普通に書く。(まだただの機能)
  2. 2回目: コピーして書く。(重複に「うっ」となるが、まだ許す)
  3. 3回目: 「待てよ、これは増えるぞ」と確信した時。ここで手を止めてFB化します。

もちろん、2回目の時点で「あ、これは次の現場でも絶対に使うな」と予感したら、その時点でFBにしてしまうのがベストです。

「未来の自分が楽になるかどうか」。常にその視点を持ってください。


実践! FBの作り方「禁じ手」だけは守れ

最後に、実際にソフト(GX Works3など)でFBを作る時の「設定」と「中身」の鉄則です。

画面を開くと「VAR_INPUT」や「クラス」といった英語が出てきて面食らうかもしれませんが、恐れる必要はありません。
これらも全て、先ほどの「たこ焼き」で翻訳できます。

覚えるのは3つだけ

クラスたこ焼きでの役割実際のプログラム外から見える?
VAR_INPUT材料(タコ・生地)入力 (外からデータを受け取る)見える
VAR_OUTPUT完成品(お皿)出力 (外へデータを渡す)見える
VAR鉄板の中内部変数 (計算用のメモ)見えない
  • VAR_INPUT(材料): 外部からデータをもらう端子。これが無いと動きません。(例:i_Start
  • VAR_OUTPUT(完成品): 外部へデータを渡す端子。計算結果や完了信号です。(例:o_Done
  • VAR(鉄板の中): 内部で計算するためだけのメモ帳。外からは見えません。(例:w_Timer

まずはこの3つさえ選べれば、FBは動かせます。

【最重要】やってはいけない「禁じ手」

FBの中身を書くとき、絶対に守らなければならない鉄則があります。

【現場の鉄則】 FBの中で「グローバル変数(X0, Y0, D100など)」を直接書いてはいけない。

もしFBの中に「X0(起動ボタン)」と書いてしまったらどうなるでしょう? そのFBは、「X0が押された時」にしか動かない欠陥品になります。2本目のシリンダ(X10で動かしたい)には使えません。

これは、ICチップの中から勝手にリード線を延ばして、基板の特定の場所(X0)にハンダ付けしてしまうようなものです。 FBの中では必ず「入力変数(i_Start)」を使い、外からX0なりX10なりを接続するようにしてください。


まとめ:資産を作ろう

  • コピペラダーは「消費」です。その場しのぎで、将来の自分を苦しめます。
  • FBは「資産」です。一度作れば、一生あなたの武器になります。

シリンダ制御、コンベア制御、警報処理…。

よく使う回路をどんどんFB化して、自分の「必殺技ライブラリ(カスタムチップ集)」を貯めていってください。 ライブラリが充実すればするほど、10年後のあなたの仕事は、今の10倍速くなります。

💬 更新情報を X (Twitter) で発信中!

記事の更新通知や、現場で役立つ「電気制御の小ネタ」をツイートしています。 また、「記事のここが分からなかった」「現場でここが困っているけどどうしたらいい?」といった疑問があれば、DMで募集しています!個別のトラブル相談も、ブログのネタにさせていただけるなら大歓迎です!ぜひフォローして気軽に絡んでください!

左側はスパゲッティコードと絡まった配線に苦しむエンジニア(過去のコピペ地獄)、右側は整理されたファンクションブロック(FB)のモジュールを使って自信を持って設計するエンジニア(未来の構造化設計)。PLCプログラミングの進化を対比させたアイキャッチ画像。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次