摘要:针对现有潜水器模拟装置数据采集和处理方法单一、故障率高、通讯系统复杂的不足。介绍了STM32单片机与西门子S7-1200系列PLC 实现远距离自定义通信协议的串行通信的硬件连接和软件实现方法;重点阐述了自定义通信协议的实现。该方案已实际应用于潜水器模拟控制平台项目中;实现了系统交互式通信。
关键词:PLC ,单片机,通信协议,串行通信
Abstract 押This paper introduces the hardware connection and software realization method of serial communication between STM32MCU and SIEMENS S7-1200series PLC.Focuses on the implementation of the custom communication protocol.This scheme has been applied to the submarine simulation control platform project.It realizes the system interactive communication.
Keywords 押PLC熏MCU熏communication protocol熏serial communication
传统的潜水器模拟装置控制系统存在以下两个不足:一是数据采集和处理方式单一,故障率高;二是通讯系统逻辑层次凌乱,没有统一标准。能够解决上述问题意义重大。因此本文采用单片机和PLC 的相互配合,扩展控制功能,实现对系统的综合控制。下面以西门子PLC S7-1200系列与STM32单片机的通信为例,阐述自定义通信协议的实现方法。1硬件设计
1.1STM32单片机
ST 公司的STM32单片机的优异性体现在以下几个方面:价格低廉、外设较多、开发成本极低以及杰出的功耗控制等。STM32的串口资源相当丰富,功能也相当强大。本文所使用的STM32F103ZET6型号开发板最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯等。采用串口2来实现串行通信所需的两条引脚是PA2和PA3,通过STM32的PG9控制MAX485E 的收发以及三极管的基极。当PG9=0时,为接收模式;当PG9=1时,为发送模式。1.2S7-1200系列PLC
西门子公司S7-1200系列PLC 通过增添通信模块CM1241(RS422/485)实现串行通信,本文采用RS-485接口标准,接收差模信号,可以组成半双工串行通信网络。S7-1200采用自由端口模式协议,协议通过在软件中配置消息接收的格式和编程实现。通过单片机与PLC 的配合实现自定义协议通信,在传送大量数据时是很方便的。1.3MAX485E 芯片
MAX485E 采用半双工通讯方式,它实现TTL 电平转换为RS-485电平的功能。MAX485E 芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO 和DI 端分别为接收器的输出和驱动器的输入端,与STM32的串口2的PA2和PA3相连即可;接收和发送的使能端分别为/RE 和DE 端,当/RE 为逻辑0时,MAX485E 处于接收状态;当DE 为逻辑1时,MAX485E 处于发送状态。因为MAX485工作在半双工状态,所以只需用STM32的PG9控制这两个引脚即可。同时需在A 和B 端之间加匹配电阻,一般可选120赘的电阻。1.4S9013三极管
S9013是一种NPN 型小功率三极管。S9013NPN 三极管主要用途:音频放大、推挽输出以及开关等。本文中采用单片机
来控制PLC ,但是单片机的管脚最大输出电压只有3.3V ,不足以控制PLC 的IO 口。采用图1的接法(共发射极)能够放大电压起到开关的作用从而控制PLC 的IO 口。
图1信号转换电路
2通信系统设计
为了提高通讯的实时性及可靠性,除了改变传输的波特率以外,还应尽量减小每个通信周期传送的数据量。制定用户通信协议的核心是合理安排数据结构,使频率变化高的数据在每个通信周期内都能及时传输,而频率变化低的数据只有在变化稳定后方可进行传输[1-3]。2.1通信协议设计
单片机使用串口2进行异步发送和接收,协议用C 语言编程实现。一次发送的一组数据作帧,每帧数据最多可由30个字符组成,考虑到传输数据量较大,本文一次传送16个字符,且采用多次传送方式。单片机发送的命令的具体格式如下:1)起始符占一个字符,设置为6A (可任意配置);2)标识符占一个字符,用于区分多组数据;3)数据占12个字符,存储需要发送的数据;
4)校验符占一个字符,校验发送的数据是否正确;5)结束符占一个字符,设置为1C (可任意配置)。
PLC 采用自由口通信模式,可以实现用户自定义通信协议。本文中PLC 接收消息开始字符设置成6A ,接收数据的长度为16个字符,消息结束字符为1C ,配置如图2、图3所示。这样配置刚好与单片机所发送的数据相对应。
STMZET6与S7-1200自定义通信协议实现串行通信
张
堃1牟少芳1刘晓杰2丁新平1张民1
(1青岛理工大学自动化工程学院,山东青岛266520;2中石油华北油田华港燃气集团有限公司,河北任丘062552)
STMZET6and S7-1200Custom Communication Protocol to Achieve Serial
Communication
STMZET6与S7-1200自定义通信协议实现串行通信
104
《工业控制计算机》2017年第30卷第12期
图2数据起始设置
图3数据结束设置
2.2通信程序的实现
1)单片机的程序设计。单片机采用串行通信的工作方式,波特率为9600bps 。由于单片机相对灵活方便,故采用单片机作为主机来控制PLC 的接收和发送。本文中综合考虑了可靠性和经济性,一方面将单片机作为PLC 的IO 扩展模块用来处理发送12路模拟量数据,占用了两组传送数据通道,第三组数据通道作为备用使用;另一方面单片机采用定时中断接
收PLC 发出的指令且能
单独处理部分功能。发送和接收程序流程图见图4。
2)PLC 的程序设计。PLC 作为从机,首先配置好通信协议,然后采用梯形图处理接收到的数据。PLC 主要用来接收单片机
的数据,当需要单片机执行某功能时才会向单片机发送数据。其程序流程图如图5所示。
程序设计应符合的原则[4]:
1)在初始化阶段应该通过协议起始字符查询所有通信数据并建立分类控制表;
2)优先级控制。通过判断单片机PG9口电平的高低确定优先级,PG9为低电平时优先级最高,单片机作为主站发送数据,此时PLC 只处于接收状态并将数据传送到上位机显示;
3)命令发送不要太频繁。数据的传送以不影响系统稳定性为核心;过于频繁的发送数据查询指令,会导致单片机CPU 忙于响应查询,网络负荷也会随着通讯周期内处理数据量的增加而加重。为保证数据的实效性,每延时3ms 发送一组数据且保证中断查询时间不少于300ms 刷新一次,已经可以达到足够的控制要求。猿结束语
通过对现有潜水器模拟装置的研究,设计了S7-1200系列PLC 和STM32系列单片机自定义通信方案;该方案原理简单、通用性强、协议完全由用户确定。该方案已实际应用于潜水器模拟控制平台项目中,运行稳定、可靠。
参考文献
[1]李辉,郑宁.PLC 与单片机之间的串行通信及应用[J ].电气应用,2003(8):67-68
[2]杨志刚,钱俊磊.西门子S7-200系列PLC 与单片机之间的自由口通信[J ].河北理工学院学报,2005,27(4):77-80[3]张春.深入浅出西门子S7-1200PLC [M ].北京:北京航空航天大学出版社,2009
[4]阳宪惠.工业数据通信与控制网络[M ].北京:清华大学出版,2003:
45-73
[收稿日期:2017.6.29
]
图4单片机发送和接收程序流程
图图5PLC 发送和接收程序流程
图
105