智能家电软件功能安全标准解析与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.6 与使用软件的控制器故障/错误控制技术相关的定义

【内容】

全总线冗余 full bus redundancy

全总线冗余是由冗余的总线结构提供全冗余数据和/或地址的一种故障/错误控制技术。

多位总线奇偶校验 multi-bit bus parity

多位总线奇偶校验是总线扩展两位或多位,并用这些扩展位发现错误的一种故障/错误控制技术。

一位总线奇偶校验 single bit bus parity

一位总线奇偶校验是总线扩展一位,并用这一扩展位发现错误的一种故障/错误控制技术。

代码安全 code safety

代码安全是通过利用数据冗余和/或传输冗余提供防止输入和输出信息中偶然的和/或系统的错误的保护故障/错误控制技术。

数据冗余 data redundancy

数据冗余是产生冗余数据贮存的一种代码安全形式。

传输冗余 transfer redundancy

传输冗余是数据至少被连续传输两次后被比较的一种代码安全形式。

比较器 comparator

比较器是在双通道结构中用作故障/错误控制的一种器件。此器件比较来自两个通道的数据,并且在发现两个通道的数据有差异时,初始化一种声明的响应。

d.c.故障模式 d.c.fault model

d.c.故障模式是包含信号线间短路的一种黏着性故障形式。

等价类测试 equivalence class test

等价类测试是预定用于确定是否对指令进行了正确译码和执行的一种系统测试。该测试数据源自CPU指令规范。

错误识别装置 error recognizing means

错误识别装置是为识别系统内部错误而设计的独立装置。

汉明距离 hamming distance

汉明距离是一种统计度量,表示代码检测和纠正错误的能力。两个码字的汉明距离等于两个码字中不同位的数量。

输入比较 input comparison

输入比较是用于比较专门在规定的偏差范围内的输入的一种故障/错误控制技术。

内部错误侦测或纠正 internal error detecting or correcting

内部错误侦测或纠正是整合了用于侦测或纠正错误的特殊电路的一种故障/错误控制技术。

频率监测 frequency monitoring

频率监测是把时钟频率与一个独立的固定频率相比较的一种故障/错误控制技术。

程序顺序的逻辑监测 logical monitoring of the programme sequence

程序顺序的逻辑监测是监测程序顺序的逻辑执行的一种故障/错误控制技术。

时隙和逻辑监测 time-slot and logical monitoring

时隙和逻辑监测是程序顺序的逻辑监测和程序顺序的时隙监测的联合。

程序顺序的时隙监测 time-slot monitoring of the programme sequence

程序顺序的时隙监测是周期地触发基于独立时钟基准的计时装置而用于监测程序功能和顺序的一种故障/错误控制技术。

多路平行输出 multiple parallel output

多路平行输出是为操作错误侦测或独立比较因子提供独立输出的一种故障/错误控制技术。

输出验证 output verification

输出验证是把输出与独立的输入进行比较的一种故障/错误控制技术。

似真性检查 plausibility check

似真性检查是对程序执行、输入或输出进行检查以确认是否有不能容许的程序顺序、计时或数据的一种故障/错误控制技术。

协议测试 protocol test

协议测试是在计算机各组成部件之间进行数据传递以侦测内部通信协议错误的一种故障/错误控制技术。

倒置比较 reciprocal comparison

倒置比较是用于带有比较的双通道(相同的)结构中,在两个处理单元之间进行倒置数据交换时做比较的一种故障/错误控制技术。

冗余数据生成 redundant data generation

冗余数据生成是指提供两种或两种以上独立方法执行相同的任务,如多个代码生成器。

冗余监测 redundant monitoring

冗余监测是指利用两个或多个诸如看门狗和比较器之类的独立装置执行同一任务。

预定的传输 scheduled transmission

预定的传输是一种通信过程,在此过程中,特定的发送器只被允许在一个预先设定的时间点或时间段发送信息,除此之外,接收器将按通信出错处理。

软件差异性 software diversity

软件差异性是软件的全部或部分以不同的软件代码的形式被二次装入的一种故障/错误控制技术。

黏着性故障模式 stuck-at fault model

呈现开路或信号电平不变的故障模式称为黏着性故障模式。

受试监测 tested monitoring

受试监测是指通过诸如看门狗和比较器之类的独立装置,在控制器启动时或运行期间对其进行周期性的测试。

测试模式 testing pattern

测试模式是用于周期性地测试控制器的输入装置、输出装置和控制接口的一种故障/错误控制技术。将测试模式引入单元并将结果与期望值进行比较。使用相互独立的测试模式引入和结果评价。测试模式的建立应不影响控制器的正确操作。

【注释】

本节给出了使用软件的控制器在软/硬件设计、开发和测试过程中用到的故障/错误控制技术与方法,主要从控制器的结构设计、通信传输、通信数据校验等方面讲解了一系列错误控制方法和措施。

1.全总线冗余

总线冗余是避免数据或地址总线在通信中的错误、提高总线通信可靠性的有效设计。总线冗余分为全总线冗余、多位总线奇偶校验、一位总线奇偶校验。

全总线冗余是由冗余的总线结构提供全部的冗余数据或冗余地址的错误控制技术。以CAN总线通信为例,虽然CAN协议自身有比较强的检错和纠错能力,但是在工业控制现场的复杂环境中,机械和电磁的噪声等都会影响CAN总线的可靠通信,进而使得系统的整体可靠性大大降低,解决这个问题的有效办法是采取冗余设计。冗余设计一般包括部分冗余和全面冗余。部分冗余设计通常仅实现物理介质和物理层的冗余,CAN总线通信的实时性和可靠性仍不能得到有效保证。全面冗余设计对传输介质、数据链路层及物理层,甚至应用层都进行了全面的冗余,可以大幅度提升系统的可靠性。全面冗余与部分冗余方法相比,不使用故障判断和冗余部分切换电路,从而降低了硬件电路的设计难度,并且使系统的故障率大大降低。

2.多位总线奇偶检查和一位总线奇偶校验

奇偶校验是一种校验代码传输正确性的方法,根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验,采用奇数的称为奇校验,采用偶数的称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中1的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验1的个数是否为奇数,从而确定传输代码的正确性。

奇偶校验的校验方法如下。

奇校验就是让原有数据序列中(包括要加上的1位)1的个数为奇数。例如,对于序列“1000110(0)”(括号中的0是添加的1位校验位),原来1的个数是奇数(3),必须添加0,使添加位之后1的个数还是奇数。偶校验就是让原有数据序列中(包括要加上的1位)1的个数为偶数。例如,对于序列“1000110(1)”(括号中的1是添加的1位校验位),原来1的个数是奇数(3),必须添加1,使添加位之后1的个数是偶数(4)。

奇偶校验又分为单个位奇偶校验(又称单向奇偶校验)和双向奇偶校验(又称双向冗余校验、方块校验或垂直水平校验)。单个位奇偶校验是发送器在数据帧每个字符的信号位后添加一个奇偶校验位,接收器对该奇偶校验位进行检查的方式。典型的例子是面向ASCII码的数据信号帧的传输,由于ASCII码是7位码,因此,用第8位码作为奇偶校验位。对于双向奇偶校验,可通过表1.1所示的例子来说明。

表1.1 双向奇偶校验示例

注:“X”表示奇偶校验采用的奇校验或偶校验的校验码。

在表1.1中,对每一行和每一列都使用了奇偶校验,对每个数的关注,由单个位奇偶校验的1×7次增加到了7×7次。因此,双向奇偶校验比单个位奇偶校验的校验能力强。

奇偶校验码是最简单的错误检测码。如果传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错,表示传输过程有错误发生,因此,奇偶校验位是一种错误检测码,但是由于没有办法确定是哪一位出错,所以不能进行错误校正。当发生错误时,必须扔掉全部的数据,从头开始传输数据。在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现。但是奇偶校验位也有它的优点,它是使用一位校验位能够达到的最好的错误检测码,并且它只需一些异或门就能够生成,因此奇偶校验被广泛应用。

一位总线奇偶校验将总线扩展一位,利用该扩展位采用奇偶校验的方法发现错误。

多位总线奇偶检验将总线扩展两位或多位,利用这些扩展位采用奇偶校验的方法发现错误。

3.代码安全、数据冗余和传输冗余

代码安全是通过利用数据冗余或传输冗余技术来防止输入或输出信息中偶然的或系统性的误差(或错误)的故障/错误控制技术。

数据冗余是同一数据贮存在不同数据文件中的方法,可通过重复贮存数据来防止数据丢失,或者对数据进行冗余性编码来防止数据丢失、错误,并提供对错误数据进行反变换得到原始数据的功能。

传输冗余是数据至少被传输两次,并对两次或多次传输的结果进行数据比较的数据错误检测控制方法。数据冗余传输可以在同一个传输通道中将同一数据先后传输两次或多次,也可在两个或多个传输通道中将同一数据同时传输两次或多次,并将两次或多次传输获得的数据进行比较,进而实现错误检测控制。传输冗余可以辨别出偶发错误。

4.比较器

比较器是双通道结构中使用的一种故障/错误控制器件。双通道结构一般会对同一对象(数据或信号等)进行处理,通过两个通道输出两路数据,比较器可对这两路数据进行比较,并按预先设计的规则对比较的结果进行处理和响应。例如,比较器常见的对比较结果进行处理的方式如下:若两路数据相同,则认为系统工作正常(或数据输入和处理正确),执行两个通道的输出;若两路数据不相同,则认为系统工作异常(或数据输入和处理错误),此时它会向主控系统报系统异常或故障,进而进入故障处理流程(如重新进行两通道的输入、处理和输出比较,或者停止与安全相关的控制输出,进入故障状态并提醒用户进行故障处理)。

5.d.c.故障模式

d.c.故障模式是包含信号线间短路的一种黏着性故障模式。在被测设备中,可能的短路的数量较多,通常重点考虑信号线间的短路。确定一个逻辑信号电平,用于防止信号线试图驱动相反电平的情况发生。

6.等价类测试

等价类测试又称为等价类划分测试,是一种测试用例设计方法。等价类划分是指在分析需求规格说明的基础上,把被测系统的输入域划分成若干部分,在每部分中选取代表性数据形成测试用例。每部分的代表性数据在测试中的作用等价于此部分中的其他值,即如果用该代表性数据发现了错误,那么用该部分的其他值也会发现错误;如果用该代表性数据没有发现错误,那么用该部分的其他值也不会发现错误,因此把该部分称为等价类。

一个被测系统的输入是无限的,测试者不可能遍历系统的所有输入,不可能进行全部测试。例如,某系统的合法输入值是[0,10]区间的实数,因为[0,10]区间有无穷多个实数,所以测试者不可能进行全部测试。但是被测系统往往存在这种现象:对某一集合中的所有可能输入、系统的响应是同一种形式,对另外一个集合中的所有可能输入、系统的响应又是另一种形式。等价类划分就基于这种思想,将导致系统响应一样的多个输入划分为一类,在这一类中找一个代表设计测试用例对系统进行测试。

等价类划分一般要经历如下步骤。

(1)划分有效等价类:对规格说明是有意义的、合理的输入数据构成的集合。

(2)划分无效等价类:对规格说明是无意义的、不合理的输入数据构成的集合。

(3)确定边界上的数据:将有效数据和无效数据边界上的数据形成一个等价类。

(4)极端值和它们的组合:将极端值和它们的组合形成一个等价类。

(5)为每个等价类定义一个唯一的编号。

(6)为每个等价类设计一组测试用例,确保覆盖相应的等价类。

等价类划分测试选择有限子集代表所有可能的输入全集。它需要将被测软件的输入和输出分成许多区域,对于一个区域中的任何值,软件的行为是等价的。等价类划分假设任何单一区域内的所有值具有相同的测试目的,因此,每个区域测试一个值。

对于使用软件的控制器,等价类划分测试是使用等价类划分的方法测试控制器能否对指令正确译码和执行的一种系统测试,其测试依据是控制器的CPU指令规格说明和控制器需求规格说明。

7.错误识别装置

前面提到,错误识别装置是为识别系统内部错误而设计的独立装置,如监测装置、比较器和代码发生器。例如,对于某型热泵热水器,其软件控制中可通过温度和压力传感器检测并避免超温超压危险工况的发生;还设计有独立的压力接触开关,在超压且软件控制器失效的情况下,通过压力接触开关断开电源,避免压力继续上升。这个独立的压力接触开关就属于错误识别装置。

8.汉明距离

汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中,汉明距离用来累计定长二进制字中发生翻转的错误数据位数,因此也被称为信号距离。汉明距离在图像处理领域也有广泛的应用,是比较二进制图像非常有效的手段。

在信息理论中,汉明距离表示两个等长字符串在对应位置上不同字符的数目,用d(x,y)表示字符串x和y之间的汉明距离。从另外一个方面看,汉明距离度量了通过替换字符的方式将字符串x变成y所需的最少替换次数。

对于二进制串a和b,汉明距离等于a xor b(xor即异或运算)中1的数目,又称其为汉明权重。此时,计算汉明距离就转化为计算给定整数的二进制表示中1的个数,可通过反复查找并消除最低的非零bit位来实现。基于此,使用C语言实现的计算汉明距离的算法如下:

9.输入比较

输入比较是防止因输入数据或信号非法(或越界)而引起系统错误的有效故障/错误控制手段。大部分系统对其输入数据都有一定的范围限制,处理超范围的数据可能超出了系统的处理能力,也可能是无意义的。因此,好的系统设计(或软件设计)会对输入系统的数据的取值限制一个范围或区间,并将输入数据与这个范围进行比较,只处理范围内的数据,对超出范围的数据不进行处理(或同时给出错误报警处理)。

10.内部错误侦测或纠正

内部错误侦测或纠正装置是控制器中用于检测或纠正错误的特殊电路装置。它整合用于检测错误或纠正错误的特殊电路。例如,家用电磁炉中的热熔断保护电路的工作原理是当系统中的电流过流一段时间(如1min)且软件控制器控制失效时,可通过热熔断断开电源,避免险情进一步发展。

11.程序顺序监测

程序顺序监测即程序执行顺序监测,监测控制器中程序的执行顺序是否满足设计要求,且当程序执行顺序错误时进行纠错处理。控制器中的程序作为嵌入式软件程序,其运行一般都有固定的逻辑顺序和运行周期要求,在正常情况下,程序按设计的逻辑顺序和运行周期循环运行,实现系统的输入数据获取、数据处理、决策判断和输出控制功能。而当程序的执行逻辑顺序或周期运行频率出现错误时,就会导致软件错误的发生,进而导致软件功能失效。在极端的情况下,当安全相关功能失效时,将会导致安全事故的发生。程序顺序监测是监测和纠正程序的执行逻辑或周期运行频率错误的有效手段。

程序顺序监测可通过程序顺序的逻辑监测和频率监测实现。程序顺序的逻辑监测是监测程序执行逻辑顺序的错误控制措施,嵌入式软件大多都是顺序执行的,对于顺序执行的程序,可通过程序运行步骤累计与判定来判定和识别程序是否按系统设置执行。程序顺序的逻辑监测设计如图1.2所示。

频率监测是把控制器(或MCU、CPU)的时钟频率与一个独立的固定频率相比较来监测控制器频率错误的故障监测手段,如与线路供电频率相比较。

前面提到,程序顺序的时隙监测是周期地触发基于独立时钟基准的计时装置而用于监测程序功能和顺序的一种故障/错误控制技术。看门狗定时器是一个程序顺序的时隙监测的例子。看门狗(WDT)从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中的输入叫作喂狗,输出一般连接到复位端。在整个系统运行以后启动看门狗的计数器,此时看门狗就开始自动计时,在MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给看门狗电路清零,如果超过规定的时间不喂狗,则看门狗计数器会溢出,从而引起看门狗中断,会发出一个复位信号并送达MCU,使MCU复位。看门狗就是利用了一个定时电路来监控主程序的运行的。在主程序的运行中,要在定时时间到达之前对定时器的计数进行清零。看门狗的作用就是防止程序无限制地运行,造成死循环。例如,它可以用于接收数据时接收超时的处理,也可用于发送数据时发送超时的处理。

12.多路平行输出

多路平行输出是为监测错误操作或提供给独立的比较器进行输出比较而设计的多个相互独立的输出。多路平行输出多存在于具有双通道或多通道结构的控制器中,每个通道都会对系统的输入分别进行处理和判断并给出独立的输出,对多个输出进行比较和判断,当出现偶发故障时,可以监测到故障/错误,即使在出现偶发故障的情况下,仍能给出正确合理的输出。例如,“二乘二取二”和“三取二”高可靠性结构设计就是以多路平行输出为基础的。

图1.2 程序顺序的逻辑监测设计

13.输出验证

输出验证对输出与独立的输入进行比较。独立的输入可以是一个输出预计值,将输出与输出预计值进行比较,当两者不一致或差距较大时,可以监测到系统错误。此时,输出验证将有缺陷的输出与错误关联起来。输出验证也可以不将有缺陷的输出与错误进行关联,此时,独立的输入可以设置为其他状况。

14.似真性检查

似真性检查是软件控制器的差错、容错、改错处理设计,对程序执行、输入或输出进行检查,查看是否有错误的程序顺序、计时或数据错误。例如,对于程序的输入检查,可识别合法输入和非法输入,使程序只处理合法输入;对于程序的输出检查,可屏蔽错误的或不合理的输出,保证程序输出的正确性;在程序中设置看门狗可避免程序进入死循环;在程序执行顺序错乱或遇到除零时,使程序进入故障处理状态,避免系统因带病运行而使被控家电进入不安全运行状态。

16.协议测试

协议测试是侦测内部通信协议错误的一种故障/错误控制技术。它在计算机各组成部件之间以内部通信协议的格式进行数据传递,检查通信的输入/输出端口、通信链路、通信格式等是否有错误。

对于使用软件的控制器,协议测试主要是针对控制器的板卡之间的通信协议的测试,家电控制器通信大多使用串口通信协议,如RS232、RS422、RS485等。在协议测试中,首先要对通信协议进行解析,分析每个字段代表的意义和被测软件对该字段的处理响应机制,从功能、边界、容错等角度设计测试用例,对软件进行测试;其次要考虑协议字段之间的关联关系,考虑字段之间的两两组合或三组合设计测试用例进行测试。

17.倒置比较

倒置是指相似数据的交换。倒置比较用在带有比较的双通道(相同的)结构中,对两个处理单元之间要交换的相似数据进行比较。两个通道中的相似数据大多是对同一数据源或信息采用同样的处理方式处理之后产生的,在正常情况下,两个通道产生的这些数据存在很小的偏差(甚至相同),进行比较能及时发现某个通道的异常,进而避免严重问题的发生。

18.冗余数据生成

冗余数据生成是指提供两个或多个独立的装置(如多个独立的代码生成器)来执行相同的任务。提供给这些装置的数据是完全一致的。

软件控制器的双通道或多通道是冗余数据产生的重要应用。首先通过双通道或多通道结构对同一个任务进行多路处理,然后对处理结果进行比较和判断,最后进行表决和输出,以保证控制的正确性和安全性。

19.冗余监测

冗余监测是指提供两个或多个独立的监测装置来执行同一监测任务。例如,采用两个或多个独立的看门狗装置对程序的异常执行进行监测,使用多个独立的温度传感器对电热类家电进行温度监测等。

20.预定的传输

预定的传输是一种事先定义好的通信信息传输机制,在此传输机制下,发送器只被允许在预先设定的时间点以预先设置的顺序发送信息,除此之外,接收器将按通信出错处理。例如,各种通信协议一般都有通信的时序要求,包括RS232、RS422、RS485串口通信和CAN总线通信等,通信的发送方和接收方只有按定义的时序要求发送或接收数据,才能实现有效通信。

21.软件差异性

软件差异性也可称为软件多样性,是指软件的全部或部分以不同的代码形式被装入贮存器中。所谓不同的代码形式,就是指实现相同的功能,但可以是由不同的程序员编写的、采用不同的编程语言实现的、由不同的编译器编译生成的代码。软件的不同形式的代码被装入两次,两次装入可保存在不同的硬件通道内(适用于具有双通道结构的控制器),也可保存在一个通道的不同贮存区域内。

22.黏着性故障模式

黏着性故障模式主要反映电路中某个信号线的不可控性,是指电路中某个信号线(输入或输出)的逻辑电平固定不变。在系统运行过程中,该信号永远固定在某一值上。在数字电路系统中,如果该信号固定在逻辑高电平上,则称为固定1故障(stuck-at-1),简写为sa1;如果该信号固定在逻辑低电平上,则称为固定0故障(stuck-at-0),简写为sa0。

黏着性故障在实际应用中用得非常普遍,因为电路中元件的损坏、连线的开路和相当一部分的短路故障都可用黏着性故障模式比较准确地描述出来,而且由于它的描述比较简单,因此处理故障也比较方便。以TTL(Transistor-Transistor-Logic,晶体管-晶体管逻辑电路)门电路为例,输出管的对地短路故障属于sa0故障,而输出管的开路故障属于sa1故障。任何使输出固定为1的物理故障都属于sa1故障。

需要指出的是,sa1和sa0都是针对电路的逻辑功能而言的,不能简单地理解为具体的物理故障。因此,sa1故障决不单纯指节点与电源的短路故障,sa0故障不单纯指节点与地之间的短路故障,而是指节点不可控,始终使节点上的逻辑电平停留在逻辑高电平或逻辑低电平上的各种物理故障的集合。

根据电路中黏着性故障的数目,可以把黏着性故障分为两大类:如果一个电路中只存在一个黏着性故障,则称为单黏着性故障;如果一个电路中有两个或两个以上的黏着性故障,则称为多黏着性故障。

23.受试监测

前面提到,受试监测是指通过诸如看门狗和比较器之类的独立装置,在控制器启动时或运行期间对其进行周期性的测试。看门狗可通过周期检测来判断程序是否正确执行,避免程序进入死循环或执行周期异常。

对于嵌入式控制软件,系统的上电自检和周期性自检就是受试监测的集中体现。好的嵌入式控制系统设计一般都具备上电自检和周期性自检功能,通过上电自检来保证系统在健康条件下进入工作状态,通过系统工作过程中的周期性自检来确认系统一直处于正常状态。

24.测试模式

测试模式用于测试控制器的输入装置、输出装置和用户界面等控制器接口,用以检测这些部件或接口的实际输出与预期输出是否一致,进而判断控制器是否存在工作异常。

对于嵌入式控制系统软件,好的系统设计要求系统可进行工作模式切换,典型的工作模式包括关机模式、正常工作模式、故障模式、测试模式等。系统运行时,可在这些模式之间切换,一般,系统上电自检正常后进入正常工作模式;在正常工作模式下检测到特定故障时进入故障模式;在进行人工排查故障或测试系统功能是否正常时,可由操作人员控制系统进入测试模式,在测试模式下,可对系统运行过程中产生的实际数据进行分析,以判断系统能否正常工作。