6.Data Logプログラム

 Station Executive.viが最上位のData LogプログラムVIで,各データ収集Stationのハードディスクにおさめられています。管理用のCenter StationのMain Consoleプログラムにより,VIサーバーを使って各データ収集Stationのメモリに呼び出され,実行されます。

  1. 複数のデータ収集Station間のScan開始の同期は,Front Station(Master)からのScanクロック出力のON/OFFでとられます。
  2. 各Station内での複数DAQ Device処理間の「起動の同期」/「停止の同期」は,ランデブー関数を使ってとられます。
以下の説明で,フロントパネルアイコンフロントパネルアイコンの図がついている箇所は,各VIのフロントパネル/ダイアグラム説明にリンクします。

6.1 Station Executive.viで使われているサブvi他の説明

6.1.1 サブVIs

(1)Input Convert Coefficient.vi フロントパネルとダイアグラムの説明 (2)Ignore Error.vi フロントパネルとダイアグラムの説明 (3)Update Station Executive Clu.vi フロントパネルとダイアグラムの説明 (4)Write State to UDP.vi フロントパネルとダイアグラムの説明 (5)Launch RT monitor.vi フロントパネルとダイアグラムの説明 (6)Launch Acq.vi
(7)No TMO Error.vi フロントパネルとダイアグラムの説明
Real-Time Trend.vi フロントパネルとダイアグラムの説明 (VIサーバーで並列に独立起動されるVI)
--------------------

6.1.2 グローバル変数

(1)Command Global フロントパネルとダイアグラムの説明 (2)Converter Coefficient フロントパネルとダイアグラムの説明 (3)Publish Data Global フロントパネルとダイアグラムの説明 (4)Trigger Global フロントパネルとダイアグラムの説明
--------------------

6.1.3 Typedef

(1)Device Parameters.ctl フロントパネルとダイアグラムの説明
  各DAQ Deviceに接続された複数チャンネルのパラメータ表で以下を含みます。
(2)Device Live Data.ctl フロントパネルとダイアグラムの説明
  Stationにある各Deviceでのデータ収集Statusを,フロントパネルに表示するためのクラスタ表示器です。

--------------------

6.1.4 LabVIEWライブラリ

vi.lib\Utility\notifier.llb中にあるもの vi.lib\Utility\error.llb中にあるもの

目次に戻る


6.2 Station Executive.viフロントパネルとダイアグラムの説明内容説明

6.2.1 動作概要

 Station Executive.viは,データ取込み用VIであるLaunch Acq.viと,4つのステートからなる管理用のループ処理,トリガモードの際のTCP通信用のループ処理からなります。

  1. Input Convert Coefficient.viで,モニタデータを物理量に変換するための変換表ファイルを読み込みます。
  2. Notifierを用いて,事前の下準備ができるまでデータ取込み用VIであるLaunch Acq.viを待たせます。
  3. 以下の4つのステートをもつ管理用ループ処理を実行します。上述のLaunch Acq.viの待機状態は,このステート実行により解除されます。
    トリガモードの場合は,並行的に後述のループ処理を行います。
--------------------

6.2.1.1 「Initialize」ステート

初期化ステートで,このステートでは,
  1. Stop AcquireやSlave ReadyパラメータをFalseに初期化します。トリガ関連のデータであるAbsolute Index, Base Rateを0に初期化します。
  2. Trigger Parameter.EnableがFalse,すなわちトリガモードでないならば,データ収集が即時始まるように,グローバルの「Triggered?」をTrueにします。
  3. データ仮保存用のディレクトリe:\dataがあるかどうか調べます。なかった場合にはエラーコードをIgnore Error.viでキャンセルし,ディレクトリを作成します。
  4. Update Station Executive Clu.viで,このStationに存在するDAQ Deviceの番号(3,4,5など)を,Live Data 1,2,3の各クラスタ表示器に設定します。Live Data 1,2,3は,DAQ Deviceの動作状態,Back Log数,エラー状態を示します。
  5. Station Status送信用のUDPポートを開きます。
  6. 2秒間待ちます。(何故か?)
エラーがなければ,次のステートは「Start」です。

--------------------

6.2.1.2 「Start」ステート

  1. Send Notification.viで,データ取込みVIであるLaunch Acq.viの待機状態を解除するNotificationを送ります。これにより,Launch Acq.viが,この管理用ループ処理と並行的に起動します。
  2. Write State to UDP.viで,このStation StatusをUDP経由でMain Consoleに送ります。
  3. Center StationからSlave Readyが送られてくるまで,100msごとに(2)〜(3)を繰り返します。
エラーがなければ,次のステートは「Runtime」です。

--------------------

6.2.1.3 「Runtime」ステート

300msごとに,以下の処理を繰返します。
  1. 「計測モニタを起動」ボタンが押されれば,このStationでローカルモニタするためのLaunch RT monitor.viを起動します。
  2. Write State to UDP.viで,Station StatusをUDP経由でMain Consoleに送ります。
  3. Center StationのUDP Graph.viから送られてくるデータ送出要求Publish N (N=1〜3)制御器を更新します。Publishは1次元配列制御器であり,内部にデジタル制御器(左側にあるのはUP/DOWNボタン)を含んでいます。Publish配列制御器の左端のIndexは送出要求個数に相当し,各Indexに対して,どのセンサ情報を送るかを内部の制御器のIndexで示しています。
停止ボタン「Stop Acquire」がローカルに押されるか,Main ConsoleからVIサーバーで「Stop Acquire」がTrueにされたら,次のステートは「Stop」であり,そうでなければ「Runtime」のままです。
--------------------

6.2.1.4 「Stop」ステート

  1. 「Stop Acquire」制御器と「Stop Acquire」グローバルをTrueにします。
  2. 「Slave Ready」制御器と「Slave Ready」グローバルをFalseにします。
  3. このStationの全DAQ Deviceのデータ取り込み処理がQuit状態になるまで待ちます。
  4. Write State to UDP.viで,Station StatusをUDP経由でMain Consoleにランダム時間間隔(0〜100ms)で15回繰り返し送ります。これは,他のStationとのデータ衝突を見越して確実にMain Consoleに終了Statusを送るためです。
  5. UDPポートを閉じます。
--------------------

6.2.1.5 トリガ関連処理

トリガモードの場合は,前記のループ処理と並行して以下の処理を行います。
  1. このStationに割り当てられたTCP Port番号でCenter StationとのTCP通信を開きます。
トリガを発生させるStationならば,
  1. SendTCPというNotifierを作り,データ採取でトリガ発生条件が成立したことによるNotificationが返るまで待ちます。
  2. Notifierが返ると,Absolute Index(トリガが発生した時点の絶対Index番号)とBase Rate(Scan Rate)をTCPでCenter Stationに送ります。
  3. Notifierを削除し,TCPを閉じます。
トリガ受信側のStationならば,
  1. Center Stationからのトリガパラメータの受信をTCP経由で待ち,Absolute IndexとBase Rateに書きます。
  2. 「Triggered?」をTrueにします。
  3. TCPを閉じます。

目次に戻る

----------------------------------------

6.2.2 Launch Acq.viフロントパネルとダイアグラムの説明内容説明

各Stationにある,Device3, 4, 5の処理を行なってデータ取り込みを行います。

6.2.2.1 サブVIs

(1)Acquire and Process Data1.vi
  フロントパネルの初期設定により指定されたDeviceからデータ収集処理を行います。
  Acquire and Process Data1.vi 〜 Acquire and Process Data3.vi まで,
  サブVI名の添字が異なるだけで,VIの内容はまったく同じです。
  Acquire and Process Data1.viは,DAQ Device3(高速A/D)でのデータ収集処理を行います。
  詳細は後述します。

(2)Acquire and Process Data2.vi
  DAQ Device4(低速A/D)でのデータ収集処理を行います。

(3)Acquire and Process Data3.vi
  Front Stationでのみロードされ,DIO Device5(デジタルI/O)でのデータ収集処理を行います。

--------------------

6.2.2.2 グローバル変数

(1)Command Global.vi フロントパネルとダイアグラムの説明
以下の2つのグローバル変数からなります。
--------------------

6.2.2.3 Typedef

(1)Device Parameters.ctl フロントパネルとダイアグラムの説明
各DAQ Deviceに接続された複数チャンネルのパラメータ表で,以下を含みます。
(2)UDP Sender.ctt フロントパネルとダイアグラムの説明
モニタ用データの受信側であるCenter StationのIPアドレス,各Stationに対応した受信用UDPポート番号,UDP Refnumを示す制御器です。

--------------------

6.2.2.3 LabVIEWライブラリ

vi.lib\Utility\rendezvs.llb中にあるもの vi.lib\Utility\error.llb中にあるもの
----------------------------------------

6.2.2.4 Launch Acq.viの動作概要

  1. このStationのDevice Parameters Arrayに書かれたSlave Device総数だけのSlave Device起動同期用ランデブーを作ります。ランデブー名称はSlaveRendezvousです。Station内でのAcquire and Process DataN間の起動タイミングは,SlaveRendランデブーで同期化されます。
  2. SlaveRendグローバルに書き込みます。
  3. Device Parameters Arrayに書かれたDevice総数だけのDevice停止同期用ランデブーを作ります。ランデブー名称はStopRendezvousです。Station内でのAcquire and Process DataN間の停止タイミングは,StopRendランデブーで同期化されます。
  4. StopRendグローバルに書き込みます。
  5. このStation内にあるDeviceの総数に応じて,Acquire and Process Data1.vi 〜Acquire and Process Data3.vi までを処理します。
  6. データ採取中はAcquire and Process DataN.vi での処理を続行します。
  7. データ収集が終わって各Acquire and Process DataN.vi の処理がすむと,Errorをマージします。
  8. SlaveRend, StopRendランデブーを破棄します。
----------------------------------------

6.2.3 Acquire and Process DataN.vi (N=1〜3)フロントパネルとダイアグラムの説明内容説明

6.2.3.1 サブVIs

(1)Get Trigger Info.vi フロントパネルとダイアグラムの説明 (2)Pulse Spec.vi フロントパネルとダイアグラムの説明
(3)Circular BufferN.vi (N=1〜3) フロントパネルとダイアグラムの説明
(4)Configure Master Slave.vi フロントパネルとダイアグラムの説明
(5)EUs to voltage.vi フロントパネルとダイアグラムの説明
EU to voltage.vi フロントパネルとダイアグラムの説明 (EUs to voltage.viのサブVI)
(6)Create binary header.vi フロントパネルとダイアグラムの説明
(7)Data LoggerN.vi(N=1〜3) フロントパネルとダイアグラムの説明
(8)Data Processing.vi フロントパネルとダイアグラムの説明
Trigger Detection.vi フロントパネルとダイアグラムの説明 (Data Processing.viのサブVI)
(9)Digital Conversion.vi フロントパネルとダイアグラムの説明
(10)Publish Data.vi フロントパネルとダイアグラムの説明
(11)Update Station Executive Clu.vi フロントパネルとダイアグラムの説明 (12)Clear Warnings.vi フロントパネルとダイアグラムの説明
--------------------

6.2.3.2 グローバル変数

(1)Publish Data Global.vi フロントパネルとダイアグラムの説明
(2)Command Global.vi フロントパネルとダイアグラムの説明
--------------------

6.2.3.3 Typedef

(1)Device Parameters.ctl フロントパネルとダイアグラムの説明 :各DAQ Deviceに接続された複数チャンネルのパラメータ表で,以下を含む
(2)UDP Sender.ctt フロントパネルとダイアグラムの説明
 モニタ用データの受信側であるCenter StationのIPアドレス,各Stationに対応した受信用UDPポート番号,UDP Refnumを示す制御器です。

--------------------

6.2.3.3 LabVIEWライブラリ

vi.lib\Daq\zadvdctr.llb 中にあるもの vi.lib\Daq\MISC.LLB 中にあるもの vi.lib\Daq\zadvd.llb 中にあるもの vi.lib\Daq\AI.llb 中にあるもの vi.lib\Daq\Digital.llb 中にあるもの vi.lib\Utility\rendezvs.llb 中にあるもの vi.lib\Utility\error.llb 中にあるもの
----------------------------------------

6.2.2.4 動作概要

 Acquire and Process DataN.viは,Get Trigger Info.viでトリガ条件制御器を設定し,
フロントパネルのCurrent State表示器に現在の処理ステートを表示してから,
ステート文字列に応じた処理を行います。ステートは以下の8つからなります。

6.2.2.4.1 「Configure Clock」ステート
  1. このDeviceがFront StationのDevice3又は4ならば,クロック発生の「Master」なので,以下のクロック設定処理を行ないます。
    (1-1)Counter Group Config.viで,クロックパルス源となるカウンタにGPCTR0 (General Purpose Counter 0)を指定します。
    (1-2)Front StationのDevice3ならば,Device ParameterがMaster Clock ONとなっているので,
       他のカウンタが同期サンプリングに使えるように,
       Route Signal.viで,Master ClockであるGPCTR0出力をRTSI 0(Real Time System Integration Bus)に接続し,
       Set Pulse Spec.viで,GPCTR0に高速側Clock仕様(40Hz, duty0.5等)を設定します。
    (1-2')Front StationのDevice4ならば,Device ParameterがMaster Clock Falseなので
       Counter Set Attribute.viで,高速側Clock(RTSI 0)40HzをTimebaseとして使い,
                      GPCTR0に低速側クロック仕様(10Hz, duty0.5)を設定します。
                      低速側クロックがハード制限上発生できない仕様であった場合は,発生できる周波数に補正します。
    (1-3)Front StationのDevice4ならばControl Digital ONとなっているので,Digital Device5のクロック用に,
       Route Signal.viで,低速側クロック10HzをRTSI 1に接続します。
    (1-4)トリガ条件制御器のMy Scan Rateを実際に発生できるクロック周波数にします。
  2. このStationのこのDeviceがクロック発生の「Slave」ならば,クロック設定処理は行ないません。
  3. 実際に発生できるScan Rateをフロントパネルに表示します。
  4. 次のステート文字列を「Config DSTIO」にします。
  5. Update Station Executive Clu.viで,このDeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  6. Master Clock Task IDを設定します。
  7. 10ms待ちます。
  8. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Configure DSTIO」です。

--------------------

6.2.2.4.2 「Configure DSTIO」ステート

  1. このDeviceがトリガ起動ならば,Circular BufferN.vi (N=1〜3) で,このDeviceNに接続されたセンサ数だけのリングBufferを作成します。
  2. このDeviceがアナログI/Oであるなら,Configure Master Slave.viでMasterかSlaveかに応じてSCXI-DSTIOボードを設定し,クロック送出もしくは,受信のポート設定を行います。
  3. 次のステート文字列を「Configure DAQ」にします。
  4. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  5. 10ms待ちます。
  6. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Configure DAQ」です。

--------------------

6.2.2.4.3 「Configure DAQ」ステート

  1. データ読み残り数scan backlogを0にします。
  2. このDAQ DeviceがアナログI/Oであるなら,
    (2A-1)AI Config.viでバッファ型アナログ入力操作用にハードウェアを設定します。
    (2A-2)AI Clock Config.viで,スキャンクロック1としてPFIピン0の信号の立下りを使うように設定します。
    このDAQ DeviceがデジタルI/Oであるなら,
    (2D-1)RTSI Control.viで,低速側クロックであるRTSI 1バス信号をDIO Device5のREQ 1に送ります。
    (2D-2)DIO Config.viで,DIOの32bitをすべてバッファ型入力に割り付けタスクIDを作成します。
    (2D-3)DAQ Occurrence Config.viで,データ集録イベントにより設定されるオカーレンスをクリアし,新たに作成します。
    (2D-4)デジタルのデータ収集がScan Rate/4回だけ行なわれるたびにOccurrenceが発生するように設定します。
  3. Acq Task IDを設定します。
  4. 次のステート文字列を「Open File」にします。
  5. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  6. 10ms待ちます。
  7. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Open File」です。

--------------------

6.2.2.4.4 「Open File」ステート

  1. Create binary header.viで,Channel Parameters, Scan Rate, Acq Task IDからBinary File Format用のHeaderを作成します。
  2. Data LoggerN.viで,収集データログ用のBinary Fileをopenし,Binary Headerを書き込みます。
  3. モニタデータ送出用のUDP PortをOpenします。
    (6500 for Device3, 6501 for Device4,5(Front), 6502 for Device4(Front)
  4. 次のステート文字列を「Start DAQ」にします。
  5. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  6. 10ms待ちます。
  7. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Start DAQ」です。

--------------------

6.2.2.4.5 「Start DAQ」ステート

  1. Analog, Digitalのデータ取り込みを開始します。(ただし,Front Stationでのクロック発生が始まるまで実際は待ち状態)
  2. 次のステート文字列を「Start Clock」にします。
  3. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  4. 10ms待ちます。
  5. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Start Clock」です。

--------------------

6.2.2.4.6 「Start Clock」ステート

  1. Master Stationならば,
    (1M-1)Main ConsoleからSlave Readyがセットされるか,Stop Acquireがセットされるまで待ちます。
    (1M-2)MasterのDevice3, 4のカウンタによるクロック発生の準備と起動を行います。
    Slave Stationならば,全Slaveの同期がとれるまで,ランデブー待ちをします。
  2. 次のステート文字列を「Acquire Data」にします。
  3. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  4. 10ms待ちます。
  5. ウォーニングがでても無視します。
エラーがなければ,次のステートは「Acquire Data」です。

--------------------

6.2.2.4.7 「Acquire Data」ステート

  1. 読み残り数であるscan backlog数と,Scan Rateの1/4の多いほうの数をData読み取り数とします。

  2. Analog Deviceならば,
    (2A-1)AI Read.viでBuffer型収録からDataを読取ります。
    (2A-2)Update Station Executive Clu.viで,Live Dataクラスタ表示のBacklog数を更新表示します。
    (2A-3)Triggerを発生させるセンサを含むDeviceである場合のみ,Data Processing.viで,
      全センサ信号が許容電圧範囲であることをチェックし,
      トリガが発生した場合にはTrigger Indexと「Triggered?」をセットします。
    (2A-4)Trigger Modeである場合のみ,Circular BufferN.viで,以下の処理を行います。
     (2A-4-1)このDevice中のセンサからトリガが発生すると,その他のDeviceのためにAbsolute Index, Base Rate, Triggered?をセットし,他のStationに,トリガ発生を示すTCP Notifierを送ります。
     (2A-4-2)Absolute Index, Base Rateを用いて,リングBufferからトリガ以前のプリトリガスキャンDataを連結します。
     (2A-4-3)「Trigger Needed?」をFalseにリセットします。
    (2A-5)Data LoggerN.viで,収集データのData Logger処理を行います。 (2A-6)Publish Data.viで,表示要求のあるDataを10個ずつ,4回/secの繰り返しで,UDP経由でMain Console側に送ります。そのため,Scan Rateが40Hzの場合には,全てのモニタDataがMain Consoleに送られます。
    (2A-7)エラーをマージします。

    Digital Deviceならば,
    (2D-1)Occurrenceの発生を待ち,DIO Read.viで,内部バッファからデータを読込み,そのデータをパターンで出力します。
    (2D-2)Update Station Executive Clu.viで,Live Dataクラスタ表示のBacklog数を更新表示します。
    (2D-3)Digital Conversion.viで,Format変換を行います。
    (2D-4)Data LoggerN.viで,収集データのData Logger処理を行います。
    (2D-5)Publish Data.viで,表示要求のあるDataを10個ずつ,4回/secの繰り返しで,UDP経由でMain Console側に送ります。そのため,Scan Rateが40Hzの場合には,全てのモニタDataがMain Consoleに送られます。
    (2D-6)エラーをマージします。

  3. scan backlog ,Voltage Data,Publish EU Data,Publishの表示を更新します。
  4. 停止ボタンが押されるか,Main ConsoleからStop AcquireがTrueにされたら,次のステート文字列を「Stop」とし,そうでなければ「Acquire Data」のままにします。
  5. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  6. 10ms待ちます。
  7. ウォーニングがでても無視します。
停止ボタンが押されるか,Main ConsoleからStop AcquireがTrueにされたら,次のステートは「Stop」であり,そうでなければ「Acquire Data」ステートを繰返します。

--------------------

6.2.2.4.8 「Stop」ステート

  1. Acquire and Process Data1〜Data3の各々の処理がここに来るまでStopRendで同期待ちをします。
  2. Analog,Digitalの入力タスクをクリアします。
  3. MasterならばClockを停止させ,クロック接続を解除します。
  4. エラーをマージします。
  5. Data LoggerN.viを閉じます。
  6. モニタデータ転送用のUDP Portを閉じます。
  7. ステート文字列を「Quit」にします。
  8. Update Station Executive Clu.viで,このDAQ DeviceのLive Dataクラスタ表示のStateとErrorを更新表示します。
  9. 10ms待ちます。
  10. ウォーニングがでても無視します。
エラーがなければ,Acquire and Process DataN.viを終了します。

目次に戻る

----------------------------------------
Front stationがトリガーStationです。

構成ファイルとは, System Parameters Arrayの説明(厳密Type Def:System Parameters Array.ctl)
 System Parameters Arrayは,Max.4要素(Station数)からなる1次元配列であり,各要素は, Device Parameters Arrayの説明
 Device Parameters Arrayは,Max.3要素(DAQ Device数)からなる1次元配列であり,Device Parametersが各要素です。

Device Parametersの説明(厳密Type Def:Device Parameters.ctl)
 Device Parametersは各Stationに装備されたDAQ Device(3,4,5)のデータ収集構成を示します。
Trigger Parametersの説明 クロック条件の説明 DAQ Device3に関して DAQ Device4に関して DIO Device5に関して Channel Parametersの説明(厳密Type Def:Channel Parameters.ctl)
 各センサの構成を示したクラスタで,以下の5つのType Defと,その他多くの構成パラメータからなりますが,ここで説明している項目以外は使われていません。

目次に戻る


LabVIEW TOPに戻る