スクリプトとは?

RS232Cのインターフェイスを持った一般的な機器は、特殊なプロトコル(通信のやりとり方法)を持たず、比較的簡単にデータを得られる物が多いようです。
例えば、マルチメータを電圧設定にして、乾電池をつないでいるとします。
パソコンからリクエスト電文の R を送ると、”13:24:22, +1.500” という電文がマルチメータから帰ってきました。
最初は測定時刻で、次は乾電池の電圧(1.5V)です。
このような電文をパソコンが受信したら、コンマで区切った2つのデータとしてPCに取り込めたら便利です。
さらに、一定時間毎にこれを自動で繰り返せば、データロガーとなるわけです。

機器からの電文を受信するには、受信電文内のデータとデータを区切るコード(コンマ等)と、電文の終わりを示すコード(リターンコード等)を設定しなければならないし、また機器の初期設定(例えばテスターを電圧レンジにしたり、単位をVにしたり・・・等)も必要です。
さらに、データの取得依頼をする電文を送り、その結果を受け取り、CSVファイルやエクセルに書き込むという作業が必要です。

このような、あるルールで機器と通信を行い、繰り返し測定を行って結果をCSVファイルやエクセルに書き込むという一連の処理を、本プログラムはスクリプト(マクロのようなもの)を実行することで実現させています。

スクリプトはメモ帳で記述でき、命令数も少ないのでしっかり理解してください。

スクリプトの作成方法

【注意】紫色で書かれた部分は今回の高機能版で新たに追加されました。
(フリー版:232エクセルロガー、高機能版:232データロガーwith Mail)

データ(コード)の表記方法について
 スクリプトを作成する前に、データの表記方法について理解してください。

表記 説明
%xx 2桁の16進のコードをあらわします(必ず2桁で設定)
例えば %0d は、10進の13、すなわちリターンコードです
16進表記(0〜9,a,b,c,d,e,f)です a〜fは大文字でも可能
%02
%4a
s ASCIIの1文字です 通常の1桁の半角英数文字や記号
(123ABC,+-!#$/. 等)です
代わりに %xx 表記のコードを使うことも可能です
,
#
sss 文字列です 半角英数、記号が使えます
この文字列の中に %xx 表記のコードを入れることも可能
REQEST CH1%0d%0a
ddd 10進の数値(小数点可能)です
ここでは、0.1〜9999.9 までの値と考えて下さい
1234
59.9
n

10進の1桁の整数(0〜9)です

3
nnn 10進の3桁までの整数(0〜999)です
125

%xx表記で予約されたコード

表記 値(16進) 説明
%CR 0d CR:キャリッジリターンです %0dと同じです
%LF 0a LF:ラインフィードです %0aと同じです
%SP 20 スペースです
送信電文の最初や最後に入れる時やデリミタの指定時にお使いください
%TB 09 タブです %09と同じです
送信電文の最初や最後に入れる時やデリミタの指定時にお使いください
%SX 02 STXです %02と同じです
%EX 03 ETXです %03と同じです
%EQ 05 ENQです %05と同じです
%AK 06 ACKです %06と同じです
%NK 15 NAKです %15と同じです
%%% 25 %の文字を指定するとき、お使い下さい %25と同じです


スクリプト命令

通信用スクリプト

BZ0,BZ1命令は Ver1.3から追加しました   
記述命令 説明 初期値
'
;
シングルコーテーションやセミコロンで始まる行(記述)はコメント行です この行のスクリプトは実行しません メモとして利用ください なし 'コメントです
;これもコメントです
DCD:s デリミタ:受信電文のデータとデータとの区切りコードです
DCD:%xxの表記も可能 コンマ DCD:, が多い
DCD:, DCD:%09
DCD:%SP
ECD:s (End CoDe)終了コード:受信電文の終了コードです
2バイト(例CR+LF)の場合は、どちらか一方で可
電文を受信する時、非ASCII文字は無視するからです
DCD:%CR ECD:%LF
ECD:%03
RTM:ddd (Receive over TiMe) 受信オーバータイム(単位は秒)です
受信命令を出してから ECDまでの電文が受信できない場合
受信を断念するまでの時間です
RTM:9999 RTM:2.5
STM:ddd (Send over TiMe) 送信オーバータイム(単位は秒)です
相手機器の準備待ち等でSTMで設定した時間を経過すると、
送信をあきらめ次の処理に移ります
STM:2 STM:1.5
WTM:ddd (Wait TiMe) ウェイト時間(単位は秒)です
指定した時間だけここで(このスクリプト行で)待機します
なし WTM:10
ITM:ddd (Interval TiMe) 指定した時間(単位は秒)でサンプリングインターバル時間の設定を行います
繰り返し測定のインターバル時間です
ITM:0 ITM:5
PAU (PAUseポーズ):一時スクリプト実行停止命令です
プログラム画面の「次へ」のボタンが押されるまで待ちます
デバッグやマウストリガーとしてお使い下さい
なし PAU
CLR (CLeaR) 受信バッファをクリアします
受信データが不要な場合、この命令で消去します
なし CLR
BZ0 終了コードを受け取る度にブザーを鳴らします
必ず「SSS」の記述の前に一回のみ記述します
なし BZ0
BZ1 ブザーを鳴らします なし BZ1
SSS データ取得リクエストStartルーチン(繰り返し測定の開始位置)であることの宣言文です
時計(サンプリングインターバル用)をスタートさせます
なし SSS
EEE データ取得リクエストEndルーチン(繰り返し測定終了位置)であることの宣言です
SSSでスタートさせた時計のカウントが、ITMで設定した時間になるまで待ちます
タイムアップしたら、エクセルの現在行を次の行に移行します
尚、RCV命令を行って、SET命令を行っていない場合は、SET命令を自動実行します
その後、SSSにスクリプト処理はジャンプします
測定時間が終わるか、作業者が中止するまで、SSSからEEEまでの記述が繰り返し実行されます
なし EEE
SND:sss (SeND) 指定した文字列(sss)を機器に送信します
送信電文には、 DCD: や ECD:で指定したコードは付加されません
(注意)送信する時の制御コードは必ず電文に埋め込んでください
なし SND:RD CH1%CR%LF
RCV (ReCeiVe) ECD:で指定したコードまでの電文(受信電文の終了コードを見つけ、1つの電文とします)が来るまで、ここで電文を受信します
(まだエクセルには書きこみません)
電文の終了コードが来ない場合はオーバータイム(RTMの設定時間)で受信待ちを解除し、次に進みます
なし RCV
SET 今まで受信した電文をエクセルに書きこみます
複数電文受信している場合でも、1電文のみエクセルに書き込みます(Ver1.2より)
1電文とは、終了コードまでの受信電文です
終了コードの無い電文はバッファに残ったままとなります
なし SET

データ整形用スクリプト
以下のスクリプト表記の Dnnn は通信機器からnnn番目に取得する項目を表しています。
例えば通信機器から3番目に取得したデータはD003となります。
また、範囲指定も可能です。Dnnn-nnn表記で項目の範囲が指定できます。
例えば通信機器から5〜10番目に取得したデータはD005-010となります。

尚、nnnで上位桁が0の場合、省略可能です。(例 D003 → D3でもOK、D005-015 → D5-15でもOK)

記述命令 説明
NAM:Dnnn=sss (NAMe) nnn番目に取得されるデータの名称を sss と設定します
名称を設定しない項目の名称は D+項目番号(例 D008)となります
NAM:D12=室温
DEC:Dnnn=n
DEC:Dnnn-nnn=n
(DECimal point) 項目nnnのデータの小数点以下の桁数を n に設定します
設定できるのは、0〜9の整数値です
DEC:D11=3
DEC:D1-5=2
MAX:Dnnn=ddd
MAX:Dnnn-nnn=ddd
項目nnnの最大値を設定します(数値データの場合) 最大値より大きい
データは最大値に変換されます
MAX:D1=9999
MAX:D10-20=15000
MIN:Dnnn=ddd
MIN:Dnnn-nnn=ddd
項目nnnの最小値を設定します(数値データの場合) 最小値より小さい
データは最小値に変換されます
MIN:D1=-20
MIN:D5-9=0.1
ALM:Dnnn<=ddd
ALM:Dnnn-nnn<=ddd
項目nnnがddd以下ならばアラーム発生します(数値データの場合) ALM:D1<=-10.5
ALM:Dnnn<ddd
ALM:Dnnn-nnn<ddd
項目nnnがdddより小ならばアラーム発生します(数値データの場合) ALM:D1<100
ALM:Dnnn>=ddd
ALM:Dnnn-nnn>=ddd
項目nnnがddd以上ならばアラーム発生します(数値データの場合) ALM:D10>=1000
ALM:Dnnn>ddd
ALM:Dnnn-nnn>ddd
項目nnnがdddより大ならばアラーム発生します(数値データの場合) ALM:D11>150.1
ALM:Dnnn=ddd
ALM:Dnnn-nnn=ddd
項目nnnがdddならばアラーム発生します(数値データの場合) ALM:D30=25
ALM:Dnnn<>ddd
ALM:Dnnn-nnn<>ddd
項目nnnがdddでないならばアラーム発生します(数値データの場合) ALM:D10<>50
ALM:Dnnn==sss
ALM:Dnnn-nnn==sss
項目nnnがsssで示した文字列を含めばアラームを発生します
(文字データの場合)
ALM:D10==ERROR

【注意】データが数値の場合のALM設定のみ、1項目に対して2つまでALM設定することができます。

それでは、上記スクリプト命令を使って実際に機器からのデータをPCに取り込むスクリプトを記述してみましょう。
スクリプトはメモ帳に記述していきます。

【注意】スクリプトは任意の作業ディレクトリーに(拡張子はTXT)で作成して下さい。

下の例の@〜Fの番号は実際のスクリプトには不要です。(説明用)
また、この機器は電文の最後に、CR,LFを送る必要があるものとします。


;スクリプト例
@NAM:D1=モータ電圧
@NAM:D2=回転数
@NAM:D3=電源電圧
@NAM:D4=ヒータ電圧
@NAM:D5=照度
@NAM:D6=モータ温度
@MIN:D2=0
@MIN:D5=0
@MAX:D6=999
@DEC:D6=1
;
AALM:D1<8.0
AALM:D1>12.0
AALM:D3<11.0
AALM:D6>=60
;
BDCD:,
BECD:%LF
;
CRTM:5
CSTM:2.5
CITM:8
;
DSND:RESET%CR%LF
DSND:SET CH1-5,0.01V%CR%LF
DSND:SET CH6,0.1C%CR%LF
DWTM:2
DCLR
;
ESSS
;
FSND:GET CH1-5%CR%LF
FWAT:0.2
FRCV
;
GWTM:0.1
GSND:GET CH6%CR%LF
GWTM:1
GRCV
;
HSET
HPAU
HEEE
;


説明(エクセルに書き込む設定を行っているものとします)
@D1〜D6までの項目名称とD2,D5の最小値、D6の最大値を設定し、D6の値を小数点第1位に丸める設定をしています。
AD1,D3,D6のアラーム設定を行っています。
 アラーム時には赤表示やアラームログの記録、アラームメールを送ることができます。
Bで DCD,ECDの設定をします。 
 受信デリミタはコンマ、受信終了コードは LFとしています。
 これらのコードは受信データの処理に使う為にあり、送信時に付加されないので注意下さい。
C受信オーバータイムを5秒、送信オーバータイムを2.5秒、繰り返し測定時間を8秒に設定しています。
D機器の初期化情報を送っています。
 この例では、まずリセット RESET%CR%LF を送っています。
 SET CH1-5,0.01V%CR%LF で機器のCH1〜5までを電圧に、SET CH6,0.1C%CR%LF でCH6を温度にしているところです。
 WTM:2 では、普通は機器側から何らかの応答があるので、これを空読みするため2秒間程待っています。
 この後、CLR で受信バッファ(空読みデータ)をクリアしています。
ESSSで繰り返しのデータ取得ルーチンの開始宣言をしています。
 ここでサンプリングインターバル時間のカウントアップを開始します。
F計測器のチャンネル1〜5(電圧)までのデータの取得指示電文を送り、WTM:0.2で0.2秒待って、
 RCVで機器からのデータの受信処理をしています。
GWTM:0.1 で0.1秒待って、次にチャンネル6(温度)のデータ取得指示電文 GET CH6%CR%LF を送り、
 WTM:1 で1秒待って、RCVで機器からのデータの受信処理をしています。
H最初のFのRCVで 0.15,3.26,7.23,10.2,5.00 という電文が、
 次のGのRCVで、24.5という電文(合わせて6データ)が来たとします。
 SETで、この6ヶのデータをエクセルの現在セルから6ヶ分書きこみ(右方向)ます。
 EEEの前にPAUが入っているのでプログラム画面の「次へ」が押されるまで待ちます。
 PAUは作業者の確認用です。確認が済んだ場合はコメントにしておくと良いでしょう。
 EEEでサンプリング時間後にSSSにジャンプします。
 またエクセルは次の行の最初のセルに移行します。


まとめると、
@が項目情報の登録
Aがアラーム設定
B〜Dが初期化の為の処理
E〜Hが繰り返し計測のための処理→SETのタイミングでエクセル等に取得データを書きこむ
となります。


スクリプトがない時のデフォルト設定
プログラムでスクリプトファイル名を設定しなかった場合の設定は次の通りです。
DCD:,
ECD:%CR
RTM:9999
STM:10
ITM:0
SSS
RCV
SET
EEE

受信データは、コンマ区切りでデータの最後にCR(リターン)がくるという設定にし、
受信オーバータイムは9999秒(来るまで待つ)になっています。
SSSで繰り返し測定開始。データが来るまで(CRを受信するまで)RCVで待ち、(正確には、最大9999間待つ)
受信後SETでデータを表示し(エクセル、CSVファイルに書きこんで)、EEEでエクセルの現在行を次の行に移し、SSSにジャンプする。
という設定になっています。

つまり、受信電文が来たら、コンマで電文を区切ってCSVファイルやエクセルに書きこむ。
これを繰り返す。
という設定になっています。