虽然机械/工业机器人有了快速的发展,但是现有的大部分机械/工业机器人控制系统软件在开发过程中并没有遵循统一的开发标准,存在很多问题,如开放性差、独立性差、容错性差、扩展性差、缺少网络功能等,无法满足现代工业发展的需要。尤其在功能安全方面,标准对软件功能安全缺乏可行的实施指南,使得安全性设计、实施、测试、评估缺乏可操作性,如IEC 62061。
随着互联网的快速发展,作为工业4.0、智能制造的突破口,机械/工业机器人控制软件将迎来巨大的发展机遇。控制软件对工业4.0、智能制造的驱动作用,体现在生产制造过程中的智能化上。智能制造的本质是依托智能装备和智能软件,从根本上变革制造方式,实现制造的网络化、智能化、数字化。智能制造离不开硬件和软件的双重支持,如果说硬件是智能制造的基础,那么软件则是智能制造的灵魂。集成了云计算、大数据、移动互联网等信息技术的应用软件嵌入各类机器设备后,如同给原本孤立的机器设备赋予了“意识”,这些“意识”通过软件设定的传输接口和标准,实现工艺流与信息流的融合及人与机器的互相交流,建立智能工厂、数字化车间,达到按需、柔性、智能制造,从而推进生产过程智能化。
随着软件在机械/工业机器人控制系统中所占的比重越来越大,复杂软件系统需求增加,几乎所有安全相关的控制功能都由软件实现,或者与软件直接相关,需求增加速度远远超过软件的设计、实现、测试和维护能力,结果出现了诸多可怕的工程事故,如工厂机器“杀人”等。安全级软件的安全性、可靠性是确保安全级控制系统产品质量的关键,亦是功能安全领域重点攻关的技术难题之一。软件的失效模式不同于硬件,已有、成熟的针对硬件及其系统的危害性分析方法是否适用,以及如何将其有效地拓展到软件危害性分析,也会在本书中探讨。
安全相关控制系统的软件包括系统(嵌入式)软件和应用软件两个部分,分别用全可变语言(Full Variability Language,FVL)和有限可变语言(Limited Variability Language,LVL)编写,如标准条款3.2.46~3.2.49所示。
Software specific to the application,that is implemented by the designer of the SRECS,generally containing logic sequences,limits and expressions that control the appropriate input,output,calculations,and decisions necessary to meet the SRECS functional requirements.
Software,supplied by the manufacturer,that is part of the SRECS and that is not normally accessible for modification.
NOTE Firmware and system software are examples of embedded software.
Type of language that provides the capability to implement a wide variety of functions and applications.
[IEC 61511-1,3.2.81.1.3 modified]
NOTE1 Typical example of systems using FVL are general-purpose computers.
NOTE2 FVL is normally found in embedded software and is rarely used in application software.
NOTE3 FVL examples include:Ada,C,Pascal,Instruction List,assembler languages,C++,Java,SQL.
Type of language that provides the capability to combine predefined,application specific,library functions to implement the safety requirements specifications.
[IEC 61511-1,3.2.81.1.2 modified]
NOTE1 A LVL provides a close functional correspondence with the functions required to achieve the application.
NOTE2 Typical examples of LVL are given in IEC 61131-3.They include ladder diagram,function block diagram and sequential function chart.Instruction lists and structured text are not considered to be LVL.
NOTE3 Typical example of systems using LVL:Programmable Logic Controller (PLC) configured for machine control.
Software that is used to implement safety-related control functions in a safety-related system.
由SRECS设计人员研发的特定应用软件,一般包括逻辑流程图、限制条件以及用于控制适当输入、输出、计算和决定的表达式,以满足SRECS的功能要求。
软件,由制造商提供。该软件是SRECS的一部分,通常不能修改。
注 :固件和系统软件为嵌入式软件的实例。
语言的一种类型,可提供实现多种功能和应用的能力。
注1 :改写GB/T21109.1—2007,定义3.2.81.1.3。
注2 :使用FVL系统的典型例子是通用计算机。
注3 :FVL通常用于嵌入式软件,很少用于应用软件。
注4 :FVL例子包括:Ada、C、Pascal、指令表、汇编语言、C++、Java、SQL。
语言的一种类型,为实现安全要求规范提供组合预定的、应用特定的、库功能的能力。
注1 :改写GB/T21109.1—2007,定义3.2.81.1.2。
注2 :LVL提供与要求功能相一致的接近功能以获得应用。
注3 :GB/T15969.3给出了LVL的典型例子。它们包括梯形图、功能方块图和顺序功能图。LVL不考虑指令表和结构文本。
注4 :使用LVL的系统典型例子——为机械控制配置的可编程逻辑控制器(PLC)。
在安全相关系统中,用于实现安全相关控制功能的软件。
1.条款目的与意图
定义术语“应用软件”“嵌入式软件”“安全相关软件”;定义术语“全可变语言”(FVL)和“有限可变语言”(LVL)。
2.条款解释与示例
1)安全相关控制系统的软件
在IEC 62061标准中,应用软件是指由SRECS设计人员研发的特定应用软件,包括逻辑流程图、限制条件及用于控制适当输入/输出、计算和决定的表达式,以满足SRECS的功能要求。而嵌入式软件由制造商提供,属于SRECS的一部分,通常不能修改,如固件和系统软件。
典型的应用软件又称用户程序,是用户利用编程语言,根据控制要求编制的程序,以实现控制目的。随着技术的发展,为了增强控制器的运算、数据处理及通信等功能,编程语言已从传统的梯形图、逻辑图、语句表等低端编程语言发展为高级编程语言,如C语言、Pascal语言等,使用户可以像使用普通微型计算机一样操作控制系统,使控制功能得到更好的发挥。
嵌入式软件由控制系统制造厂商设计编写,并存入系统存储器,用户不能直接读/写与更改,包括固件和系统软件。系统软件一般包括系统诊断程序、输入处理程序、编译程序、信息传送程序、监控程序等。
安全相关软件是用于实现安全相关控制功能的软件,也是安全功能的执行者,包括硬件和软件。硬件安全功能包括简单容错、诊断等,采用安全传感器来实现,包括急停按钮、安全门锁、安全光栅、安全光幕、激光扫描器、拉绳开关、脚踏开关、安全地毯、双手操作控制装置、安全触边等。
软件安全功能在IEC 62061中描述得不太清晰,这是由于传统的机械功能安全软件较简单(如PLC梯形逻辑图等)且所占比例很小,功能安全主要由硬件保障。随着近些年来工业化和信息化的深度融合,软件在机械/工业机器人核心控制应用中的比例越来越高,安全相关系统的安全需求也逐步由执行安全功能的软件来满足。执行安全功能的软件通过故障诊断判别硬件和其他软件的故障,采用冗余等技术措施避免或者降低风险。
安全相关软件与硬件不一样,它强调系统失效的概念,与时间无关(即随着时间推移不存在耗损型失效)。安全相关软件的保障是通过在安全生命周期各个阶段采取适当的技术和措施来实现的,比如在设计阶段需要进行软件设计验证、在实现阶段需要做遵循安全代码规则及采取冗余容错手段、在测试阶段需要达到语句覆盖、在验证阶段需要采取软/硬件在环仿真等。
2)全可变语言和有限可变语言
全可变语言FVL是语言的一种类型,具有实现多种功能和应用的能力。标准中提到,一个使用FVL系统的典型例子是通用计算机,通常用于嵌入式软件,包括Ada、C、Pascal、指令表、汇编语言、C++、Java、SQL。
有限可变语言LVL具有为实现安全要求规范提供组合预定的、应用特定的库功能的能力,包括梯形图、功能方块图和顺序功能图。典型的例子包括为机械控制配置的可编程逻辑控制器(PLC)。
功能安全用编程语言的构成如图1-14所示。
图1-14 功能安全用编程语言的构成
编程语言(Programming Language)是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。编程语言并不是为安全系统开发的,因此如果用FVL和LVL作为安全相关系统的软件编写工具,就必须对这些语言和应用此语言编写的程序提出要求,并进行评估,以确定在何种条件下使用该语言能确保安全软件完成相应功能安全任务。
由于软件已渗透到各个行业,凡是对安全有重要要求的行业都关注编程语言的安全规范。例如,汽车行业专门发布了MISRA C和MISRA C++规范,规范了应用于汽车行业的软件开发语言C和C++的安全要求。在核电行业,美国核管制委员会发布了《核电站软件语言导则》(NUREG/CR 6463 Rev.1),对用高级语言编写的用于安全系统的软件进行了安全评述;用于航空领域软件安全性标准(DO-187C,机载软件的审定考虑),也对开发语言、编译工具等做了安全性要求。
IEC 61508-7的附录C.4.5中,给出了适用于安全系统的软件开发语言,如表1-3所示,列举了24种编程语言,包括FVL语言5种(具有子集的ADA、具有子集的MODULA-2、具有子集的Pascal、具有子集的FORTRAN77、具有子集和编程标准并使用静态分析工具的C语言)及LVL语言4种(具有专门定义的语言子集的梯形图、具有专门定义的语言子集的功能块图、具有专门定义的语言子集的结构化文本、具有专门定义的语言子集的顺序功能图)。
表1-3 适用于安全系统的软件开发语言
续表
注:R为推荐,HR为强烈推荐。
机器人的功能安全涉及机器人的整个生命周期与各个部分,包括以下几个维度。
(1)从内到外:从芯片、元器件、硬件板卡到外形设计的功能安全。
(2)从硬到软:从芯片、硬件板卡到软件驱动、应用执行的功能安全。
(3)从设计到制造:设计要考虑功能安全性能,制造中需要按照安全设计的要求实施相关措施。
(4)从操作到管理:正常操作的安全、非法操作的管理、功能安全人员的要求等。
机器人方面的安全标准如表1-4所示。
表1-4 机器人方面的安全标准
续表
有两点需要注意。
第一,理解为什么机械/工业机器人的安全标准有一半是机械安全标准。这是因为在信息化、智能化程度不高的时期,机器人和机械臂、机床等机械设备在安全要求、使用环境、操作方式、安全管理等方面没有太大的差异,机械/工业机器人的安全也遵循机械安全标准。随着机器人的应用范围逐渐广泛,业界针对协作机器人、服务机器人、无人机等新领域制定了机器人安全标准。
第二,目前,传统机械行业存在两个功能安全评估的标准:IEC 62061和ISO13849。IEC 62061是国际电工委员会颁布的标准,主要是对安全相关的电气、电子、可编程电子控制系统的功能安全要求;而ISO13849是国际标准化组织颁布的标准,主要是对控制系统的安全相关部分的要求。两者是不同的组织依据不同的系统架构和考虑颁布的标准。在实际应用中,IEC 62061也会引用ISO13849的部分内容。
当前,软件已成为各行各业智能化、互联化的关键,广泛应用于金融、电力、交通、航空航天、国防等重点领域。随着软件的规模越发庞大、结构日趋复杂,软件中容易驻留缺陷,缺陷可能导致失效,失效引发事故。纵观历史,很多重大事故的发生均是由嵌入式软件的安全性缺陷导致的。软件的安全性、可信性成为业内广泛关注的焦点,软件安全性分析、设计、验证、维护等关键基础技术更加凸显其重要性。
在这个问题上,国外研究较早。1995年,美国麻省理工学院研究团队针对嵌入式软件安全性(Safety)发起了MIT Safety Project项目,依托该项目,该团队发表了大量关于软件安全性分析、安全需求管理、软件安全性设计和验证的论文、著作,为嵌入式软件安全性研究奠定了较好的理论基础。在此之后,该领域的研究得到了国际社会的广泛关注,2001年国际上电气和电子工程师协会发布了首个产品安全性标准——IEC 61508《电气/电子/可编程电子安全相关系统的功能安全》,该标准从研发过程管理、安全保障技术等多个方面对安全相关产品(含软件)提出了要求,并得到了国际上知名检测认证机构(TUV、SGS、UL、CSA等)、领军企业(波音、空客、GE、ABB、宝马)的广泛支持,在世界范围内产生了较大的影响。经过十多年的发展,以该标准为基础,结合各领域知识背景,已形成了适用于航空、核电、轨道交通、工业仪表、医疗电子、扶梯、电驱设备、智能家电等领域的产品安全技术标准,涉及国计民生各重点行业。
IEC 62061是IEC 61508框架内机械领域的具体应用,它的出现主要是为了完善在发生重大机器危险情况下执行安全相关电气控制系统的规范,该标准直接引用了IEC 61508-3《电气/电子/可编程电子安全相关系统的功能安全 第3部分:软件要求》。