RS-232Cを介したパソコンによる多点温度計測制御
システムの構築
著者
田畑 功
雑誌名
技術報告集
巻
4 (1998年度)
ページ
25-30
発行年
1999-04
URL
http://hdl.handle.net/10098/7613
RS圃232C を介した
パソコンによる多点温度計測制御システムの構築
第二技術室化学計測技術班 田畑功1
.はじめに 実験室や研究室では、しばしば温度制御を行う 必要性が生じる。これは、多くの化学量や物理量 が温度と何らかの相関があり、結果の再現性を高 めたり、あるいはエンタルビーなど温度相関その ものを計測するにも、温度制御が必要不可欠なた めである。 一方、パソコンの 08 には Windows が普及し、 それに応じてアプリケーションもイベント応答型 が主流になっている。このイベント応答型プログ ラムは、マウスを介してボタンなどのコントロー ルを操作することで所定の処理を行う形をとり、 これは、スイッチやボタンで操作する計測器と同 様なインターフェースを提供するものである。 そこで、本研修では、文献 1"'3 を参考にして、 Windows プログラミング技法を修得した後、 Windows から R8232C インターフェースを介し て温度計測制御ボードをコントロールする方式の、安価な多点温度計測制御システムを開発した。 表 1 HP-TCP の仕様 項目 仕様 電源電圧 +24V(2.0A) 温度入力事。ート数 4 点 測温体入力 K 型熱電対: 0",,+ 1200 0 C J 型熱電対: 0"'+7500 C 制御温度 K 型熱電対: 0"'+1000 0 C J 型熱電対: 0"'+5000 C 温度上限、 4 チャンネJ~分、 7ォトカアラ 下限信号 出力(絶縁) 制御出力 4 チャンネル分、 7ォトカ70 ラ 出力(絶縁) 外部入出力 ホ守ーレート 9600, RS232C 入 4800, 2400, 1200 設 出力 定可 データ長 8t" 'j卜、スト")70 t" 'j卜 1、 ハ。リティなし 周囲温度,湿度 0"'+500 C 、 85%RH 以下 測定精度 ::!::0.50 C::!:: 1digit 制御精度 ::!::0.5%FS::!::0.50 C サン70 リンク守時間 0.5"'128 秒 制御方式 PID 制御または ON/OFF 制御 制御周期 1. 024 秒"'64.512 秒 制御分解能 111024 2. 温度計測制御コントロールボード 本研修で使用したボードおよび電源は以下の通りである。 温度計測制御ボードH
p
.
.
T
C
4
(ROM
Ver.2.01)、ハイピーテック(株) 電源V
8
5
0
B
-
2
4
(
2
4
V
;
2A)、ネミック・ラムダ(株)
リレー G9H・ 2108-DC24~ オムロン(株) 本ボードのマニュアルに掲載されている仕様(オプション仕様は省略)並びにブロック図を、表 1 および図 1 に示す。このボードは、 K 型または J 型熱電対をセンサーとして 4 点までの温度計測・ 制御が可能である。またモニターコンソール(オプシヨン)を利用すると、ボードに直接制御コー ドを入力したり温度を表示したりできる。 ON/OFF 制御では、分単位での ON/OFF.しか出来ない が、 PID 制御では、最短で約 1 秒の制御周期となるため、比較的精度よい制御が可能である。F o
n L3. シリアル通信 Windows プログラムの 開発 Windows ソフトは、 OS を含めて多く のイベントに対応するため、イベントド リブン型のコーデイングスタイルをとる。 本研修では、 Visual
C++
Ver.6.0 とMFC
(M
i
c
r
o
s
o
f
t
Foundation
Class)並び、 にシリアル通信用 Active X コントロー ルを使用した。以下に、 AppWizard を 利用したプロジェクト作成手順、並びにA
c
t
i
v
e
X コントロールを利用した通信用 メンバ関数をコーデイングするためのクラス(ここでは CRS232C クラス)の作成手順を示す。3.
1 通信用プロジェクトおよびクラスの作成 制御出力 RS232C 通信用 ローカルパス 図 1H
P
-
TC4 のブロック図(
l
)
A
p
p
Wizard による新規プロジェクトの作成 ファイル/新規作成/プロジェクトで、 MFCApp
Wizard(EXE) を選び、適当なプロジェクト名 でワークスペースを作成する。作成ステップ 3 で、 Active X コントロールを有効にしておく。なお、 アプリケーションの種類は SDI、プロジェクトのスタイルは MFC 標準スタイルとする。 (2) プロジェクトへの Active X コントロールの追加 プロジェクト/プロジェクトヘ追加/コンポーネントおよびコントロールで、 RegisteredActiveX
Controls フォルダー内の MicrosoftCommunications Control
,
v
e
r
s
i
o
n
6.0 を選択し、プロジェクトに挿入する。この操作により、シリアル通信用 CMSComm クラスが ActiveX コントロー ルで自動生成される。
(
3
)
CForm
View 派生ダイアログの挿入と Active X コントロールの貼り付けダイアログの挿入でダイアログエディタを起動し、電話のマークの MSComm コントロールを貼 り付ける(コントロール ID のデフォルトは IDC_MSCOMMl) 。このダイアログのプロパティを以 下のようにする。 [スタイル]…[チャイルド] [境界線]…[なし] [可視]チェックボックス…オフ [タイトルパー]チェックボックス…オフ 今回作成する通信ソフトでは、メインウインドウ(ビ、ユー)にボタンを配置し、マウスによるクリ ック操作により計測・制御を開始したり、計測した温度をヒ、ユーに表示させたりする。このため、 上記ダイアログ上での右クリックのポップアップメニューから ClassWizard を起動し、新規クラス の作成で、基本クラスを CFormView とする。クラス名は、何でもよいが、ここでは CRS232C と する。
(
4
)
MSComm コントロール操作用メンバ変数の追加 引き続き、 ClassWizard のメンバ変数の追加画面で、 CRS232C クラスに含まれるコントロール ID、 IDC_MSCOMMl をダブルクリックし、メンバ変数名に適当な名前(ここでは m_comml) を 入れる。これにより、 CRS232C クラスに MSComm コントロールのメンバ変数 m_comml が追加される。
GU
円
(5)CRS232C クラスのビュークラスへの関連付け ドキュメントテンプレートを{吏って、 CFormView クラスから派生したクラス CRS232C をビ、ユ ークラスに関連付ける。
(
6
)
CRS232C クラスに OnDraw 関数のオーバーライド
CRS232C クラスにビュー用の OnDraw メンバ関数をオーバーライド。この関数内で、背景の 表示や温度を表示するコードを記入する。 (7) CRS232C クラス GetDocument 関数を実装 本プログラムでは、ドキュメントクラスを介して HP・TC4 制御パラメータ読み書き用関数にア クセスするため、通信用関数を書き込む CRS232C クラスからもドキュメントクラスのメンバ変数 にアクセスできる必要がある。このため、ビュークラスである CRS232C クラスに GetDocument 関数を実装する。3.
2 通信用メンバ関数 作成した CRS232C クラスに通信用メンバ関数を用意する。代表的な通信用メンバ関数をリスト 1 に示す。 PortOpen 関数で設定している通信条件は、 シリアルポート:COMl
通信速度: 9600bps、パリティなし、データ長 8 ビット、 ストップビット長 1 である。また、シリアルポートよりデータを受け取る ReceiveData 関数では、 CR コードを受け取るまで受信を続け るコードとなっている。実際のボードとの通信では、送受信コ ードのエコーパック(ハンドシェイク通信)があるため、その 対応を行う必要がある。3
.
3 ボード制御用パラメータの管理 本プログラムでは、設定温度、上・下限アラーム温度、有効 チャンネルなどの設定パラメータとその読み書き用メンバ関数 を、全て、 CParameter クラス内で定義し、この CParameter クラスをドキュメントクラスのフレンドクラスとした。また、 ドキュメントクラス内で CParameter クラスのポインタ変数 m_param をメンバ変数として定義した。これにより、先に示 した通信用クラス CRS232C 内からドキュメントクラスの m_param を介して制御パラメータの読み書きができる。また、 CParameter クラスをシリアライズ可能クラスにすることで、 複数のメンバ変数の形で定義されている制御パラメータを一度 にファイルヘ読み書き出来るようにした。3
.
4 通信ワーク関数のスレッド化 i且度の計測や制御を行っている聞も、マウスクリックによる ボタンからのメッセージを受け付けることが出来ると、ボタン のクリックで測定を終了したり別のチャンネルでの測定を開始 -27-リスト 1 通信用メンバ関数 BOOL CRs232c::PortOpenO CString str="9600,n,8, 1"; m_comm I.SetCommPort( (short) 1); m_comm I.SetSettings(str); m_comm 1.SetPortOpen(TRUE); return m_comm 1.GetPortOpenO;BOOL CRs232c::PortCloseO
m_comm 1.SetPortOpen(FALSE); if(m_comm 1. GetPortOpenO==TRUE) return FALSE; else return TRUE; voidCRs232c・ :SendData(CStringstr) COleVariant var; var=str; m_comml.SetOutput(var); CString CRs232c::ReceiveDataO COleVariant var; CString str; while(str.Find("¥r")==ー 1){ var=m_comm 1. GetInputO; str+ニvar.bstrVal; return str;
図 2 設定画面 したりすることが自由に出来るため、実際の 計測器と同様な操作感覚となり便利である。 これを実現するには、計測・制御を行う関数 をスレッド関数にしてパックグラウンドで動 作するようにすればよい。本プログラムでは、 MFC の MxBeginThread 関数を使って計 測・制御関数からなるスレッドを生成させた。
3.
5 プログラムの操作手順と実行画面 図 3 メイン画面 本プログラムの設定画面を図 2 に、温度計測・制御中のメイン画面を図 3 に示す。今回作成した 計測制御プログラムは、 ポートのオーフ・ン→ボードとのボーレートの一致→制御パラメ ータの設定とボードへのパラメータ送信→計測・制御スタート の操作手順をとる。測定モードには、複数チャンネルの同時計測・制 御モード、およびチャンネル個別計測・制御モードがあり、個別モー ドでは、チャンネルごとに用意したスタート、ストップボタンにより、 任意のチャンネルの計測・制御が行える。また、オートチューニング ボタンを押すと、 PID 値のオートチューニングを開始し、終了後は、 そのまま PID 制御を続けるか温度計測に移行するかのメッセージを 表示させ、同時にチューニングにより得た PID 値を CParameter ク ラスの該当変数に保存する(図 2 ・②)。 測定した温度データは、経過時間(秒)およびチャンネル 1"-'4 の 温度をタブ区切りで並べたテキストファイルの形で保存する。チャン 5 16.5 0.0 23.5 0.0 10 16.5 0.0 23.0 0.0 15 16.5 0.0 23.5 0.0 20 17.0 0.0 23.5 0.0 25 16.5 0.0 23.5 0.0 30 16.5 0.0 23.5 0.0 35 16.5 0.0 23.5 0.0 40 17.0 0.0 23.5 0.0 45 17.0 0.0 23.5 0.0 50 17.0 0.0 23.5 0.0 55 17.0 0.0 23.5 0.0 60 17.0 0.0 23.5 0.0 65 17.0 0.0 23.5 0.0 70 17.0 0.0 23.5 0.0 75 17.0 0.0 23.5 0.0 80 17.0 0.0 23.5 0.0 85 16.5 0.0 23.5 0.0 90 16.5 0.0 23.5 0.0 95 17.0 0.0 23.5 0.0 100 17.0 0.0 23.5 0.0 ネル 1 と 3 で計測を行った場合のデータファイルの内容を、図 4 に示 図 4 温度データファイルの例 す。-28-3.
6 安全対策 温度制御を行う場合、ヒーターの加熱による不慮の事故に備える必要がある。物理的な対策とし ては、 (1) 水などの熱媒体が何らかの原因で異常に少なくなりヒーターが空だき状態になった場合にも、 ポリ容器などの可燃物に接しないように、ヒーターを浮かせた状態にする。(
2
)
ヒータ一過熱に対処するため、ヒーターの近くに温度ヒューズを設ける o (3) 電気回路にヒューズを設け、漏電など異常電流に対処する。 などが考えられる。また、ソフトウェアにて対処できる安全対策としては (1) 上限・下限アラーム温度を設定し、過熱およびセンサーが液面から離れた場合の過冷却対策を 行う。 (2) センサー断線の検知機能を設ける。 などが考えられる。 今回使用した計測制御ボードには、センサー断線、ボードの異常、あるいは上限アラーム温度を 越えたり下限アラーム温度を下回った場合に、エラーフラグを立てた後ブザーが鳴るようになって いる。一方、今回作成した通信プログラムでは、適時ボードのエラーフラグを調べ、エラー発生時 にはエラー内容をメッセージボックスの形で画面に表示させる。また、ウインドウがアクティブに なっていない場合に備え、タスクパーのウインドウアイコンを点滅させると同時にビープ音を鳴ら し、ユーザーにエラーを知らせるようにした。このビープ音は、パソコンの音量ボリュームを上げ ることで、ボードのブザーよりもかなり大きな音にできるため、ユーザーに注意を促すのに好都合 である。 4. 本システムを用いた温度制御の実例 イじ学系実験室では、水や油などを熱媒体とした恒温槽を用いて、反応や物理化学計測を行うのが 一般的である。そこで、今回作成した温度計測制御システムの性能を調べるため、以下の条件で温 度制御を行なった。 熱媒体:水 3L 、撹枠装置:プロペラ付きモーター ヒーター: 300W 投げ込みパイプヒーター 温度センサー :K 型熱電対 設定温度を 300 C、 500 C 、 700 C とし、水温約 200 C からオート チューニングを行いチューニング終了後はそのまま PID 制 御を続けた結果を図 5 に示す。 PID 制御により一定温度に液 温が保たれているのが分かる。 PID 制御中に計測した温度を 調べると、設定温度 300 C では 30"""'320 C、設定温度 500 C では4
9
.
5
"
"
"
'
5
0
.
50 C、設定温度 700 C では 69.5
"
"
'
"
70.50 C の温度範囲で、 温度制御が行われていることが分かつた。 300 C では、他の温 度よりも制御精度が低く、温度も高めになっているが、これ は、用いたヒーターの容量がこの液量、この温度での制御に 対し大きすぎるのと室温に近いためと思われる。 -29-80 υ 。\ 60 n u A守 ・円回目。ドo
20 40 60 80 100 T 泊le/ m泊 図 5 温度制御結果次に、標準水銀温度計を用いて、このシステムで計測さ れる温度の絶対誤差を調べた。 200 C から 900 C まで 100 C 間 隔で調べた計測温度と標準温度計の読み、並びに両者の差 を表 2 に示す。標準温度計と比較した場合の誤差は、平均 2.80 C であり、本システムでは、高めに温度が表示されるこ とが分かった。この測定誤差は、ボードが使用している周 囲温度センサーの誤差や、メーカーによる検定時のボード の状況と購入後に電源周りを配線してセンサーを取り付け た状況とが異なるためと思われる。 表 2 計測精度 本システム 標準温度計