基于BECKHOFF论文_左根明,孟勇,李恬,唐晨

(安徽新视野科教文化股份有限公司 安徽省铜陵市 244000)

摘要:安全是工业自动化和智能制造中的关键问题,关系到人员安全和生产成本。通过采用可编程逻辑控制器(PLC)可以避免采用传统计算机控制时易受环境干扰、无法达到实时控制的缺点。然而,即便PLC具有极高的可靠性,在控制软件逐渐复杂的今天也存在一定安全控制隐患。本文介绍德国BECKHOFF公司基于其集成自动化开发环境TwinCAT 3的安全通信协议、TwinSAFE安全输入输出端子与安全PLC模块,及其工作机理。采用以上设备可以提升工业控制系统的安全。

关键词:工业自动化;TwinCAT 3;TwinSAFE;安全EtherCAT通信协议

1.引言

随着机器替代和机器协同进程的深化,数字化车间和数字化工厂的概念和实践逐步进入人们的视野。通过大规模、广领域、深领域的采用自动化设备辅助生产,大大降低了工人劳动强度,节约生产成本,且生产过程易控易检,产品一致性好,工艺升级便捷。随着生产过程人为干预程度降低,工业生产对控制过程的安全性提出了更高的要求。在自动化控制中,通常采用抗干扰能力强、可靠性高、系统占用资源少的可编程逻辑控制器(Programmable Logic Controller,PLC)作为设备的主控单元[1,2,3],用于控制电机、气缸、阀门等执行器件,并可以通过安装输入输出端子从外部传感器获取数据信息,并将这些信息作为控制流程执行的依据[4,5]。

正应为PLC具有高可靠和使用广泛的特性[6],工业控制中的安全性基本依赖于PLC中运行的相关关键例程,然而随着生产规模逐步扩大、自动化程度越来越高,用于控制和安全功能的代码量急剧增加,难以避免地出现程序间的干涉[7,8]。其次,一个复杂生产过程中根据工艺需求安装的传感器节点数量众多,需要对传感器数据处理耗费的计算开销和存储开销较大,这也造成了一定的安全隐患[9,10]。针对以上问题,德国BECKHOFF公司研发了针对安全工业控制的TwinSAFE端子模块和安全PLC模块,分别用于接收传感器数据与运行安全关键控制代码,做到安全相关设备和程序的专有化,提高安全关键代码运行的可靠性和效率,进一步提高工业自动化生产的安全性。

2.BECKHOFF TwinSAFE功能实现

2.1 安全EtherCAT通信协议

BECKHOFF提出的安全自动化工业控制采用了TwinSAFE端子和TwinCAT安全PLC两类模块。这两类模块之间通过安全EtherCAT通信协议(Safety-over-EtherCAT protocol)传输数据信息和控制流信息。安全EtherCAT通信协议是由BECKHOFF在2005年提出的总线通信协议,也是迄今为止最早的基于以太网的实时安全总线通信协议协议。该安全总线协议的带来了极强的实用价值和可扩展性。该总线通信协议支持链状、星状和网状网络拓扑,同时与普通ETHERCAT总线通信协议兼容。

安全EtherCAT通信协议与EtherCAT通信协议不同,需要通过面向总线安全性的测试。该测试是由HVBG电气工程委员会在2000年提出的,该测试通过评判在总线中传输安全相关信息的能力,来评价他通信协议的安全性。目前,通用的总线安全性测试pre-IEC 61784-3标准就是基于HVBG委员会提出的GS-ET-26测试方案。该标准定义了在安全通信中常见的几种错误,例如:误码率、重发率、丢包率、时延、信息地址无效等,安全通信协议必须通过特定安全机制及时发现并处理以上错误。

安全EtherCAT总线通信中的安全逻辑是嵌入在网络层的,因此,普通非安全PLC也可以在安全网络内执行控制任务。通过链接本地安全逻辑,安全输入/输出功能通过智能安全总线终端访问安全通信网络。同时,网络中的非安全相关PLC和终端为安全数据信息在安全PLC和安全端子中传输提供相应的路由支持。

2.2 BECKHOFF TwinSAFE端子与安全PLC

BECKHOFF提供三种安全输入/输出端子,包括具有4路输入的安全输入端子、4路输出的安全输出端子和能进行安全逻辑适配的4路安全输出端子。通过BECKHOFF集成自动化开发环境TwinCAT可以对这些端子中的安全相关参数进行配置,之后这些参数会被上传至安全逻辑终端。在系统开始运行时,将配置好的参数分别发布至相应的端子中。这样实现简单的数据交互,避免频繁的配置和数据重载。

在安全PLC和TwinSAFE端子之间进行信息交互时,信息传输和响应速率是保证自动控制安全的重要因素。通常情况下,响应时间由如下几个因素构成:

(1)RTsensor:传感器的响应时间,通常指的是传感器进行数据采集后通过A/D转换等操作,将数据送抵通信缓冲区的时间。这段时间一般是由传感器生产厂家决定的。

(2)RTinput:安全输入端子的响应时间,例如EL1904或EP1908。可以在选型手册中查阅实际耗时,在EL1904,RTinput为4ms。

(3)RTcomm:数据通信的响应时间。通常情况下,RTinput为3个EtherCAT通信时钟周期,这段时间用于将数据按照安全EtherCAT通信协议规定将数据打包成特定的报文结构。实际上耗费的时间与控制系统的配置有关,例如PLC/NC/安全任务的扫描周期。

(4)RTlogic:安全PLC的响应时间。在没有发生超时的情况下,这段时间就是安全PLC任务的扫描周期。

(5)RToutput:安全输出端子的响应时间,通常为2-3ms。

(6)RTactor:执行器件的响应时间。这段时长有执行期间生产厂商提供决定。

(7)WDcomm:通信中的看门狗响应时间。

整个传感器→安全输入→安全PLC→安全输出→执行器件间的通信流程如图1所示:

图1 安全通信示意图

那么,这个响应时间可以由下式计算:

RTtyp=RTsensor+RTinput+3*RTcomm+RTlogic+3*RTcomm+RToutput+RTactor

(1)

最坏情况下的响应时间一般由错误发生时最长的执行期间操作时间表征。如图2所示:

图2 最坏响应时间下的安全通信示意图

在这种情况下,当传感器采集到数据并传递到安全输入端子后,可能在通信缓冲区准备发送时发生了某类通信错误。在看门狗响应时间结束时,这个通信错误发现并被处理,同样在安全输出端子接受到安全PLC模块发送信号时,也需要看门狗响应时间来发现并处理这个故障,并告诉执行器件执行相应动作。在最坏情况下,响应时间可由式(2)计算:

RTmax= WDcomm+ WDcomm+RTactor (2)

3.基于TwinSAFE的安全C代码开发

3.1 安全C代码原理

安全C是一种基于C++的高级语言,这种语言主要用于TwinCAT安全PLC中的安全工业控制任务的实现。这种安全C代码通常具有极为规范的书写格式和极强的模块化特征。并且,出于可靠性,在安全C中禁止使用动态内存分配和指针。通常,在安全C中,语法和语义需要满足IEC针对工业C语言的标准C++11 N3243,同样需要有特定的编译器对代码进行编译(一般来说Microsoft Visual C++ 2015及以上编译器满足要求)。C++扩展自C语言,本质上是一种支持面向对象和元编程机制的向上兼容语言,因此,C语言同样可以由C++编译器编译。在安全C代码中,虽然并不支持一些典型的C++应用,如继承、多态等,在在数据封装和程序模块化中,同样允许部分采用面向对象的C++扩展应用。总的来说,在安全C框架下编程与开发普通C代码也存在一定类似。

与PLC编程中基于功能块(Function Block)的编程相比,虽然会引发相应的程序运行风险,但采用C或C++等高级语言编程具有更高的自由度。同样,国际标准化组织(International Standard Organization,ISO)也为更为有效地编译C或C++代码预留了极大的空间。为了提高代码的安全性、避免引发语义歧义、降低代码风险,需要对应用在PLC控制系统中的C或者C++代码做出严格的约束,通常需要满足IEC61505-3:2010标准。除此之外,在代码运行之前,也需要增加相应的人为或自动化代码分析和修正环节。安全C与标准C/C++代码之间的区别如表1所列。

表1 安全C与标准C/C++的区别

3.2 安全C代码实现

(1)申明安全C模块

/*<SafeUserApplicationHFrontend>*/

#pragma once

/*<UserDefinedIncludes>*/ // Include other safe module headers here

/*</UserDefinedIncludes>*/

#include "TwinSafeGroup1IoData.h" // Rename according to TwinSAFE group name

/*<UserDefinedDefines>*/ // Define preprocessor constants here

/*</UserDefinedDefines>*/

NAMESPACE(TwinSafeGroup1) // Rename according to TwinSAFE group name

{

/*<UserDefinedTypes>*/ // Define custom data types here

/*</UserDefinedTypes>*/ ///////////////////////////////////////////////////////////////////////////

//! \class TwinSafeGroup1

//! \brief Declaration of the Safety C user application module class

//! \details Put detailed description of your module functionality here

///////////////////////////////////////////////////////////////////////////

SAFE_MODULE(TwinSafeGroup1) // Rename according to TwinSAFE group name

{

// Public module interface

PUBLIC:

VOID Init(); //!< Module initialization function

VOID InputUpdate(); //!< Module input update function

VOID OutputUpdate(); //!< Module output update function

VOID CycleUpdate(); //!< Module cycle update function

SafetyInputs sSafetyInputs; //!< Safe input data struct

SafetyOutputs sSafetyOutputs; //!< Safe output data struct

StandardInputs sStandardInputs; //!< Non-safe input data struct

StandardOutputs sStandardOutputs; //!< Non-safe output data struct

safeUINT16 u16SafeTimer //!< Safe external timer input (in ms)

TSGData sTSGData; //!< TwinSAFE group exchange data struct

// Module internals

PRIVATE:

/*<UserDefinedVariables>*/ // Define internal variables here

/*</UserDefinedVariables>*/

/*<UserDefinedFunctions>*/ // Define internal functions here

/*</UserDefinedFunctions>*/

SAFE_MODULE_EXPORT();

};

//! Reference to project FCS symbol

extern UINT32 SAFETY_PROJECT_FCS; // Do NOT read, write or remove!

};

/*</SafeUserApplicationHFrontend>*/

(2)实例化安全C模块

#include "TwinSafeGroup1.h" // Rename according to TwinSAFE group name

SAFE_MODULE_DEF(TwinSafeGroup1) // Rename according to TwinSAFE group name

{

/////////////////////////////////////////////////////////////////////////////

//! \brief Implementation of the safe user module initialization function

/////////////////////////////////////////////////////////////////////////////

/*<TcInit>*/

VOID CSafeModule::Init()

{

// Put your module initialization code here

}

/*</TcInit>*/

/////////////////////////////////////////////////////////////////////////////

//! \brief Implementation of the safe user module input update function

/////////////////////////////////////////////////////////////////////////////

/*<TcInputUpdate>*/ VOID CSafeModule::InputUpdate()

{ // Put your module input update code here

}

/*</TcInputUpdate>*/

/////////////////////////////////////////////////////////////////////////////

//! \brief Implementation of the safe user module output update function

/////////////////////////////////////////////////////////////////////////////

/*<TcOutputUpdate>*/

VOID CSafeModule::OutputUpdate()

{

// Put your module output update code here

}

/*</TcOutputUpdate>*/

/////////////////////////////////////////////////////////////////////////////

//! \brief Implementation of the safe user module cycle update function

/////////////////////////////////////////////////////////////////////////////

/*<TcCycleUpdate>*/

VOID CSafeModule::CycleUpdate()

{ // Put your cycle update code here

}

/*</TcCycleUpdate>*/

/*<UserDefinedFunctionsDef>*/ // Implement internal module functions here

/*</UserDefinedFunctionsDef>*/

//! Reference to project FCS symbol

extern UINT32 SAFETY_PROJECT_FCS; // Do NOT read, write or remove! };

// Rename according to TwinSAFE group name

SAFE_MODULE_DEF_EXPORT(TwinSafeGroup1);

/*</SafeUserApplicationCppFrontend>*/

4.结束语

工业控制中的安全越来越受到企业的重视,在广泛采用PLC实现工业现场控制的同时,为更加可靠地响应现场异常状况,BECKHOFF推出了面向安全工业控制的TwinSAFE安全输入输出端子及安全PLC模块,并通过安全EtherCAT总线通信协议进行安全相关数据的传输与控制命令的下发。同时采用安全C模块可以兼顾控制程序编写时的灵活性与控制流程的安全性,为工业安全提供了更加可的保障。

参考文献

[1]柯巍.工业控制系统信息安全研究综述[A].中国计量协会冶金分会、《冶金自动化》杂志社.中国计量协会冶金分会2018年会论文集[C].中国计量协会冶金分会、《冶金自动化》杂志社:《冶金自动化》杂志社,2018:4.

[2]公彦杰,赵艳领.PLC可靠性测试系统开发[J].中国仪器仪表,2018(09):72-75.

[3]赛永杰,冯战巨.工业控制系统的信息安全[J].电子技术与软件工程,2018(17):207-209.

[4]马祥厚,刘晓垒.工业控制系统网络安全防护体系研究[J].信息系统工程,2018(08):77.

[5]王安军.基于PLC的自动化电气控制措施分析[J].黑龙江科学,2018,9(12):40-41.

[6]黄敏.工业控制网络安全方案探讨[J].化工设计,2018,28(03):38-40+47+2.

[7]王营,臧易非.工业自动化控制技术的发展与应用[J].中国新技术新产品,2018(10):22-23.

[8]孝成美,郭唤唤,苑学龙.PLC控制系统的可靠性设计[J].智慧工厂,2018(05):47-49.

[9]张书钦,李凯江,郭倩倩,孙利民,石志强.工业控制网络安全脆弱性分析技术研究[J].中原工学院学报,2017,28(06):63-69.

[10]何宏建.PLC在电厂生产自动化中的应用[J].通讯世界,2017(23):336-337.

论文作者:左根明,孟勇,李恬,唐晨

论文发表刊物:《电力设备》2018年第23期

论文发表时间:2019/1/2

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于BECKHOFF论文_左根明,孟勇,李恬,唐晨
下载Doc文档

猜你喜欢