Top/EBUG勉強会/20260228_河豚板IoT

河豚板IoT

EBUG 第96回会合 2026年2月28日
川俣吉広、kaw@on.rim.or.jp

精密金属加工を行っている工場で使用されている、河豚板を用いた温度測定システムについてご紹介します。

背景

Display.jpg

この工場では、鉄道・航空関連の工作機械部品の加工を行っており、そのためには厳密な温度管理が求められる。

従来、それらの測定・管理は人手により行っていたが、2019年に河豚板上に構築した温度測定システムを導入し、温度の管理作業を効率化した。

概要と特徴

システム構成

SoftScheme3.png

河豚板LiveUSB上に以下の各機能を実装した。

画面構成

disp_dashboard.png
disp_graph.png
disp_ctrl.png

設計方針

シンプル & 丈夫で長持ち

ハードウェア

データ処理サーバ

当初現在
本番機ThinkPad G40:
Pentium4 2.4GHz, Mem 512MB
USBブート不可: LiveCDで起動+LiveUSBで運用
DELL Latitude D820:
Celeron M 1.6GHz, Mem 2.5GB
開発 兼
予備機
ThinkPad R52e:
CPU: PentiumM 1.7GHz, Mem: 800MB
vmm/vmd guest:
Core i7-9750H 2.6GHz, Mem 2GB

TempSensors1.pngTempSensors2.png
通常時障害発生時

メーカー製センサ

Sensor.jpg

内製(自作)センサ

システムに組み込むセンサのプロトタイプとして2式製作。開発サイトにて継続運用中。

pix1.jpgpix3.jpg
pix2.jpgexterior.jpg

実装条件

構成

block.png

開発環境:

設計上の課題と解決

動作寿命の延長

powertest.jpg

測定精度の向上

ソフトウェア

データ処理サーバ

全体の構成

SoftScheme2.png

冒頭で紹介したように、

の要素から構成される

データの取得と処理

データの取得 - enc_*.pl (例: enc_ondotori.pl)
データソースから測定値取得 → 所定のフォーマットに変換した上でUnixドメインソケット経由で decdemux.pl に送る
enc_amedas.plは、気象庁アメダスの気温データを取得するスクリプト。アメダスも「センサーの一種」として定義。
処理の中核 - decdemux.pl
enc_*.plからのデータを受信
・データを内部処理に適した形式に変換(Decode & Demultiplex)
・生データを処理
 ・4サンプルの平均化(8266センサの場合)
 ・生データ→センサごとの補正値で校正
 ・FIR/IIR処理 (トレンド計算・グラフ平準化)
 ・Min/Max保持
 ・重複受信データのuniq
 ・etc...
・各センサは設定ファイルで定義された特性を持つインスタンスとして生成され、上記の値を保持する
・処理後の値はデータ保存部に送られ、persistentな値として記録される
処理の制御 - decdemuxctl.pl
dexdemux.plの制御ユティリティ
・設定ファイルの再読み込み
・全グラフの強制描画
・Min/Max値リセットのトリガ
・ログファイルへの追記 / ステータスラインへの表示
・動作の一時停止・再開 (停止中は受信データをバッファリング)
・データ保持部のファイルの再オープン
・センサーデータの個別書き込み
・decdemux.plの停止
これらの機能も「制御コマンド」としてdecdemux.plに送られる。
計算・統計処理 - enc_calcstat.pl
各センサからのデータを元に計算を行うためのプロセス。計算結果は仮想的なノードの測定値としてdecdemux.plにフィードバックされる
週間天気の処理 - fetch_wkwx.pl
気象庁の予報データを取得し、週間天気のHTMLを生成する
・予報文をパースし天気アイコンを生成
 例: 予報文「曇り」→ アイコン <雲(0)> ... 数字はアイコンサイズ
  : 予報文「曇り時々雨」→ アイコンの並び <雲(0)><雨(-1)>
  : 予報文「晴れのち曇り時々雪」→ アイコンの並び <太陽(-1)><→><雲(-1)><雪(-2)>
・最低・最高気温
・日付の色 (土日休祝の計算)

処理済データの保持・アーカイブと取り出し

グラフ生成

ウェブUI

時間軸の表記法 - dt-syntax

このシステムでは、ある時点を暦や時刻に沿って指定することが多いので、それを直感的に表現しやすい記法 dt-synax (Day Time Syntax)を考案し、ライブラリも作成した。

文法

書式
/home/sensor/include/dtparser.pm
説明
Perlモジュールdtparser.pmはISO 8601風の日付・時刻の表記形式dt-syntaxを提供する。dt-syntaxの書式は以下のとおり
<dt-syntax> ::= <日時> | <日時><期間>

<日付>の部分はある時点を表わす。基本的にはYYYY/mm/dd,HH:MM:SS形式の表記となるが、以下の定義に示すように省略表示が可能。また、いくつかのキーワードが定義されている。

<日時> ::= <日付>","<時刻> | <日付> | <時刻> | "thisyear" | "thismonth" | "thisweek" | "today" | "now" | <Unix Epoch>
<日付> ::= <西暦>"/"<月>"/"<日> | <西暦>"/"<月> | <月>"/"<日>
<西暦> ::= <4ケタの符号なし整数>
<月> ::= <1~2ケタの符号なし整数>
<日> ::= <1~2ケタの符号なし整数>
<時刻> ::= <時>":"<分>":"<秒> | <時>":"<分>
<時> ::= <1~2ケタの符号なし整数>
<分> ::= <1~2ケタの符号なし整数>
<秒> ::= <1~2ケタの符号なし整数>
<Unix Epoch> ::= <符号なし整数>
thisyear, thismonth, thisweek, todayは、今年、今月、今週の日曜、今日、それぞれの最初の秒を表す。
nowはこのモジュールがset_basetime関数で初期化された時点を表している。「パーザが呼び出された今現在」という意味ではないことに注意。これは、dt-syntaxのパーザがある時間間隔を置いて呼び出された場合、その途中で月や日などが変わり、その結果、同じ引数が異なる結果を返してしまうことがないようにするためである。
なお、Unix Epoch以外の表記はこのモジュールが呼び出された環境のローカル時間を表わす。ローカルタイムゾーンの明示的な表記は現時点では定義されていない。

<期間>の部分は、<日付>からある時間だけ離れた時点を表す。

<期間> ::= <オフセット> | <期間><オフセット>
<オフセット> := <数値><期間単位>
<数値> ::= <符号><符号なし整数> | <符号なし整数>
<符号> ::= "+" | "-"
<期間単位> ::= "Y" | "m" | "d" | "V" | "H" | "M" | "S"

<期間単位>はそれぞれ、年、月、日、週、時、分、秒を表わす。Unixのstrftime(3)関数の表記に準拠している。

<符号>は、+が未来方向、-が過去方向を表わす。 上の定義から分かるように、期間はオフセットを1回以上繰り返すことができるがこの場合の符号の意味は以下のようになる。

-1m3V12H は -1m-3V-12H と等価
+1m3V12H は +1m+3V+12H と等価
+1m-3V12H は +1m-3V-12H と等価
つまり、オフセット部の符号が省略された場合は、直前の符号を引き継ぐ。
12:3 ... 本日の12時3分0秒

today-1V+15H30M ... 一週間前の日の15時30分0秒

1600788674-2V+15d ... 2020年9月24日 0時31分14秒 (日本標準時)

使用例

dt-syntaxは、システムの随所で使われているが、手動でグラフを生成するコマンドspangraph.shを例に説明してみる。
spangraph.shは、コマンドライン引数でdt-syntaxを用いて描画期間を指定する。

spangraph.shの書式
spangraph.sh [オプション] 開始日時 終了日時|描画期間 センサ番号[,センサ番号...]
使用例
2020年8月のセンサ15のグラフを生成
$ spangraph.sh 2020/8 2020/9 15
または
$ spangraph.sh 2020/8 1m 15
先々月の初日から一週間分のセンサ7,センサ8のグラフを生成
$ spangraph.sh thismonth-2m 1V 7,8
2020年のセンサ3のグラフを月毎に生成
$ jot 12 | xargs -I % spangraph.sh 2020/% 1m 3
背景色を白色に変更し、測定データとトレンドをプロットする本日分のグラフを生成
$ spangraph.sh -c bg-white -p with-trend today now 15
ファイル名を「年月日,時分」形式に変更して昨日分のグラフを生成
$ spangraph.sh -o %y%m%d,%H%M today -1d 15

ユーザの声

終わりに

このシステムは、2020年の運用開始から、途中、おんどとりクラウドの障害や、気象庁サイトのリニューアルなど、いくつかのイベントがありましたが、現在に至るまで、年一回のOSアップグレードを行いながら、不具合もなく運用できています。

安定した運用ができている要因として、以下のようなこと考えられます:

クライアントサイドでの高機能化(マウスホバーで数値表示)や、セット増設などの課題も提示していただきましたが、もし、それらを実際に行う際は、基本の設計方針を保ちつつ、機能強化を行ってゆければと思っています。

recent(50)
2026-03-05 2026-03-01
  • EBUG勉強会/20260228_河豚板IoT
2026-02-09 2026-02-03 2026-01-21 2026-01-06 2025-12-30 2025-11-22 2025-11-13 2025-11-07 2025-10-30 2025-10-20 2025-09-05 2025-08-29 2025-05-31 2025-05-21 2025-05-18 2025-05-06 2025-05-04 2025-05-03 2025-04-23 2025-04-16 2025-04-01 2025-03-24 2025-02-18 2025-01-13 2025-01-11 2024-12-07 2024-11-30 2024-11-12 2024-11-08 2024-10-21 2024-10-18 2024-10-16 2024-09-22 2024-08-25 2024-07-31 2024-07-23 2024-05-24

Attach file: fileexterior.jpg 15 download [Information] fileblock.png 22 download [Information] fileblock.fig 9 download [Information] fileCRcurve.png 22 download [Information] fileCRcurve.fig 8 download [Information] filedisp_graph.png 23 download [Information] filedisp_dashboard.png 25 download [Information] filedisp_ctrl.png 24 download [Information] fileSensor.jpg 21 download [Information] fileDisplay.jpg 19 download [Information] filepowertest.jpg 22 download [Information] fileSoftScheme2.png 31 download [Information] fileSoftScheme3.png 21 download [Information] filepix2.jpg 23 download [Information] filepix3.jpg 16 download [Information] filepix1.jpg 30 download [Information] fileSoftScheme3.pdf 13 download [Information]

Front page   Edit Freeze Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes
Last-modified: 2026-03-01 (Sun) 20:13:52