2020年4月1日 星期三

Q03UDV MC通訊 (RJ-45)

2020.04.01 update

這次研究 三菱 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


參考資料

沒有留言:

張貼留言

文章測試

Test