本文介绍的 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  
    2、DEVICE WRITE(向PLC 软设备写入值)
计算机向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

FORCE ON 置位
始                 命令             地址                    终                 和校验
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