PB电子教案09

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最后,用21H号中断的3DH号功能 按“写”方式打开指定的文件,移动 读写指针到文件尾,将上次关机时间 和本次开机日期时间依次存入文件后 关闭。
以上两部分可以合并到一个汇编语 言程序当中,完整的源程序清单如下: 第一部分 功能: ⑴修改1CH号中断向量 ⑵新的1CH中断服务程序将当前时 间存入CMOS寄存器中 第二部分 功能: ⑴取上次关机时、分、秒; ⑵取本次开机日期、时间; ⑶存入 c:\timercd.sys 。
然后,指针指向开机日期时间缓冲 区,用1AH号中断的4号功能取出系统当 前日期,年的高两位在寄存器 CH、低两 位在寄存器 CL中,月、日分别在寄存器 DH和 DL中,用1AH号中断的 2号功能取 出系统当前时间,时、分、秒分别在寄 存器 CH、CL 和 DH 中,转换为 ASCII 码 后,依次放到数据缓冲区。
1.数据窗口对象布局 2.用机时长数据颜色控制 3.汇总信息的定义
建立一个如图9.6所示的窗口,保存到对 象 库 trad.pbl 中 , 取 名 为 w_trad。 窗 口 的 Title属性设置为“用机记录浏览器”,窗口 类型为main!,窗口初始状态为normal!,取 消最大化复选标记,图标为Window!。在窗 口上放置7个掩码编辑框,em_1用来显示当 前 时 间 , em_y1、em_m1、em_d1、 em_y2、em_m2、em_d2 分 别 用 来 表 示 查 询的起始时间和截止时间的时、分、秒。 6 个单选按钮 rb1~rb_6 用来设置查询的时长 条件和输出结果的排序方式。复选框 cbx_1 用来设置查询时是否只显示冷启动记录。数 据窗口控件 dw_1 与前面设计的数据窗口对 象d_trad相连,在其中显示用机记录信息和 统计结果。窗口上还有 5 个命令按钮,完成 相应的功能。
9.1.1 自动记时的有关技术 9.1.2 将关机时间存入CMOS实时钟寄存器 9.1.3 将上次关机时间和本次开机日期时间存盘 9.1.4 完整的源程序清单
9.2.1 应用程序对象、数据库和表 9.2.2 数据窗口对象
9.3.1 窗口布局和控件 9.3.2 窗口及控件的编码
让计算机将本身每次工作的时间都 自动记录下来,对加强机器管理,减少 人工登记手续,统计机器使用效率,分 析机器技术性能都是有意义的。要做到 这一点,只要将每次开机时间和关机时 间都自动记录下来就可以了。记录开机 时间非常容易。可以通过自动批处理, 执行一个特定的文件,将当前日期、时 间存入磁盘。甚至可以在自动批处理文 件中加一、两条命令来实现。但是,要 自动记录关机时间就不那么容易了。我 们可能会想到以下几种方法: ① ② ③ ④
关机之前让用户执行一个事先编 好的程序,将当前时间存盘。这种 方法实际上是手动的,用户会感到 麻烦,极易疏漏。
通过修改计算机的定时中断1CH 或 08H 服务程序,周期性的将当前 时间存盘。这种方法要影响到机器 的效率,在技术上也有一定困难。
对系统的CMOS实时钟设置报时 时间,使之周期性的产生中断,并 通过修改 50H 或 4AH 中断服务程序, 将当前时间存盘。这种方法也不够 理想。
修改1CH号中断服务程序并 使中断服务程序驻留内存,用高 级语言显然不合适,因为会浪费 大量的存储空间和执行时间,而 用汇编语言完成这项工作则恰如 其分。只要将下面这段汇编语言 程序添加到原1CH号中断服务程 序中,设置中断向量后,每 55 毫秒就自动被执行一次,将当前 时间存入CMOS报时寄存器。
系统运行后,在“用机记录浏 览器窗口上单击“更新”按钮 . 如 果单击“今天”按钮,系统会把 当天的用机记录筛选出来,显示 出信息。如果将“起始日期”中 的月份数调整为“ 01 ”,再单击 “排序方式”分组框中的“时长” 单选按钮,系统会把指定日期的 所有用机记录按“用机时长”升 序排列显示出来。
将源程序用任意文本编辑器输入之后存 到磁盘文件,命名为 JS.ASM。经汇编、连 接形成扩展名为 EXE 的可执行文件,再用 转换为扩展名为COM的文件 。 一旦执行,随即将保存 在CMOS寄存器中的上次关机时、分、秒和 本次开机的日期时间存入 C区根目录的文件 TIMERCD.SYS,同时修改 1CH 号中断向量, 并将新的1CH号中断服务程序驻留内存,这 样便周期性地将当前时间存入CMOS寄存器。
有一种比较理想的方法是利用 CMOS实时钟内部的闲置寄存器保 存关机时间。CMOS时钟内部有一 些数据寄存器和状态寄存器,它用 电池供电,关机后信息不会丢失。 其中有的数据寄存器是闲置不用的。 我们可以周期性地把当前时间存入 这些寄存器中,关机前最后一次存 入的时间,便可做为关机时间。待 下次开机时,将其取出存入磁盘。 此种方法精巧、高效,不会影响机 器的正常工作,也比较简单。
随着时间的推移,文件中的数据不断积 累。可随时提取这些数据进行浏览、整理、 加工,统计用机时数、开机次数等。特别是 将这些内容导入数据库,在 Windows 下使 用更加方便。这一部分工作由高级语言,尤 其是 PowerBuilder 来做就比较合适。将上 次关机时间和本次开机日期时间存盘仍用汇 编语言实现 . 在这段程序中定义了与文件路 径关联的 ASCIIZ 串和两个数据缓冲区变量。
首先指针指向关机时间缓冲区,用 OUT指令将 05 输出到 70H 号端口,以选定 71 号端口的时报时寄存器,用 IN 指令从 CMOS电路的 71 号端口输入上次关机的时 数,调用子程序将其转换为 ASCII 码后, 放到数据缓冲区。用类似的方法取出上次 关机的分、秒数,转换为 ASCII 码后,依 次放到数据缓冲区。
在硬盘 C 区的根目录下事先建立一个记时 文件 TIMERCD.SYS,用来存放每次开机日期 时间和关机时间。该文件建立时内容为空,以 后每开机一次都由程序自动追加一组22个字节 的数据,其格式为: ...........hhmmss 上次关机时、分、秒(各两 位),行末回车换行码占两字节 YYYYMMDDhhmmss 本次开机年、 月、日、时、分、秒(年四位,其它各两位) 该文件内容是纯文本。
1.窗口的open事件和timer事件代码 2.命令按钮、单选按钮和复选框的编码 3.窗口用户事件u_serch代码 4 .将 timercd.sys 文本文件的内容导入 数据库
用机记录浏览器设计、调试完 成后,编译成可执行文件,就可以 发布到其它计算机进行使用了。整 个 系 统 包 括 文 件 、 TIMERCD.SYS、TRAD.EXE、 TRAD.DB、PowerBuilder8.0 的 发 布文件以及相关的数据库驱动程序。 安装到其它机器上以后还要配置 ODBC 数 据 源 , 并 要 在 AUTOEXEC.BAT 文 件 中 添 加 一 条 命令JS。
为使整个工作不用人为干预完全自动进行, 需要在自动批处理文件中添加一行命令: JS 同时,要将和TIMERCD.SYS两个 文件拷贝到C区根目录。
有了 TIMERCD.SYS 文件和其中的用机记 录,可以把它导入数据库,然后利用 PowerBuilder 强大的数据库操作能力,对信 息进行浏览、查询和统计、加工等处理。先建 立一个文件夹“ trad”,打开工作空间“ PB8 实例 .PBW”,在该文件夹 trad 中建立对象库 trad.pbl、目标trad.pbt和应用程序对象trad。 这里用到的数据源是trad,数据库连接之后, 打开用机记录浏览器窗口w_trad。在trad文件 夹中建立一个Access 2002数据库trad.mdb, 配置ODBC数据源和Profile文件,数据源名和 profile 名均使用trad。在数据库中建立一个用 于存储TIMERCD.SYS内容的表,取名为trad
程序用系统 1AH 号中断的 2 号 功能读取当前实时间,得到BCD码 形式的时、分、秒分别在CPU内部 寄存 器 CH、CL 和 DH 中 。 用 OUT 指令将01输出到70H号端口 ( COMS 索 引 寄 存 器 地 址 ) , 则 71H号端口对应的是秒报时寄存器, 用OUT指令可将当前秒存入该寄存 器。类似地,将03输出到70H号端 口,则71Hห้องสมุดไป่ตู้端口对应的是分报时 寄存器,用OUT指令可将当前分存 入该寄存器。将05输出到70H号端 口,则71H号端口对应的是时报时 寄存器。
按照前面分析的技术路线, 将关机时间存入 CMOS 时钟寄 存器,要解决两个问题:一是 存到哪些寄存器中,二是如何 周期性的自动保存当前时间到 指定的寄存器。
CMOS实时钟电路的寄存器资 源十分有限,不太容易找到空闲 的寄存器。但研究发现,其中的 报时寄存器在一般情况下是闲置 不用的,可以用它来存放关机时 间(时、分、秒)。由于关机是 随机性的,为了保存关机时间, 必须要在关机前周期性的保存 “当前时间”,被保存的最后一 个“当前时间”可近似的做为关 机时间。保存“当前时间”的周 期越短,关机时间与最后一个 “当前时间”的误差也越小。
第9章 用机记录浏览器
9.0 本章概括 9.1 让计算机自动记录本身的工作时间 9.2 数据库及数据窗口对象 9.3 窗口设计 9.4 使用
本章介绍一种使计算机能自动将每次开 机时间和关机时间存入磁盘文件并可随时进 行浏览、统计的软件方法。这种做法相当于 在计算机内安装一个“黑匣子”,不管计算 机什么时候开关,或做什么,这个“黑匣子” 始终会忠实的记录每次的开、关机时间。尽 管它记录的信息很有限,与真正意义上的黑 匣子相比有一定差距,但对于加强机器管理, 统计机器使用效率具有实际意义。尤其是采 用了利用 CMOS时钟电路内部的闲置寄存器 存储关机时间的关键技术,对开发 CMOS时 钟电路的应用有参考意义。将汇编语言与 PowerBuilder开发工具结合,开发应用软件, 也会使读者有所启发。在此基础上进一步做 一些工作,有可能开发出更有应用价值的软 件或产品。
这个 TIMERCD.SYS 文件的第一行表示 开机日期是 2001 年 12 月 20 日,开机时间是 22时 16分 26秒,关机时间是 22时24分 48秒, 第二行表示开机日期是 2001 年 12 月 21 日, 开机时间是 20 时 54 分 06 秒,关机时间是 21 时25分10秒,......,最后一行表示开机日期 是2002年02月 14日,开机时间是19时 02分 25秒,目前尚未关机。下次开机时,会把本 次关机时间和下次开机日期时间添加到文件 末尾。
计算机系统的 08H 号中断和 1CH 号中断在系统定时器的控制 下,每隔 55 毫秒发生一次,也就 是说,这两个中断服务程序每隔 55 毫秒就自动被执行一次。根据 这一特性,可以通过修改 1CH 号 中断服务程序,使其每执行一次, 都将“当前时间”存入 CMOS 实 时钟的报时寄存器一次,这样, 就可以保证关机时间与关机前最 后一次保存的“当前时间”的误 差不超过 55mS。尽管每 55 毫秒 就要保存一次当前时间,但由于 是寄存器存储操作,速度极快, 对机器的正常工作毫无影响。
相关文档
最新文档