シーケンス制御講座

デイリーカウント

24時間動作する設備では1日何台生産できたのかカウントする必要があります。日が変わったタイミングで作業者がカウントをリセットしてもいいのですが、ここでは自動で1日ごとの生産数をカウントする方法を紹介します。

作成日:2025年06月12日
更新日:2025年06月12日



タイマーではなく時計機能を使う

1日の生産台数をカウントする場合、1日という区間を作る必要があります。ではこの”1日”という区間はどうやって作るのでしょうか?PLCには時計が内臓されています。もし時計がない場合は、1日という長い時間をタイマーなどを使いカウントしないといけません。これはとても大変です。

また、タイマーを駆使して1日の生産台数などを求める場合いろいろな不具合があります。まずは普通にタイマーを使うとPLCの電源を切るとリセットされます。またタイマーを使うということは常にプログラムを動かしておかないといけません。電源を切るとその時間はタイマーは動作しません。つまり24時間のタイマーを作ったとしても、それは設備の電源が入っている状態で 24時間です。休憩時間やトラブルで電源を切るとカウントされません。1日2時間電源を切ると2時間ずれてしまいます。これでは正常に運用できません。

10秒や1分のような、一般的に短い時間であればタイマーを使って時間を監視したほうがいいのですが、1時間や1日のような長い時間の場合は時計機能を使った方がいいです。PLCの時計は日付と時間を常にカウントしています。それはPLCをストップ状態にしても、電源を切っても正常に動作します。また、PLCの時計は外部から調整もできますし、時計サーバと同期させることもできます。そのため1日や1か月などの長い時間を監視する場合、この時計機能を使った方がいいのです。

PLC時計データの読出し方法

PLCには時計が内臓されていますが、直接目に見える形ではありません。PLCのシステムエリアなどに常時更新しながら保存されているので、そこからデータを転送してくるだけです。

三菱PLCの場合は読出し専用命令があるので、この命令を使います。

例えば三菱PLCで専用命令[DATERD]を使用し「D700」に出力すると次のようになります。

「D700」から7個分のデータレジスタに日付と時間が10進数で転送されます。また、時計を読み出す専用命令がないPLCでも、PLCのシステムエリアから時計データを読込む事ができるタイプもあります。

カウント方法

動作回数や生産数などのカウントにはカウンタよりもデータレジスタの方が使い勝手がいいのでデータレジスタを使います。今回は1日単位で行います。まず最初に1日という単位のデータレジスタのグループを作ります。ここでは「D100」~「D109」の10個のデータレジスタを1日のグループにしています。

まず1日のカウントの前に時計データから今日の日付を読込んでグループの先頭に書き込みます。これで今日カウントするグループが出来上がります。今日の生産数やカウントしたい値はD103に書き込みます。カウントは [INC]命令や加算命令で行います。

日が変わった時の処理

ここが難しい部分です。まずはこのタイミングですることは「 D100」~「D109」のデータレジスタ10個を「D110」へまとめて転送して、「 D100」~「D109」の内容をクリアします。これで今日のカウントも同じように行えます。過去のカウントは「 D110」~へ履歴として残ります。

今回は履歴を1グループしか見ていませんが、転送する数を増やせばデータレジスタがある限り履歴数を増やせます。この例では「 D110」~履歴数分データレジスタを使うので、履歴エリアも検討する必要があります。

次にタイミングです。普通に考えると日付が変わる瞬間に処理を実行すればいのですが、この場合この時間に設備の電源をONしていないといけません。1日1回しかないタイミングを逃すと、もう1日待たないといけません。

設備の電源を入れておかないという問題もあり、この方法は少し難しそうですね。

カウントのグループの先頭にカウントしている日付を入れています。これを使います。つまり現在の日付とグループ先頭の日付を比較し、現在日付が進んでいれば処理を実行し、処理後に現在日付を再度グループ先頭に書き込みます。

大切なのは必ず西暦まで入れて比較することです。そうしないと月が変われば日はリセットされます。年が変われば月もリセットされます。12月の次は1月だからです。今回は比較を使い現在月日がカウント月日より進んでいる場合実行する想定ですが、時間というのは必ず進む物なので単純に照合して不一致で実行してもいいかもしれません。

実際のプログラム

いろいろ解説してきましたが、実際のプログラムで解説しましょう。

プログラムとしてはこれだけです。まず最初に[DATERD]命令を常時実行して、常時「D700」~「D706」にPLC内の時計データが転送されている状態にします。つまり「D700」~には常に最新の時計データが入っていることになります。

先に最後の行を解説しますが、「X0」がONする回数をカウントします。カウント値は「D103」に入ります。

日付が変わったという処理は「D700」~と「D100」~の年月日を比較します。なぜ日だけではいけないのかというと、例えは6月1日に設備の電源を入れて動作させ、その日のうちに電源を遮断し、さらに1か月後の7月1日に設備電源を入れると、同じ日と認識してしまうためです。

上記のようにしておけば、年月日のうち、れか1つでも違えば日が変わったと認識できます。

日が変わった時行うのが、「D100」~10個分のデータレジスタを「D110}~へシフトします。そして「D100」~10個分のデータレジスタの値を0にします。最後に「D100」~に現在の年月日を転送します。

これにより再度「D700」~の年月日と「D100」~の年月日が一致し、上記処理は1回しか実行されない状態となります。再度日が変わると、同じ処理が実行されます。

「D100」~の値をシフトしているので。過去のデータはある程度履歴として残ります。この例ではだいたい10日分残ります。



図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。

Copyright (C) 2010 シーケンス制御講座, All rights reserved.