本文介绍的 PC 与三菱 FX 系列 PLC 通信,是通过 PLC 的编程口与 PC 机的串口进行的,采用 SC-09 编程电缆作为计算机与 PLC 通信的连线。电缆的 9 芯 D 形插头连接在计算机串口上,另一端连接 PLC 的 RS-422 编程口。
编写 PC 的通信程序可采用汇编语言、各种高级语言,也可以采用工控组态软件或直接采用 PLC 厂家的通信软件。本文采用 VB6 . 0 软件,它必须依据所连接 PLC 的通信规程来编写通信协议,所以先简单介绍 FX 系列 PLC 的通信协议。
数据传输格式
FX 系列 PLC 采用异步格式,由 1 位起始位、 7 位数据位、 1 位偶校验位及1位停止位组成,波特率为 9600bps ,字符为 ASCII码。
PLC的存储单元分别为: X 为输入继电器; Y 为输出继电器; M 为辅助继电器; S 为状态元件; T 为定时器; C 为计数器; D 为数据寄存器。
三菱PLC编程口的通讯只有四个命令,即:
命令 命令码 目标设备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
五个标示:
ENQ 05H 请求
ACK 06H PLC正确响应
NAK 15H PLC错误响应STX 02H 报文开始
ETX 03H 报文结束
使用累加方式的和校验,帧格式如下:
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
和校验:
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。
设备状态读取与写入
地址算法为:address=address×2+1000h
1、DEVICE READ(读出软设备状态值)计算机向PLC发送:
始 命令 首地址 位数 终 和校验
STX CMD GROUP ADDRESS BYTES ETX SUM
PLC 返回
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
举例:PC 从 PLC 中读取数据
假设 PC 要从 PLC 中读入从 D123 开始的 4 个字节的数据 ( 占用两个数据寄存器: D123 、 D124) ,其报文如表 5 所示。
根据三菱 FX 系列 PLC 编程口通信协议,地址算法为
address=address×2+1000h
将地址 123 转换成十六进制为 7Bh ,因此首地址为:
address=addressx2+1000h=7Bhx2+1000h=10F 6h .
再转换成 ASCII 码为 31h,30h,46h,36h
校验和 SUM=30H+31H+30H+46H+36H+30H+34H+03H=174H ,溢出部分不计,故 SUMH 为 "7" , SUML 为 "4" ,相应的 ASC Ⅱ码为“ 37H ”和“ 34H ”。
计算机向PLC发送:
始 | 命令 | 首地址 | 位数 | 终 | 和校验 |
STX 02h |
CMD 30h |
GROUP ADDRESS 31h,30h,46h,36h |
BYTES 30h,34h |
ETX 03h |
SUM 37h,34h |
PLC返回,从指定的存储器单元读到3584这个数据
STX |
1ST DATA |
ND DATA | .... | LAST DATA | ETX | SUM |
02h | 33h | 35h | 38h | 34h | 03h | 44h,36h |
计算机向PLC发送:
始 命令 首地址 位数 数据 终 和校验
PLC 返回
ACK (06H) 接受正确
NAK (15H) 接受错误
举例:向D123开始的两个存储器中写入1234,ABCD
始 | 命令 | 首地址 | 位数 | 数据 | 终 | 和校验 | |||
STX | CMD | GROUP ADDRESS | BYTES | 1ST DATA | 2ND DATA | ...... | LAST DATA | ETX | SUM |
02h | 31h | 31h,30h,46h,36h | 30h,34h | 33h,34h,31h,32h,43h,44h,41h,42h | 03h | 34h,39h |
PLC返回:ACK (06H) 接受正确 ;或者是NAK (15H) 接受错误
位设备强制置位/复位
设备强制中的地址公式:Address=Address/8+100h
始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 37h address 03h sum
始 | 命令 | 地址 | 终 | 和校验 |
STX | CMD | ADDRESS | ETX | SUM |
02h | 37h | address | 03h | sum |
FORCE OFF 复位
始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 38h address 03h sum
始 | 命令 | 地址 | 终 | 和校验 |
STX | CMD | ADDRESS | ETX | SUM |
02h | 38h | address | 03h | sum |
PLC 返回
ACK(06H) 接受正确
NAK(15H) 接受错误
以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:
Public Const PLC_D_Base_AddRess = 4096
Public Const PLC_D_Special_Base_AddRess = 3584
Public Const PLC_Y_Group_Base_AddRess = 160
Public Const PLC_PY_Group_Base_AddRess = 672
Public Const PLC_T_Group_Base_AddRess = 192
Public Const PLC_OT_Group_Base_AddRess = 704
Public Const PLC_RT_Group_Base_AddRess = 1216
Public Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)
Public Const PLC_M_Group_Base_AddRess = 256
Public Const PLC_PM_Group_Base_AddRess = 768
Public Const PLC_S_Group_Base_AddRess = 0
Public Const PLC_X_Group_Base_AddRess = 128
Public Const PLC_C_Group_Base_AddRess = 448
Public Const PLC_OC_Group_Base_AddRess = 960
Public Const PLC_RC_Group_Base_AddRess = 1472
Public Const PLC_TV_Group_Base_AddRess = 2048
Public Const PLC_CV16_Group_Base_AddRess = 2560
Public Const PLC_CV32_Group_Base_AddRess = 3072