這次研究 三菱 MC protocol
這個通訊協定分為串列介面(4C,3C,2C,1C)、網路介面(4E,3E,1E)
我這次使用的是 Q03UDVCPU ,使用網路介面,所以用 3E frame,
設定PLC的通訊
請開GX Work2 建立新程式
選擇PLC 系列 與 Type
連線設定
各種連線方式都可以,先要連的上PLC
在專案中選擇PLC 參數
設定IP,通訊資料碼維持在二進制 ,下面介紹會以二進制格式講解
按 Open Setting,設定MC Protocol 通訊協定
將參數寫入到PLC
寫完之後要斷電重開
通訊測試(二進制 3E frame format)
PC端我用C# 寫Socket程式
我直接從結果介紹起,如果讀者傳送這個指令都沒有回碼了,就不用繼續往下測了。
送碼 (讀兩筆資料)
500000FFFF03000C00010001040000000000A80200
回碼 (正常回應兩筆資料)
D00000FFFF03000600000000000000
指令結構(二進制格式)
5000 00 FF FF03 00 0C00 0100 0104 0000 000000 A8 0200
標頭(Header),E71模組會自動添加,因此這邊送碼不用加 +
副標頭(Subheader) +
網路編號(Network No.) +
PC編號(PC No.) +
請求目標模組I/O編號(Request destination module I/O No.) +
請求目標模組站號(Request destination module station No.) +
請求資料長度(Request data length) +
監視計時器(Monitoring timer) +
指令(Command) +
子指令(Subcommand) +
暫存器位址(Device number) +
暫存器代碼(Device code) +
暫存器數(Number of device points)
D000 00 FF FF03 00 0600 0000 0000 0000
標頭(Header),E71模組會自動添加,因此這邊送碼不用加 +
副標頭(Subheader) +
網路編號(Network No.) +
PC編號(PC No.) +
請求目標模組I/O編號(Request destination module I/O No.) +
請求目標模組站號(Request destination module station No.) +
請求資料長度(Request data length) +
錯誤碼(Error code) +
資料1(Data1) +
資料2(Data2)
詳細解說格式
請求主要由6個區塊組成
Header + Subheader + Access route + Request data length + Monitoring timer + Request data
標頭區塊,0 Byte (Header)
E71模組會自動添加,因此這邊送碼不用加
子標頭區塊,2 Byte (Subheader)
3E frame 固定送碼 5000,固定回碼D000
存取路徑區塊,5 Byte (Access route)
網路編號 + PC編號 + 請求目的模組I/O編號 + 請求目的模組站號
(Network No. + PC No. + Request destination module I/O No. + Request destination module station No.)
一對一訪問時,網路編號指定00、PC編號指定FF
沒使用請求目的模組時,請求目的模組I/O編號固定FF03,請求目的模組站號固定00
請求資料長度區塊,2 Byte (Request data length)
後面兩個區塊(Monitoring timer + Request data)的Byte數,注意:Low Byte 先放
監視計時器區塊,2 Byte
單位為250 ms,注意:Low Byte 先放
請求資料區塊,(讀取指令10 Byte,寫入指令10+2N Byte)
讀取Word資料指令(2 + 2 + 3 + 1 + 2 Byte): 指令+子指令+暫存器位址+暫存器代碼+暫存器數
寫入Word資料指令(2 + 2 + 3 + 1 + 2 + 2 * N Byte): 指令+子指令+暫存器位址+暫存器代碼+暫存器數+資料
注意:2 Byte 及 3Byte 的資料 Low Byte 先放
暫存器代碼
例 D1000 暫存器:
D暫存器代碼 = A8,
1000轉16進制 = 03E8,注意:Low Byte 先放
送碼中的暫存器位址+暫存器代碼 = E80300A8
3E 指令表
例如寫Word資料:
指令 = 0401,注意:Low Byte 先放
子指令 = 0000,注意:Low Byte 先放
送碼中的指令+子指令 = 01040000
參考資料
留言列表