测控系统的微机化监控程序设计
键如图2 所示,且各按键的定义如下: AMPL(幅度)、FREQ(频率)、FUNC(函数)、OFST(偏移)、MODE(模式)、UNIT(单元号)、ON(开)、OFF(关)、CHS(换符号)、DIG(数字键统称)、MULT(乘法)。
图2 多功能波形发生器的按键
2.2.2 建立键语状态图
用普通语言对全部键语做出详尽准确的规定是很困难的, 可以用键语状态图的方法对全部的键语做出完备的定义。这里用图3所示的键语状态图来描述键语的完备集。状态图中每一个方框表示一个状态(按过一次键), 框内的数字是状态的代号。箭头表示状态变迁的方向, 箭头上的标语是一个按键的代名, 表示变迁的条件, 其中非法键统称为"*"。假设最初开机时初始化使系统处于0态, 只要按过一个键之后, 系统就不可能再处于0态。假定系统现在处于0态,按下AMPL键后系统就转入了1态。在1态中,如果按下CHS或者DIG键就可以进行幅值的设定;如果按下其他的键,则为无效键,系统重新回到0态。
图3 键语状态图
2.2.3 建立键语状态表
根据键语状态图就可以制作出键语状态表。状态表中规定: 当仪器设备处于某一状态(现态)时,若满足一定的条件就必须脱离该状态而进入另一个指定的状态(次态),以及仪器设备所应采取的行动。该系统的部分状态表如表1所列。
表1 键语状态表
对于每个按键, 可以用2个变量描述其特征:
FNKYC = 功能性键码(functional keycode),用来代替每一按键的实际键码编码。功能相同的按键可以赋予相同的FNKYC 值, 例如一切数字键的FNKYC值为1。各按键的FNKYC值如表2所列。
表2中,各按键的FNKYC 值NUMB=数。数字键所对应的NUMB值就是该键所规定的数字, 例如, [3] 的NUMB为3;[GHz] [MHz] [kHz] [Hz] 规定为10、11、12、13;其他键的NUMB值统一规定为0。
表2 按键的FNKYC值对照表
2.2.4 建立状态索引表
根据状态表可以建立状态索引表,状态索引表为两级表。其中,第一级状态索引表中为每一状态的转移命令;第二级状态索引表中,为该状态下按下某一键后进入的次态和执行的子程序号。
如图3所示, 系统共有7 种不同的状态,可以在内存的一块连续空间中存储这7 种状态的特征,这就是第一级状态索引表。而对应于每一状态的相关参数可以用下面几个变量来描述。
① FNKYT: 状态表中所列的功能性键码。将根据实际按下的键的FNKYC 值, 查找状态表中是否有一个与之相符的FNKYT值。
② NEXST: 下一个状态(NEXT STATE)。它指出当某一FNKYC 与FNKYT 相符时, 系统应进入哪一个状态。
③ ACTN: 行动子程序号码。它指出当系统处于某一状态时所应执行的行动。
这3个参量就建立了第二级状态索引表。该系统的状态索引表如图4所示。
图4 状态索引表
2.2.5 程序设计流程
现在可以设计键语分析程序。首先,要有一个识键程序来识别所按下的按键,从所获得的实际键码中求出其对应的FNKYC 和NUMB 值, 这可以利用查表法或适当的算法得到;然后,根据当前的状态PREST在第一级状态索引表中得到对应当前状态的第二级索引表的入口地址,在第二级状态索引表中将FNKYC与表中的FNKYT逐项比较,当二者相同时得到对应该按键的下一个状态NEXST, 以及所对应的行动ACTN; 随后, 把这个NEXST 值替换为当前状态PREST。如果FNKYT为0时始终没有与FNKYC对应的FNKYT,就意味着该FNKYT是一个非法键, 应该不予理睬; 反之, 则是有效键, 程序就转移到相应的子程序去执行。具体设计流程如图5所示。
图5 程序设计流程
3 结论
用状态法进行多义键的设计,有以下几方面的优点:
① 应用一张状态表, 统一处理任何一组按键和状态的组合, 化繁为简, 降低了程序设计的难度, 增强了程序的可读性。
② 翻译、解释按键程序和执行子程序完全分离,避免了两者之间的相互交叉和混淆。
③ 当系统的功能发生改变时, 主控程序的结构不变, 只需对状态表进行修改。
- 基于CAN总线的GaAs光电阴极制备测控系统(07-27)
- 一种新型智能清洁机器人测控系统的设计(06-25)
- 基于虚拟仪器的平面机构创意组合实验台测控系统设计(09-29)
- 便携式低功耗雷达导航仪智能测控系统(08-22)
- 基于虚拟仪器的柴油发动机测控系统(10-04)
- 基于μc/OS-II的多传感器测控系统研究(03-14)