快捷搜索:

在发电机组控制中累计运行时间的计算

在发电机组节制中累计运行光阴的谋略

择要: 本文解说了发电机组节制系统上位机软件的开拓历程中,应机组节制要求,开拓职员在开拓软件的历程中所利用到的谋略机数据类型常识

关键词:数据库、面向工具、控件、时钟、文件

发电机组是我公司开拓研制,主要利用于电信部门备用电源的系列产品。机组对节制系统的要求主如果及时和准确,在对节制系统的要求中有一项是上位机软件中必要显示机组累计运行光阴。功能看起来很简单:只要用系统光阴减去起动时的系统光阴便即是本次机组运行的光阴,加上曩昔累计运行的光阴便即是机组累计运行的光阴,待停机旌旗灯号呈现将累计运行光阴存盘即可以了。

但在法度榜样体例调试的历程中却发清楚明了问题:

1.假如在运行历程中,用户改动了系统光阴,将会导致当前光阴-起动时系统光阴异常大年夜以致呈现负值而使机组累计运行光阴不准;

2.在VB中的光阴0值是1899年12月30日上午12时0分0秒,以是1秒钟显示为:“1899/12/30 12:00:01 AM”这显然不是我们所必要的;

3.在VB的光阴类型的变量或常量中年、月、日中任何一位都弗成为0,否则将要掉足;

4.假如在运行历程中,谋略机逝世机或掉足,导致本次运行光阴未及时存盘而造成机组累计运行光阴不准。

完成计时功能首先回声明三个变量:

静态变量T1,用来寄放每一次谋略累计光阴TL时的系统光阴,即累计光阴基准

变量 TL,用来寄放累计运行光阴

变量 T2,用来寄放系统当前光阴

实现此功能的正常思路:在运行历程中机组状态由“非运行”转为“运行”此时法度榜样将保存当前光阴到一个静态变量T1(假设为2000/12/20 00:00:00)中,而运行一段光阴后,法度榜样将当前系统光阴T2( 假设为2000/12/20 00:20:00与刚刚保存的T1的差(00:20:00)做为这次机组运行的光阴。

因为Windows操作系统是个多义务的操作系统,在法度榜样运行历程中可能呈现这样的环境,即在法度榜样保存T1之后,用户经由过程其他法度榜样改动了系统光阴(假设改动为1998/12/20 00:20:00)在法度榜样运行时统计运行光阴就会呈现T2-T1

为防止在运行历程中,用户改动系统光阴,导致当前光阴与起动时系统光阴之差在合法范围之外而使机组累计运行光阴不准的问题。法度榜样每隔1秒钟令T2=系统当前光阴,谋略T2-T1,假如T2-T1所获得的值在0~6秒内将该值累加到累计光阴TL中,无论T2-T1的值若何,都令T1=T2。这样光阴基准T1每秒都要更新一次这样,因为T1每秒钟更新一次,以是,无论在法度榜样运行顶用户将光阴改动成什么值只会造成法度榜样累计光阴上的1秒钟的偏差。

别的,在VB中的光阴类型的0值是1899年12月30日上午12时0分0秒,以是1秒钟显示为:“1899/12/30 12:00:01 AM”并且年、月、日位不能即是0,这显然与我们必要的不相符。

为办理这一问题,先对VB的数据类型进行深入一些的懂得。

VB中的光阴类型变量存储为 IEEE 64 位(8 个字节)浮点数值形式,其可以表示的日期范围从 100 年 1 月 1 日到 9999 年 12 月 31 日,而光阴可以从 0:00:00 到 23:59:59,当其他的类型的数据要转换为光阴类型时,小数点左边的值表示日期信息,而小数点右边的值则表示光阴。午夜为 0 而正午为 0.5。负整数表示 1899 年 12 月 30 日之前的日期,以是在VB中1秒的光阴转化为浮点型数的值为1÷24÷60÷60=1.15×10-5利用此值可以先在法度榜样中将光阴变量换算为浮点型变量,再将浮点型变量除以1.15×10-5获得累计的秒数再进行分钟和小时的换算,由于机组累计运行光阴因此小时为最大年夜单位的,以是不必要进行年月日的换算。这种措施毛病是谋略对照繁杂,并且1秒钟对应1.15×10-5有偏差,偏差累加轻易造成累计光阴上的偏差。

着末,采取了用数据布局措施办理光阴问题,即定义数据布局新类型如下:

TYPE TIMEL

THOUSE AS LONG

TTIME AS DATE

END TYPE

定义

DIM TIMELJ AS TIMEL

用TIMELJ.THOUSE记录累计光阴的小时数,而用TIMELJ.TTIME来记录累计光阴的分钟和秒。法度榜样每秒钟用当前系统光阴T2减去T1所获得的差加入到TIMELJ.TTIME中,当TIMELJ.TTIME的小时位的值≥1时,将小时位的值加入到TIMELJ.THOUSE中。同时将TIMELJ.TTIME的小时位清为0,在显示机组累计运行光阴时,将TIMELJ.TTIME拆分开,按位读出它的分、秒并与TIMELJ.THOUSE结合起来就显示了发电机组本次起动以来运行的累计光阴。假如在法度榜样开始就将上次运行的累计光阴读入到TIMELJ中,那么法度榜样运行历程中显示的光阴将是机组累计运行的光阴了。在法度榜样运行中,每次从串行口读出一组有效的数据,就对机组的状态进行判别,假如判别为“运行”则将累计运行光阴,并按期将该光阴存储到硬盘中。在法度榜样加载历程中读出本次机组起动前机组的历史记录,为防止用户误删除历史运行光阴数据,而在读取时呈现打不开文件的系统差错,在法度榜样中在读取历史运行光阴之前将判断历史运行光阴文件是否存在。假如已经存在则打开它读取数据,否则将按清零处置惩罚,即觉得机组是第一次运行。

为防止法度榜样非常退出导致的系统光阴存盘不及时问题,将机组累计存盘光阴前进到3~5秒。

经由过程经久的对谋略机编程常识的进修和利用,积累了一些履历,发清楚明了不少看起来轻易但实现起来相称繁杂的问题,一旦办理起来就会牵涉到其他多方面的常识,在往后对上位机软件进级或编写新的上位机软件事情历程中将在办理类似问题时节约大年夜量的光阴和精力。

您可能还会对下面的文章感兴趣: