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

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

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

安裝步驟
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,這時候請記得取消勾選。不然他會安裝失敗,將你手動複製的檔案都一起移除。

    Ubuntu 22.04 server 安裝 Docker步驟

    紀錄一下安裝手順,免得每次找的資料都不同。

    1.更新庫
    sudo apt update

    2.安裝docker
    sudo apt install docker.io

    3.安裝docker-compose
    sudo apt install docker-compose

    4.啟動docker服務
    sudo systemctl start docker

    5.使docker服務在每次重開系時,自動運作。
    sudo systemctl enable docker

    6.安裝版本確認
    docker –version

    版本顯示畫面

    7.將現在登的ubuntu的使用者加入docker權限
    sudo usermod -aG docker $USER

    8.使新加入的使用者生效
    newgrp docker

    9.測試container是否可以正常運作
    docker container run hello-world

    運作container的畫面

    使用樹梅派做為TCP資料收集器

    源起
    有人問我說我只是想要抓TCP server上廣播出來的資料,一定要買NB or PC來進行嗎?有比較實惠的方案嗎?所以就有了這一篇文章了。稍為整理了一下所需要的資訊及步聚。

    材料
    樹梅派 3B+32G SD卡,以上(我是用樹梅派4B)
    一台Windows電腦
    SD讀卡機
    樹梅派及Windows電腦需要相同網域下

    步聚
    1. 下載樹梅派 OS
    2. 安裝及設定 樹梅派 OS
    3. 使用SSH在樹梅派上寫python讀取TCP server資料的程式。
    4. 進行功能測試

    步聚 1. 下載樹梅派 OS
    https://www.raspberrypi.com/software/ 下載映像檔安裝程式。

    步聚 2. 安裝及設定 樹梅派 OS
    1. 開啟程式已下載的安裝程式
    2. 安裝Raspberry Pi Imager
    3. 啟動Raspberry Pi Imager
    4. 在設定畫面上設定你的裝置型號及讀卡機位置
    5. 作業系統請選擇Paspberry Pi OS(Legacy, 64-bit)
    6. 設定你的環境參數,需將SSH開啟
    7. 完成SD卡燒錄後,將卡片移回樹梅派
    8. 樹梅派開機測試

    OS版本要注意,不要選錯了
    我的測試環境
    先進行環境編輯,再做SD燒錄
    主機及帳號要記得設定,免得無法登入
    需要開啟SSH服務

    步聚 3. 使用SSH在樹梅派上寫python,讀取TCP server資料
    1. 因為安裝的OS已經有Python及相關套件,所以不需要另外安裝其它軟體
    2. 使用windows console, 透過ssh連線到樹梅派
    3. 在ssh下,執行”nano my_program.py”開啟nano編輯器
    4. 撰寫Python程式,抓取TCP Server資料
    5. 寫完存檔

    步聚 4. 進行功能測試
    1. 在Windows電腦上,用SSCOM開啟TCP server模式,定時送出資料
    2. 在樹梅派上啟動步取3的程式,TCP Server的資料結果呈現在SSH視窗上

    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序列化流程-Pyhon下的函數驗証

    接著2023/12/12 LabVIEW2020 with Python 3.6.8實作Protocol buffer序列化流程-建置proto檔並產生Python library (.py)這一篇的後續。
    這一篇是要記錄要在Python下確認protobuf library有正常運作。

    步驟
    1. 建立writer.py,將資料序列化後,寫到helloworld.buffer檔案中。
    2. 建立reader.py,將序列化後的helloworld.buffer檔案資料讀出,並反序列化後讀出,顯示原始資料在視窗中。

    #riter.py
    from helloworld_pb2 import helloworld
     
    def main():
        hw = helloworld()
        hw.id = 123
        hw.name = "Jobs"
        print(hw)
     
        with open("helloworld.buffer", "wb") as f:
            f.write(hw.SerializeToString())
     
    if __name__ == "__main__":
        main()
    #reader.py
    from helloworld_pb2 import helloworld
     
    def main():
        hw = helloworld()
        with open("helloworld.buffer", "rb") as f:
            hw.ParseFromString(f.read())
            print(hw.id)
            print(hw.name)
      
    if __name__ == "__main__":
        main()
    序列化及反序列化後的結果
    序列化後的二進制檔

    2023/12/12 LabVIEW2020 with Python 3.6.8實作Protocol buffer序列化流程-建置proto檔並產生Python library (.py)

    步驟
    1. 撰寫proto檔,將檔案存到D:\Python_Protobuf
    2. 將protoc.exe複製到D:\Python_Protobuf目錄下
    3. 執行命令提示視窗打開,將路徑指向到D:\Python_Protobuf下
    4. 在命令提示視窗輸入”protoc -I=./ –python_out=./ ./helloworld.proto“
    5. 如果沒有問題,在D:\Python_Protobuf會有”helloworld_pb2.py“檔案產生
    6. 現在就可以在Python IDE下 import “helloworld” 來使用了

    syntax = "proto3";
    
    package helloworld_package;
    message helloworld
    {
        int32 id = 1;
        string name = 2;
        int32 wow = 3;
    }

    protoc -I=./ –python_out=./ ./helloworld.proto
    -I: 是設定來源路徑
    –python_out: 用於設定編譯後的輸出結果,如果使用其它語言請使用對應語言的option
    最後一個參數是你要編譯的proto文件