请教event结构中while循环的问题

本人是新手目前对labVIEW还不是很熟悉,最近在一个工程中碰到一个问题,恳请指教

我为前面板上的各个按钮增加了event,其中有的事件当中包括调用运动控制板卡的命令,为了实时的获得板卡状态,增加了while循环结构。然而在程序运行中由于while循环结构的存在,前面板上的其他按钮就得不到响应。可是我需要在while循环运行过程中,其他按钮可以响应事件,比如停止按钮。

这个问题应该怎么解决?谢谢~~

LabVIEW的一大特色就是可以很輕易做出「Multi-Thread」的程式,比如說,下面的圖片中,背後程式有兩個While Loop,程式執行的時候,這兩個While Loop會各自運作,這樣就是一個Multi-Thread的程式了。

![](upload://a0C7IQdNbvkicoOoYToIHiVfZx8.jpeg)

![](upload://4k6awjXV1xm084YUeQHgmSXDz7l.jpeg)

根據你問的問題,你可以將運動控制放在Loop1,然後將停止程式的部分放在Loop2,這樣就不會有Loop1鎖死的情況了。

在Event Structure裡面有一個選項,就是「Lock front panel until the event case for this event completes.」這個就是說,如果在某一個Event Loop裡面設定許多種Event情況,假設Event1和Event2。那麼如果啟動Event1後,在Event1執行中,如果有勾選「Lock front panel until the event case for this event completes.」的話,人機介面就會鎖死。如果沒有勾選「Lock front panel until the event case for this event completes.」的話,你還是可以按人機介面,但是程式內部會等到Event1執行結束後,再執行Event2。

![](upload://qH2E7sySptb7eMVLoIQbBkvfoRV.jpeg)

所以如果你要做更有彈性的程式設計,可以視情況將不同的Event放到不同的Event Structure裡面。

非常感谢你的帮助,从中我收获很多,可是在实验中我还是有几个问题不是很明白,希望能再次得到你的帮助

首先,我大概把我的程序结构介绍一下,如图示例,这是在整个event中的一个运动控制事件,其中sequence结构中第一为调用运动程序,第二为while循环结构不断的获取运动状态。

![](upload://fvayC5yaW5RB0mxobyY1XH3H862.jpeg)

<?:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在解决这个问题的过程中,我原来曾经尝试过利用event结构中的timeout这个event来响应其他前面板的按钮,设置时间为100ms

通过实验发现有两种现象产生:

1.  当此事件执行时,运动过程正常,状态读取正常,但事前面板其他按钮被屏蔽。

2.  当此事件执行时,前面板其他按钮可以响应,运动过程正常,但是读取状态循环不工作。

这两种现象的产生好像没有什么特殊规律。

 

其次,我参考你的指导,设置了另一个个event结构,将在运动过程中需要得到响应的按钮事件放入其中,这次两个event都没有设置timeout事件,通过实验发现:运动过程正常,状态显示正常,但是按钮事件仍然不能得到响应。

 

最后一个实验中,我为上面提到的两个event结构都设置了timeout事件,得到的结果是:按钮可以随时响应,运动也一切正常,但是while循环结构中的状态显示却是随机的出现正常和不正常的现象。例如,表现为开始时一切正常,当点击了停止按钮,那么再次运行运动控制,此时,状态显示while循环就不工作,如果再次停止运动,再次开始,while循环又开始工作。也会表现为开始while循环不工作,点击停止后开始运动,又恢复工作等等。总之,好像这个交互的过程中会影响状态显示while循环的工作。

 

helptimeout的解释为a value to the Timeout terminal at the top left of the Event structure to specify the number of milliseconds the Event structure should wait for an event to occur。“等待其他事件发生的时间”但是我还是不明白这个等待其他事件发生的时间到底起到什么样的作用?在我上面的实验中为什么会产生这样明显的差别?恳请指教,谢谢!