加工機稼働監視システム-データベース編


概要

前回に引き続き、加工機稼働監視システムにつきまして
今回はNode-redによるデータ収集と表示、およびデータベースへの稼働履歴の登録をご紹介いたします。

光センサによる検出は下記記事をご確認ください。

https://www.synthemec.co.jp/lab_webdir/7.html

WEBカメラとRaspberry Piよる検出は下記記事をご確認ください。

 https://www.synthemec.co.jp/lab_webdir/8.html

内容

1. 構成
2. データの集約
3. SQLiteへのデータ登録
4. 稼働履歴のブラウザ表示
5. まとめ

1. 構成

M5StickCやRaspberry Piから社内ネットワーク経由で送信されたデータの受信、
受信したデータを稼働履歴としてデータベースに登録、その履歴を任意の日付範囲でブラウザで表示、
といった処理はすべてNode-redをベースとして行っております。
また、登録するデータベースには加工機ごとにテーブルを事前に作成いたしました。

使用したツールおよびそのバージョンは下記のとおりです。

Node.js:version 14.17.1
Node-red:version 1.3.4
SQLite:version 3.35.5
DB Browser for SQLite:version 3.12.2.0

2. データの集約

データ集約のフロー概要は下記の通りです。

  【フロー概要】
 1. udp in :データを受信
 2. json  :オブジェクト形式に変換
 3. function:日時と取得データをグローバル変数に格納

日時については以下のプログラムで取得しております。
———————————————————–
var date = new Date();
var time = new Date();
var dateStr =
    “” + date.getFullYear() +
    “-” + (‘0’ + (date.getMonth() + 1)).slice(-2) +
    “-” + (‘0’ + date.getDate()).slice(-2);
var timeStr =
    “” + (‘0’ + time.getHours()).slice(-2) +
    “:” + (‘0’ + time.getMinutes()).slice(-2) +
    “:” + (‘0’ + time.getSeconds()).slice(-2);
———————————————————–

3. SQLiteへのデータ登録

SQLiteの編集を行うためにはDB Browser for SQLiteを使用しますが、
Node-redからSQL文を実行するノードも存在し今回はそちらを使用しております。
また、このノードを追加する際にエラーが発生しましたがVisual Studio Installerから
「C++によるデスクトップ開発」をインストールすることで解決いたしました。

データベースへの登録のフロー概要は下記の通りです。(図1)

  【フロー概要】
 1. inject  :5分間隔でフローを動作
 2. function:msg.topicに登録内容を格納
 3. sqlite  :データベースを指定して登録

「function」ノードでmsg.topicに登録する内容は、
SQL文に入力する内容をそのまま文字列で格納しております。(以下、参考プログラム)
———————————————————–
context.global.ma500hb =
    “insert into MA500HB values(” +
    “‘” + dateStr + “‘, ” +
    “‘” + timeStr + “‘, ” +
    “‘” + context.global.ma500hbR + “‘, ” +
    “‘” + context.global.ma500hbY + “‘, ” +
    “‘” + context.global.ma500hbG + “‘, ” +
    “‘” + context.global.ma500hbSt + “‘” +
    “);”;
———————————————————–
msg.topic = context.global.ma500hb;
———————————————————–

図1. データ集約とデータベースへの登録

4. 稼働履歴のブラウザ表示

ブラウザ表示はHTML等を用いて作成することも可能ですが、
今回はNode-redの機能(ダッシュボード)で行っております。

稼働履歴表示のフロー概要は下記の通りです。(図2)

  【フロー概要】
 1. form    :日付範囲の入力(表示画面から)
 2. function①:選択した日付の開始日と終了日の文字列データをグローバル変数に格納
 3. function②:送信するSQL文を作成
 4. sqlite   :データベースを指定して稼働状態ごとの行数を取得
 5. change  :msg.topicのデータを削除(グラフ化する際に余分な要素が入ってしまうため)
 6. function③:全体の行数を求め、稼働状態ごとの割合を算出
 7. chart   :表示画面に円グラフを作成

図2. 稼働履歴検索と表示

5. まとめ

監視システムを構築するにあたりIoT関連機器を調べると、種類が非常に豊富で新商品の販売も高頻度で行われており
設置環境や構成に応じてその時点で最適な機器を選定することが重要だと思いました。

Node-redについてはデータの集約や取得データの表示など複数のシステムを統括することに長けていると感じました。
また、設計が容易なうえにシステムが複雑化した場合にも自らNode-red内でプログラミングを行うことも可能なため
今後様々な場面で有効利用が期待されると思います。