李 通,韩 静,李树文
(山西工程职业学院 计算机信息系,山西 太原 030032)
在工业控制领域,可编程控制器发挥了巨大作用,但是在小规模应用场景中也存在价格昂贵,维护成本高的问题[1]。针对上述问题,提出了一种可用于小规模控制场合的简易可编程控制器的设计方案并完成了软硬件的制作[2-3]。
目前,在工控领域中PLC的使用存在三种方案,一是传统的PLC系统,它技术成熟,但存在技术壁垒,兼容性差;二是软PLC,它基于IEC61131-3标准[4-6],打破了传统PLC厂家之间的技术壁垒,代表着PLC的发展方向。但软件授权费高,需二次开发;三是基于单片机的可编程控制器的研究[7],该方法是在单片机的基础上实现PLC的硬件功能,采用VC++等可视化编程方法开发上位机软件,开发周期长,功能不全,到目前为止仍处于实验室研究阶段。
经过分析,决定采用方案一和方案三相结合的方法,即选择通信协议已经公开的三菱PLC上位机编程软件GXWORK2作为应用程序开发软件,采用STM32单片机开发硬件。
简易可编程控制器功能有:1)读取外部数字量信号;2)输出数字量信号;3)采用梯形图编写应用程序;4)掉电后数据不丢失。
简易可编程控制器硬件[8]由电源模块、CPU模块、输入模块、输出模块、通信模块组成,结构框图如图1所示,实物图如图2所示。
图1 简易可编程控制器硬件结构框图Fig.1 Structure block diagram of simple programmable controller hardware
图2 简易可编程控制器实物图Fig.2 Physical diagram of simple programmable controller
电源模块为控制器各模块提供稳定的电能。电源模块输出24.0 V,5.0 V,3.3 V三种电压。其中,24.0 V用于输入模块、输出模块等外围电路供电,5.0 V用于通信模块供电,3.3 V用于CPU内核供电。
CPU模块采用STM32F103系列单片机作为主控制器,最高工作频率72 MHz,指令的平均执行速度可达1.25 MIPS/MHz.该芯片共有144引脚,64 KB的SRAM、512 KB的FLASH,片内资源丰富,性能稳定,功耗低,满足设计要求。[8]
CPU模块除了SWD程序下载电路、时钟电路、复位电路等最小系统电路外,还设计了后备电源电路、状态指示电路,利用片内的串行通信控制器及SP3232和SP3485芯片设计了RS232和RS485通信模块,利用片内CAN总线控制器及TJA1050芯片设计了CAN通信模块,利用IO接口设计了输入输出模块等。各模块的端口分配如表1所示。
表1 主控芯片端口分配表Table 1 Allocation table of master control chip ports
输入模块共有24路,采用LTV354交流光耦采集外部输入信号,并对单片机的IO口进行电气隔离。该电路既可输入NPN信号也可输入PNP信号,但需注意R255和R254不能同时接入电路[9]。电路原理图如图3所示,引脚分配见表1.
输出模块共有16路,采用ULN2803A驱动继电器,继电器采用富士通公司的F3AA024E,既可以驱动直流驱动器,也可以驱动交流驱动器,最大输出电流3 A[9].输出模块电路原理如图4所示,引脚分配见表1.
图3 输入模块电路原理图Fig.3 Electrical schematic diagram of input module
图4 输出模块电路原理图Fig.4 Electrical schematic diagram of the output module
通信模块采用SP3232实现电平转换,主要功能是与上位机梯形图编程软件GXWORK2通信,下载应用程序。引脚分配见表1.
图5 简易可编程控制器工作模式Fig.5 Operation mode of simple programmable controller
简易可编程控制器软件设计包括系统软件和应用软件两部分。系统软件又具体划分为运行模式和停止模式,这两种工作模式可通过RUN/STOP开关切换,不同模式的功能如图5所示。应用软件指用户编写的梯形图程序,它可以根据不同的控制需求而改变。
系统配置主要是软元件地址分配和程序存储空间分配。
由PLC的控制原理可知,PLC执行的是存储在ROM区的控制程序,而运行数据则存储在RAM区。因此,需要在单片机的RAM区为每个软元件分配存储空间,在Flash区开辟出控制程序存储空间,同时在Flash区开辟出存储软元件运行数据的空间,以便断电后将这些数据保存。
由Cortex-M3权威指南中可知,STM32单片机的SRAM地址是从0x20000000开始的64 KB范围,且是可位寻址的。因此把软元件运行空间分配在此区域;对照三菱PLC通信协议[10]将软元件分配如表2所示。而Flash区的主存储器地址是0x08000000-0x0807FFFF的512 KB的范围内。由于Flash区是以页为单位擦除的,每页2 KB,这里设置程序存储区的地址范围为0x08006000-0x0800DFFF,共可以存储16 000余步PLC程序。从表2中可以看出,PLC中软元件共占0x3E80个单元,因此运行数据保持区的地址范围为0x0800E000-0x08011E80的空间内。
表2 三菱PLC与STM32单片机中各软元件地址分配对照表Table 2 Comparison table of address assignment between Mitsubishi PLC and STM32
图6 通信数据采集原理框图Fig.6 Block diagram of communication data acquisition principle
3.2.1分析三菱PLC通信数据
为了实现安装在PC机上的GXWORK2软件与简易可编程控制器的交互通信,设计如图6所示的通信数据采集装置。结合三菱FX2N PLC编程口通信协议,分析获取的通信数据可知,三菱PLC与上位机的通信机制分三步:1)通信握手;2)查验PLC型号和软件版本号;3)读写PLC配置信息及程序。表3为通信握手数据和查验PLC型号和软件版本号数据。
表3 PC机与PLC部分通信数据Table 3 Part of communication data of PC and PLC
3.2.2通信服务程序设计
在对通信数据分析的基础上并结合三菱PLC通信协议,设计了通信服务程序流程,流程图如图7所示。其中,指令解析函数包括对X,Y,M,S,T,C,D各软元件状态的读取或写入;对X,Y,M,S,T,C各软元件强制置位或复位;读取或写入PLC配置参数;读取或写入控制程序。解析函数可解析的命令及代码如表4所示。表3读写PLC配置信息及程序数据与表4命令吻合。
表4 指令解析函数可解析的指令Table 4 Instructions resolvable by instruction resolver function
表4 (续)Table 4 (Continue)
图7 串口通信处理流程图Fig.7 Serial communication processing flowchart
用户指令程序是指用户使用GXWORK2编写的梯形图程序或指令程序。这些程序经过计算机软件编译后使用表4中命令“E11”传送到单片机的Flash区中。因此,破解每条指令对应的二进制代码是解析梯形图程序的关键。下面举例说明获取梯形图程序对应代码的方法。
首先,在GXWORK2中写入如图8所示的梯形图并下载至单片机的Flash中,然后,使用STM32的仿真器查看Flash中对应存储单元的数据,如图9所示。
图8 梯形图示例程序Fig.8 Ladder diagram of sample program
图9 梯形图示例程序在单片机Flash中的编码Fig.9 Ladder diagram of sample program in the single-chip flash coding
分析图9中数据可知,0x08006000-0x0800605B单元数据用于配置PLC的初始值;图8中梯形图的编码对应于0x0800605C-0x0800606F地址中的数据。
对比现有三种可编程控制器的设计方案,提出了将三菱PLC上位机编程软件与STM32单片机相结合的设计方案,实现了用STM32单片机制作简易可编程控制器的软硬件设计任务,并在山西某公司的垂直循环车库上完成实测,控制效果良好。