PLC
直播中

李玲

7年用户 1251经验值
私信 关注

如何去编写PC机的通信程序

PLC的通讯协议有哪几种格式?

如何去编写PC机的通信程序?

回帖(1)

康辅佑

2021-9-29 15:34:09
  本文介绍的 PC 与三菱 FX 系列 PLC 通信,是通过 PLC 的编程口与 PC 机的串口进行的,采用 SC-09 编程电缆作为计算机与 PLC 通信的连线。电缆的 9 芯 D 形插头连接在计算机串口上,另一端连接 PLC 的 RS-422 编程口。
  编写 PC 的通信程序可采用汇编语言、各种高级语言,也可以采用工控组态软件或直接采用 PLC 厂家的通信软件。本文采用 VB6 . 0 软件,它必须依据所连接 PLC 的通信规程来编写通信协议,所以先简单介绍 FX 系列 PLC 的通信协议。
  一、 FX 系列 PLC 的通讯协议
  1 .数据传输格式
  FX 系列 PLC 采用异步格式,由 1 位起始位、 7 位数据位、 l 位偶校验位及 l 位停止位组成,波特率为 9600bps ,字符为 ASCi Ⅱ码。
  2 .通信命令
  FX 系列 PLC 有 4 条通信命令,即读命令、写命令、强制通命令、强制断命令。表 1 中, X 为输入继电器; Y 为输出继电器; M 为辅助继电器; S 为状态元件; T 为定时器; C 为计数器; D 为数据寄存器。
  3 .通信控制字符
  FZ 系列 PLC 采用面向字符的传输规程,用到 5 个通信控制字符,如表 2 所示。
  4 .报文格式
  PC 机向 PLC 发送的报文格式如表 3 所示。其中, STX 为开始标志; ETS 为结束标志; CMD 为命令的 ASC Ⅱ码: SUMH 、 SUML 为从 CMD 到 ETX 按字节求累加和,溢出不计。由于每字节十六进制数变为两字节 ASC Ⅱ代码,故校验和为 SUMH 与 SUMI 。
  PLC 向 PC 机发送的应答报文格式如表 4 所示。
  二、 PC 通信程序的编写
  1 .通信口初始化
   MSComm 控件简介: VB 带有专门管理串行通讯的 MSComm 控件。只需设置几个主要参数就可以实现 PLC 与 PC 间的串行通讯。要完成通信必须设置 MSComm 的相关属性值,即通信口初始化,其步骤如下:
  (1)CoinmPort :设置或传回通信连接端口代号。
  (2)Settings :设置初始化参数。以字 - 符串的形式设置或传回连接速度、奇偶校验、数据位、停止位等 4 个参数。
  (3)PortOpen :设置或传回通信连接端口的状态。
  (4)Input :从输入寄存器传回并移除字符。
  (5)Output :将一个字符串写入输出寄存器。
  (6)InputLen :指定由串行端口读入的字符串长度。
  (7)InBufferCount:传回在接收寄存器中的字符数。
  2 .通讯程序举例
  首先,在窗体开始设计之前,添加 MSComm 控件和按钮、文本框、标签等。
  (1)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 的应答报文格式如表 6 所示。
  (2) 把数据写入 PLC
  例如,向 PLC 的 D123 数据寄存器写入数据“ 1234ABCD ”的报文格式如表 7 所示
  本文介绍的利用 VB6 . O 实现 PC 与三菱 PLC 通信的基本方法,切实可行,具有广泛的实用价值。对初学者很有帮助。
  三菱FX系列PLC编程口通信协议举例
  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,将123 转换为16进制*2 得F6,10F6
  再转换成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的和。
  三菱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;
  累加和超过两位取低两位
举报

更多回帖

发帖
×
20
完善资料,
赚取积分