1 引言
PLC和单片机各有所长。PLC可靠性高,功能强大,控制程序可变,抗干扰能力强,并且具有较强的负载驱动能力,适合于各种恶劣的现场环境,可用作机械设备的主控器件。西门子公司S7-200系列可编程逻辑控制器,可以满足多种多样的自动化控制需要。但是PLC控制器本身并不带键盘、显示器等人机交互设备,不能实现对控制参数的在线调整及系统运动状态的显示。单片机体积小,价格低,使用灵活,适用于家用电器、办公设备、仪器仪表及传感器内部的核心器件,功能强大。为满足工业智能化生产的要求,在实际应用中,往往需要把PLC和单片机结合起来共同组成控制系统,发挥出各自的功能优势[1] 。
本公司自主设计生产的智能锡焊机是一套搭载专用运动控制系统的全三维、高精度的专用焊接装备。该装备的运动控制系统为用户提供了更多的编程指令、更大的存储空间、更快的速度、更丰富的参数设置。可实现复杂的多层不规则阵列与非阵列图形交织加工,可单独对孤立点进行出料量的控制,一次修改任意多个孤立点的参数,具有运动中变速和高速轨迹平滑功能,可自定义的拐角升降速处理。本文主要论述了智能锡焊机中S7-200系列PLC的自由口串行通信,以及运用串行通信技术实现单片机和PLC之间的自由口通信。其中硬件以PLC为主机,单片机为从机,AT89C51单片机输出信号通过RS-485总线与PLC进行通信,并简单介绍了通信协议。
2 硬件组成
锡焊机中S7-200(本机为CPU226)系列PLC与AT89C51单片机通信的框图如图1所示。由于单片机串行口输出的是TTL 电平,而PLC自由口输出的是RS -485信号,所以在系统硬件设计中使用MAX485芯片进行电平转换,将TTL电平转换为RS-485电平,以提高系统的稳定性。单片机的串行通信线RXD和TXD通过图l电路转换为RS-485信号和PLC通信。AT89C51采用中断方式对接收的PLC数据进行查询,将模拟量转换成数字量,经滤波后送发送缓冲区的数据段并送显示缓冲区显示,进行实时监控。
3 S7-200系列PLC的自由口通信
S7-200系列的PLC可以在四种通信模式下工作:PPI模式、MPI模式、PROFIBUS-DP模式和自由口通信模式。其中,PPI和MPI是西门子专门开发的通信协议。PPI协议用于点对点接口,是一个主/从协议。MPI协议适用于多点接口,可以是主/主协议或主/从协议。PROFIBUS-DP是西门子支持的现场总线网络。而大多数用户则是选用对用户完全开放的基于RS-485物理规范的自由口通信模式。在自由口通信模式下,通信协议是由用户定义的。用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接收指令(RCV)来控制通信操作[2]。
当反映CPU工作方式的特殊寄存器位SM0.7为1时, PLC的CPU处于RUN模式时,才可能用自由口通信。通过SMB30或SMB130(SMB30和SMB130分别设置端口0、1)的协议选择位置1,将通信端口置为自由口模式。发送指令XMT启动自由口模式下数据缓冲区中的数据发送,它可以发变发送1—255个字符,如果有中断程序连接到发送结束事件上,在发送完成后,端口0会产生中断事件9,也可以监视发送完成状态位SM4.5的变化,接收指令RCV可以初始化接收信息服务,通过指定的端口接受信息并存储在数据缓冲区内,在接收完成最后一个字符时,端口0产生中断23。S7-200CPU的通信口输出RS-485电平。
4 PLC与单片机的串行通信设计
4.1 通信协议设计
在单片机与PLC的通信中,主要是利用单片机向PLC发送命令和接受返回数据,实现读取数据或修改PLC程序中控制参数。通信协议采用命令/响应模式,一次通信发送的一组数据作桢,每桢由最多30个字符组成[3]。
单片机发送的数据流结构的格式为起始符,指令码,元件首址,字节数,数据块,BBC校验码和结束符。
● 起始码:表示单片机与PLC开始发送数据,是数据流第一个字符,告诉PLC开始进行通信了,可以用00H表示
● 命令码:表示单片机对PLC的各种操作:
40H:读取目标元件I、Q、V、M、SM、L、T、C等的数据或状态;
41H:修改目标元件I、Q、V、M、SM、L、T、C等的数据或状态;
42H:强制目标单元为ON;
43H:强制目标单元为OFF;
● 元件首址:表示PLC内部的元件类型以及寄存器的地址(但不能表示一个位地址)。前两个字节表示寄存器类型,后两个字节表示寄存器号。00 00(H):I寄存器区 01 00(H):Q寄存器区。02 00(H):M寄存器区 08 00(H):V寄存器区;
● 字节数:从元件首地址起,读取或写入PLC元件的数据个数数据块:准备读取或者写入PLC的数据或状态;
● BCC校验码:在传输过程中,指令有可能受到任何的干扰而使原来的数据信号发生扭曲,此时的指令当然是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。BCC校验码的方法就是将要传送的字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的
● 结束码:结束字符标志着指令的结束,不同的PLC从站可以定义不同的结束字符以接收针对该PLC的指令[4]。
本例通信协议设计下:
1. 单片机与PLC之间的传输波特率为19200bps;无校验,8个数据位,1个可编程位,1位起始位,1位停止位;
2. 发送和接收的数据形式为ASCII;
3. 需要通信时,当PLC接收到单片机发送的数据后,就将RI标志置‘1’,PLC就要向单片机发送ASCII码,一个ASCII码的数据发送完后,也要将TI标志置‘1’。
4.2 通信程序设计
在实现自由口通信的软件设计中,主要包括单片机程序设计和PLC程序设计。
4.2.1 单片机端程序的实现
单片机端程序框图如下:
4.2.2 PLC的部分通信程序的实现
PLC通讯格式:起始符,数据,结束符。如赋值给vb270开始,68,1,2,0,2,00,2B,17,16
68为起始符,16为结束符。
S7-200自由口通讯是基于RS485通讯基础的半双工通讯,因此,发送和接收指令不能同时执行。自由口通讯选择使用SMB30(口0)来定义通讯口的工作模式。SM30.0 和SM30.1必须分别为1和0。
即:①使用SMB30(口0)选择自由口通讯模式,并选定自由口通讯的波特率,数据位数和校验方式;②定义通讯口接收格式SMB87(口0),包括启动信息接收(第7位=1),是否有起始位(第6位),是否有结束位(第5位)以及是否检测空闲状态(第4位)等;③设定起始位(SMB88)或结束位(SMB89)、空闲时间信息(SMB90)及接收的最大字符数(SMB94或)④数据接收和发送。部分程序如下:
网络1:读地址 开机时先把地址读出
LD I0.7 // 焊接气缸下限调用初始化程序
LPS
A M7.0 // PLC给单片机发数据
LPS
EU
MOVB 16#05, SMB30 //使用0端口状态字”19200, N, 8, 1”
MOVB 16#EC, SMB87 / /允许接收, 检测起始字符和接收字符, 超时检测
MOVB 068, SMB88 / /起始字符%
MOVB 016, SMB89 / /结束符回车( cr)
MOVB 35, SMB94 //最大接收字符
R SM87.7, 1 //复位接收字符
RCV VB250, 0 //启动温度接收区
LPP
EU
XMT VB270, 0 //启动温度发送区
LPP
A M7.1 //单片机给PLC发数据
EU
S SM87.7, 1 //允许接收字符
RCV VB250, 0 //启动温度接收区
I0.7为焊接气缸下限位,PLC在0-0.06秒内,0.09-0.15秒内,0.18-0.24秒内,0,.27-0.33秒内(即M7.0导通)瞬间先发数据给单片机,单片机在0.35-0.41秒内(即M7.1导通)瞬间再发数据给PLC显示,永远重复上述运动。
5 结束语
通过不断调试改进,该系统已经交付用户投入生产已经3年,工作稳定可靠,操作方便。单片机将控制信息通过串口传送PLC,PLC集中进行数据处理和实施控制,数据显示效果良好,可靠性高,完全能满足实时数据采集监控系统的要求,极大提高了系统的工作效率。
参考文献:
[1] 杨志刚,钱俊磊.西门子PLCS7-200系列PLC与单片机之间的自由口通信[D].河北理工学院学报,2007,4.
[2] 吴国中.单片机与西门子PLC S7-200的串行通信及应用[J].可编程控制器与工厂自动化,2007,(6):54-58.
[3] 李有智,王进.基于PLC与单片机无协议通讯的数据传输[J].广西轻工业,2009,(1):42-43.
[4] 李辉,郑宁.PLC与单片机之间的串行通信及应用[J].电工技术杂志,2003,(8):67-68.
作者简介:窦小明(1967-),男,电子工程师,从事电子工程设备技术的研究。