4.4.3 应用程序状态机结构
通用测量程序的状态图
其实,这部分内容在4.3.3中已经做过介绍。这里介绍从状态图配合按键开关设计整个程序的测试流程。
这里显示的是应用程序实例的状态图。
应用程序前面板(示例)
这里借用某项目中的前面板来说明状态机配合按键开关来如何实现程序流程的有序控制。程序的状态图如上图,状态图中用方括号表示的按键在前面板上都有所对应。
状态机图形化代码
本例图是通过上面的状态图生成的状态机图形化代码(关闭状态图编辑器后,自动在程序框图中生成该代码)。
从状态下拉列表中,可以看到我们所设计的状态都在其中。但是多了一个“Quit”状态。这个状态是状态机工具包自动加入的没有实质意义,可以不用考虑(在该状态下,没有其它程序代码)。
由状态图生成的状态机图形化代码,比较难于读懂。下面我们结合按键的配合一个状态一个状态的来看看。
1、初始化状态
在初始化状态,应该清除所有显示控件的内容。
此时,仅[即时帮助]、[开始测量]、[退出测量]三个按键有效,而[生成报告]、[停止测量]按键“灰化”,禁止使用。然后按数据流的关系跳转到“等待测量”状态。
2、等待测量
此时仍保持初始化时的状态不变,即[即时帮助]、[开始测量]、[退出测量]三个按键有效,而[生成报告]、[停止测量]按键“灰化”,禁止使用。然后等待操作者选择三个有效按键之一进行操作。
操作者点击[即时帮助]按键,将会看到“即时帮助”的对话框,当鼠标移动到某个控件上时,在“即时帮助”的对话框里可以看到该控件的简要说明。
操作者点击[开始测量]按键,将进入3单元进行测量。
操作者点击[退出测量]按键,将进入6单元退出本测量程序。
3、测量进行
当从2单元跳转到3单元后,开始进行测量(循环)。
此时,[停止测量]按键有效,其它按键都被“灰化”。
当操作者点击[停止测量]按键后,程序跳转到“测量完成状态”。
4、测量完成状态
在测量完成状态,只有[停止测量]按键“灰化”,不可操作,其它按键均有效。程序再次进入“等待测量”状态。
此时,[即时帮助]、[开始测量]、[生成报告]、[退出测量]四个按键有效,而[停止测量]按键“灰化”,禁止使用。然后等待操作者选择四个有效按键之一进行操作。
操作者点击[即时帮助]按键,将会看到“即时帮助”的对话框,当鼠标移动到某个控件上时,在“即时帮助”的对话框里可以看到该控件的简要说明。
操作者点击[开始测量]按键,将进入3单元进行测量。
操作者点击[生成报告]按键,将进入5单元自动生成测量报告,然后返回到初始化状态。
操作者点击[退出测量]按键,将进入6单元退出本测量程序。
5、报表生成
在“生成报告”状态,所有按键都被“灰化”,直到完成报告生成后,再次进入初始化状态,重新初始化后,再次进入“等待测量”状态。
6、退出测试
在该单元不做任何操作,直接跳转到Quit退出。
7、Quit
退出本测量单元。
8、即时帮助和延迟
补充上“即时帮助”和延迟的程序,注意[即时帮助]开关的属性》机械动作设定为:单击时转换。程序运行时,点击[即时帮助]开关,弹出一个对话框显示“即时帮助”,当鼠标移动到“即时帮助”按键时,对话框中显示的内容见下图。关闭[即时帮助]开关,对话框消失。
几点注意事项:
1.在编程序前,一定要搞清楚应用程序的要求。然后,根据要求抽象出状态,分清事件来源,再着手制作状态图。
2.对已经编辑完并生成代码的状态图(或者说从新打开状态图编辑器)需要从新编辑时,特别是要删除原有的某个状态时,一定要先将该状态内的程序代码移出到 while 循环外(如果还想使用这些代码的话),否则这些代码也会被删除。特别是,如果在其它状态case中引用了这些部件的参考、本地变量、属性和方法时,会导致 整个程序的混乱。
3.状态机的构架(while 循环和case等)只有在选择了:Unlock Code From State Diagram (在while 循环上用鼠标点击右键,从弹出的快捷菜单中选择:Unlock Code From State Diagram 选项)选项后才能被删除。所以在此操作之前最好保存(打印)状态图。
4.由于引入了枚举类型,所以状态椭圆名称和线段名称最好用概念明确的名字或字符串表示。这样可大大增强程序的可读性。
5.编制这样的程序或数据采集程序时,最好把Windows的任务管理器打开,随时查看CPU的使用率,这也是至关重要的。