在您开启阅读前,当然希望您已经阅读了以下内容:
基于CPG的标准化程序架构说明
对于整个程序架构,希望能用文字真正让大家熟悉并能理解!一个完整的架构的说明书(不是宣传书),要是三言两语就说完,那不是忽悠就是里面内容没有细化,无法真正形成标准化!
希望耐心书写的我,刚好遇见能静心阅读的你!
以下是正文,大概有5000文字,需要阅读13-16分钟!

图11-1 : 单个(组)设备控制程序框架
对于任意控制对象,电气设计的线路是所有设备运行的前提,没有电源以及通信的物理连接,任意设备都不能运行。
标准程序架构中,函数FC_Electrical即为电气设计程序的合集,在FB_System中的“电气设备程序”区间(Region)是被调用。

图11-2: 电气设计调用程序
函数FC_Electrical中包括了电气控制柜程序IDB_CabinetXXX(XXX是电气控制柜的编号)、安全回路程序以及设备准备好的程序。

图11-3: 电气设计程序的内容
标准程序架构中有一个名为SectionReady的全局数据块,用于存储当前所有控制对象的SectionReady的数据,如下图所示。

图11-4: SectionReady数据块
每一个对象的SectionReady的数据类型是布尔型(BOOL),当该变量为TRUE的时候,则意味着这台设备的硬件已经准备好,即该设备的主电源、控制电源、通信的连接都是正常的,可以执行生产活动。
至于要怎么在标准架构中实现,我们必须先从电气设计开始,看一看一台设备运行的前提是那些都准备好。
11.1.电气设计程序

图11-5: 单个控制对象示例
对于上图一台Identity为UN01_EM01的简单设备,要运行起来的电气设计有哪些呢?由于上图没有具体说明电机的运行方式,所以该台设备的控制可能存在以下四种方式:
电机工频启动,PLC控制接触器闭合,电机即启动。
电机是变频控制,但变频的启动停止是通过干接点来控制的。
电机是变频(伺服)控制,PLC通过总线和变频(伺服)建立通信,且PLC和变频(伺服)之间的通信是直连的,没有经过任何交换机。
电机是变频(伺服)控制,PLC通过总线和变频(伺服)建立通信,但由于系统庞大,PLC和变频(伺服)之间的通信连接需要经过交换机。
以上四种情况的电气设计代表了典型的应用,我们分别看一看他们之间的区别以及设备的不同。
以下描述,很多人会先说这样做性价比不高,即使不这样做,设备一样可以运行起来。对于此问题,后文会说明这样做的好处以及意义。
由于设计电气设计,先将下面要用的一些电器的缩写列表如下,您若和此有区别,请参考相关电气设计的国家标准和规范,此处仅做示意使用。
图11-6: 电气元器件缩写
对于配电柜来说,首先会有一个总的电源开关,用于切换整个柜子的电源,且默认该开关的辅助触点接入了PLC的输入模块中的I2.0地址。
为了检测整个三相电源是否有电且电源的相序是否正确,在进线后配置一个相序检测的元件,同时提供一个故障反馈开关接入PLC的输入模块的I2.1地址,只要该地址的电平为TRUE即意味着电源是有电且没有故障。

图11-7: 电源进线设计图
11.1.1. 工频启动

图11-8: 工频启动电气设计
工频启动的电气设计如上图即可满足要求,PLC通过输出控制接触器KM吸合,电机可以运行。
只要QF合闸且整个的三相电源符合要求,则意味着电气上该电机是准备好的,PLC控制器可以通过输出控制KM的吸合来改变电机的运行状态。
此时设备运行的前提或者设备准备好的要求是I0.0、I2.0以及I2.1是TRUE,如下图所示。

图11-9: 工频启动SectionReady的条件
注:上图的变量名称为直接地址,实际项目中的变量名称请按规范命名。
11.1.2. 变频非通信

图11-10: 变频非通信电气设计
变频非通信的电气设计如上图,QF和KM为变频提供主电源,变频的控制单元的电源是直流24V,而直流24V电源的输入电源是交流220电源,且24V电源也提供一个故障反馈的输出点并接入到PLC的输入模块。
只要QF和KM闭合,直流24V电源的相关开关闭合且电源没有故障,且整个的三相电源符合要求,则意味着电气上该电机是准备好的,PLC控制器可以通过输出控制接入变频输入端的干结点(上图没有画出)来改变电机的运行状态。
此时设备运行的前提或者设备准备好的要求是I0.0、I0.1、I0.2、I0.3、I2.0以及I2.1是TRUE,I0.4(电源故障反馈)是FALSE。

图11-11: 变频非通信SectionReady条件
11.1.3. 变频直连通信

图11-12: 变频直连通信电气设计
变频直连通信的电气设计如上图,QF和KM为变频提供主电源,变频的控制单元的电源是直流24V,而直流24V电源的输入电源是交流220电源,且24V电源也提供一个故障反馈的输出点并接入到PLC的输入模块,变频器的控制是通过连接PLC和变频器通信端口的总线控制
只要QF和KM闭合,直流24V电源的相关开关闭合且电源没有故障,PLC和变频器的总线通信是正常,整个的三相电源符合要求,则意味着电气上该电机是准备好的,PLC控制器可以通过总线来改变电机的运行状态。
此时设备运行的前提或者设备准备好的要求是I0.0、I0.1、I0.2、I0.3、I2.0、I2.1是TRUE,I0.4(电源故障反馈)是FALSE,且PLC和变频器的通信是正常的。

图11-13: 变频直连通信SectionReady条件
11.1.4. 变频非直连通信

图11-14: 变频非直连通信电气设计
变频非直连通信的电气设计如上图,QF和KM为变频提供主电源,变频的控制单元的电源是直流24V,而直流24V电源的输入电源是交流220电源,且24V电源也提供一个故障反馈的输出点并接入到PLC的输入模块。
由于系统的复杂性,PLC通过交换机和变频器相连,此时交换机需要一个24V(默认24V电源是同一个)的电源开关并将辅助触点接入PLC的输入模块,同时交换机本身也提供了一个故障反馈点接入PLC的输入模块,用于交换机的故障诊断。
只要QF和KM闭合,直流24V电源的相关开关闭合且电源没有故障,交换机的开关是闭合的且交换机的故障反馈点为低电平,PLC和变频器的总线通信是正常,整个的三相电源符合要求,则意味着电气上该电机是准备好的,PLC控制器可以通过总线来改变电机的运行状态。
此时设备运行的前提或者设备准备好的要求是I0.0、I0.1、I0.2、I0.3、I0.5、I2.0、I2.1是TRUE,I0.4(电源故障反馈)、I0.6(交换机故障反馈)是FALSE,且PLC和变频器的通信是正常的。

图11-15: 变频非直连通信SectionReady条件
11.1.5. 综合应用
以上只是一台设备的举例,但实际电气设计的时候,设备比较多,电源的分配就会更复杂,此时需要我们整理一个电气设计的表格,该表格显示的主要内容即电气设计的线路图,可以清晰的显示每一台设备的电气线路关系,同时这些关键电气元器件的辅助触点也都接入到了PLC的输入模块。

图11-16: 设备电气设计线路表1
当把所有设备的电气线路表格完整的整理出来后,SectionReady的程序就是电气表格的体现。
11.2.分布式电气设计
上一节描述的只是单个电柜设计,也可以理解为集中电气设计,即整个项目只有一个电气控制柜分配上述的电气线路。
有的设备或者项目比较庞大,一个电气控制柜反而会导致效率低下、柜内空间的不足、现场布线难度增加等问题,所以电气控制柜就会才有分布式设计,采用总+分的原则,PLC放置在总控制柜中,控制柜负责就近的设备,如下图所示。

图11-17: 分布式电气控制柜设计
对于单个的柜子的梳理和上一节是一样的,只是梳理完成后的表格内会增加不同控制柜,目的是将单个设备的电气线路的来龙去脉梳理清晰。

图11-18: 设备电气设计线路表2
由于有不同的控制柜,为形成标准化设计,则控制柜在标准程序架构中也是作为一个控制对象,按照对象化的思路,为不同的电柜设计不同的Identity,如下表的一个不同控制柜的功能码,再配合不同的设备位置,可以将所有的电气控制柜的Identity在整个系统中唯一。

图11-19: 电气控制柜缩写
11.3.电气控制柜程序
根据不同的电气控制柜的Identity,按照对象化的思路,标准程序架构中就会建立多少个函数块,用于不同电气控制柜的程序实现。
比如某个系统中只设计了一个中央控制柜,Identity为CCC01,柜内有总进线开关、相序监测、三个断路器及接触器、两个24V电源以及一个交换机。
标准程序架构中首先需要建立一个CCC01的电气控制柜的数据类型,数据类型的名称为typeCabinetCCC01,数据结构即电气控制柜中设计的电气元器件。

图11-20: 电气控制柜数据类型
电气控制柜作为一个控制对象,上述数据类型中的数据为电气控制柜的事件,所以其实例化数据是在全局数据块Event中建立对应电气控制柜的实例化数据,如下图的示例一样。

图11-21: 电气控制柜数据实例化
程序中建立一个函数块FB_CabinetCCC01,用于整个控制柜柜CCC01的程序实现。

图11-22: 电气控制柜程序块
函数块FB_CabinetCCC01中根据实际的输入地址的状态,改变数据块Event中CabinetCCC01的变量的状态,以电源总开关闭合为程序示例,将整个CCC01柜子的当前信息输出到全局数据块Event对应的变量中。

图11-23 : 电气控制柜程序
注:上图的变量名称为直接地址,实际项目中的变量名称请按规范命名。
电气控制柜中其他的变量按照上述原理,将实际输入的变量转变为全局数据块Event中对应的变量即可。
11.4. 安全回路及程序
对于一般的设备或者项目都要设置些许安全停止按钮,每一个按钮安全停止的设备范围都不一样;根据工艺要求,有的安全按钮激活只需要停止部分设备,而有的安全按钮激活整个设备都会停止;
安全按钮应该怎么布置,也需要根据工艺和设计要求,每一种设备或工艺都可能有不同;安全按钮作用范围基于电源分组来规划的,根据工艺和设计要求,可以将一个或者多个电源分组设置为一个安全停止区域,这个区域内的任何一个安全按钮激活都能将对应的这些电源分组的设备停止,将这种一个安全分组称之为安全分组SafetyGroup;
SafetyGroup就是控制上述KM吸合,可以是多个安全按钮断开一个KM的线圈,一个安全按钮也可以控制多个KM的线圈。

图11-24 : SafetyGroup示意图
如上图所示,SafetyGroup1内任意一个安全按钮都能停止电源分组KM1和KM2内的所有设备,SafetyGroup2内的任意一个安全按钮都能停止电源分组KM3的所有设备;
除了各自SafetyGroup内的安全按钮以外,全局安全按钮也能停止所有电源分组内的设备;
基于工艺的要求及复杂性,SafetyGroup中可以设置多个安全按钮,也可以只设置一个安全按钮。
基于上述的描述,标准程序架构中需要先建立一个数据类型typeSafetyGroup,目前预留了16组的安全回路。

图11-25: 安全分组数据类型
安全回路作为一个控制对象,上述数据类型中的分组为安全回路事件,所以其实例化数据是在全局数据块Event中建立一个安全回路的的实例化数据,如下图的示例一样。

图11-26: 安全分组数据实例化
程序中建立一个函数块FB_SafetyGroup,用于整个设备或者项目中的安全回路的程序。

图11-27: 安全分组程序块
函数块FB_SafetyGroup中根据实际的输入地址的状态,改变数据块Event中SafetyGroup的变量的状态,以SafetyGroup1为例的演示程序如下。

图11-28: 安全分组程序
注:上图可以得知SafetyGroup1里面有3个安全按钮,且安全按钮是以常开触点接入PLC的输入模块。
其他SafetyGroup的变量按照上述原理,将同组内的安全按钮的实际输入的变量转变为全局数据块Event中对应组的SafetyGroupOK变量即可。
11.5.SectionReady程序
任意设备的SectionReady程序是在函数FC_SectionReady中编程,此时任意设备的SectionReady使用的变量就不想前面章节中显示的实际输入地址,而是来自全局数据块Event中对应控制柜的变量。
同时由于程序的变化,都是判断Event中变量是否都是高电平(TRUE),不需要判断某个变量是否是低电平(FALSE),这样提高了整个程序的可阅读性与一致性。

图11-29: FC_SectionReady程序
同理,对于分布式的电气控制柜设计,单个的电柜程序都是一样的做法,只是在FC_SectionReady中需要判断来自不同控制柜的变量,比如上图中可以得知设备是不同电气控制柜组成的,且在第2组的安全回路中。
基于对象化的电气控制柜的程序,当有某个柜子的变量不满足的时候,只需要看到变量名称就可以快速定位故障点,便于整个项目的调试以及后续的维护。
11.6.SectionReady的应用
控制对象程序FB_EM_Model的设置数据类型为BOOL,名称为i_SectionReady的输入引脚,用于对象的SectionReady的数据接入。

图11-30: FB_EM_Model的SectionReady引脚
程序实例化的时候,该引脚填入Event中对应的变量,如下图所示。

图11-31: FB_EM_Model的SectionReady实参
SectionReady在程序中的作用主要有两个方面:设备准备好的公共状态以及实现故障的优先级。
公共状态SectionRead
设备的Event分为公共状态(PublicEvent)和私有状态(PrivateEvent),不管模式状态机还是模式控制机中,公共状态(PublicEvent)数据类型中都有一个SectionReady的状态,当该变量为TRUE的时即表示设备已经准备好,符合设备运行的条件。

图11-32:公共状态中的SectionReady
该变量的状态切换就是通过FB_EM_Model的输入引脚i_SectionReady来决定的,当引脚i_SectionReady为TRUE的时候,设备公共状态(PublicEvent)中的SectionReady即为TRUE,反之一样。
当设备不是通过总线接入PLC的话i_SectionReady引脚即是SectionReady的切换条件,若设备是通过总线接入PLC的话,除了i_SectionReady以外,还需要监视设备是否在线正常,此时FB_EM_Model还需要增加一个名称为i_PNPresent的BOOL类的输入引脚。

图11-33: FB_EM_Model的i_PNPresent引脚
故障优先级
当一个变频器报出故障后,只有SectionReady为TRUE的情况下,才能报告变频器出现故障的私有状态。
若SectionReady为FALSE的时候,意味着该设备没有准备好,很可能该设备的电源的空开跳闸了,此时不应该报告变频器故障,应该仅仅报告SectionReady不满足的电气故障。
若没有SectionReady,那当变频器的电源跳闸后,HMI或者SCADA上就会报告很多故障,有经验的工程师就会去寻找第一条故障,虽然也可以,但故障的报告却不是最合理的,这也是上述电气设计中各个关键电器都提供辅助触点的原因。
若按照这样设计思路,整个设备的故障报警就会有不同分级,故障的报告也更准确、更精准。