三菱PLC编程口协议.docx
《三菱PLC编程口协议.docx》由会员分享,可在线阅读,更多相关《三菱PLC编程口协议.docx(9页珍藏版)》请在冰豆网上搜索。
![三菱PLC编程口协议.docx](https://file1.bdocx.com/fileroot1/2023-1/7/9f55ce21-b4e3-4875-abe6-e3168158282a/9f55ce21-b4e3-4875-abe6-e3168158282a1.gif)
三菱PLC编程口协议
最近做一个PC通过编程口与FX PLC通讯的程序,在网上找好久,内部软元件的地址还是找不全。
没办法,只好使用串口监视软件分析 GX Developer PLC编程软件发送的代码
由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?
下面就是三菱Fx系列PLC地址对应表:
PublicConstPLC_D_Base_AddRess=4096
PublicConstPLC_D_Special_Base_AddRess=3584
PublicConstPLC_Y_Group_Base_AddRess=160
PublicConstPLC_PY_Group_Base_AddRess=672
PublicConstPLC_T_Group_Base_AddRess=192
PublicConstPLC_OT_Group_Base_AddRess=704
PublicConstPLC_RT_Group_Base_AddRess=1216
PublicConstPLC_M_SINGLE_Base_AddRess=2048(命令为7或8时)
PublicConstPLC_M_Group_Base_AddRess=256
PublicConstPLC_PM_Group_Base_AddRess=768
PublicConstPLC_S_Group_Base_AddRess=0
PublicConstPLC_X_Group_Base_AddRess=128
PublicConstPLC_C_Group_Base_AddRess=448
PublicConstPLC_OC_Group_Base_AddRess=960
PublicConstPLC_RC_Group_Base_AddRess=1472
PublicConstPLC_TV_Group_Base_AddRess=2048
PublicConstPLC_CV16_Group_Base_AddRess=2560
PublicConstPLC_CV32_Group_Base_AddRess=3072
当我们用DEVICEREAD命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。
所以当我们用FORCEON命令时,M100寄存器地址=100+2048;
这也没有什么复杂的,不是吗?
可是三菱公司好像不甘于如此,FORCEON/Off命令中地址排列与DEVICEREAD/WRITE不同,是低位在前高位在后。
如Y20,地址是0510H,代码中4个字节地址表示为:
1005。
(注意:
Y寄存器为八进制,如Y20地址=16+1280=0510H)
三菱FX系列PLC编程口通信协议总览
该协议实际上适用于PLC编程端口以及 FX-232AW 模块的通信。
感谢网友visualboy提供。
通讯格式:
命令 命令码 目标设备
DEVICE READ CMD "0" X,Y,M,S,T,C,D//设备读
DEVICE WRITE CMD "1" X,Y,M,S,T,C,D //设备写
FORCE ON CMD " 7" X,Y,M,S,T,C //置位
FORCE OFF CMD "8" X,Y,M,S,T,C //复位
传输格式:
RS232C
波特率:
9600bps
奇偶:
even
校验:
累加方式(和校验)
字符:
ASCII
16进制代码:
ENQ 05H 请求
ACK 06H PLC正确响应
NAK 15H PLC错误响应
STX 02H 报文开始
ETX 03H 报文结束
帧格式:
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
例子:
STX ,CMD ,ADDRESS, BYTES, ETX, SUM
02H, 30H, 31H,30H,46H,36H, 30H,34H, 03H, 37H,34H
SUM=CMD+......+ETX;
30h+31h+30h+46h+36h+30h+34h+03h=74h;
累加和超过两位取低两位
命令格式
1、 DEVICE READ(读出软设备状态值)
计算机向PLC发送:
始 命令 首地址 位数 终 和校验
STX CMD GROUP ADDRESS BYTES ETX SUM
例子:
从D123开始读取4个字节数据
02h 30h 31h,30h,46h,36h 30h,34h 03h 37h,34h
地址算法:
address=address*2+1000h
再转换成ASCII
31h,30h,46h,36h
PLC返回
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
注:
最多可以读取64个字节的数据
例子:
从指定的存储器单元读到3584这个数据
02h 33h 35h 38h 34h 03h 44h,36h
2、DEVICE WRITE(向PLC软设备写入值)
始 命令 首地址 位数 数据 终 和校验
STX CMD GROUP ADDRESS BYTES 1ST DATA 2ND DATA ...... LAST DATA ETX SUM
例子:
向D123开始的两个存储器中写入1234,ABCD
02h 31h 31h,30h,46h,36h 30h,34h 33h,34h,31h,32h,43h,44h,41h,42h 03h 34h,39h
PLC返回
ACK (06H) 接受正确
NAK (15H) 接受错误
3、位设备强制置位/复位
FORCE ON置位
始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 37h address 03h sum
FORCE OFF复位
始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 38h address 03h sum
PLC返回
ACK(06H) 接受正确
NAK(15H) 接受错误
设备强制中的地址公式:
Address=Address/8+100h
说明:
1.帧中的BYTES表示需要读取或者写入的字节数。
2.地址算法上有说明。
3.累加和是从STX后面一个字节开始累加到ETX的和。
通过串口监视得到的数据如下:
PLC型号:
FX0N
使用 GX Developer 的 在线-调试-软元件测试 功能
以下列出不同的操作发送的不同内容,前面一段是 Hex码 后面一段是对应的ASCII码
//////////////////////////////////CMD ON YO//////////////////
02 37 30 30 30 35 03 46 46 .70005.FF
//////////////////////////////////CMD OFF YO/////////////////////
02 38 30 30 30 35 03 30 30 .80005.00
//////////////////////////////////CMD ON Y1////////////////////
02 37 30 31 30 35 03 30 30 .70105.00
//////////////////////////////////CMD OFF Y1//////////////////
02 38 30 31 30 35 03 30 31 .80105.01
//////////////////////////////////CMD ON XO//////////////////
02 37 30 30 30 34 03 46 45 .70004.FE
//////////////////////////////////CMD OFF XO/////////////////////
02 38 30 30 30 34 03 46 46 .80004.FF
//////////////////////////////////CMD ON X1//////////////////
02 37 30 31 30 34 03 46 46 .70104.FF
//////////////////////////////////CMD OFF X1//////////////////
02 38 30 31 30 34 03 30 30 .80104.00
//////////////////////////////////CMD ON T0//////////////////
02 37 30 30 30 36 03 30 30 .70006.00
//////////////////////////////////CMD OFF T0//////////////////
02 38 30 30 30 36 03 30 31 .80006.01
//////////////////////////////////CMD ON T1//////////////////
02 37 30 31 30 36 03 30 31 .70106.01
//////////////////////////////////CMD OFF T1/////////////////
02 38 30 31 30 36 03 30 32 .80106.02
//////////////////////////////////CMD ON C0//////////////////
02 37 30 30 30 45 03 30 46 .7000E.0F
//////////////////////////////////CMD OFF C0//////////////////////
02 38 30 30 30 45 03 31 30 .8000E.10
//////////////////////////////////CMD ON C1//////////////////
02 37 30 31 30 45 03 31 30 .7010E.10
//////////////////////////////////CMD OFF C1//////////////////////
02 38 30 31 30 45 03 31 31 .8010E.11
//////////////////////////////////CMD ON M0//////////////////
02 37 30 30 30 38 03 30 32 .70008.02
//////////////////////////////////CMD OFF M0//////////////////////
02 38 30 30 30 38 03 30 33 .80008.03
//////////////////////////////////CMD ON M1//////////////////
02 37 30 31 30 38 03 30 33 .70108.03
//////////////////////////////////CMD OFF M1//////////////////////
02 38 30 31 30 38 03 30 34 .80108.04
//////////////////////////////////CMD ON S0//////////////////
02 37 30 30 30 30 03 46 41 .70000.FA
//////////////////////////////////CMD OFF S0//////////////////////
02 38 30 30 30 30 03 46 42 .80000.FB
//////////////////////////////////CMD ON S1//////////////////
02 37 30 31 30 30 03 46 42 .70100.FB
//////////////////////////////////CMD OFF S1//////////////////////
02 38 30 31 30 30 03 46 43 .80100.FC
//////////////////////////////////CMD WRITE D0 15AB 16Bit /////////////////
02 31 31 30 30 30 30 32 41 42 31 35 03 .1100002AB15.
34 30 40
//////////////////////////////////CMD WRITE D1 15AB15AB 32Bit /////////////////
02 31 31 30 30 30 30 34 41 42 31 35 41 .1100004AB15A
42 31 35 03 32 42 B15.2B
//////////////////////////////////CMD WRITE T0 15AB 16Bit /////////////////
02 31 30 38 30 30 30 32 41 42 31 35 03 .1080002AB15.
34 37 47
//////////////////////////////////CMD WRITE T1 15AB15AB 32Bit /////////////////
02 31 30 38 30 30 30 34 41 42 31 35 41 .1080004AB15A
42 31 35 03 33 32 B15.32
//////////////////////////////////CMD WRITE C0 15AB 16Bit /////////////////
02 31 30 41 30 30 30 32 41 42 31 35 03 .10A0002AB15.
35 30 50
//////////////////////////////////CMD WRITE C1 15AB15AB 32Bit /////////////////
02 31 30 41 30 30 30 34 41 42 31 35 41 .10A0004AB15A
42 31 35 03 33 42 B15.3B
以上是用FX-0N PLC 时的情况,从上面的数据很容易分析出内部软元件的地址,有趣的是在换成FX-1N 时发现有所不同
FX-1N PLC
以下列出不同的操作发送的不同内容
//////////////////////////////////CMD ON YO//////////////////
02 45 37 30 30 30 43 03 35 32 .E7000C.52
//////////////////////////////////CMD OFF YO/////////////////////
02 45 38 30 30 30 43 03 35 33 .E8000C.53
//////////////////////////////////CMD ON Y1////////////////////
02 45 37 30 31 30 43 03 35 33 .E7010C.53
//////////////////////////////////CMD OFF Y1//////////////////
02 45 38 30 31 30 43 03 35 34 .E8010C.54
//////////////////////////////////CMD ON XO//////////////////
02 45 37 30 30 31 32 03 34 32 .E70012.42
//////////////////////////////////CMD OFF XO/////////////////////
02 45 38 30 30 31 32 03 34 33 .E80012.43
//////////////////////////////////CMD ON X1//////////////////
02 45 37 30 31 31 32 03 34 33 .E70112.43
//////////////////////////////////CMD OFF X1//////////////////
02 45 38 30 31 31 32 03 34 34 .E80112.44
//////////////////////////////////CMD ON T0//////////////////
02 45 37 30 30 31 30 03 34 30 .E70010.40
//////////////////////////////////CMD OFF T0//////////////////
02 45 38 30 30 31 30 03 34 31 .E80010.41
//////////////////////////////////CMD ON T1//////////////////
02 45 37 30 31 31 30 03 34 31 .E70110.41
//////////////////////////////////CMD OFF T1/////////////////
02 45 38 30 31 31 30 03 34 32 .E80110.42
//////////////////////////////////CMD ON C0//////////////////
02 45 37 30 30 30 46 03 35 35 .E7000F.55
//////////////////////////////////CMD OFF C0//////////////////////
02 45 38 30 30 30 46 03 35 36 .E8000F.56
//////////////////////////////////CMD ON C1//////////////////
02 45 37 30 31 30 46 03 35 36 .E7010F.56
//////////////////////////////////CMD OFF C1//////////////////////
02 45 38 30 31 30 46 03 35 37 .E8010F.57
//////////////////////////////////CMD ON M0//////////////////
02 45 37 30 30 30 30 03 33 46 .E70000.3F
//////////////////////////////////CMD OFF M0//////////////////////
02 45 38 30 30 30 30 03 34 30 .E80000.40
//////////////////////////////////CMD ON M1//////////////////
02 45 37 30 31 30 30 03 34 30 .E70100.40
//////////////////////////////////CMD OFF M1//////////////////////
02 45 38 30 31 30 30 03 34 31 .E80100.41
//////////////////////////////////CMD ON S0//////////////////
02 45 37 30 30 31 34 03 34 34 .E70014.44
//////////////////////////////////CMD OFF S0//////////////////////
02 45 38 30 30 31 34 03 34 35 .E80014.45
//////////////////////////////////CMD ON S1//////////////////
02 45 37 30 31 31 34 03 34 35 .E70114.45
//////////////////////////////////CMD OFF S1//////////////////////
02 45 38 30 31 31 34 03 34 36 .E80114.46
//////////////////////////////////CMD WRITE D0 15AB 16Bit /////////////////
02 45 31 30 34 30 30 30 30 32 41 42 31 35 03 .E10400002AB15.
42 38 B8
//////////////////////////////////CMD WRITE D1 15AB15AB 32Bit /////////////////
02 45 31 30 34 30 30 32 30 34 41 42 31 35 41 .E10400204AB15A
42 31 35 03 41 35 B15.A5
//////////////////////////////////CMD WRITE T0 15AB 16Bit /////////////////
02 45 31 30 31 30 3