用 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 實際可以讀取的通訊碼。


我到這裡停下來,後面我們慢慢更新

留言

這個網誌中的熱門文章

DIY AC inverter _1(Sine Wave)

DIY motor driver