发明内容
针对现有技术中存在的上述技术问题,本发明提出了一种适用于智能仪器的通用输入编辑控件的实现方法,设计合理,克服了现有技术的不足,提高了操作效率,成本低廉,具有良好的效果。
为了实现上述目的,本发明采用如下技术方案:
一种适用于智能仪器的通用输入编辑控件的实现方法,包括以下步骤:
步骤1:定义数值类型、物理意义以及连续或离散
数值类型属性定义:
ANY=0,DIGIT=0x1,LETTER=0x2,NEG=0x4,DOT=0x8,SYMBOL=0x10,EXP=0x20;
分别表示允许输入的字符类型:任意字符,数字,英文字母,负号,小数点,符号,指数符号e;
物理意义定义:UTIME=0x100,UFREQ=0x200,UPOWER=0x400;
分别表示输入值是时间、频率和功率类型单位;
连续或离散型属性定义:DISPERSE=0x10000,SEQUEN=0x20000;
步骤2:定义编辑控件的按键响应算法;
步骤3:定义输入参数的属性;
步骤4:定义仪器参数响应函数的格式。
优选地,在步骤2中,包括
步骤2.1:当收到仪器的按键后,首先判断是否为单位按键;
若:判断结果是单位按键,则执行步骤2.2;
或不是单位按键,则执行步骤2.3;
步骤2.2:终止输入,并把字符串转换为数值,如果是时间、频率或功率具有物理意义带单位的输入量,需要把单位字符串添加到输入串后面,同时把字符串转换为该物理意义单位系列中最小单位表示的数值,最后根据单位进行单位倍率的转换,完成参数输入;
步骤2.3:判断输入属性是否允许任意字符输入;
若:判断结果是允许任意字符输入,则执行步骤2.4;
或不允许任意字符输入,则执行步骤2.5;
步骤2.4:将该字符存入输入缓冲区,退出流程继续接收按键;
步骤2.5:判断当前允许输入属性与ANY位与是否为真;
若:判断结果是与ANY位与为真,则执行步骤2.6;
或与ANY位与不为真,则执行步骤2.7;
步骤2.6:直接接收新字符存入输入字符串缓冲区;
步骤2.7:判断键码是否在0和9之间;
若:判断结果是在0和9之间,则执行步骤2.8;
或不在0和9之间,则执行步骤2.9;
步骤2.8:判断输入属性与DIGIT位与是否为真;
若:判断结果是与DIGIT位与为真,则执行步骤2.10;
或与DIGIT位与不为真,则执行步骤2.11;
步骤2.9:判断键码是否为英文字母;
若:判断结果是英文字母,则执行步骤2.12;
或不是英文字母,则执行步骤2.13;
步骤2.10:存入输入字符串缓冲区;
步骤2.11:丢弃字符返回退出;
步骤2.12:判断输入属性是否包含LETTER位;
若:判断结果是包含LETTER位,则执行步骤2.14;
或不包含LETTER位,则执行步骤2.15;
步骤2.13:判断键码是否为‘-’;
若:判断结果是键码是‘-’,则执行步骤2.16;
或不是‘-’,则执行步骤2.17;
步骤2.14:将输入字符存入输入字符串缓冲区;
步骤2.15:丢弃字符返回退出;
步骤2.16:判断输入属性是否包含NEG;
若:判断结果是包含NEG,则执行步骤2.18;
或不包含NEG,则执行步骤2.19;
步骤2.17:判断键码是否为‘.’;
若:判断结果是键码是‘.’,则执行步骤2.20;
或不是‘.’,则执行步骤2.21;
步骤2.18:将输入字符存入输入字符串缓冲区;
步骤2.19:丢弃字符返回退出;
步骤2.20:判断输入属性是否包含DOT;
若:判断结果是包含DOT,则执行步骤2.22;
或不包含DOT,则执行步骤2.23;
步骤2.21:判断键码是否为其它可打印字符;
若:判断结果是其它可打印字符,则执行步骤2.26;
或不是其它可打印字符,则执行步骤2.27;
步骤2.22:判断字符串中是否已有‘.’;
若:判断结果是字符串中已有‘.’,则执行步骤2.24;
或字符串中没有‘.’,则执行步骤2.25;
步骤2.23:丢弃字符返回退出;
步骤2.24:丢弃字符返回退出;
步骤2.25:将输入字符存入输入字符串缓冲区;
步骤2.26:判断输入属性是否包含SYMBOL;
若:判断结果是包含SYMBOL,则执行步骤2.28;
或不包含SYMBOL,则执行步骤2.29;
步骤2.27:丢弃字符返回退出;
步骤2.28:将输入字符存入输入字符串缓冲区;
步骤2.29:丢弃字符返回退出。
本发明所带来的有益技术效果:
本发明提出了一种适用于智能仪器的通用输入编辑控件的实现方法,与现有技术相比,一种适用于智能仪器的通用输入编辑控件的实现方法,通过设计一种规范化的控件输入和处理方式,为仪器的多种参数的输入提供了一致的方式,软件开发人员只需要定义输入参数的属性和响应函数,不需要关注编程实现,便于开发人员使用,同时便于软件开发和维护;通过设计一种一致性的可选属性定义输入方式,通过定义输入属性进行组合,和输入编号索引,规范化输入响应函数和函数的查找方式,把多种类型的整型数值输入、浮点数值输入、符号输入、输入联想等一体化实现,极大的方便了软件开发人员,便于软件开发和维护,提高了仪器的开发维护效率,同时也便于用户操作仪器输入,提高了操作效率,而且实现成本低廉。
具体实施方式
下面结合附图以及具体实施方式对本发明作进一步详细说明:
如图1所示,一种适用于智能仪器的通用输入编辑控件的实现方法,包括以下步骤:
步骤1:定义数值类型、物理意义以及连续或离散
每种属性设置占32位字中的一个二进制位,每一种输入参数的属性都由下面的属性值通过位或组合产生,数值类型属性定义:
ANY=0,DIGIT=0x1,LETTER=0x2,NEG=0x4,DOT=0x8,SYMBOL=0x10,EXP=0x20;
分别表示允许输入的字符类型:任意字符,数字,英文字母,负号,小数点,符号,指数符号e;
物理意义定义:UTIME=0x100,UFREQ=0x200,UPOWER=0x400;
分别表示输入值是时间、频率和功率类型单位;
连续或离散型属性定义:DISPERSE=0x10000,SEQUEN=0x20000;
步骤2:定义编辑控件的按键响应算法
输入框在未获得光标时候,若接收任何可显示按键则进入输入编辑状态,否则是步进输入状态;
当收到仪器的按键代码后,首先判断是否是方向键,若编辑控件未进入编辑输入状态,即没有光标的情况下,方向键作为步进输入键,每收到一次上下光标键,分别把输入框中的输入值加减一次步进量,每个输入参数值的步进量由输入数组中各自的步进量确定;
当收到任意可显示按键代码后,首先清空输入框内的所有内容,进入输入编辑状态,编辑输入控件的按键响应算法(如图2所示):
步骤2.1:当收到仪器的按键后,首先判断是否为单位按键;
若:判断结果是单位按键,则执行步骤2.2;
或不是单位按键,则执行步骤2.3;
步骤2.2:终止输入,并把字符串转换为数值,如果是时间、频率或功率具有物理意义带单位的输入量,需要把单位字符串添加到输入串后面,同时把字符串转换为该物理意义单位系列中最小单位表示的数值,最后根据单位进行单位倍率的转换,完成参数输入;
步骤2.3:判断输入属性是否允许任意字符输入;
若:判断结果是允许任意字符输入,则执行步骤2.4;
或不允许任意字符输入,则执行步骤2.5;
步骤2.4:将该字符存入输入缓冲区,退出流程继续接收按键;
步骤2.5:判断当前允许输入属性与ANY位与是否为真;
若:判断结果是与ANY位与为真,则执行步骤2.6;
或与ANY位与不为真,则执行步骤2.7;
步骤2.6:直接接收新字符存入输入字符串缓冲区;
步骤2.7:判断键码是否在0和9之间;
若:判断结果是在0和9之间,则执行步骤2.8;
或不在0和9之间,则执行步骤2.9;
步骤2.8:判断输入属性与DIGIT位与是否为真;
若:判断结果是与DIGIT位与为真,则执行步骤2.10;
或与DIGIT位与不为真,则执行步骤2.11;
步骤2.9:判断键码是否为英文字母;
若:判断结果是英文字母,则执行步骤2.12;
或不是英文字母,则执行步骤2.13;
步骤2.10:存入输入字符串缓冲区;
步骤2.11:丢弃字符返回退出;
步骤2.12:判断输入属性是否包含LETTER位;
若:判断结果是包含LETTER位,则执行步骤2.14;
或不包含LETTER位,则执行步骤2.15;
步骤2.13:判断键码是否为‘-’;
若:判断结果是键码是‘-’,则执行步骤2.16;
或不是‘-’,则执行步骤2.17;
步骤2.14:将输入字符存入输入字符串缓冲区;
步骤2.15:丢弃字符返回退出;
步骤2.16:判断输入属性是否包含NEG;
若:判断结果是包含NEG,则执行步骤2.18;
或不包含NEG,则执行步骤2.19;
步骤2.17:判断键码是否为‘.’;
若:判断结果是键码是‘.’,则执行步骤2.20;
或不是‘.’,则执行步骤2.21;
步骤2.18:将输入字符存入输入字符串缓冲区;
步骤2.19:丢弃字符返回退出;
步骤2.20:判断输入属性是否包含DOT;
若:判断结果是包含DOT,则执行步骤2.22;
或不包含DOT,则执行步骤2.23;
步骤2.21:判断键码是否为其它可打印字符;
若:判断结果是其它可打印字符,则执行步骤2.26;
或不是其它可打印字符,则执行步骤2.27;
步骤2.22:判断字符串中是否已有‘.’;
若:判断结果是字符串中已有‘.’,则执行步骤2.24;
或字符串中没有‘.’,则执行步骤2.25;
步骤2.23:丢弃字符返回退出;
步骤2.24:丢弃字符返回退出;
步骤2.25:将输入字符存入输入字符串缓冲区;
步骤2.26:判断输入属性是否包含SYMBOL;
若:判断结果是包含SYMBOL,则执行步骤2.28;
或不包含SYMBOL,则执行步骤2.29;
步骤2.27:丢弃字符返回退出;
步骤2.28:将输入字符存入输入字符串缓冲区;
步骤2.29:丢弃字符返回退出。
每接收到一个输入字符进行处理完毕后,都需要判断输入串长度是否达到输入属性定义的长度,若达到启动数值转换并乘以倍率完成该输入并退出参数输入流程;
最后输入字符串缓冲区中的字符串转换成数字,再乘以单位相关的倍率,则统一转换成了以每个单位系列中的最小单位保存的数值了;
总共4个单位键在时间单位中对应(Hz,kHz,MHz,GHz),在频率系列单位中分别对应(Hz,kHz,MHz,GHz),在电压单位中分别对应(nV,uV,mV,V)
定义单位倍率:时间(ns,us,ms,s),频率(Hz,kHz,MHz,GHz),电压(nV,uV,mV,V)。
时间单位倍率(1,1.0e3,1.0e6,1.0e9)
频率单位倍率(1,1.0e3,1.0e6,1.0e9)
电压单位倍率(1,1.0e3,1.0e6,1.0e9)
若输入属性为连续值输入,则将上面步骤中转换后的输入值与输入属性中的上下限做比较,若超限则取边界值,否则不变;若为离散值,则根据数字索引编号调用各自的离散值比较函数,判断是否是允许的离散值;
在输入过程中,根据输入索引编号,把前几次输入该输入项的值按位与用户当前比对,找最相近的显示在窗口下边,供用户直接选择后存入输入字符串缓冲区中,结束输入;
步骤3:定义输入参数的属性
用户用一个32位整型字定义输入值的属性、以及单位属性选择和允许输入长度,仪器中的每个输入参数值分配一个数字编号索引,通过数字编号索引查找输入参数属性;
步骤4:定义仪器参数响应函数的格式
当激活一个输入项,完成输入后,通过数字编号索引查找输入参数的响应函数,每个输入参数的响应函数格式:int ExecFunction(int nIndex,void*p),其中nIndex是该输入项对应的数字编号索引,可以用于查找该输入值所对应的所有属性,指针p为输入参数,对于输入属性要求是浮点数则该值可以转换类型为浮点,如果输入属性要求是字符串,则可以转换为字符串指针。这样所有输入值的响应函数都具有统一的函数格式,便于组织维护;
在某型号频谱分析仪中输入参数有二百多项,其中有参考电平、起始频率、终止频率扫描时间等,如果采用传统的各自的输入实现方式,代码量很大,难于维护,也难使用,采用本发明后如下实现:
首先完成每个输入参数的输入属性定义如下,
参考电平数字编号索引201,步进量1.0,输入属性值和单位属性为
DIGIT|DOT|EXP|UPOWER|SEQUEN
响应函数int RefLevel(int nIndex,void*p);
起始频率数字编号索引202,步进量1000.0,输入属性值和单位属性为
DIGIT|DOT|EXP|UFREQ|SEQUEN
响应函数int StartFreq(int nIndex,void*p);
终止频率数字编号索引203,步进量1000.0,输入属性值和单位属性为
DIGIT|DOT|EXP|UFREQ|SEQUEN
响应函数int StopFreq(int nIndex,void*p);
扫描时间数字编号索引204,步进量1.0,输入属性值和单位属性为
DIGIT|DOT|EXP|UTIME|SEQUEN
响应函数int SweepTime(int nIndex,void*p);
将所有的输入项属性和对应的响应函数放在一个结构体数组中便于循环处理,
typedef int(*pFunction)(int,void*);
Struct UniInput
{
int nIndex;
int nInputType;
};
Struct UniInput input=
{
(201,1.0,DIGIT|DOT|EXP|UPOWER|SEQUEN,RefLevel),
(202,1000.0,DIGIT|DOT|EXP|UFREQ|SEQUEN,StartFreq),
(203,1000.0,DIGIT|DOT|EXP|UFREQ|SEQUEN,StopFreq),
(204,1.0,DIGIT|DOT|EXP|UTIME|SEQUEN,SweepTime),
};
如此当用户激活某项参数的输入后,就由统一的按键处理程序,按照输入参数的各种属性实现了参数输入和一致的转换,再按照输入索引编号,把参数传到各个对应的响应函数,完成了仪器参数的输入和功能的执行。
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。