2017-07-08 130 views
1

您好,我需要使用DM軟件來分析一個txt文件並獲取數字。每個數字被髮送到一個控制移動舞臺的Labview軟件。然後Labview告訴它完成後DM將拍照並保存文件。那麼如何做到這一點?我發現幾個樣本與DM腳本。請給出一個方向。謝謝如何在labview和DM軟件之間進行通信

回答

1

如果速度沒有問題,你可以讓Labview保存一個空的.txt。您的dm軟件可以檢查文件是否存在,並儘快拍攝照片。當然,更好,更快/更安全的方法存在,但我不知道你的dm軟件是多麼的多姿多彩。例如,一個虛擬的COM端口,ActiveX,有很多選項可以讓軟件與海誓山盟進行通信。

1

目前的DigitalMicrograph中沒有很多「向外」或「向內」的通信可能性,有些選項僅在後面的GMS版本中可用。 我也不知道Labview的選項,所以你需要找出什麼可行,什麼不可行。建議是:

如果您正在使用GMS 2.3或更高版本,您可以使用命令LaunchExternalProcess()從內開始DigitalMicrograph任何程序,你會在命令提示符下執行同樣的方式。

如果Labview允許通過從命令提示符調用參數來觸發某些功能,這可能是最簡單的選擇。當啓動的過程完成時或在指定的超時後,DM腳本將繼續。

如果您正在使用GMS 3.1或更高版本,你可以做oposite,並有外部程序中調用DigitalMicrograph.exe用命令行參數觸發DM-腳本的開始。

本質上,這是第一個建議的反向。只要Labview需要執行下一個操作,就需要「調用」DigitalMicrograph。我不知道Labview足以判斷這是否可能。

有通過COM端口(RS232)提供安裝有SerialControl.dll在插件文件夾進行串行通信的腳本命令。

如果Labview支持此功能,則可以使用此功能建立程序間通信。串行通信腳本調用不正式支持,但這些命令是相當不言自明:

Number SPOpen(Number port, Number baud, Number stop, Number parity, Number data) 
Number SPOpen(String prefix) 
void SPClose(Number serialPortL) 
Number SPSendString(Number serialPortL, String string) 
Number SPSendHex(Number serialPortL, String string) 
void SPFlushInput(Number serialPortL) 
Number SPGetPendingBytes(Number serialPortL) 
Number SPGetTime() 
String SPReceiveString(Number serialPortL, Number maxLength, NumberVariable actual) 
String SPReceiveHexString(Number serialPortL, Number maxLength, NumberVariable actual) 
void SPSetRTS(Number serialPortL, Boolean on) 
void SPSetDTR(Number serialPortL, Boolean on) 

您也可以建立「溝通」與解決方法,因爲通過Gelliant在答覆建議。一個DM腳本可以監視硬盤上的特定文件夾,並在該文件夾中的(特定)文件被創建或修改時觸發某個動作。

如果Labview能夠做類似的事情,可以使用「寫入磁盤」和「更改時間表」方法使兩個程序彼此同步工作。

如果LabVIEW不直接支持這一點,您可以通過使用一般系統第三方提供腳本語言來實現類似的「黑客」同步。我以前親自使用過一種名爲AutoIt的軟件來同步其他不兼容的軟件來控制硬件。

如果你知道C++編程,你可能會得到「軟件開發工具包(SDK)」爲DigitalMicrograph和創造DigitalMicrograph自己的LabVIEW的通信插件。

該選項當然是最通用的,因爲您只受限於您可以通過自己的C++代碼實現的功能。缺點是,您可能需要爲不同版本的DigitalMicrograph重新編譯插件DLL。

+1

Labview能夠通過命令行調用一個外部程序,並附加兩個參數。 –

相關問題