iT邦幫忙

2

[分享] 拒絕重複造輪子!我用 Python 開發了 5 套自動化神器來解決 Modbus、CAN 與 AI 讀檔的痛點

  • 分享至 

  • xImage
  •  

大家好,我是一名在自動化與軟硬整合領域打滾多年的工程師。

在工控領域工作,最煩的往往不是寫程式本身,而是那些「重複又瑣碎」的周邊工作。 像是:

想測個 Modbus 訊號,手邊沒有好用的 Log 工具,又要重新寫 Python 腳本。

想學 Ethernet/IP (CIP),但買不起一顆好幾萬的 Allen-Bradley PLC。

每天要讀幾百頁的 Datasheet,想用 AI 幫忙讀,但公司有 NDA 不敢傳上 ChatGPT。

車用專案要看 J1939 訊號,但 Vector CANalyzer 的授權費貴到老闆不肯買。

為了不想一直重複造輪子,也為了讓自己能早點下班,我利用週末時間,用 Python 刻了一套 「自動化工程師的生存工具箱」。

今天想跟大家分享這 5 個工具的架構與開發思路,希望能幫助到有同樣困擾的版友。

  1. 離線版 AI 知識庫 (Offline RAG with Docker)
    https://ithelp.ithome.com.tw/upload/images/20251120/20180622UD7HAtAZTM.png
    痛點: 公司有一堆機密的 PDF 技術文件要查,但不能連網、不能傳雲端。 解決方案: 我用 Docker 容器化技術,把 Ollama (跑 Llama 3 模型)、ChromaDB (向量資料庫) 和 Python Streamlit (UI) 全部包在一起。 這套系統完全斷網也能跑,直接把 PDF 丟進去,就能用自然語言問它:「這顆 IC 的耐壓是多少?」,精準度意外地好。

技術棧: Docker, Llama 3, Python, LangChain

  1. 不卡頓的 Modbus Data Logger
    https://ithelp.ithome.com.tw/upload/images/20251120/20180622enVoiPjrio.png
    痛點: 用 Python tkinter 寫 GUI 時,如果直接在主執行緒讀 Serial Port,介面一定會卡死 (Freeze)。 解決方案: 我寫了一個基於 多執行緒 (Threading) 的架構。UI 跑在主執行緒,Serial Polling 跑在背景執行緒。 另外加上了「自動 CRC-16 校驗」和「原始 Hex 紀錄」,除錯起來非常方便。

技術棧: Python tkinter, pyserial, threading

  1. 免硬體的 CAN Bus & J1939 分析器
    https://ithelp.ithome.com.tw/upload/images/20251120/20180622YhbOkb8TU8.png
    痛點: 車用 J1939 協定很複雜,且 USB-CAN 硬體適配器通常很貴。 解決方案: 這是我自己最滿意的一個工具。它底層呼叫 python-can,支援 Vector/PCAN 等硬體。 最重要的是我寫了一個 「J1939 解碼引擎」,可以直接把 18FEF100 這種 ID 翻譯成 CCVS - Vehicle Speed。 我也內建了 「模擬模式 (Demo Mode)」,就算手邊沒硬體,也能產生假資料來測試 UI 邏輯。

技術棧: Python, python-can, J1939 PGNs

  1. 支援 V2.0 的 MQTT 紀錄器
    https://ithelp.ithome.com.tw/upload/images/20251120/201806221Ui74sk25W.png
    痛點: 網路上很多 MQTT 範例都還在用舊版 paho-mqtt,新版一跑就報錯。而且我只需要把資料存成 CSV,不需要搞一堆資料庫。 解決方案: 更新到最新的 Paho-MQTT v2.0 標準 (Callback API v2),並支援帳號密碼驗證(很多雲端 Broker 必備)。 功能很單純:連線 -> 訂閱 -> 自動存 CSV,收工。

技術棧: Python, paho-mqtt v2, csv

  1. Ethernet/IP (CIP) 虛擬實驗室
    https://ithelp.ithome.com.tw/upload/images/20251120/20180622YZOUJtF6b7.png
    痛點: 想要研究 Rockwell/Omron PLC 的通訊協定,但沒有實體 PLC 可以連。 解決方案: 我用 Python 原生 socket 寫了一個 「Mock PLC Server (模擬器)」。 它會監聽 TCP 44818 和 UDP 2222,模擬 CIP 的 Forward Open 握手流程。這樣就算在家裡,也能在本機練習寫 Ethernet/IP 的 Driver。

技術棧: Python socket, struct (Raw Packet Manipulation)

結語
這些工具原本都是我為了自己工作方便寫的零散腳本,後來覺得整理一下加上 GUI 應該能幫到更多人。

我已經將這些專案的 架構設計、核心邏輯 demo 開源在 GitHub 上,大家可以自由參考或拿去修改。

如果你不想花時間自己組裝環境、安裝依賴,想要開箱即用 (Ready-to-run) 的完整原始碼與執行檔,我也把它們打包成了 大神全套包 (Ultimate Toolkit) 放在 Gumroad 上,有需要的朋友可以支持一下,省下的時間絕對划算。

Happy Coding! 🚀

GitHub
Gumroad


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言