スクリプトとは?

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

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

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

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

スクリプトの作成方法

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

 表記  説明
%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 表記のコードを使うことも可能です
,
#
ddd 10進の数値(小数点可能)です
ここでは、0.1〜9999.9 までの値と考えて下さい
1234
59.9
sss

文字列です 半角英数、記号が使えます
この文字列の中に %xx 表記のコードを入れることも可能

REQEST CH1%0d%0a

%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と同じです


スクリプト命令

記述命令 説明 初期値
; セミコロンで始まる行(記述)はコメント行です
この行のスクリプトは実行しません メモとして利用ください
なし ;以下より測定開始
DCD:s デリミタ:受信電文のデータとデータとの区切りコードです
DCD:%xxの表記も可能 コンマ DCD:, が多い
DCD:, DCD:%09
DCD:%SP
ECD:s 終了コード:受信電文の終了コードです
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 受信バッファをクリアします
受信データが不要な場合、この命令で消去します
なし CLR
SSS データ取得リクエストStartルーチン(繰り返し測定の開始位置)であることの宣言文です
時計(サンプリングインターバル用)をスタートさせます
なし SSS
EEE データ取得リクエストEndルーチン(繰り返し測定終了位置)のであることの宣言です
SSSでスタートさせた時計のカウントが、ITMで設定した時間になるまで待ちます
タイムアップしたら、エクセルの現在行を次の行に移行します
尚、移行前に受信バッファ内にデータがあれば、そのデータを
エクセルに書込んでから次の行に移行します
その後、SSSにスクリプト処理はジャンプします。
測定時間が終わるか、作業者が中止するまで、SSSからEEEまでの記述が繰り返し実行されます
なし EEE
SND:sss SeND 指定した文字列(sss)を機器に送信します
送信電文には、 DCD: や ECD:で指定したコードは付加されません
(注意)送信する時の制御コードは必ず電文に埋め込んでください
なし SND:RD CH1%CR%LF
RCV ReCeiVe: ECD:で指定したコードまでの電文(受信電文の終了コードを見つけ、1つの電文とします)が来るまで、ここで電文を受信します
(まだエクセルには書きこみません)
電文の終了コードが来ない場合はオーバータイム(RTMの設定時間)で受信待ちを解除し、次に進みます
なし RCV
SET 今まで受信した内容をエクセルに書きこみます
受信した内容とは、終了コードまでの受信電文です
終了コードの無い電文はバッファに残ったままとなります
なし SET


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

【注意】スクリプトはデータロガーに使うエクセルファイルと同じディレクトリーにエクセルと同じファイル名(拡張子はTXT)で作成しなければいけません。
例えば C:\測定\測定1.XLS というエクセルファイルをデータロガーで使う場合、スクリプトファイル名は C:\測定\測定1.TXT となります。


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


;スクリプト例
@DCD:,
@ECD:%LF
;
ARTM:5
ASTM:2.5
AITM:8
;
BSND:RESET%CR%LF
BSND:SET CH1-5,0.01V%CR%LF
BSND:SET CH6,0.1C%CR%LF
BWTM:2
BCLR
;
CSSS
;
DSND:GET CH1-5%CR%LF
DWAT:0.2
DRCV
;
EWTM:0.1
ESND:GET CH6%CR%LF
EWTM:1
ERCV
;
FSET
FPAU
FEEE
;


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


まとめると、
@〜Bが初期化の為の処理
C〜Fが繰り返し計測のための処理→SETのタイミングでエクセルに取得データを書きこむ
となります。

スクリプトがない時のデフォルト設定
プログラムの「データ取得条件画面」で「スクリプト無し」を指定した場合(起動時)の設定は次の通りです。
DCD:,
ECD:%CR
RTM:9999
STM:10
ITM:0
SSS
RCV
SET
EEE

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

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