李雪莲
(宝鸡文理学院 陕西 宝鸡 721016)
可编程控制器(PLC)以工作可靠、维护简单、编程方便被广泛应用于工业控制现场。目前,大部分PLC工程师采用的是梯形图进行编程,容易上手,开发周期短,然而,人们在使用过程中也逐渐发现了传统PLC的缺点:兼容性差、标准不统一、封闭、扩展能力差、成本较高等[1],针对这一现状,市场上的多款单片机工控板应运而生。这些工控板与传统PLC相比有明显的价格优势,但是很多做工业现场的工程师仍不愿用单片机工控板代替PLC,其主要原因是单片机工控板的C语言开发方式与梯形图开发相比难度较大且不利于应用于工业控制现场。
通过对PLC运行机制、梯形图指令及其软件开发工具的研究,本文设计以STM32为平台、以西门子S7-200为设计模型的嵌入式PLC,支持梯形图与C语言的混合开发,同时兼容了单片机的开发灵活、成本低廉等优点。为了更好的适应当今通信的快速发展要求,移植了Modbus、TCP-ip协议,增强了嵌入式PLC的应用场合。
S7-200是一种小型的PLC,具有结构设计紧凑、扩展性好、功能模块丰富、指令强大以及价格低廉等特点,可以满足多种控制系统的需要[2]。传统PLC采用循环扫描工作方式,一般包括5个阶段:内部处理,通信服务,输入采样,程序执行,输出刷新[3]。
本文以S7-200为参考模型进行设计,遵循传统PLC工作方式,采用扫描方式运行。有两种状态,Run(运行)和Stop(停止),分别对应硬件资源的两个按键。当系统处于Run状态时,除完成内部处理和通信服务后,还要完成输入采样、程序运行、输出刷新。当系统处于Stop状态时,只运行内部处理和通信服务。
本系统建立在STM32F103RBT6芯片平台之上,利用软件方法实现传统PLC的计算、控制、存储、通信以及编程等功能,通过I/O驱动模块以及现场总线等物理设备完成现场数据的采集以及信号的输出[4]。整个系统可以分成内部处理、通信服务以及虚拟机运行三阶段,Run和Stop两种状态,如图1所示。内部处理阶段,进行PLC自检,系统硬件软件初始化、是否进行程序上载/下载等;通信服务阶段,该嵌入式PLC可以通过Modbus或者Tcp-ip协议与其他装置实现通信,响应编程器键入的命令,更新LCD液晶屏的显示内容;虚拟机运行阶段是整个系统的核心,它直接解析语句表代码,通过I/O驱动不断读取I/O设备的状态,经过程序逐条执行,生成最终的I/O控制信号,驱动外部负载。
图1 嵌入式PLC工作流程示意图Fig.1 Schematic plot of Embedded PLCwork process
嵌入式PLC通过对光耦器件进行电气隔离和对电源部分加入高频滤波来提高其安全性。系统的硬件根据其功能布局,可以划分成5个模块电路:CPU模块,输入模块,输出模块,通信模块,片外存储模块。其整体框图如图2所示。
图2 硬件逻辑框图Fig.2 The logic picture of hardware
CPU模块采用的主控芯片隶属于STM32系列中等容量增强型。CPU内核为ARM 32位的Cortex?-M3,最高72MHz工作频率,拥有128K字节的闪存程序存储器与高达20K字节的 SRAM,外设丰富[5]。
输入模块包括6路A/D模拟输入以及8路隔离I/O开关量输入两种类型。输出模块包括7路继电器输出、一个液晶屏和一个蜂鸣器输出。其中,继电器为欧姆龙G5V-1DC5小型继电器。线圈额定电压5 V,额定电流30mA。额定负载AC125V 0.5A、DC24V 1A,动作时间 5ms以下。
Modbus通过串口该嵌入式PLC通信,其接口原理图如图3所示。串口电平转换芯片为美芯公司的MAX3232,TXD0与RXD0连接到STM32的USART1。
图3 RS-232接口原理图Fig.3 The principle picture of RS-232 port
通信模块同时设计了来自Microchip带SPI接口的独立以太网控制器ENC28J60,方便扩展。该以太网控制器集成MAC和10 BASE-T PHY,与STM32的通信接口为最高速度可达10 Mb/s的SPI接口。脉冲变压器来自Pulse型号为H1102。原理图如图4所示。
片外存储模块主要是指2MB的片外Flash,用来储存PLC程序,通过SPI接口与CPU模块进行数据的存取。
根据系统工作流程可知,软件设计主要包括3部分:内部处理、通信服务、虚拟机运行过程,以下将详细进行说明。
主要包括以下几个方面:
1)硬件初始化:STM32内核芯片的初始化及软件所用到的片上资源以及通信协议的初始化,如时钟、定时器、Flash、ADC、串口、I/O口、液晶屏及显示器、FreeModbus协议的初始化等。
2)按键判断:2个按键,按下分别代表上载和下载。程序上载是指将系统存储的程序上载传输到PC机上,程序下载是将编写好的梯形图程序烧写到系统的Flash。整个过程都是在单片机控制下完成的,其中PC机通过串口与系统传输程序,系统通过SPI接口对Flash进行烧写。在程序下载时利用了STM32串口的DMA高速传输,加快存取速度。为确保程序传输与程序烧写能够并行,DMA传输的主存地址是两组512字节的缓冲器,当一组传输完成后触发中断,在中断中切换DMA的主存地址到另一组缓冲器,同时CPU开始将缓冲器中的内容烧写片外Flash,这样通过 “双乒乓缓冲”的方式大幅提升程序烧写速度。
考虑到较好通用性,以便与其他设备相连进行通信,系统集成了高级通信协议Modbus与TCP/IP协议。系统利用FreeModbus实现RTU与ASCII格式的Modbus从站通信,用户可利用Modbus协议读写Q、I、模拟量变量。同时,利用Uip协议栈提供的TCP与DUP接口函数,可方便的进行以太网通行,可以搭建小型的WEB服务器,用户可通过浏览器远程访问该嵌入式PLC。
3.2.1 协议移植
1)FreeModbus的移植
Modbus是一种串行通信协议,已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。FreeModbus是针对通用的Modbus协议在嵌入式系统中应用的一个实现,协议接收和传输RTU/ASCII数据帧是通过一个由硬件提取层的调用来驱动状态机实现的,这就使得该协议栈非常容易移植到其他的平台之上。当收到一个完整的数据帧后,该数据帧被传人Modbus应用层,数据帧的内容在该层得到解析。为方便增加新的Modbus功能,FreeModbus在应用层通提供了Hooks。
图4 以太网接口原理图Fig.4 The principle picture of Ethernet port
本系统采用的Freemodbus版本为V1.5,其协议的移植对硬件的需求是比较少的,需要处理器具有一个支持中断的异步串行接口,该中断至少包括接收缓冲区满中断和发送寄存器空中断。另外,需要一个足够处理FreeModbus数据帧的RAM空间,和一个用来产生Modbus协议时基的定时器。对于本设计硬件系统的主控芯片STM32F103RBT6来说,完全满足上述条件,具备了较好的硬件移植环境,主要移植过程如下:
第一步:在port.h中定义了全局中断的开关用来处理临界问题。
第二步:配置异步串口的中断接口,用来处理数据。
第三步:提供时间基准的定时器。
FreeModbus主要通过4个回调函数:eMBRegInputCB(读数 字 寄 存 器 )、eMBRegHoldingCB ( 读/写 数 字 寄 存 器 )、eMBRegCoilsCB(读/写开关寄存器)、eMBRegDiscreteCB(读开关寄存器),来访问用户所指定的数据。嵌入式PLC已将I/O开关寄存器,模拟量数字寄存器与回调函数进行挂接,可使用Modbus进行读写。寄存器的读写函数已经将PLC虚拟机的各变量的地址重新映射如表1所示,将PLC虚拟机的数据区分成了3个区 。
2)uip协议的移植
TCP/IP协议是传输控制协议的简称,它实际上是一个协议族,包括许多相关协议,目前较为著名的免费开源协议栈有:lwIP、uIP、openTCP、TinyTCP 等。 uIP 是专门为 8 位和 16单片机设计的一个非常小的TCP/IP协议栈。uIP完全用C编写,可以很方便的移植到各种不同的结构和操作系统上[6]。一个编译的栈可以有几KB ROM或几百字节RAM中运行。并且其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,极大的节省空间和时间。由于结构简单、功能可靠,很多单片机都移植uIP协议栈。
表1 嵌入式PLC与FreeM odbus地址对应关系Tab.1 The corresponding relationship of embedded PLC and FreeM odbus address
本文移植的版本是uIP1.0版本,uIP协议栈去掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,本系统实现了以下协议:
ARP:地址解析协议
IP:网际协议
ICMP:因特网信息控制协议
TCP:传输控制协议
UDP:数据报协议
主要移植过程如下:
第一步:提供网卡驱动3个函数:tapdev_init()网卡初始化函数,初始化网卡的工作模式;tapdev_read()读包函数。
第二步:配置STM32的SysTick定时器作时钟。
第三步:在uipopt.h/uip-conf.h用来配置uIP,包括本地IP地址、网关地址、MAC地址等。
3.2.2 通信服务过程
主要是Modbus、Tcp-ip协议的处理过程,本系统默认的通信过程发生在Stop状态下,其他时间是无效的。系统对Modbus协议进行解析和中断触发读取网络接受缓存,来判断是否有Modbus或者Tcp-ip通信的需求,若是有,则进行相应的通信过程。
3.2.3 通信协议测试
通过简单的组态控制平台,该平台运行于TPC7062KS一体化触摸屏,通过RS-232串行口与STM相连。控制平台为ModbusRTU主站,STM32-PLC为从站,设计简单的语句进行测试。经验证,协议运行正常。
在嵌入式PLC内置Web服务器,其他设备可访问这个WEB站点。通过网页的表单操作便可控制PLC中部分的变量值或是实现其他功能,验证了uip协议的正确性。
虚拟机运行是整个系统核心部分,分为三步:输入采样、程序执行、输出刷新,其原理图如图5所示。首先通过扫描输入电路得到的状态输入到输入映像寄存器中,其次经过虚拟机处理执行程序,按照顺序方式扫描[7],当指令涉及到输入、输出状态时,分别从相应的虚拟存储器中读取或者更新数据。最后,当程序执行完毕,将根据输出映像的状态输出,驱动相应负载。输入采样和输出刷新相对简单,以下将对程序执行部分进行详细论述。
图5 虚拟机执行原理图Fig.5 The principle picture of virtualmachine execution
程序执行,主要完成指令程序的处理,将输出结果时时更新到虚拟存储单元中。根据其过程,将其分成两个步骤:代码载入和语句解释。代码载入负责读取程序以及对程序的初步处理,语句解释将完成程序运算以及堆栈操作,并且不断更新定时器、AD转换器、IO模块的数值。
1)代码载入
语句表代码载入主要负责将片外Flash芯片中的语句表进行读取,分离掉语句表中如注释、空格、换行等无效内容,提取程序块,网络号以及当前的程序地址,以便更新代码载入,将有效的语句表指令送入一个二维数组,然后进入下一条指令的读取。语句表代码载入主要由两部分构成:指令读取、指令预处理。
在STM32芯片中,开辟了一个容量为512字节的缓存,指令每次读取以换行符为一行的结束标志的一行,直到将片外Flash的读取到此缓存放满512字节为止。指令读取完毕后,进行指令预处理,进行信息更新和instruc[][]数组的更新。instruc[][]数组是个二维数组,存放的是当前指令,其中,instruc[0]存放的是指令操作码,如 LD(取指令),A(与指令)等,instruc[1]、instruct[2]、instruct[3]存放的是操作数,本文默认的可支持操作数个数是3个。
2)语句解释
语句表解释器将根据instruc[][]中的内容操作PLC虚拟机的堆栈与变量。解释器函数名为Execute_Instruc()。这是一个状态机结构的函数。Execute_Instruc()将根据instruc[0]中的指令操作码选择不同的调用不同的函数。Execute_Instruc()部分为:
switch(*(u32*)instruc)
{
case 0x444c://LD指令Run_LD();//LD 处理break;
case 0x4e444c://LDN指令Run_LDN();break;
case 0x4e41://AN指令Run_AN();break;
……
不同的指令将调用不同的指令解释函数进行执行,在执行过程中,采用了堆栈来实现语句表功能。虚拟机使用一个16位全局变量Stack作为STM-PLC堆栈,堆栈操作采用STEP7的标准进行设计,LD、OLD、ALD等指令将会对这个虚拟的堆栈进行操作,在此过程中,更新相应的虚拟输出存储寄存器。
本文在充分研究传统PLC工作原理基础上,采用微控制器STM32平台实现了嵌入式PLC的设计,在不改变传统PLC优点前提下,解决了传统PLC某些场合成本过高、资源浪费等缺陷。与传统PLC相比较,嵌入式PLC不仅能支持梯形图开发,还可以支持与C语言混合开发,开发方式更灵活。同时,系统集成了通信功能,可以满足不同的工业控制需求。
[1]陈辉,李坚强,裴海龙,等.基于梯形图语言的软PLC技术研究与实现[J].微型计算机信息,2006,22(9-1):266.CHEN Hui,LI Jian-qiang,FEI Hai-long,et al.Study and realize soft PLC technology based on ladder language[J].Microcomputer Information,2006,22(9-1):266.
[2]谢丽萍,王占富,岂兴明.西门子S7-200系列PLC快速入门与实践[M].北京:人民邮电出版社,2010.
[3]翟红程,俞宁.西门子S7-200 PLC应用教程[M].北京:机械工业出版社,2009.
[4]马远佳.软PLC通信接口的研究及实现[D].成都:西华大学,2009.
[5]张舞杰,南亦民.基于STM32F103VB的应用编程技术的实现[J].计算机应用,2009,29(10):2820.ZHANGWu-jie,NAN Yi-min.Design and implementation of IAP techniques based on STM32F103VB [J].Journal of Computer Applications,2009,29(10):2820.
[6]江三青.基于STM32的嵌入式网络协议Uip的移植和分析[D].武汉:武汉理工大学,2011.
[7]严盈富.西门子S7-200 PLC入门[M].北京:人民邮电出版社,2007.