From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



使用HSDIO来设定多个Script Trigger。



主要软件:
主要软件版本: 1.4
主要软件修正版本: N/A
次要软件: N/A
硬件: Digital I/O (DIO)>>High-Speed Digital I/O

问题:
我想在HSDIO中使用script和software trigger来发送多个波形。然而,我只有4个trigger可以使用,现在我想产生超过4段以上的波形,怎么办?

解答:
您可以使用软件触发的教本来切换不同的波形。不是使用script trigger来锁住一段不同的波形,我们可以组合这四个触发来构成表格。对于每个script trigger,都有两个状态(asserted, de-asserted),那么一定会有16个可能的状态组合。 下面是一个表格的例子。
 
               ScriptTrigger0  ScriptTrigger1  ScriptTrigger2  ScriptTrigger 3
myWfm0          T                     T                    T                    T
myWfm1          F                     T                    T                    T
myWfm2          T                     F                    T                    T
myWfm3          F                     F                    T                    T
myWfm4          T                     T                    F                    T
myWfm5          F                     T                    F                    T
myWfm6          T                     F                    F                    T
myWfm7          F                     F                    F                    T
.
.
.
myWfm15         F                    F                    F                    F
 
在伪代码格式下,您可以生成下面的脚本:
 
Loop forever
  generate myIdleWaveform
  if ScriptTrigger0 AND ScriptTrigger1 AND ScriptTrigger2 AND ScriptTrigger3
     generate myWfm0
  if ScriptTrigger1 AND ScriptTrigger2 AND ScriptTrigger3
     generate myWfm2
  .
  .
end loop

AND指令不能和If/Else指令一起使用,所以实际的脚本会略有不同。 您将需要使用嵌入的IF/ELSE语句。既然script trigger不能同时被使能判断,需要一个同步信号。下面是发送八段波形的例子,使用了3个script triggers,使用1个用于同步。

真正的表格会和上面的前8段波形很类似。要注意,我们只使用trigger 0, 1, 和2的值. ScriptTrigger 3用于同步信号.当ScriptTrigger 3确定后,scriptTriggers 0, 1, 和2也都已经确定状态了(没有在未知或变化的状态)。

script myScript
  repeat forever
    generate myIdleWaveform   \\ this is the waveform you want to always have running
    if scriptTrigger3         \\  if True, then we can read all of the triggers
      if scriptTrigger2
        if scriptTrigger1
          if scriptTrigger0
            generate myWfm0   \\ T, T, T case
          else
            generate myWfm1   \\ F, T, T case
          end if
        else
          if scriptTrigger0
            generate myWfm2   \\ T, F, T case
          else
            generate myWfm3   \\ F, F, T case
        end if
      else
        if scriptTrigger1
          if scriptTrigger0
            generate myWfm4   \\ T, T, F case
          else
            generate myWfm5   \\ F, T, F case
          end if
        else
          if scriptTrigger0
            generate myWfm6   \\ T, F, F case
          else
            generate myWfm7   \\ F, F, F case
        end if
      end if
    end if //end of start trigger event
  end repeat
end script

注意:您需要在每个If/Else语句前面加入发送语句来避免HSDIO的错误。在上面我之所以没有加是因为使脚本有更好的可读性。所以在每个if 语句前要加入"generate myIdleWaveform".

现在在LabVIEW程序中,您需要先设定scriptTriggers 0, 1, 和(或) 2,然后设定scriptTriggers 3。   例如,如果您想要发myWfm2,那么先触发triggers 0 和 2,然后trigger 3。使用"niHSDIO send software trigger.vi" 来触发。
如果要发送超过8个以上的波形,您不能使用scriptTrigger3来同步(超过8个波形要使用全部的trigger)。 在这种情况下,您需要使用startTrigger来代替scriptTrigger3。

script myScript
  repeat forever
    generate myIdleWaveform
    if startTrigger   \\ this is asserted using the "send software edge trigger.vi"
    .
    .
    .


相关链接: HSDIO Seamless Waveform Switching Using Multiple Triggers Example

附件:





报告日期: 08/31/2006
最近更新: 09/11/2006
文档编号: 3ZUBL2JQ