LabVIEW + GitLab CI + Windows + Docker可行嗎?

2024/03/02 更新,原來在用Docker有太多細節我沒有注意到,所以一開始在Docker建立Image就出問題,所以後續動作當然就無法進行了,但是建置過程確實沒有這麼簡純,也只能慢慢破關了。
————————————-以下為原始發文————————-
找了一整天的資料,我得到的心得是,即便建置完成,日後處理問題的時間應該會大於用他的時間 ,最後還是問了一下chatGPT跟Gemini後,我短時間內應該會中止這個計畫,有需要還是用VirtualBox就好。

chatGPT上網搜尋之後的回答如下:
Docker 原始設計主要是用於建置和部署後端服務型的應用,並不直接支援運行圖形化介面應用例如 Windows 的桌面程式。
對於你的問題,目前並沒有標準的或廣泛被接受的做法用以在 Docker 容器中運行 LabVIEW 的應用程式。主要原因是,LabVIEW 是一種具有圖形化介面的開發環境,並且它一般被用來開發具有豐富用戶交互特性的桌面程式,這些並不符合 Docker 的標準使用情境。
然而,如果 LabVIEW 應用程式被設計為不需要使用者界面,來執行一些自動任務,則可能能夠在 Docker 容器中運行。但是這需要對 LabVIEW 程式做特殊的設計和調適,並不是直接將一個通常的 LabVIEW 桌面應用程式放進 Docker 容器中運行。
總結來說,盡管有某種可能性在 Docker 中運行一些特殊設計的 LabVIEW 應用程式,但 Docker 並未直接提供支援 Windows 顯示或桌面環境,因此不適合用來部署具有完整用戶交互介面的 LabVIEW 桌面應用程式。如果需要在虛擬化環境中運行這類應用程式,可能需要尋找其他的虛擬機軟體,例如 VMware 或 VirtualBox 等。

Gemini也很好笑,給了完整的dockerfile的建置步驟,不過只是正經八百的畫虎爛,完全是沒有辦法用,中間還問他,他給的連結問題,他的回答是“這件事我幫不了忙,我只是個語言模型。”

這個image只能用在linux下嗎?
另一個image雖然可從dockerhub拉下來,結果還是不能用,因為他也是Linux系統為基礎,沒有搞懂原始開發者怎麼用。

2024/02/24 這個時間點環境如下:
Windows 11 23H2 OS build:22631.3155
LabVIEW 2020 SP1 32Bit
Docker 4.27.2
gitlab-runner 16.8.0

參考資料
LabVIEW + Docker + Windows = Match?
Building LabVIEW 2018 Programs In A Docker Container
Using LabVIEW in a Docker Container
20 分鐘入門 Docker,建立屬於你自己的 Docker Image|六角學院|2023 鐵人賽 #23
Docker是什么?【Docker教程1】

如何安裝VI package -> G CLI套件

開發者已經收到我的訊息,有機會在G CLI 3.0.1.98之後的版本是否可以在不改“系統地區設定”的情況下,就可以正常安裝。在這個版本之前,也就只能改“系統地區設定”後再進行安裝了。
在繁體中文的Windows作業環境下,在預設的情況下,似乎是unicode的關係,導致VIPM無法正常安裝G CLI,今天終於試出來可以正常安裝的方式,就是要進到”系統管理語言設定”下,變更“系統地區設定”,將預設的”繁體中文(台灣)”改為“英文(美國)”之後,再進行安裝即可。

只要到“系統管理語言設定”內設定系統地區修改
語言改為英文,要重新開機後再安裝就可以正常安裝了。
正常安裝後的畫面

LabVIEW mass compile時間

2024/02/23 目前程式已經大到進行compile要接近12個小時了

LabVIEW 的 Mass Compile 功能其主要目的是更新你的 VI(Virtual Instrument)或專案檔案到最新的LabVIEW版本,或提升其效能。

在 LabVIEW 中,每個 VI 會儲存資訊像是資料流程、使用的函數和子VI。然而,當 National Instruments 更新 LabVIEW 時,一些底層的實作方式可能會更改。在這種情況下,LabVIEW 會嘗試保持子VI與主VI的一致性,確保所有的 VI 都使用同樣版本的 LabVIEW。

Mass Compile 也可以找出有問題的 VI,幫助你修復這些 VI。當你運行 Mass Compile 時,LabVIEW 會打開每個 VI,並且重新編譯所有的程式碼。在此過程中,如果 LabVIEW 發現任何錯誤或警告,它會顯示在 Mass Compile 的結果視窗中。

Mass Compile 的時間長短取決於你的專案大小及其複雜性。一個包含許多 VI 和複雜資料流程的專案需要比一個簡單專案更多的時間來編譯。此外,如果你的電腦性能較低,或者你同時執行了其他處理器密集型應用,Mass Compile 可能會需要更多的時間。

這是一個必要的過程,確保你的專案能在最新的 LabVIEW 版本上正常運行,並且優化 VI 的效能。然而,由於它可能會需要一些時間來完成,所以建議你在不需要立即使用電腦的時候,或者是在非工作時間進行 Mass Compile。

LabVEIW與GitLab的碰撞 – 環境串接

如果你還沒有看過前言,請先過去看一下最後一段文字,確定好你己經有相關經驗與能力。
這一篇文章是用來記錄從一個專案開始到GitLab與LabVIEW建置環境並產生執行檔的串接過程。所以在開始之前,必須要有gitlab.com的帳號及一台要用來跑gitlab-runner的電腦及一台開發LabVIEW的電腦,如果只是想試一下gitlab-runner執行狀況,可以跑在開發LabVIEW的電腦上(但我是不建議,避免開發環境受到破壞)。

執行步驟
1. 在gitlab上先建立一個repository
2. 在這個repository下,建立gitlab-runner,取得到設定資訊
3. 回到gitlab-runner電腦端,下載並執行gitlab-runner
4. 在gitlab-runner註冊剛剛在gitlab.com拿到的資料
5. 回到gitlab.com上的repository檢查gitlab-runner是否已經運作
6. 回到開發電腦端,clone gitlab上的repository
7. 建立LabVIEW專案,寫個vi,建置Application(EXE)
8. 寫一個.gitlab-ci.yml
9. 將專案 commit & push回到gitlab.com上
10.回到gitlab.com上,檢查pipline執行結果
11.後話

1. 在gitlab.com上先建立一個repository

2. 在這個repository下,建立gitlab-runner,取得到設定資訊

3. 回到gitlab-runner電腦端,下載並執行gitlab-runner
3.1 在C碟下建立GitLab-Runner
3.2 將gitlab-runner下載到C:\GitLab-Runner,可以依照作業系統下載對應版本 64-bit or 32-bit
3.3 將下載回來的檔案更名為gitlab-runner.exe

4. 在gitlab-runner註冊剛剛在gitlab.com拿到的資料
4.1 使用系統管理員權限開啟”命令提示字元”(aka DOS)
4.2 將路徑指向到C:\GitLab-Runner
4.3 將在 gitlab.com上取得到的資訊貼上並執行。
4.4 使用文本編輯器開啟C:\GitLab-Runner\config.toml
4.5 修改shell的值,預設為”pwsh”,改為”powershell”

5. 回到gitlab.com上的repository檢查gitlab-runner是否已經運作

6. 回到開發電腦端,clone gitlab上的repository
6.1 在C碟下建立GitLab-Repo
6.2 開啟”命令提示字元”(aka DOS)並將路徑設定㺫C:\GitLab-Repo
6.3 依照gitlab指令複製repository到本機上(紅框前三行)

7. 建立LabVIEW專案,寫個vi,建置Application(EXE)

加人LabVIEW專案內容

8. 寫一個.gitlab-ci.yml

.gitlab-ci.yml文件內文,這裡我是儘可能精簡,這裡未來會因應需求而增加

9. 將專案 commit & push回到gitlab.com上
9.1 開啟”命令提示字元”(aka DOS)
9.2 將”命令提示字元”路徑設定㺫C:\GitLab-Repo\labview-ci下
9.3 依照下面指令將本機repository推送到gitlab.com上
9.3.1 git add .
9.3.2 git commit -m “寫commit註解”
9.3.3 git push

git工作流程,如果用TortoiseGit會更方便

10.回到gitlab.com上,檢查pipline執行結果
10.1 到gitlab.com的專案下
10.2 回到gitlab-runner下,可以看到建置後的執行檔已經產生。

要從建置->流水線->狀態->就可以看到建置過程
在gitlab.com上,可以看到建置結果。
完成建置,點選後可以看到建置過程
建置過程
完成建置後的執行檔

11.後話
由於在建置過程有太多細節被我略過,是因為這個過程中有過程在一般LabVIEW使用者不會碰工具細節,再來就是讓大家有一個想法,如果執行上有問題,也可以發mail給我來討論。最後這篇文章只是一個gitlab ci/cd與LabVIEW的起頭,有太多工作可以由這樣的流程自動化,就讓我們keep going.

參考資料來源
G-CLI Documentation
SAS G-CLI Tools Documentation
為你自己學 GitLab CI/CD
CI CD Tools for LabVIEW
Install GitLab Runner on Windows
.gitlab-ci.yml文件
CI CD Tools for LabVIEW

LabVEIW與GitLab的碰撞 – 前言

在一個寒冷但陽光明媚的早晨,我坐在辦公室的電腦前,正在這新的一天開始用LabVIEW開發程式。每個程式碼、每個模組都像是朝陽溫暖的光束,為我帶來成就感和愉悅。

然而,如同每個日出之後都會有日落,每天的付出都會在build code的過程中化為無盡的等待。這就如同一個漫長而扭曲的迷宮,無盡的長廊和彎道會把人帶向未知的深淵,那裡充滿了焦慮和無助。

直到有一天,我發現了一種名為GitLab的CI/CD工具。它就像是一道指引我走出迷宮的光芒。經過深入學習、探索和實踐,我開始理解並掌握了這個工具,它為我解決了build code過程所帶來的無盡等待。我將build code的過程自動化,不再像以前那樣只能等待它慢慢的完成。

自從發現了GitLab的CI/CD工具,我終於找到了技術之光,擺脫了以往的束縛,獲得了前所未有的自由和成就感。我之後再也不受制於build code的等待過程,更可以將更多的時間和精力投入到更重要的設計和優化作業上。我在開發程式的旅程中發現了新的樂趣,享受在每個成功的項目中帶來的深深滿足感。

從此,我的人生便有了新的方向,我像是從一個狹窄的房間走入了一個寬廣的新世界。感謝GitLab的CI/CD工具,為我照亮了前進的路,讓我在開發的世界裡自由飛翔。

上面的文章是我用chatGPT寫的,雖然不能用chatGPT寫LabVIEW,但是chatGPT可以帶來許多不同面向的思考,幫助我更能了解到沒有想到的面向。

言歸正傳,為什麼要說前言呢?因為要真的能夠實做LabVIEW在GitLab上進行CI/CD,要有下面許多先決條件需要先有,不然你怎麼做,你就怎麼卡關。
1. 已經有在使用git進行版本控制
2. 了解G CLI,並且有一台可以專門用來跑LabVIEW ci cd的電腦,其環境需為Windows 10 or 11 + LabVIEW2020以上版本+ G CLI+SAS G-CLI Tools已被安裝
3. 了解GitLab是什麼東西且已經在GitLab.com有帳號
4. 有能夠閱讀yml的能力
5. 此次架設是使用GitLab.com的CI/CD服務,gitlab-runner放在一台筆電 (Windows 10 or 11 + LabVIEW2020 32bit)上跑服務,沒有使用Docker的容器化的技術。

參考資料來源
G-CLI Documentation
SAS G-CLI Tools Documentation
為你自己學 GitLab CI/CD
CI CD Tools for LabVIEW
.gitlab-ci.yml文件
CI CD Tools for LabVIEW

G CLI 如果使用VIPM安裝失敗,那就換個方法安裝吧

有可以正常從VIPM案裝的解方了,請到這如何安裝VI package -> G CLI套件

安裝步驟
1.從vipm.io下載G CLI的package.
2.使用7zip解壓縮檔案。
3.將檔案複製到LabVIEW資料夾下。
4.執行核心檔案安裝
5.打完收工(後話)

1.從vipm.io下載G CLI的package.
1.1 到這個路徑https://www.vipm.io/package/wiresmith_technology_lib_g_cli/
1.2 畫面右側有一個”Download Package“的按鍵,按下後開始下載。
1.3 下載完成後,應該可以看到”wiresmith_technology_lib_g_cli-3.0.1.98.vip”這個檔案

2. 使用7zip解壓縮檔案
2.1 將”wiresmith_technology_lib_g_cli-3.0.1.98.vip”解壓縮至一個新的資料夾下
2.2 解壓縮完成後,你應該可以看到資夾裡有資料夾“File Group 0”及”File Group 1″和後面五個檔案spec, icon.bmp, PostInstall.vi, PreUninstall.vi license

3.將檔案複製到LabVIEW資料夾下
3.1 進到解壓縮資料夾內,將”File Group 0″內的三個資料夾複製到你的LabVIEW所在的資料夾下,例如我的LabVIEW2020 32bit資料是在”C:\Program Files (x86)\National Instruments\LabVIEW 2020″
3.2 進到解壓縮資料夾內,將”File Group 1″內的“functions_Wiresmith_Technology_lib_G_CLI.mnu”複製到你的LabVIEW所在的選單資料夾下,例如我的LabVIEW2020 32bit資料是在”C:\Program Files (x86)\National Instruments\LabVIEW 2020\menus\Categories\Computer”

4.執行核心檔案安裝
4.1 進到解壓縮資料夾 -> File Group 0 -> vi.lib -> Wiresmith Technology -> G CLI -> Installation Support -> G_CLI.msi 下
4.2 執行 “g-cli-3.0.1-x86_64.msi”進行核心檔案安裝。
4.3 完成手動安裝 G CLI套件

5.打完收工(後話)
因為沒有使用VI package manager安裝,之後有使用到G CLI的套件都會要你再裝一次G CLI,這時候請記得取消勾選。不然他會安裝失敗,將你手動複製的檔案都一起移除。

2023/12/13 LabVIEW2020 with Python 3.6.8實作Protocol buffer-LabVIEW取回protobuf資料的替代方案

因為谷哥爸爸沒有為LabVIEW提供.proto產生器,所以只能借由第三方語言將protobuf資料取回,用時間及空間換取相對可以執行的方案,下面為實作方式。
利用protobuf的函式庫內的json_format.MessageToJson將protobuf資料轉換json string,LabVIEW再轉回對應的格式使用。

#ProtoBuf_Json.py
from helloworld_pb2 import helloworld
from google.protobuf import json_format
import json

    
def pb_to_json():
    hw = helloworld()
    hw.id = 168
    hw.str = "Jobs"
    strjson = json_format.MessageToJson(hw)
    return strjson

2023/12/12 LabVIEW2020 with Python 3.6.8實作Protocol buffer序列化流程-LabVIEW取回序列化資料驗証

接著”2023-12-12-labview2020-with-python-3-6-8實作protocol-buffer序列化流程-pyhon下的函數驗証“這一篇的後續。
這一篇是要記錄在LabVIEW可以取回python序列化後的結果。

步驟
1. 建立getRawData.py,將收到LabVIEW的iId及sName,寫到hw.id及hw.str。
2. 將序列化後的資料轉為16進制文字返回給LabVIEW.
3. LabVIEW寫入iId及sName後,預期就可以接回序列化的資料。

#getRawData.py
from helloworld_pb2 import helloworld

def SerializeData(iId,sName):
    # 創建一個 helloworld 實例
    hw = helloworld()
    hw.id = iId
    hw.str = sName

    # 返回解析後的數據的十六進制表示形式
    return hw.SerializeToString().hex()

2023/12/12 LabVIEW2020 with Python 3.6.8實作Protocol buffer序列化流程-LabVIEW環境確認

開發環境
LabVIEW 2020 32bit
Python 3.6.8 32bit
Python 套件 protobuf 3.7.0
protoc-3.6.1-win32.zip

確認LabVIEW2020開發環境流程
1. 開啟並使用Find example
2. 尋找到Python的範例程式
3. 開啟並執行
4. 如果沒有出現問題,代表LabVIEW與Python間連接正常

LabVIEW範例程式
LabVIEW呼叫Python node的程式畫面
LabVIEW呼叫Python的程式碼
可能出現的問題

參考資料
https://forums.ni.com/t5/LabVIEW/Using-python-for-protocol-buffer/td-p/3933707
https://protobuf.dev/programming-guides
https://blog.csdn.net/CaoMei_HuaCha/article/details/106326892
https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-win32.zip

LabVIEW 抓取WebCAM影像

付費快速的方式
Vision Acquisition Software Download – NI
Vision Acquisition Software – NI

免費的方式
透過call windows DLL
avicap32.dll
user32.dll
下面網址有先進已經提供範例程式
2 小時 完成 網路攝像頭 程式 – 第 2 頁 – NI 社區
最後一個的貼文

參考來源
攝像頭程式設計WindowsAPI – avicap32.dll 參數詳解_avicap32 無法顯示攝像頭-CSDN博客
User32.dll詳細介紹_user32.dll函數-CSDN博客
2 小時 完成 網路攝像頭 程式 – 第 2 頁 – NI 社區
NI Vision Acquisition Software、NI Vision Builder和NI Vision Development Module之間的差異 – NI