可以為LabVIEW建立自己的Docker image使用容器技術來進行自動化的CI/CD嗎? ->答:目前還不行

目前NI的授權方式關係,以及NIPM與JKI VIPM的安裝方式,在無法完全在command line interface作業的狀況下,很顯然只能期待未來NI授權方式改變及NIPM與JKI VIPM可以完全支援command line interface作業的狀況下再來研究了。

參考資料
Support VIPM installation on a Docker container (Windows)
LabVIEW + Docker + Windows = Match?
20 分鐘入門 Docker,建立屬於你自己的 Docker Image|六角學院|2023 鐵人賽 #23
自建 Docker Image
docker全套工作流的白话教程实用入门指南 快速掌握docker的基本操作 全套工作流的白话教程 堪称喂饭|拉取镜像|创建容器|运行容器|修改容器|容器打包成镜像|推送自己的镜像
Understanding Docker for Windows
Part 4 – Making Windows Containers for Docker to Work
“Contain” your excitement!

Dockerhub – LabVIEW Image無法使用

之前有看到國外大神分享LabVIEW docker file時,我以為我架好docker環境後,可以直接拿他的image來用,沒有想到,事情沒有這麼簡單。不出意外,意外就發生了,這一篇是一個記錄錯誤狀況的文,因為不知道要花多少時間才能解決這個問題。

國外大神分享的dockerhub image

在下載21GB大小的image檔案後,以為可以正常執行的我,結果看到這個錯誤訊。
(HTTP code 500) server error – container 4eedfcb98ee095fc4365a37f11eb29cedad324d7abc4bea754893c75448136f2 encountered an error during hcs::System::Start: failure in a Windows system call: The virtual machine or container exited unexpectedly. (0xc0370106)

丟給chatGPT的回答如下:
這個錯誤是 Docker 在嘗試啟動容器時遇到了 Windows 系統呼叫的失敗,指出虛擬機或容器意外退出。這可能是因為各種原因所引起的,包括系統資源不足、配置問題或其他Docker相關問題。 要解決這個問題,你可以嘗試以下幾種方法:
1. **重新啟動Docker服務**:有時候重新啟動Docker服務可以解決臨時的問題。
2. **檢查系統資源**:確認你的機器有足夠的記憶體和CPU來運行Docker容器。資源不足可能會導致無法啟動容器。
3. **更新Docker Desktop**:確保你使用的是最新版本的Docker Desktop,因為新版本可能含有重要的錯誤修正。
4. **查看Docker日誌**:檢查Docker容器的日誌文件,它可能包含有助於診斷問題的詳細資訊。
5. **移除並重新創建容器**:有時候刪除故障的容器,然後重新創建一個新容器可以解決問題。
6. **檢查Windows事件查看器**:查看Windows事件查看器以搜索可能相關的錯誤訊息。
7. **更新Windows**:確保Windows系統是最新的,並安裝了所有必要的更新。
### 注意事項: – 在進行任何修改之前,確保備份你的容器和相關數據。 – 如果問題依然存在,建議參照Docker和Windows的官方文檔,尋求更具體的解決方案。 – 實施以上解決方案後仍無法修復問題時,你可以考慮刪除並重新安裝Docker Desktop。 – 如果你在處理過程中不確定某些步驟,可以尋求社群的幫助,例如Docker 社群論壇、Stack Overflow等。

GitLab-CI的檔案編寫的血涙

1.在寫.gitlab-ci.yml檔案時,一定注意的事項
– 要養成的習慣,就是將檔案中的變數一律大寫。
– 變數中,不能有”-“符號
目前不小心中了上面兩個招,花了我大把時間找問題。

不斷的試錯過程

极狐GitLab CI/CD 入门
极狐GitLab CI/CD 变量

不完美的LabVIEW + gitlab-runner CI流程

2024/03/14 更新
原來是自己沒有注意跑了兩個runner,所以資源衝突造成的,移除多餘的runner之後就正常了。

不知道是不是因為架設一台實體電腦跑gitlab-runner,所以在常常開關LabVIEW之後,就出現下面的狀況,在windows管理員中,看到LabVIEW的執行緒就卡住了。即便手動關閉後,讓這一次可以正常執行完CI流程,但再下次執行CI流程後,還是很容的再出現相同的狀況,看來還是需要進到容器,再來觀察這個狀況會不會有所改善。

從GitLab中,看到工作被中斷的狀況
這個是目前維一有看到什麼服務被卡住,很多時候只看到LabVIEW的執行緒沒有被關閉卡在那。
這個就是常態,上面這張圖還是重開電腦第一次執行CI時,就中招了。

建立Windows容器

為什麼需要建立Windows容器,因為想要在同一台機器上,跑gitlab-runner來編譯不同版本的LabVIEW程式使用,做到開發電腦與gitlab-runner可以各司其職的環境。這樣帶來的好處是從GitLab上,不但可以做到版本控制,也可以看到程式碼做過那一些Unit Test。提高使用者對程式的信心度。

借微軟的圖來說一下,我要借用容器化的方式,架構不同環境來跑gitlab-runner,進而達成不同版本的LabVIEW版本的編譯環境在同一台電腦上,但又不會互相影響所需要套件。

出處:https://learn.microsoft.com/zh-tw/virtualization/windowscontainers/about/

建立的Windows容器流程
1. 在Windows上開啟Hyper-V功能 (Windows專業版以上才有的功能)
2. 安裝Docker
3. Docker切換到Windows container
4. 建構Dockerfile

常用指令
# 以管理員權限打開PowerShell窗口
# 檢查Hyper-V特性狀態
DISM /Online /Get-FeatureInfo /FeatureName:Microsoft-Hyper-V

# 檢查所有可選功能狀態
Get-WindowsOptionalFeature -Online

# 啟用Hyper-V功能 ,在開啟Docker的Windows Container之前要記得先開。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

建立最基本的docker image所看到資

參考資料
Windows 容器需求
Windows 和容器
在 Windows 10 上安裝 Hyper-V
Windows 上的 Dockerfile

Docker踩雷紀錄

Docker for Windows的預設Containers是在Linux,所以之前一直沒有辦法抓取Winsows的Image,所以後續的動作都卡住了。
Docker for Windows如果要改為使用Windows Containers,需要是專業版,且Hyper-V相關工具要先開啟及安裝設定後,才能使用。

Windows家用版的選項如下

Windows專業版的畫面

參考來源
“Contain” your excitement!

單元測試之 JKI VI Tester in LabVIEW

這裡要實作的是JKI VI Tester,我的習慣使用流程如下
1. 開啟專案,在Tools -> VI Tester -> New -> Test Case,建立測試物件
2. 將測試物件放在test -> VI Tester實際的資料夾下,並命名為“測試名+TestCase.lvclass”
3. 將專案中的測試物件移到test的虛擬資料夾下。
4. 在展開測試物件,在”testExample.vit”點下右鍵,點選“New from Template”,建立新的測試案例
5. 撰寫測試案例
6. VI存檔
7. 專案存檔
8. 再從專案下Tools -> VI Tester -> Test VIs…
9. 執行測試

建立測試物件
新增所出現的檔案架構
從模板建立測試VI,減少重覆的工作。
測試模板,減少拉線的時間
撰寫測試VI
開啟VI Tester測試畫面
除了可以有UI看到測試結果,也可以透CLI輸出文件

參考資料來源
LAF Q2 2015 – Unit Testing with the JKI VI Tester (Casey Lamers)
Testing a VI with VI Tester using Pass/Fail Criteria
Creating a Test Case and Test Method in VI Tester
此專案原始碼
JKI VI Tester by JKI – Toolkit for LabVIEW Download

關於4~20mA 電流訊號的二三事

4-20mA電流訊號被廣泛使用,有以下幾個優點:
支援遠距離傳輸:相較於電壓訊號,電流訊號的抗干擾能力較強。 它不受電源電壓的波動和傳輸線路電阻的影響,因此可以在工業環境中保證資料的準確性,特別是在長距離傳輸時。
方便偵測設備故障:4-20mA的電流訊號在設備斷開或故障時,電流會下降到0mA或其他值,這樣就可以輕易偵測出設備的故障。
然而,儘管4-20mA電流訊號有其優點,但其中一些設備(如微處理器、資料擷取設備、單晶片等)的介面往往是基於電壓的。 這就需要將4-20mA 的電流訊號轉換為對應的電壓訊號,以方便這些設備的介面進行處理和解析,進行下一步的控製或資料分析。
另外,電壓訊號也可以提供更高的分辨率,對於一些需要高準確度的應用場合,可能會優先選擇電壓訊號。

本著錢要用在刀口上,所以就稍為整理的了一下,得到以下想法
要便宜不怕麻煩就自己組,目前看起來是用Arduino R4 Uno + 轉換模組,約1000元,精度夠,但是資料取樣率就看Arduino怎麼寫了,但可以想像速度是一般般了。
只要有功能又不要太貴,精度跟時間不在意的就可以選表頭,5百元有找,但是精度跟取樣率不確定,還有要處理通訊協定。
需要有功能加上好的服務,又可以在LabVIEW有好的整合性 WPC Ethan-1,重點是有量測需求可以找他們討論,免得浪費時間。
如果有品牌情節請直上NI or 研華 or 凌華的DAQ

參考資料
WPC 資料擷取裝置 (DAQ)
電流轉電壓模組 4-20mA、0-20mA 轉0-3.3V 0-5V 0-10V
Arduino UNO R4 Minima 控制板(正宗原廠_品質保證)
【才嘉科技】0-10V 0-20mA 2-10V 4-20mA 數位訊號顯示表 類比量輸入顯示表 數顯表頭 RS485
ADLINK Technology USB-1903
CT-2012 4-20MA控制/警報表頭 產品型錄

LabVIEW跨平台開發的注意事項 (Windows or Linux)

因為在Windows上用LabVIEW進行開發也超過20個年頭,但是一直忘了當初為什麼沒有想到用Linux下進行LabVIEW開發,直到最近因為要用GitLab CI/CD與在Line群上討論到,所以今天就把他寫下來,之後有更新來這裡回顧。

注意事項
1. LabVIEW專案所使用的硬體是否有支援Windows與Linux.
2. LabVIEW專案所使用的硬體是否有提供對應的dll 與so檔
3. LabVIEW專案是否有用到.net framework元件,如果有用到,則只能在Windows OS下運作
4. LabVIEW專案在那個OS下的編譯出來可執行二進制檔案,也只能回到該作業系統示運作
5. 如果只是要進行code review,因為沒有要編譯成可執行二進制檔,則沒有上述限制

參考資料
LabVIEW and Microsoft Windows Compatibility
LabVIEW 與 Linux 作業系統相容性

LabVIEW 單元測試與執行檔編譯的自動化

感謝國外各路大神提供的各項toolkits,目前整理過後,已經可以自動化的進行單元測試後,再編譯成執行檔。但其步驟和細節太多了,只能慢慢的補上設定過程。

這裡先說,這次的gitlab-runner是用SAS G-CLI Tools Documentation裡的設定,與之前用的powershell不同。

我這個專案的GitLab路徑
LabVIEW-CICD

參考資料
SAS G-CLI Tools Documentation
LabVIEW Project Template
Caraya-CLI-extension
Caraya CLI Extension by G Open Source Project for LabVIEW – Toolkit for LabVIEW Download