(1)物理定时器
物理定时器是单片机系统正常工作的前提,为避免干扰导致其工作异常,在主程序循环中检查其工作是否正常,若不是则重新初始化,倘若多次初始化仍无法恢复,则复位整个单片机系统。
(2)消息缓冲区
单片机系统通过产生、获取和处理消息来完成所需的各项功能,因此消息缓冲区是否正常直接关系到整个软件的正常运行。程序正常运行时,多数时候消息缓冲区内没有消息,但干扰存在时有可能会改变消息缓冲区中的数据,使得总有处理不完的消息存在。利用这一特点,可以判断消息缓冲区是否正常并决定是否需要重新初始化。
(3)虚拟定时器
对于程序中的周期型虚拟定时器,如:扫描键盘定时器、数据采集定时器、处理通讯定时器等,为避免因干扰造成定时时长被改变,就应该经常对其检查,出错时重新设置。
(4)液晶LCD
液晶是人机交互界面,也是最容易受到外界干扰的部分。程序中经常检查LCD是否工作正常,若不正常则重新初始化LCD和各菜单。
(5)A/D转换器和数据滤波
数据采集的正确与否直接影响到告警判断、输出控制等重要功能,程序中经常检查A/D转换器是否正常产生,若不是则需要复位。此外,所有的模拟量和开关量采集都要在多次采集的基础上进行滤波,得到的采集结果才准确可靠。
(6)串口通讯
UART中断是正常接收、发送的前提,程序中应对中断服务程序进行检查,防止因干扰导致的中断服务程序异常。
通常,接收缓冲区采用环形结构,理论上在这段时间内整流器最多收到CSU下发的一个数据包,然而考虑到消息缓冲区中同时有多个消息等待处理的情况,可能通讯处理会存在短暂的延时,这样底层接收缓冲区中的数据包就可能不止一个,但从实验结果来看一般不会超过三个。这样,系统调度程序每次定时调用通讯处理进程时都检查一下底层接收缓冲区中的数据包个数是否大于5个,若是则认为出错,重新设置通讯虚拟定时器并重新初始化UART和通讯缓冲区数据。
当采用RS485通讯时,由于是半双工方式,总线上的任一设备不能长时间处于发送状态而独占总线。为保证收发控制端不被干扰,程序中必须经常对其进行检查,一旦出现异常就应强制恢复为接收状态并初始化UART和通讯缓冲区数据。
(7)参数
参数是软件正常运行的重要保证,如果出错将直接影响到数据采集、告警判断和输出控制等重要功能。通常,它们被保存在EEPROM中,为保证可靠,采用增加校验和多备份保存的方式。每次读取参数时,必须判断校验是否正确。一个备份区中的参数如果无效,就读取其它备份区的参数。
(8)RAM中的数据
为避免RAM在受到外部干扰时数据出错,定时对RAM中的重要数据进行校验,发现错误时及时予以纠正。
(9)输出控制
通信电源单片机系统对外输出的控制信号不仅有开关量,有时还有模拟量。为防止干扰对输出控制信号的改变,所有的输出控制信号都应该周期性地给出,反复刷新。
来源:电子工程世界