2016-02-08 51 views
0

我的Labview程序像一個魅力一樣工作,直到我查看程序框圖。沒有改變。我不保存。只需按Ctrl + E,然後按Ctrl + R。Labview程序在查看(不改變)框圖後改變了行爲

現在它無法正常工作。只有重新啓動Labview才能解決問題。

我的程序同時控制兩個掃描儀陣列進行激光切割。爲了強制並行工作,我使用錯誤處理程序和循環來等待掃描程序的信號。但是突然間一些循環比他們應該更頻繁地運行。

當我打開與我的代碼混淆的程序框圖時,Labview中發生了什麼?


編輯: 它很難說什麼是不違反我的非公開協議發生。

我正在控制兩個獨立的激光切割鏡陣列。當一個人正在運行一個裁員時,另一個應該運行其他工作。非常快。當第一個完成時,它們在相同的位置會合並以相同的低速運行相同的幾何體。作業以* .XML格式提供,並以.net對象的形式存儲。設備只運行最近的作業,並在獲取新作業時覆蓋它。

我可以檢查一個作業是否仍在運行。雖然這是真的,我爲其他工作運行一個while循環。現在這個循環經常運行幾次,甚至在一定程度上忽略了WAIT塊。它也跳過它讀取XML作業文件的部分,將速度部分更改爲快速並保存。它只運行一次快。

@Joe:不,它不。它只運行一次。事後它沒有。


的Youtube鏈接

The way it is supposed to move

The wrong way

+1

請提供: 1.最低可重現性VI 2.預期行爲 3.您看到的是什麼 – mzu

+0

許多事情都可能發生。爲了更加精確地嘗試更詳細地描述問題或提供示例代碼。 –

+0

如果你只是打開VI並使用Ctrl + R幾次,它在第一次運行後總能正常工作,這也是事實嗎? –

回答

0

快速點檢查:被調試和 「保留線數據」 禁用?雖然它可能不會改變計算,但它肯定會改變非常緊密循環的時間,這是OP所指的意外程序行爲之一。

+0

檢查。它不是 –

+0

保留數據在電線不會改變正在運行的程序的行爲。這些值將在下一次執行時被覆蓋。沒有來自線程緩存的反饋回到程序中......通過禁用很多LV的內存優化,緩存線程值僅有助於調試。 – srm

+0

在執行期間保留數據線和打開的BD一起可能會導致並行迴路的時間偏差。實際上,只有當代碼可用時才能告知這種情況。 – mzu

2

我完全可以通過打開程序框圖來思考這些更改。

當程序框圖打開時,任何註釋掉或無法到達的代碼編譯器消除的代碼部分都會加載它們的子VI。如果其中一個註釋掉的代碼段在某種程度上干擾了您的運行代碼,那麼您可能會遇到問題。

只有兩種方式我知道這是干涉...他們都是相當不可能的。 a)你有一些「檢查內存中的所有VI」或「檢查內存中的所有類型」,你用作插件系統。當註釋掉的部分加載時,這會改變內存中的VI。解析XML時,這樣的系統並不罕見,所以也許。 b)對於某些動態調用的VI,您正在使用運行VI方法作爲頂層VI執行,但通過加載圖表,它發現它是您當前程序的子VI。 VI不能同時成爲頂層和子VI,所以調用VI運行會返回一個錯誤。

就是這樣。我想不出別的什麼。這兩種想法似乎都不太可能,但考慮到你的要求和缺乏方塊圖,我想我會把它作爲一個假設。

+0

在這裏上傳程序框圖的最好方法是什麼?這是相當大的許多案例和子Vis –

+0

使用snipplet,在這裏上傳作爲PNG文件 – mzu

+0

正如米哈伊爾建議,張貼片段圖像適用於StackOverflow最適合的各種問題。但如果您真的認爲您在LabVIEW中發現了一個錯誤,或者需要有人在NDA下調查您的整個層次結構,請聯繫NI技術支持。他們的法律部門可以與您一起設置調查代碼的方式,而不違反NDA。 – srm