标题：工控软件
工控软件定义
工控软件从狭义来讲即所谓工业控制软件。自从采用可编程控制器以来，工控软件就成为工业自动化密不可分的一部分，但在实际应用中控制软件并不是孤立的，而是与其它软件相集成才能发挥其应有的作用所以，从广义来讲工控软件应该包括数据采集、人机界面、过程控制、数据库、数据通信等，其涵盖的内容也随着技术的发展不断的丰富，从单纯的控制走向与管理融为一体的工厂信息化。 [1]
工控软件的发展
工控软件的出现是伴随计算机技术用于工业控制开始的，经历了用二进制编码、汇编语言、高级语言编程，进而发展到组态软件，以至今天的用Auto CAD直接采用标准的过程控制流程图和电气原理系统图的组态软件。采用Auto CAD的工控软件是直接在屏幕上设计过程控制流程图和电气原理系统图，然后由计算机(工程师站)自动生成执行程序这样就不要求控制工程师有很多计算机软件编程的知识和技巧，甚至可以说不需要以前的严格意义上的软件设计工作，就可以完成工控软件的开发。这不仅使工控软件开发的质量和效率大大提高，而且可以使控制工程师无需大量的精力和时间耗费在繁琐的编程工作中，而是把更多的注意力放在控制策略和工厂自动化的需求分析和研究中。尽管当前许多自动化系统的工控软件还是采用文本或专用图形的组态方式，但无疑采用Auto CAD的工控软件将成为工控软件的主流。 
过去大家总认为PLC适合于逻辑控制、DCS适合于模拟量调节，各有其特点。但技术发展证明PLC和DCS在互相融合、渗透，两者的差别正日渐缩小。而且PLC、DCS与上位机的功能也在融合，过去只能在上位机做的一些功能如先进的控制策略也能在PLC和DCS上完成，分工是相对的因此，这三者功能的融合也促进工控软件向上位机功能，甚至工厂信息化发展。 
另一方面，当前的工控软件绝大多数是由各自动化系统设备制造商仅在其生产的自动化系统设备的硬软件环境下开发的，是与自动化系统设备捆绑和专用的。在一个工厂中有各种不同的生产工艺和设备，要求根据不同的对象选用不同的自动化系统设备，如工控机、PLC、DCS等，即使同类的自动化系统，设备制造厂商不同，其工控软件也不相同，往往一个部门或一个人要同时了解和掌握几种本质或功能都墓本相同的工控软件，这给用户购买、集成、开发、维护上带来极大的不便，增加了人力资源的消耗和投资。 
这就给控制工程师提出一种思考，能否在广泛熟悉的Windows操作系统下开发出一种不受硬件制约的、适用于广泛的自动化系统设备的工控软件。这样对用户来说可以根据不同的对象选择不同的自动化系统设备，但对软件的开发者和维护者来说只需要熟悉一种或少数几种工控软件，从而就诞生了软PLC、软DCS的思想和产品。 
90年代以Wonderwue公司的InTouch为代表的人机界面可视化软件开创了在Windows下运行的工控软件的先例，到今天已发展成为能提供从工厂底层操作人员开始的自下到上层次结构的工厂信息系统。
归纳起来工控软件的发展方向有如下特点：

工控软件的抗干扰设计
一、工控软件的结构特点及干扰途径 
在不同的工业控制系统中，工控软件虽然完成的功能不同，但就其结构来说，一般具有如下特点： 
实时性：工业控制系统中有些事件的发生具有随机性，要求工控软件能够及时地处理随机事件。 
周期性：工控软件在完成系统的初始化工作后，随之进入主程序循环。在执行主程序过程中，如有中断申请，则在执行完相应的中断服务程序后，继续主程序循环。 
相关性：工控软件由多个任务模块组成，各模块配合工作，相互关联，相互依存。 
人为性：工控软件允许操作人员干预系统的运行，调整系统的工作参数。 
在理想情况下，工控软件可以正常执行。但在工业现场环境的干扰下，工控软件的周期性、相关性及实时性受到破坏，程序无法正常执行，导致工业控制系统的失控，其表现是： 
程序计数器PC值发生变化，破坏了程序的正常运行。PC值被干扰后的数据是随机的，因此引起程序执行混乱，在PC值的错误引导下，程序执行一系列毫无意义的指令，最后常常进入一个毫无意义的“死循环”中，使系统失去控制。 
输入/输出接口状态受到干扰，破坏了工控软件的相关性和周期性，造成系统资源被某个任务模块独占，使系统发生“死锁”。 
数据采集误差加大。干扰侵入系统的前向通道，叠加在信号上，导致数据采集误差加大。特别是当前向通道的传感器接口是小电压信号输入时，此现象更加严重。 
RAM数据区受到干扰发生变化。根据干扰窜入渠道、受干扰数据性质的不同，系统受损坏的状况不同，有的造成数值误差，有的使控制失灵，有的改变程序状态，有的改变某些部件(如定时器/计数器、串行口等)的工作状态等。笔者在研制电力远程抄表系统时就曾遇到因现场强电磁干扰而造成RAM数据经常性被破坏的情况。 
控制状态失灵。在工业控制系统中，控制状态的输出常常是依据某些条件状态的输入和条件状态的逻辑处理结果而定。在这些环节中，由于干扰的侵入，会造成条件状态错误，致使输出控制误差加大，甚至控制失常。 
二、程序运行失常的软件对策 
系统受到干扰侵害致使PC值改变，造成程序运行失常。对于程序运行失常的软件对策主要是发现失常状态后及时引导系统恢复原始状态。 
1.设置监视跟踪定时器 
使用定时中断来监视程序运行状态。定时器的定时时间稍大于主程序正常运行一个循环的时间，在主程序运行过程中执行一次定时器时间常数刷新操作。这样，只要程序正常运行，定时器不会出现定时中断。而当程序运行失常，不能及时刷新定时器时间常数而导致定时中断，利用定时中断服务程序将系统复位。在8031应用系统中作为软件抗干扰的一个事例，具体做法是： 
使用8155的定时器所产生的“溢出”信号作为8031的外部中断源INT1。用555定时器作为8155中定时器的外部时钟输入； 
8155定时器的定时值稍大于主程序的正常循环时间； 
在主程序中，每循环一次，对8155定时器的定时常数进行刷新； 
在主控程序开始处，对硬件复位还是定时中断产生的自动恢复进行分类判断处理。 
2.设置软件陷阱
当PC失控，造成程序“乱飞”而不断进入非程序区，只要在非程序区设置拦截措施，使程序进入陷阱，然后强迫使程序进入初始状态。例如Z80指令系统中数据FFH正好对应为重新起动指令RST 56，该指令使程序自动转入0038H入口地址。因此，在Z80 CPU构成的应用系统中，只要将所有非程序区全部置成FFH用以拦截失控程序。并在0038H处设置转移指令，使程序转至抗干扰处理程序。 
三、系统“死锁”的软件对策 
在工业控制系统中，A/D、D/A，显示等输入/输出接口电路是必不可少的。这些接口与CPU之间采用查询或中断方式工作，而这些设备或接口对干扰很敏感，干扰信号一旦破坏了某一接口的状态字后，就会导致CPU误认为该接口有输入/输出请求而停止现行工作，转去执行相应的输入/输出服务程序。但由于该接口本身并没有输入/输出数据，从而使CPU资源被该服务程序长期占用，而不释放，其它任务程序无法执行，使整个系统出现“死锁”。对这种干扰造成的“死锁”问题，在软件编程中，可采用“时间片”的方法来解决。其具体步骤为： 
根据不同的输入/输出外设对时间的要求，分配相应的最大正常的输入/输出时间。 
在每一输入/输出的任务模块中，加入相应的超时判断程序。这样当干扰破坏了接口的状态造成CPU误操作后，由于该外设准备好信息长期无效，经一定时间后，系统会从该外设的服务程序中自动返回，保证整个软件的周期性不受影响，从而避免“死锁”情况的发生。 
四、数据采集误差的软件对策 
根据数据受干扰性质及干扰后果的不同，采取的软件对策各不相同，没有固定的模式。对于实时数据采集系统，为了消除传感器通道中的干扰信号，在硬件措施上常采取有源或无源RLC网络，构成模拟滤波器对信号实现频率滤波。同样，运用CPU的运算、控制功能也可以实现频率滤波，完成模拟滤波器类似的功能，这就是数字滤波。在许多数字信号处理专著中都有专门论述，可以参考。随着计算机运算速度的提高，数字滤波在实时数据采集系统中的应用将愈来愈广。 
在一般数据采集系统中，可以采用一些简单的数值、逻辑运算处理来达到滤波的效果。下面介绍几种常用的方法。 
1.算术平均值法 
对于一点数据连续采样多次，计算其算术平均值，以其平均值作为该点采样结果。 
这种方法可以减少系统的随机干扰对采集结果的影响。一般3～5次平均即可。 
2.比较取舍法 
当控制系统测量结果的个别数据存在偏差时，为了剔除个别错误数据，可采用比较取舍法，即对每个采样点连续采样几次，根据所采数据的变化规律，确定取舍，从而剔除偏差数据。例如,“采三取二”即对每个采样点连续采样三次，取两次相同的数据为采样结果。 
3.中值法 
根据干扰造成采样数据偏大或偏小的情况，对一个采样点连续采集多个信号，并对这些采样值进行比较，取中值作为该点的采样结果。 
4.一阶递推数字滤波法 
这种方法是利用软件完成RC低通滤波器的算法，实现用软件方法代替硬件RC滤波器。一阶递推数字滤波公式为Yn=QXn+(1-Q)Yn-1 
式中Q -数字滤波器时间常数； 
Xn－第n次采样时的滤波器输入； 
Yn－第n次采样时的滤波器输出。 
采用软件滤波器对消除数据采集中的误差可以获得满意的效果。但应注意，选取何种方法应根据信号的变化规律选择。 
五、RAM数据出错的软件对策 
在实时控制过程中，干扰造成比较严重的危害之一就是冲毁RAM中的数据，由于RAM中保存的是各种原始数据、标志、变量等，如果被破坏，会造成系统出错或无法运行，根据数据被冲毁的程度，一般可分为三类： 
整个RAM数据被冲毁； 
RAM中某片数据被冲毁； 
个别数据被冲毁。 
在工业控制系统中，RAM的大部分内容是为了进行分析、比较而临时存放的，不允许丢失的数据只占极少部分。在这种情况下，除了这些不允许丢失的数据外，其余大部分内容允许短时间被破坏，最多只引起系统的一个很短时间的波动，很快能自动恢复正常。因此，在工控软件中，只要注意对少数不允许丢失的数据保护，一般常用的方法有“校验法” 和“设标法”。这两种方法各有千秋，校验法比较繁锁，但查错的可信度高。设标法简单，但对数据表中个别数据冲毁的情况，查错则无难为力。在编程中一般应综合使用，其具体做法为： 
将RAM工作区重要区域的始端和尾端各设置一个标志码“0” 或“1”； 
对RAM中固定不变的数据表格设置校验字。 
在程序的执行过程中，每隔一定的时间通过事先设计的查错程序来检查其各标志码是否正常，如果不正常，则利用数据冗余技术通过抗干扰处理程序来进行修正；冗余数据表的一般设计原则是： 
各数据表应相互远离分散设置，减少冗余数据同时被冲毁的概率。 
数据表应尽可能远离栈区，减少由于操作错误造堆栈被成数据冲的可能 。 
上述对RAM区域的恢复处理方法，在不同的应用系统中应根据的具体情况进行取舍。 
六、控制状态失常的软件对策 
在条件控制系统中，人们关注的问题是能否确保正常的控制状态。如果干扰进入系统，会影响各种控制条件、造成控制输出失误。为了确保系统安全可以采取下述软件抗干扰措施： 
1.软件冗余 
对于条件控制系统，将控制条件的一次采样、处理控制输出，改为循环采样、处理控制输出。这种方法具有良好的抗偶然因素干扰作用。 
2.设置当前输出状态寄存单元 
当干扰侵入输出通道造成输出状态破坏时，系统可以及时查询当前输出状态寄存单元的输出状态信息，及时纠正错误的输出状态。 
3.设置自检程序 
在计算机系统内的特定部位或某些内存单元设状态标志，在运行中不断循环测试，以保证系统中信息存储、传输、运算的高可*性。 
上述介绍的几种有关工控软件的抗干扰编程方法是笔者在工作实践中的体会。在设计工控软件的过程中只要采取相应的抗干扰措施，就可获得较好的抗干扰效果。