辽宁省信息技术优秀科研成果选编(一)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

五、系统软件设计

系统软件的设计主要包括主程序流程、初始化程序、硬件设备的驱动程序,信号检测程序、系统状态机程序等子程序模块,采用C语言进行编程,下面依次介绍各主要子程序模块的功能和流程。

1.主程序模块

主程序工作过程如下。

① 初始化。

② 检测按键。

③ 启动系统状态机。

主程序流程图如图1-14所示。

图1-11 料位计电源驱动板原理图

图1-12 驱动板顶层

图1-13 驱动板底层

图1-14 主程序流程图

2.初始化流程

系统上电后即进入初始化程序,主要包括液晶屏的初始化、重锤状态检测、E2PROM初始化、DAC及标准电流输出、绘制主界面和建立系统状态机。初始化流程图如图1-15所示。

图1-15 初始化程序流程框图

(1)液晶屏的初始化。液晶屏的初始化主要完成12864的复位和清屏操作。

复位操作主要完成以下4个步骤,即通过CommandWrite12864(0x30)指令选择基本指令集、通过CommandWrite12864(0x0c)指令开启显示、通过CommandWrite12864(0x01)指令清除显示并设定地址指针为00H、通过指令CommandWrite12864(0x06)指定在读取和写入时设定游标的移动方向及指定显示的移位。清屏操作指令为CommandWrite12864(CLEAR_SCREEN),其中CLEAR_SCREEN为宏定义#define CLEAR_SCREEN0x01;最后调用Lcd_Clear(0)进行绘图模式清屏。以上步骤即完成液晶屏的初始化。

(2)重锤状态检测。仪表上电后应检测重锤是否在位,如果发现丢锤,应进入丢锤故障状态,禁用手、自动测量功能,同时给出报警信息,提示操作人员排除故障。检测策略为:如果刚上电(还未启动测量)即检测到放锤到位信号,意味着钢丝绳松弛,即可判断为丢锤。

(3)E2PROM初始化。E2PROM主要用来保存仪表的一些重要配置和参数,如重锤料位计的安装高度、料仓高度、最近一次设置的手自动测量模式、自动测量的定时时间间隔、高位报警值、低位报警值、开机显示上一次最后测量值、管理员密码以及一些状态信息标识位。设计中采用了STC89C58片内E2PROM空间。

(4)DAC和标准电流初始化。系统上电后,主界面显示上一次通电最后一次测量值,同时标准电流给出对应输出信号。程序从E2PROM中读取到上一次断电前最后一次料位测量结果,通过料位高度值和料仓高度比例关系换算出对应的0~255的二进制数据,将这个数据写给串行移位寄存器74HC595芯片,该芯片将数据并行传送给AD558芯片,以便驱动AD694芯片输出对应的标准电流信号。

(5)绘制主界面。仪表面板主要由一块液晶屏、4个按键和两个LED组成,系统开机后将显示公司标志及公司名称2s,待开机进度条跑完,则绘制图1-16所示主界面。该主界面左侧以柱状图形式直观显示当前料位高度及料仓高度关系,中间显示料位高度值和空高距离(以m为单位),下边则分别显示标准电流值、系统工作状态和手自动模式状态。

图1-16 仪表主显示界面

(6)建立系统状态机。系统状态机是仪表工作的有限状态子集集合以及状态之间的触发和转换条件,也称为有限状态机(Finite-State Machine, FSM)。这部分内容所占篇幅较长,将在下面详细论述。

3.系统有限状态机

有限状态机又称为有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的抽象模型,有限状态机的输出取决于当前状态和当前输入。在重锤料位计二次仪表设计中,可驱动状态机切换的事件有按键和各传感器信号,以及它们之间的不同组合形式。可抽象出来的主要状态有Idle状态、开始测量状态、一级子菜单等待设置状态、二级子菜单等待设置状态、高低位报警状态、丢锤故障状态、埋锤故障状态。

比如,仪表上电初始化后即进入Idle状态,此时显示系统主界面。在Idle状态可响应按键事件,进行手动测量,从而进入测量状态,或者进入一级子菜单设置状态。在测量状态,如果测量过程顺利完成,则回到Idle状态,并更新数据显示;如果测量结果超过上下限报警范围,则进入高低位报警状态,显示报警信息;如果测量过程中出现丢锤、埋锤事件,则进入故障报警状态,在此状态下测量功能将被禁用,系统状态机如图1-17所示。

图1-17 系统状态机

4.测量过程

当仪表处于Idle状态时,即显示主界面状态,可通过手动按键或者自动测量进入测量状态。启动测量后,程序将开启放锤到位中断,然后驱动电机正转放锤,同时液晶屏显示“测量中……”;此时如果收到放锤到位中断信号,即刻停止电机,程序根据接收到的脉冲步长信号个数,计算出重锤下放行程,再根据安装高度、料仓高度等参数,计算出料位高度,并更新显示。然后开启收锤到位中断,进入收锤状态,驱动电机反转收锤。在收锤过程中,仍然需要检测脉冲信号,以判断是否发生埋锤;在收锤过程中仍然要保持放锤到位中断开启,以判断是否发生丢锤。丢锤和埋锤故障判断策略见下文。如果没有故障发生,在收到收锤到位中断信号后,停止电机,完成本次测量,系统回到Idle状态。测量过程流程如图1-18所示。

图1-18 测量过程流程框图

5.丢锤与埋锤

丢锤和埋锤是重锤料位计比较常见的严重故障状态,如何根据有限的传感器信号判断丢锤与埋锤故障,是系统软件策略设计的一个难点。

(1)丢锤故障的判定。根据已有的一次侧设备,只有放锤到位行程开关和收锤到位霍尔开关两个传感器信号用来标识重锤位置。其中放锤到位行程开关的动作,依靠放锤到底后,重锤所连接钢丝绳即变松弛,引起行程开关动作从而发出信号。据此可推知,在收锤过程中,在未收到霍尔开关信号前,如果检测到放锤到位行程开关信号,即意味着收锤过程中钢丝绳忽然松弛,可判定为丢锤故障。

(2)埋锤故障的判定。在正常的收锤过程中,当单片机给出收锤信号时,电动机即开始反转收锤,这时通过钢丝绳缠绕的滑轮(滑轮内嵌有永磁体,配合霍尔开关)可检测到脉冲信号。根据这个原理,如果在启动收锤过程后一定时间内检测不到脉冲信号,意味着重锤未被收回,应进入埋锤故障状态。在此状态下应使电动机停车,避免电动机过热烧毁。

6.系统菜单

为方便用户操作,设计了多级系统菜单。菜单设计详见图1-19。在“设置量程”子菜单里包括设置“安装高度”和设置“料仓高度”两个二级子菜单,这两个参数是仪表能够正确测量的重要参数,需要根据现场情况正确设置。“高低位报警”菜单下包括“高位报警值”和“低位报警值”两个二级子菜单,用来设置料位高度的上下限报警值,超出范围仪表给出报警信息。“手自动切换”菜单下包括“手动模式”和“自动模式”两个二级子菜单,如果选择了“自动模式”,还可以通过“定时间隔”三级子菜单设置自动测量的间隔时间。“脉冲步长值”用来设定两个脉冲信号之间重锤的行程,是脉冲步长值的快速设置方法。“误差校正”通过3次测量取平均值的方法计算出脉冲步长值并设置生效。之所以提供3次测量取平均值的方式,是因为一次设备的绕线滑轮在加工过程中会存在一定的公差,通过3次测量取平均值可以得到正确的脉冲步长值。“点动控制”菜单下包括“▲向上点动”收锤和“▼向下点动”投锤,用来支持点动收锤、放锤控制,在点动控制界面下,按住上、下键进行收锤、放锤操作,松开按键停止操作。该功能在仪表维护或者丢埋锤故障排除后复位重锤操作中非常有用。“修改密码”和“恢复出厂设置”菜单功能较为简单,此处不再赘述。

图1-19 多级系统菜单结构框图