工場や商業施設など大規模な現場の場合、遠隔・集中監視のため設備員用の監視システムが使用されている。メーカーとしては横河電機やアズビル、富士電機製のものなどがあり、それぞれ自社システムにて構築されているものがほとんどだ。しかしさまざまなものがオープンソース化されている現在、メーカーでなければ構築できない、という時代は過ぎ去るのでないかと考えている。
今回、arduino、NODE js、Javascript等を用いて簡易的な監視システムを作ってみることにした。
まず一般的な監視システムの一例を紹介する。
現場機器からの信号をI/Oカードで受け取り監視サーバとデータのやり取りをする。
そしてクライアントPCから監視サーバへアクセスし監視、操作を実施する。
クライアントPCは通常複数あるのが一般的で、一台壊れても監視そのものには影響がない。
続いて今回構築する簡易の監視システムはこのようになっている。
監視サーバの代わりにPC内でNODEjsを動かす事にした。これによりarduinoとシリアル通信しつつjavascriptを用いてウェブブラウザでやりとりができる。ローカルの機器とはarduinoと接続する。ちなみにOSはウインドウズ10で実施。
手順としてはまず、NODEjsをインストールするところから始める。
http://nodejs.jp/よりダウンロードできる。
下記のようなコマンドプロンプト画面で操作する。
NODE JSはさまざまなモジュールをダウンロードできる機能がある。
シリアル通信などをするための準備段階として下記コマンドでインストールする。
npm install express
npm install serialport
npm install socket.io
続いてJavascriptファイルと監視画面のhtmlファイルを作っていく
ファイル名:index.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var SerialPort = require('serialport');
var serial = new SerialPort('COM3',{ //MACだとポート名が異なる
baudrate:74880 //alduinoとの通信速度
});
app.get('/',function(req,res){
res.sendfile('index.htm'); //htmlファイルを呼び出す
});
serial.on('open',function(){
console.log('open'); //コマンドプロンプトへ出力
});
serial.on('data',function(data){
io.emit('recvmsg',data.toString()); //温度データ取り込み
});
io.on('connection',function(socket){ //alduinoへ信号出力
socket.on('sendmsg',function(msg){
console.log('socket.on');
serial.write(msg,function(err,results){
});
});
});
http.listen(3000,function(){ //http://localhost:3000/へ出力
console.log('listen 3000 port');
});
続いて監視画面となるHTMLの作成
ファイル名:index.htm
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>arduino control</title>
<style>
article, aside, dialog, figure, footer, header,
hgroup, menu, nav, section { display: block; }
</style>
</head>
<body>
<script>
document.write("temperature");
</script>
<h1>hello</h1>
<br></br>
<button>on</button>
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
$('button').click(function(){
socket.emit('sendmsg','1');//ブラウザのボタンから1を出力
});
socket.on('recvmsg',function(data){
$('h1').text(data);//ブラウザへ温度を出力
});
</script>
</script>
</body>
</html>
これで準備はOK、かなり簡単なインターフェースだが、PC側の準備はこれで問題ない。
あとは後編にてarduino IDEのプログラムと回路構成について説明する。
→後編は
こちら