用 Python 控制 Mitsubishi PLC:MC Protocol ASCII 封包實作教學
A Python Read and Write Mitsubishi PLC using MC Protocol (ASCII mode),for M/D devices
簡介
在這篇文章中,我會介紹一套我親手開發的 Python 模組,可以直接與 Mitsubishi PLC 通訊,透過 MC Protocol(ASCII 3C frame)產生控制封包。
它能幫你從 Python 程式中,直接寫入 PLC 的 M 點、D 點,甚至可做 32-bit 控制,不需額外使用 I/O 卡或 HMI 軟體。
📍 專案連結:GitHub - python-mc-protocol
為什麼會做這個
當初我在設計 PC-based 自動化工站時,發現 PLC 通訊是個關卡。
傳統的方式多半依賴 I/O 卡、HMI 軟體,成本高又不靈活。
而我選擇用 Python 來做上位控制邏輯,希望直接控制馬達動作,但網路上卻找不到完整的 MC Protocol 實作範例。
所以我就自己動手寫了一份,並整理成模組分享出來。
Fig1,Schematic diagram
這套工具能做什麼?
功能 | 說明 |
---|---|
✅ Batch / Random 寫入 | 支援 M點、D點 |
✅ 十進位輸入 | 自動轉換成 PLC 所需格式 |
✅ 支援 32-bit 寫入 | D10/D11 組合資料 |
✅ 串口(Serial) or TCP 皆可使用 | 通用型通訊設計 |
✅ 可整合在 PyQt、自動化流程中 | 適用 IPC 控馬達或裝置 |
下面是快速範例
from mc_protocol_rw import McProtocolRW
from utils import dec_to_ascii_hex_list, dec32_to_Dword_ascii
mc = McProtocolRW()
# Batch write to M0 ~ M3
cmd1 = mc.commant_batch('M0', [1, 0, 1, 1])
# Random write to D100 = 10, D101 = 20
cmd2 = mc.commant_random(['D100', 'D101'], dec_to_ascii_hex_list([10, 20]))
# Write 32-bit value (30000000) into D10 (high), D11 (low)
cmd3 = mc.commant_random(['D10', 'D11'], dec32_to_Dword_ascii([30000000]))
下面是實際產生出,可以PLC 實際可以讀取的通訊碼。
我到這裡停下來,後面我們慢慢更新
留言
張貼留言