From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

「次のミリ秒倍数まで待機」関数と遅延時間ExpressVI

「次のミリ秒倍数まで待機」関数と「遅延時間」ExpressVIの違いを教えていただきたいです。
 
よろしくお願いいたします。
0 件の賞賛
メッセージ1/3
6,276件の閲覧回数
まず、ExpressVIのほうで何をやっているか、実際にExpressVIを開いてみましょう。(添付)
 
ExpressVIを右クリックして「フロントパネルを開く」を選ぶと、メッセージが表示されますが「変換」を押してください。すると、水色のExpressVIが薄黄色の「名称未設定」になり、「遅延時間」という名前の別viが開きます。中のダイアログを見ると、入力の「Delay Time (s)」がそのままサブviに与えられていて、エラークラスタはスルーしていることが分かります。さらにサブviを開くと、単に秒を1000倍して「待機(ms)」関数に直接つなげているだけということが分かります。
 
結局、「遅延時間ExpressVI」は、指定の秒を1000倍(ミリ秒)して「待機(ms)」関数につないでいるだけで、エラークラスタで実行順序をチェーンにできる以外は自分で「待機(ms)」関数を呼び出すのと本質的に違いません。
 
次に、この「待機(ms)」関数と、「次のミリ秒倍数まで待機」関数の違いですが、これはヘルプを見ると分かりますが、「待機」の方は指定のミリ秒だけちゃんと待つのに対し、「次のミリ秒倍数まで待機」の方は、内部タイマーのカウント値が指定したミリ秒の倍数になるまで待つのであって、呼び出したタイミングによっては指定のミリ秒より短い時間で返ってくる場合があります。ループ内で、きっちり指定のミリ秒ごとにループを回したい場合は「次のミリ秒倍数まで待機」の方が適していますが、1回目のループでは短い時間で返って来てしまう可能性が大です。一方、「待機」を使うと、どのループ回でも同じ時間だけ待つかわりに、他の処理があるとループを回る1回の時間が指定のミリ秒より長くなる可能性もあります。どちらが良いかはユーザの用途によります。
 
というわけで、「次のミリ秒倍数まで待機」関数と「遅延時間」ExpressVIとの違いは、
 「次のミリ秒倍数まで待機」関数 ≠ 「待機(ms)」関数 ≒ 「遅延時間」ExpressVI
という感じです。左の「≠」は、上に述べた2つの関数の動作の違いです。右の「≒」はほとんど「=」と言って良く、エラークラスタでチェーンできる点と、秒で指定できるという点くらいしか違いません。
 
(なお、ExpressVIは、フロントパネルとして開くことができるので、何をやっているのか一度見てみることをお勧めします。このExpressVIのように、実際は大したことないものもあれば、結構複雑な処理をしているものもあります。便利な反面、汎用性を高めるために不要な処理を含んでいる場合も多いので、ExpressVIの中身を参考にして必要な部分だけ自分で組む、というほうが動作の無駄が省ける場合が多いです)
 
以上、ご参考下さい。
 
0 件の賞賛
メッセージ2/3
6,269件の閲覧回数
ご回答ありがとうございました。
よくわかりました。
0 件の賞賛
メッセージ3/3
6,228件の閲覧回数