分享
 
 
 

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

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

摘 要: 本文讲解了发电机组控制系统上位机软件的开发过程中,应机组控制要求,开发人员在开发软件的过程中所应用到的计算机数据类型知识

关键词:数据库、面向对象、控件、时钟、文件

发电机组是我公司开发研制,主要应用于电信部门备用电源的系列产品。机组对控制系统的要求主要是及时和准确,在对控制系统的要求中有一项是上位机软件中需要显示机组累计运行时间。功能看起来很简单:只要用系统时间减去起动时的系统时间便等于本次机组运行的时间,加上以前累计运行的时间便等于机组累计运行的时间,待停机信号出现将累计运行时间存盘即可以了。

但在程序编制调试的过程中却发现了问题:

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<0的情况,而VB中负的时间值会解释为1899年以前的日期,这样T2-T1就等于1897年12月30日00:00:00程序显示的时间就会显示错误的累计时间。

为防止在运行过程中,用户修改系统时间,导致当前时间与起动时系统时间之差在合法范围之外而使机组累计运行时间不准的问题。程序每隔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秒。

通过长期的对计算机编程知识的学习和应用,积累了一些经验,发现了不少看起来容易但实现起来相当复杂的问题,一旦解决起来就会牵扯到其他多方面的知识,在今后对上位机软件升级或编写新的上位机软件工作过程中将在解决类似问题时节约大量的时间和精力。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有