洪光
(大连冷星企业有限公司,辽宁 大连 116021)
提高工控应用软件可靠性的探索—单片机及PLC应用软件的设计实践
洪光
(大连冷星企业有限公司,辽宁 大连 116021)
论文围绕工控软件可靠性设计、评判方法,提出了一套行之有效的可靠性设计方案。
单片机;PLC;可靠性
工控软件开发平台,经历了机器码语言、汇编语言、高级语言的发展过程,使编程越来越方便、功能越来越强——可以通过工控软件完成较完善的设计方案。若在此基础上,继续对机器码及其存储方式、指令运行的时序进行研究;同时,在抗干扰硬件设计方面,改变关注功率容量的冗余较多,而对模块的软硬件时序配合关注不够、对布线工艺的关注更是缺失的现状,能够显著提高工控应用软件的可靠性质量。
项目的成败关键取决于可靠性。软件设计的可靠性是建立在硬件设计可靠性之上的。讨论工控软件的可靠性是以硬件可靠性无大碍为前提的。
1.1工控软件可靠性设计的概念
软件的可靠性是设计出来的。工控软件的可靠性,表现在运行中抗干扰的能力上。事实上,软件的可靠性是依靠设计实现的。正确的工控软件设计方法是:功能设计同可靠性设计同步,当满意的设计方案确定后,才开始着手编码设计。然后经过多次测试运行、修正编码设计,直至达到可靠性要求。
1.2工控软件可靠性设计的原则
(1)重视“电磁辐射”和“过渡过程”等高频电子特性。通过软件的智能,避开辐射和功率信号造成的电源浪涌和信号的抖动。
(2)重视软件运行的“因果”时序关系。在PLC软件系统中,各语句都挂在同一母线上,这种“多头(条)”语句按顺序执行,每一“头(条)”语句按条件执行到“尾”的组合,比单片机一条思路追踪“因果”关系要复杂。PLC应用软件要十分注意语句的因果时序问题:不要认为程序是循环执行的,一条语句虽然第一次循环时因条件不具备不能执行到底,下一次循环时条件具备了,可以执行到底了,就是正确的。其实两条语句因果倒置的错误逻辑,使程序存在失效的风险。
(3)十分关注“标志位”的“建立(置位)”和“解除(复位)”过程。软件臭虫(错误的漏洞)多发生在忽略了标志位的发生和解除的历史过程。标志位必须是在可靠性设计阶段就做出规划——建立的条件和解除的时机,以及标志位的容错方案。
(4)尽量用顺序程序,少用中断和子程序;成熟的软件应尽量“模块化”,必要时(多次使用时)才做子程序调用。减少中断和子程序,可减少程序地址指针跑偏的可能。
可靠性定义——在“任务书”指定条件下使用时,软件产品维持规定的性能级别的能力。在不同阶段,可靠性的表达形式分为:①内部可靠性:在设计规划和编码组合层面上的可靠性度量。规范了软件执行之前的可靠性规划设计和评判原则,可以通过“分析”做出改进;②外部可靠性:通过测试、运行观察可执行的软件及系统。由软件所在系统的行为(调试或试运行过程),测试或导出软件的可靠性。这个环节提供可靠性设计执行效果,是进一步修改的依据;③使用可靠性:在“任务书”特定的使用周境下,满足特定用户达到特定目标所要求的有效性、生产率、安全性和满意度的程度。
使用可靠性是内部可靠性和外部可靠性的最终结果,是“目标管理”系统的终极目标。
3.1机器码程序设计方案
单片机(以8031为例)有单字节、双字节、三字节指令。单字节指令直接包含了指令码和操作数;双字节、三字节指令的第一字节是指令码,后面的字节是操作数。如果全部指令都是单字节,那么每一次读取的指令都是唯一的。由于有其他形式的指令存在,程序地址指针读取的既有指令码,也有操作数。如果把操作数当做指令码,后面程序按照这个“伪指令码”的操作数执行,这个程序就乱了。所以单片机软件的设计原则之一:尽量使用单字节指令,其次是使用双字节指令,不得已才使用三字节指令。
由于最多有三字节指令,所以在每条语句后面设置两条“空操作”语句。假如错误地将三字节指令的最后一字节操作数当成了指令码,那么这个指令码后面是两字节的空操作的“操作数”(空操作的指令码是00H),相当于是操作数=00H的立即数。如果程序地址指针将三字节指令的第二字节当做指令码,最多也是三字节指令的指令码。那么这个“伪指令码”的第二个操作数=00H的立即数,下一个指针读出的就是正确的指令码了。
以上分析得出:一条指令发生错误时,执行了一个或两个立即数=00H的操作后,就回到正常取址周期了——错误范围比较小。在程序循环执行条件下,下一个循环周期就会改正把空操作指令当立即数执行的错误。
同时在中断矢量入口、中断程序入口、子程序入口、跳转程序入口等处设置空操作指令,并在这些入口的上、下两字节都设置空操作指令(共5个空操作指令),跳转指令更容易进入指定入口。
以上应该是单片机软件的规范模式。汇编语言及高级语言的编译程序,如果能自动按此“语句孤岛”方式存放机器码,那么工控软件的抗干扰能力会有及大地提高。
3.2数据冗余的容错设计方案
将运算结果和标志位分别存放在不同的内存区域——数据冗余备份。在程序中不断地对冗余数据进行表决判断,恢复被改写的数据——数据容错。
该方案增加了许多同“功能性”不相关的“额外”程序段,但增加了软件的可靠性。笔者在单片机和PLC程序中,都采用该方案(一个有效数据存放在在三个不同地址),所增加的“额外”工作量,被成熟的“三取二表决”等子程序缓解了。
3.3输出口的容错设计方案
在对输出状态位循环容错维护条件下,对输出口状态的不断刷新容(纠)错。这个“循环刷新输出口”的设计思想已经在PLC系统软件中自动实现了。但在单片机系统中,还是需要提出注意的——切不可在输出状态变化后才刷新一次输出口(比如中断一次才有输出口的变化,然后刷新),要把输出口的刷新放在主程序循环中——容许一次干扰改变了输出口状态,重复刷新可纠正错误。输出口包含数据和状态显示。
输出口的容错设计包括及时、准确地发现错误,做出必要的响应——对一切输出指令都尽可能建立反馈通道。
3.4开关量输入口的容错设计方案
首先是“逻辑容错”设计——针对误操作的设计。软件必须保证“逻辑性的错误”操作,包括干扰形成的“操作”不被执行。
开关量输入的抖动(或连击)也需要容错处理。最有效的方案是“RS锁存器”以及动作的“连续识别有效”处理。在硬件方面应避免设计使用功能相反的“复用键”,比如在停机状态作为启动键,在运行状态作为停机键,避免状态震荡(虽然软件可以设计最高开关频率,但仍尽量不这样设计“复用键”)。
3.5模拟量输入信号的容错设计方案
PLC的系统软件已经对模拟量信号采集系统做了自动处理。模拟量采集口的综合设计,是单片机系统开发的重(难)点。
3.6可靠性之易恢复性设计方案
易恢复性——在失效发生的情况下,软件重建规定的性能级别,并恢复受直接影响的数据的能力。
可靠性有两个属性:一种是平均无故障运行时间,另一种是平均故障修复时间。在故障(失效)不可避免地发生后,迅速排除故障的能力,是软件设计质量水平的重要指标。软件中的各种容错和自恢复(软件陷阱、看门狗定时等)是不需人工干预的易恢复性措施。另有:故障定位提示、故障历史记录等软件设计,也是“易恢复性”手段——必须尽可能多地提供运行状态信息。
重点介绍数据容错设计:单片机软件采用上述的“指令孤岛”方案。
(1)内部可靠性设计——在单片机软件中设置“软件陷阱”和“看门狗”。“陷阱”设置在“不可能到达”的地址,如果进入这些地址,程序进入初始化复位过程。必须十分重视在循环指令中插入“喂狗”动作。
为避免“有效数据”末尾频繁抖动,对数据显示和状态的影响,设计数据采集以及数据标度变换在定时中断中进行,必要时采用“中断计数器”,延长采样间隔。为便于数据维护和状态刷新,在主程序循环内频繁做模拟量显示码和模拟量决定的相关状态位的刷新(容错)处理。
确定出三个区域存放需维护的数据和标志位字节。比如:20、30、40地址分别存放同一个数据等等。确定出足够的标志位字节,集中管理标志位。
确定模拟量数据的容错方案:①在定时中断中,一次性对一个模拟量口重复读入8次(获得8组数据)。对这8组数据做算术平均后,其结果送8级递推队列(先进先出,出队列无效)。于是,队列中的8组数据(每组是8次采样的平均值),是64组数据的处理结果;②将8级队列分上下各4级。对两个4级队列数据做去最大值和最小值处理,余下两组数做平均值——8组数据共剔除了4组(2组最大值、2组最小值),只有4组数据分别产生两个平均值。两个4组数据产生的平均值,再做一次平均值——获得一个有效的采样数据;③对有效数据的处理也必须在本中断完成——将处理结果送入不同区域的RAM位(同一数据或状态分别存放在RAM中的3个不同的位置)后,才退出定时中断;④在主循环程序中,仅是不断地对存放在3个位置的数据做数据维护——随时纠正可能的数据干扰。同时不断地刷新同模拟量相关的显示和状态输出口。
对每点2ms处理速度的PLC(OMRON CP1H)数据采集口,也做同样处理,可靠性显然增加许多。但对同一接口连续采样8次的动作,可以省略。
以上模拟量采集口的可靠性设计非常完善,已被无数工程案例证实。
(2)外部可靠性调试——确定调试方案并实施:在调试运行状态下制造干扰:手电钻共电源及电磁、电焊机共电源及电磁、变频器运行、接触器动作火花、电源瞬间断电、手持螺丝刀金属柄拨动模拟量输入口(模拟天线)等。另外在容错内存中制造错误数据,看运行结果是否被纠正、制造“看门狗”和“软件陷阱”程序运行条件,看纠错效果。
采用以上抗干扰设计方案,并采用大容量(相对实际CPU供电需求的容量大一个数量级)工业级品牌开关电源(应对供电抖动),完全可以满足以上测试。
(3)使用可靠性评估——现场试运行:虽然在调试阶段已经通过了严格的抗干扰试验,但作为新产品还是应该做现场可靠性运行评估——做好运行记录,听取用户意见,发现问题解决问题。
通过工控软件可靠性理念的研究探索,加上工作实践的验证,用这些方案设计的单片机或PLC软件,在应用中从来没出现过失误。可见上述提高工控软件可靠性的方案是成熟和行之有效的。
[1]复旦大学计算机科学系微机研究室.MCS-51单片微型计算机汇编手册[M].上海嘉定智能仪表厂印,1988.
[2]复旦大学计算机科学系微机研究室.MCS-51单片微型计算机用户手册[M].上海嘉定智能仪表厂印,1988.
[3]国家质量监督检验检疫局,中华人民共和国国家标准—软件工程[M].2006.
[4]欧姆龙自动化(中国)有限公司,SYSMAC CP系列可编程控制器—编程手册[M].2003.
[5]欧姆龙自动化(中国)有限公司,SYSMAC CP系列可编程控制器—操作手册[M].2003.
[6]王海江,工业控制微机抗干扰技术措施的研究[J].中国化工设备,2005,1.
[7]钟磊,卢文壮,等.C8051F单片机的IAP系统设计与实现[J].微处理机,2009,6.
Exploration of Improving the Reliability of the Industrial Control Application Software——Design Practice of the MCU and PLC Application Software
HONG Guang
(Dalian Coldstar Enterprise Co.,Ltd.,Dalian Liaoning 116021,China)
This paper put forward a set of the effective and reliable design scheme around reliable design and evaluation method of the industrial control software.
single chip microcomputer(MCU);programmable logic controller(PLC);reliability
TP317
A
10.3969/j.issn.1002-6673.2015.02.038
1002-6673(2015)02-099-03
2014-12-28
洪光(1955-),男,浙江人,中级职称(工程师)。研究方向:电子、自控技术研发。