現場Troubleshootingする人どんな思考回路であなたのプログラムを推測すると思いますか?普段私はこうな結果がほしい->デバイスメモリを作成し->プログラム->結果(少なくとも私はこうです。)ですが、現場の人は?例えば、IOならまずこのOutputはどこからきてる?そして長い長いのCross-refernceの旅が始まり、最後のこのOutputの回路が見つかってあれ?前はなにを考えましたっけ?そしてまた繰り返し、デバイスメモリをさかのぼるの地獄ループ。
ここでまず個人的意見を話しします。
―ラベルを使えましょう
国産PLCに慣れたみんなさんにとってちょっとえ?と言われるかもしれせんがラベルを使うようにしましょう。
M0:=True;
Pump1.SW:=True;
どっちの方がわかりやすいでしょうか?名前つけは哲学的なもので、メモリを名前につけてることによって自分の頭にこのプログラムの中にこのメモリはなんのために存在するでしょうか?という質問がもう一度深く考えることができます。
➖間接アドレスをやめましょう
プログラムは最終的には機械がみるものではなく人間がみるものです。Omronには*マークのPointerあり、三菱にはZIndexがあり、SiemensにもP#があります。それならのPointerを使うと確かに楽?そうにデータをアクセスできますし賢くに見えますよね!実は違います。現場の人はあなたを殺したいくらい呪ってるだけです。現場がトラブルが出てきてそのデバイスをまた何Bit目を数えたり間接アクセスするアドレスを計算したりそれはイライラでたまりません。しかも結果的に効率が悪いです。しかも間接アドレスのプログラムの修正は非常に気をつけないといけなくてちょっと間違いたらもうメモリが一切変な数字に書き込まれます。だから…ちょっと面倒くさいと思うかもしれないけd間接アドレスを使うのはやめましょう。
➖続・どうしても使えたいのなら配列をしましょう
配列はいまのどのメーカーのPLCもSupportすると思います。中のIndexをいじれば何番目のデータをアクセスしてるのかある程度把握できます。
例えば三菱のPLCで MOV K10 D10Z0 だとすれば、Z0の値によって実際アクセスしてるのアドレスが違います。そして不幸なこと、もしZ0間違って変な数字いれたら、わけわからないのアドレスが書き込まれます。配列使うことによってまず使うのメモリ量が強制的に決められます。そうすると誤ってたのアドレス踏んでしまうの心配がありません。ですが、逆にArray[i]のIndex i はちゃんと適切な値を入れないと、もし配列以外のINDEXをアクセスしようとするとPLCが止まることもあります。(シーメンスの場合)
もちろん、レシピとかパラメータなどは間接アドレスは全然問題がありません。ですが、メインの制御はやっばり大人しくしましょう。
シンプルなものは美しい。
➖プログラムは再利用できるように作りましょう
多分うん?なにいってるの?と聞かれる方も多いと思いますが、プログラムは再利用できるのはわざわざ毎回も新しく作るー>デバックするー>くそ!なんでうまく動かない?!怒りの繰り返しが避けます。そのためにどうすればいいですか?まずGlobal変数はやめましょう。PLCをずっとやっていた方はGlobalとLocal変数の概念よくわからないのも多いですが、いわゆる:
何処でも使えるのデバイスーこれはGlobal
自分のBlockしか使えないデバイスーこれはLocal
これはかシーメンスだけできるものではないです。GX-worksにも設定すればこんなこともできますので、慣れないとかは言い訳です。Global変数を使わないってことはたとえ他のプロジェクトからこのプログラムを持っていっても現在のプロジェクトが使ってるデバイスと被ることがありません。
プログラム再利用できるってことは現場にいる人たちがまた別の人間が作ってものを考えなくてはならないのことを避けることができます。
➖小さいなプログラムを組みましょう
小さいなプログラムを作ってたくさん組んで最後に大きなプログラムになります。一つのBlockが任された仕事はできるだけ少なめしましょう。そうすると変更したとしても他のBlockへの影響が減ります。現場の人と遠距離操作してるときもこのBLOCKのなかだけをみて!と言い切れる。
➖自分のツール使いこなせるようにしましょう
常にマニュアルを読み、ツールをちゃんと理解できるようにしましょう。中国の孫子曰わく、知己知彼、百戦百勝。
PLCの世界では機械止まるってことはお金が生まれなくなるってことですので、できるだけメンテナンスの人にわかりやすくプログラムを作りましょう。