西门子模块6ES7223-1HF22-0XA8产品信息
为了扩展数控系统逻辑功能的可编程能力,通常在数控系统中配置PLC功能。并采用独立PLC或内置式PLC两种方式。但目前内置式PLC一般使用软件实现。有一套特有的编程与配置方法,这对使用者熟悉新功能提出了额外的要求。现场可编程逻辑器件FPGA具有很强的在线逻辑编程能力。常被应用于实现某些逻辑控制中。比如交通信号灯控制:近来也有用FPGA实现PLC的尝试。即将与需要实现的控制功能对应的梯形图直接做成FPGA硬连线逻辑。但这些应用都没有脱离FPGA本身的现场可编程特性。用户如需修改控制逻辑。就需要掌握VHDL语言及FPGA的EDA设计方法。否则不能提供更加友好、通用的PLC编程界面。
本文介绍了一种新的数控系统中内置式PLC的FPGA实现方法。它能较好地解决上述技术难题,也便于实际应用。
1 基于ARM和FPGA的数控系统
机床数控系统由控制系统、伺服驱动系统和伺服电机组成。控制系统生成的坐标轴运动指令,被发送到伺服驱动系统。由伺服驱动系统形成伺服电机的运转控制令。从而使伺服电机完成相应的动作。
图1是基于ARM+FPGA的数控系统的FPGA部分结构框图,下载接口、配置器件及FPGA3个部分组成了FPGA自身的开发调试环境。可以方便地与PC组成开发调试平台。机床控制单元MCU使用32位的ARM嵌入式处理器。运行uC/0S实时操作系统,实现控制系统的大量分析和计算工作。比如G代码解析,根据加工要求形成坐标轴的运动指令以及数控系统的人机界面等。FPGA除了完成对运动指令进行细插补之外。还实现了数控系统键盘电路的扫描模块、编码计数器模块和驱动器控制模块的功能。本文要介绍的数控系统内置式PLC也是在FPGA内部实现的。
图1 数控系统中的FPGA结构框图
2 用FPGA实现PLC的软硬件架构
为了有更好的人机界面。更符合工程习惯。采用与主流商业PLC兼容的编程语言进行编程。内置式PLC可以接受终用户输入的PLC指令表(一个特定的子集)。并终实现相应的逻辑控制功能。FPGA内部是硬件逻辑。显然无法识别PLC指令,为了实现这种构想。必须设计一套指令集。该指令集定义了FPGA可以执行的小操作的集合。根据指令集来设计编译器和FPGA内部的PLC逻辑。其软硬件架构如图2所示。PLC指令被编译后,生成FPGA可执行的指令代码。将指令代码下载到FPGA内部,由执行逻辑对代码进行逐条执行。终实现PLC的逻辑控制功能。
图2基于FPGA的PLC软硬件架构
PLC核心逻辑是一个状态机。可以根据不同的输入指令执行不同的操作。在设计中。应确定需要执行的指令集合,即状态机的指令集设计。根据指令集来设计编译器和PLC逻辑功能。PLC指令编译器源程序使用C语言编写。这样。此编译器可以方便地移植到PC、ARM或别的任何支持C编程的平台上。基于图2中的软硬件架构的PLC不能独立运行。需要MCU对其进行相应的设置和辅助。如图3所示。在MCU端。需要一个专门处理与PLC接口的任务(对于多任务操作系统)或程序。
图3 PLC逻辑的工作过程
在MCU端,可以提供相应的PLC人机界面,提供PLC梯形图或指令表的编辑、编译甚至排错界面,当编译完成后。生成可供FPGA内部的PLC逻辑执行的“PLC中间操作码”。当要执行PLC功能时,MCU配置FPGA处于“代码下载状态”。并由MCU将编译后的代码下载到FPGA的RAM中:下载完成后。MCU将FPGA设置为“PLC运行状态”。开始依次读入输入和输出端口的状态。并根据所要执行的指令更新状态。后输出刷新状态。FPGA还有一个“监控状态”。此时。ARM处理器可以直接设置PLC的输入输出10寄存器的值。并可以单步运行PLC中间操作码。ARM结合返回信息。并配合相应的界面,即实现了对PLC的调试。
3 PLC逻辑的EDA设计方法
新型FPGA器件及新的EDA设计软件和工具是这种数控系统内置式PLC实现方式的前提。没有EDA设计流程和方法的支撑。是很难完成相应设计工作的。
图4是典型的EDA设计流程。主要包括设计输入、功能仿真、综合与优化、映射和布局布线以及后的下载验证等环节。EDA设计流程中。重要的环节便是仿真。因为所设计的对象在FPGA内部很难在硬件上进行测试。必须利用诸如Active—HDL。ModelSim等仿真工具进行功能仿真、综合后仿真以及布局布线后仿真。设计过程和仿真过程是交叉同步进行的。好设计一个模块。即对一个模块的功能进行仿真,确保其正确后,才可以集成到更高层面的设计中去。仿真的主要任务就是检验HDL是否能满足设计所提的要求。检验的方式是编写测试平台。在测试平台上给模块输入条件。观察或检验其输出。从而验证是否满足设计要求。Active—HDL的GenerateTestBench功能还可以生成测试向量的模板。大大加速了设计过程。
图4 EDA设计流程
图5 PLC原型机逻辑仿真结果
掌握并正确使用EDA设计方法。是使用FPGA进行逻辑设计成功的关键。
4 在数控系统中的实现与分析
基于FPGA的PLC实现方法在我们自主研发的基于ARM+FPGA的数控系统中得到了应用。形成了PLC原型机,实现了基本的PLC逻辑控制功能。能够与数控系统集成在一起。结合相应的控制界面。可以对机床的各逻辑开关量进行PLC编程控制。更重要的是。这种框架下的PLC具有开放式结构。可根据需要不断完善。实现更复杂的功能。如图5所示,PLC有2个主要状态。即输入输出刷新(pcstatus=0)和运行状态(pc status=1)。在pc status=0时,输入被采样,输出映像被置位:当pcstatus=1时,PLC开始运行,pcpointer为PLC内部指令的指针,在每个时钟周期,PLC执行一条指令,并将指令指针后移,当执行完所有指令后,outputfresh置高,允许输出映像寄存器的结果输出到端口plc ioout中去。以上过程反复进行,便实现了PLC的基本逻辑功能。
针对数控系统中各种内置式PLC的实现方式。基于FPGA的解决方案在以下一些方面做了特别的处理:
(1)复位问题。当FPGA一上电时,其内部的PLC逻辑即令其自身进入了一个自复位状态。此时如果没有外部MCU给予正确的操作指令。FPGA将不会进入其他任何状态。从而确保PLC不会产生任何的误动作。
(2)响应时间。PLC程序会得到周而复始的执行,当输入状态(inimage)改变时,输出状态会在下一个允许输出信号有效时(outputfresh=1)得到更新。PLC的大响应周期取决于所执行的指令条数。对于绝大多数指令而言。PLC可在每个时钟周期执行一条语句。在后一条语句执行完成后的下一个时钟上升沿输出得到刷新,在此刷新时钟周期内。PLC进行循环复位的初始化工作。差的情况时。输入信号在上次采集刚刚结束后发生变化。需要在下一次采样并执行完成后才能反映到输出上。即响应时间为Tresponse=(PLC指令条数+1)×2×时钟周期,本文使用的时钟周期为50ns,有:Tresponse=(PLC指令条数+1)×2×50ns:受FPGA内部的EAB(bbbbbdedArrav B10ck。一种专门用来综合成RAM的内部资源)数量的限制。只能综合出约2k bvteRAM(除非设置必要的控制寄存器)。当执行约有2 000条PLC指令时。大响应时间为0。2ms量级。
对于一般以软件方式实现的PLC。多使用一个特定的任务来实现PLC逻辑控制功能。在嵌入式操作系统中。任务的上下文切换时间一般在斗s量级;随着系统中其他任务的就绪。PLC任务将面临被暂时挂起。在这种情形下。其响应时间将变长。当然。如果使用高频率运行下的嵌入式处理器(60MHz以上),在指令条数较多时,其响应时间也可接受。但数控系统中的PLC功能一般都只实现对机床的简单逻辑控制。控制环境比较简单。指令条数有限。使用FPGA方式实现还是有其特有的优势的。
(3)PLC运行阶段的可靠性。PLC是将编译后的可执行指令放到FPGA内部的RAM中运行。只要完成必要的配置。PLC便完全独立运行,不再需要外部MCU的干预。换言之,此时。MCU死机或程序跑飞,也不会影响正在执行中的PLC功能。使用FPGA来实现PLC功能。对于提高数控系统的整体可靠性是有优势的。
(4)PLC指令长度的支持。由于FPGA内部的EAB资源有限,能够容纳的PLC指令长度有限。每次PLC运行前都必须由MCU将代码下载到FPGA中。才可控制PLC开始运行。即FPGA不能独自实现PLC功能。为了解决这一问题,可考虑为FPGA专门配置非易失性的存储器。比如Flash。这样不但可以扩大PLC指令长度。还可实现上电自动运行PLC程序。甚至不需要MCU的辅助和干预,但这将需=要诸如编程器之类的部件的支持。
5 结论与展望
顺序控制就是使系统能按一定的顺序工作,常用于离散的生产过程控制。顺序控制又可以分为确定顺序控制和随机顺序控制,在生产机械运行中常为确定顺序控制,控制对象工作过程或顺序是确定的。用 PLC 进行顺序控制是PLC 的基本应用,也是PLC 的优势所在,在生产机械的自动化控制领域中,PLC顺序控制系统的应用很广泛。
常用的生产机械顺序控制系统运行时,设备按照生产工艺预先规定的顺序,在各个输入信号的作用下,根据内部状态和时间的顺序,在生产过程中各个执行机构自动地有秩序地进行操作,且这些动作必须严格按照一定的先后次序执行。PLC顺序控制系统的输入信号大多数是行程开关、接近开关、光电开关、干簧管开关、霍尔元件开关等位置检测开关,有时也采用压力继电器、定时器等。
FX 系列 PLC 顺序控制程序的编程方法有很多,如状态转移图和步进梯形图编程、起动 - 保持 -停止电路编程、置位和复位指令编程、移位指令编程等。本文以三菱的 FX 系列 PLC为例,说明实现顺序控制的常用四种程序设计方法。
1 状态转移图和步进梯形图编程
状态编程就是将一个复杂的控制过程分解为若干个工作状态,明确各状态的任务、状态转移的条件以及转移的方向,再依据总的控制顺序要求,把这些状态组合形成状态转移图,后依一定的规则将状态转移图转绘为步进梯形图程序。步进梯形图和状态转移图是一一对应的,在进行编程时,我们是要根据设备的工艺过程控制要求,绘出状态转移图。
状态法编程思想其实就是将复杂的顺序控制过程分解为若干个工作“状态”,分别进行编程,后再组合成整体程序。这种编程方法可以使编程工作程序化和规范化,是PLC程序设计的重要方法。状态转移图是状态编程的工具,图中包含了顺序控制程序所需用的全部状态及各状态间的相互联系。对某一具体状态来说,状态转移图给出了该状态的驱动任务、状态转移的条件和状态转移的方向。状态转移图可以非常清晰地表达出顺序控制的整个工艺流程,形象直观,可读性很强,特别在复杂的顺序控制程序中应用起来非常方便。
例如,某 PLC 控制的送料小车,小车原位停止时压下限位开关 SQ1(X0),按下启动按钮SB(X2),Y2接通小车前进,当运行到料斗下方时压下限位开关SQ2(X1),Y2 断开小车停止,Y0接通料斗门打开给小车加料,延时 10 秒后关闭料斗,Y3 接通小车后退返回,当回到原位时压下限位开关SQ1(X0),Y3断开小车停止,Y1 接通小车底门打开卸料,延时 8 秒后卸料结束,完成一次动作,并可以循环。
该运料小车控制系统为典型的顺序控制,采用状态编程,其状态转移图如图 1 所示。 在负载驱动部分,Y1 前面加 X1的常闭的作用是压下限位开关后,能让电动机的电源及时切断,确保准确定位,从而保证运料小车工作的可靠性。小车运动控制状态转移图可以转换成对应的步进梯形图,步进开始用STL指令,其具有主控和跳转功能,确保各状态驱动严格按顺序进行,步进结束用 RET 指令返回。
图 1 状态转移图
2 使用启动- 保持 -停止电路编程
启动 - 保持 - 停止电路是基本的 PLC控制电路,有关断优先和接通优先两种形式,一般采用关断优先控制,也可以衍生出许多常用控制电路程序。利用启动 - 保持 -停止电路思想,按照实际的控制逻辑,也可以很方便的设计出顺序控制程序。
例如某设备工作循环为:X1 接通后 Y1 接通—X2 接通后 Y2 接通,Y1 断开—X3 接通后 Y3 接通,Y2断开—X4 接通后 Y1 接通,Y3 断开,自动循环。利用启动 - 保持 - 停止电路设计的控制梯形图如图 2所示,系统启动后能一直按顺序自动循环运行,若 X5 接通,则 Y0-Y3都断开,系统停止工作。控制梯形图利用常开常闭触点、线圈等来实现输出的顺序接通控制,控制逻辑也很直观,停止信号接通时,执行数据传送指令MOV,使 Y0-Y3 都清零断开,实现设备停止。
图2 起保停实现顺序控制
3使用置位和复位指令编程
利用置位指令 SET 和复位指令 RST 也可以实现顺序逻辑控制,图 3 所示的顺序控制可以改为利用SET 和 RST来实现。由于作用于输出继电器这类位元件时,SET 指令是实现接通并且保持,RST指令是断开并且保持。控制程序中就不再需要用输出继电器的常开触点来自锁,直接由触点逻辑条件来控制输出继电器的复位和接通就可以,这种编程方法的顺序转换关系明确,程序也很容易理解,常用于控制系统中手动控制程序的设计。
图3 位移位指令顺序循环控制
4 使用移位指令编程
FX 系列 PLC的移位指令常用的有循环移位指令和位移位指令。循环移位指令可以使数值或状态实现自动循环移位变换,使用简单,只能操作 16位或 32位数据,使用受到限制。位移位指令使用灵活,可以对范围内的任意位数据移位。用移位指令设计的梯形图看起来简洁,指令也较少,但对较复杂控制系统设计就不方便,在工业控制中较少使用,大多数应用于彩灯顺序控制电路中。如图3 所示的控制程序,利用位移位指令实现了 Y0—Y11 共 10 个输出继电器的顺序轮流接通。当 X0 接通时,Y0—Y11正序轮流接通 1 秒;当 X0 断开时,Y0—Y11 反序轮流接通 1秒,且能循环。如果输出接彩灯即可以实现彩灯的顺序自动控制。