今回は実際にW-ZERO3[es]を使って、データをCOMポートから取り込む部分を作成してみたい。W-ZERO3[es]では、COM1は内蔵のモデムになっており、USBドライバを組み込むとCOM2として認識された。
☆USBドライバはこちらのものを使わせていただきました。 http://www.softclub.jp/zoro/ce/
今回作成するプログラムはデータを保存するファイル名を引数として受け取り、RS-232Cポート(COM2)から読み出したデータを保存する関数が基本となっている。計測した結果のデータはローカルファイルに保存すると同時にネットワークを経由してWEBサーバにも保存する。
データを保存後、指定された時間後に再度データを読み込む設定をして、232cポートを閉じる。
以上の処理をするプログラムをTcl/Tkで作成した。データの保存、再度実行する部分はこれから作成する予定だ。
proc disptemp {logfile} {
#時刻を取得
set now [clock seconds]
set now [clock format $now -format {%Y-%m-%d %H:%M:%S}]
#com2を232cという名前で開く
set 232c [open {com2:} w+ ]
#232cのポートの通信条件を設定
fconfigure $232c -mode 2400,n,8,1 -timeout 100 -handshake none
#232cに接続された温度計にコマンド「:」をおくり温度データを出力
puts $232c ":"
#232cポートをフラッシュして、データを温度計に確実に送信
flush $232c
#データを取得した場合には保存する処理を実行
while {[gets $232c data] >= 0} {
#データを保存
# ローカルファイルに保存
# ネットワーク上へ保存
}
#予定された時間後に再度実施する設定
#232cポートを閉じる
close $232c
}
|
さて、プログラムを作成した際に、苦労した点を纏めておこう。
1.ポートの名前は com2: この「:」が必要なので注意すること。
2.ポートを開いて、出力しても、温度計にデータが渡らない。
flash コマンドでデータを書き出すこと。
この関数は disptemp $fout のような形で呼び出し、使用することになる。
データは、保存すると同時にデータをテキストエリア text に表示する。
またインターネット上へのデータの転送は、WEBサーバのCGIへデータを渡し、サーバ側でデータを保存することにする。このあたりに付いては次回説明したい。