1、摘 要本论文叙述了Visual basic6.0语言和Microsoft access2003数据库的基本知识概况。重点介绍了电压采集系统的实现过程,包括:串口通信、硬件连接、modbus协议、数据采集、数据处理、实时数据显示、数据存入数据库、历史数据打印报表、历史曲线的绘制等内容。关键词:电压采集系统 计算机控制 VB与数据库 串口通信目 录引言-3项目开发背景-3项目开发目的-3系统开发所需要的技术准备-3第一章 应用系统开发工具-4第一节Visual Basic简介及实现原理-4第二节 VB中的MScomm串口通信控件-4第三节 vb中的数据访问对象(DAO)-6第四节 VB中的MSCH
2、ART控件-8第二章 VB与数据库的应用-8第一节 数据库基础-8第二节 关系型数据库标准语言SQL-11第三节 DAO中常用对象的方法和属性-12第三章 Modbus协议-14第四章 系统分析-15第一节 系统功能简介-15第二节 系统具体功能的实现-16附录-22总结-26致谢-27参考文献-28引 言项目开发背景在现在化的社会中,我们的生活、学习和工作任何一个方面都离不开“电”这个名词,这足以见得电在当今社会对人类生存的重要性。随着科技的进步,电伴随着人类足迹几乎和踏遍了现代科技的所有领域,成为人们生活密不可分的一部分随着人类的进步和科学技术的发展,蓄电池的作用已经日益显示出了它的重要性
3、。例如电动自行车、手机、汽车等等,没有蓄电池这些工具对人类来说将是一无所用。因此,了解蓄电池电量的变化规律是一项很重要的任务。了解电量的变化规律就必须得到确切的电压变化规律,但是,单个电池的电压规律容易获得且容易测量,而多个电池的电压测量不仅单调、枯燥,而且浪费了大量的时间和精力。故设计该软件将大量的测试任务交给系统自主完成,工作人员只需定时的查看一下数据即可。从而给研究带来了方便。项目开发目的建立多路电压采集系统,采用该系统实现多电池电压变化数据的自动采集,从而得到多路电池的电压变化的规律,使电压采集系统化、便捷化、自动化。系统开发所需要的技术准备在系统开发之前我们需要硬件和软件方面的支持。
4、硬件方面就在于电路的连接,系统需要老师提供的25路电压采集电路板(硬件资料请见附录2)和232-485转换模块,从而实现电压信号的采集和传输。软件则需要了解Modbus协议的具体知识和Visual Basic6.0、Microsoft access2003数据库知识,进而实现软件和硬件的结合,以完成整个系统的设计。第一章 应用系统开发工具第一节 Visual Basic简介及实现原理Visual Basic(简称VB)是美国微软公司(Microsoft)于1990年推出的一套完整的Windows系统软件开发工具,可用于开发Windows环境下的各类应用程序,是一种可视化、面向对象、用事件驱动方
5、式的结构化高级程序设计语言和工具,是目前使用最广泛的面向过程编程语言之一。至今已经升级到了6.0版。VB的重要特点之一是可视性。系统引进了窗体和控件的机制,用于设计应用程序界面。用户通过在屏幕上生成窗体,在窗体中绘制所需要的控件和按钮,设计菜单和对话框,VB会自动生成相应的代码。VB的另一重要特点是事件驱动。当窗体或控件上发生一个事件时,VB立即把控制权交给程序员。程序员不必担心如何判断事件是否已发生,只需要编写一段代码告诉计算机在事件发生以后应该做什么工作就可以了。这样,设计一个Windows应用程序简化为用鼠标在屏幕上点击、拖拽并添加少量的代码就可以完成了,大大降低了对程序设计的要求,提高
6、了应用程序的开发效率。利用VB的可视性特点,可方便的设计了程序的窗体界面,并在各个窗体中的合适位置绘制所需的每种控件。如要修改窗体或控件的某项属性,只需在相应的窗体或控件的属性窗口修改相应的参数便可达到需要的设计效果。利用VB的事件驱动性特点,只需在窗体或控件上的代码窗口中添加少量的代码,便可达到告诉当在相应的窗体或控件上发生某一事件时,它们在事件发生后应该做什么工作的目的。例如几个窗体上的添加、删除、返回按钮的作用,就是通过在各个相应按钮的代码窗口中输入相应的代码,来达到当在几个按钮上出现单击(Click)事件后,相应按钮实现添加、删除、返回的功能的。第二节 VB中的MScomm串口通信控件
7、 Visual Basic6.0中提供了大量的控件供使用者在变成中使用。其中,MScomm控件就是用来实现串口通信的控件。下面将对MScomm控件进行简要的介绍。一 控件的添加一般的VB软件在没使用过MScomm控件时,左侧的工具栏中没有该控件的图标,我们需要自己添加。打开vb程序在菜单栏中找到“project”选项,单击后在下拉菜单中找到“部件”,然后选中出现以下对话框:然后找到电话盒控件(即Microsoft comm. Control 6.0),选中它确定,就在左侧的工具栏中出现了形似电话盒的控件。单击此控件就可在窗体上添加该控件了。二 控件的属性 MSComm 控件有很多重要的属性,在
8、此我们只介绍在项目中使用到的几个属性:CommPort 置并返回通讯端口号。 Settings 字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。 程序中使用的串口settings值分别为:9600,n,8,1PortOpen 置并返回通讯端口的状态。也可以打开和关闭端口。 Input 收缓冲区返回和删除字符。 Output 输缓冲区写一个字符串。Inputmode 来设置串口传输的数据类型1) cominputmodetext 0 (缺省)通过input属性以文本方式取回数据;2) cominputmodebinary 1 通过input属性以二进制方式取回数据。Commevent属性
9、 本程序利用该属性的rthreshold值的变化来驱动事件程序中设置rthreshold值为1,意思为:只要接收到一个数据就发生oncomm事件。Inputlen 设置并返回input属性从接受缓冲区读取的字符数。三控件的通信方式 MSComm控件提供了两种处理通信的方法:1)事件驱动通信,是一种功能很强的处理串口活动的方法。在大多数情况下,用户需要获知事件发生的时间,例如,在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变等。在这种情况下,使用MSComm控件的OnComm事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中
10、的错误。要获取所有事件和通信错误的完整清单,请参阅CommEvent属性。2)用户也可以在每个重要的程序功能之后检查CommEvent属性的值来检测事件和通信错误。这对小的自含程序可能比较常用。例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有意义,因为你只打算从调制解调器中接收OK响应信息。使用的每个MSComm控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm控件。可以在Windows 控制面板中修改串口地址的中断地址。第三节 vb中的数据访问对象(DAO)Jet数据库引擎引擎(engine)能够决定程序管理和数据操作的程序或程序
11、段。数据库引擎就是操作数据库的一段程序或程序段。 Microsoft Jet数据库引擎和数据访问对象DAO(data access object)可以创建功能强大的客户/服务器应用程序。Data控件几乎不需要任何代码,仅通过属性的设置就可以具有访问数据库的能力。而利用代码增强Data控件的功能,则体现了DAO的部分功能。实际上,Data控件是在高层次上执行DAO,作为一个高层对象,它封装了操纵Jet所需的编程任务。一 什么是DAO?DAO是数据访问对象(DataAccess Objects)的简称,它包含了很多对象和集合,通过Jet引擎来连接Microsoft Access数据库和其他数据库。
12、DAO模型为进行数据库编程提供了需要的属性和方法。利用DAO可以完成对数据库的创建,如创建表、字段和索引,完成对记录的定位和查询以及对数据库的修改和删除等。 二DAO的优缺点优点:1)数据访问对象完全在代码中运行,使程序员可以摆脱Data控件的限制,使用代码操纵Jet引擎访问数据库数据,能够开发出更强大更高效的数据库应用程序。2)使用数据访问对象开发应用程序,使数据访问更有效,同时对数据的控制更灵活更全面,给程序员提供了广阔的发挥空间。缺点: 数据访问对象的复杂性,使其使用起来更为复杂和抽象,不如使用Data控件简单和直观,可以说,使用DAO需要使用者具备更多的数据库操作知识。三使用时得注意事
13、项1)在使用DAO之前,必须确保已经引用DAO对象。如果没有引用,采用以下操作引用DAO库:单击“工程”菜单的“引用”选项,出现引用对话框,选中其中的“Microsoft DAO 3.5 Object Library”项,单击“确定”按钮。2)DAO也只能访问早期版本的Access数据库,所以应用时要转换。第四节 VB中的MSCHART控件MSChart控件的功能是以图形方式显示数据的图表。这会使枯燥的数据变得更加生动直观,增加了程序的实用价值。MSChart控件支持一下特性:1、真三维表示;2、支持所有主要的图表类型;3、数据网络成员支持随机数据,数据数组。第二章 VB与数据库的应用从20世
14、纪50年代中期开始,计算机的应用由科学研究部门扩展到企业、行政部门,数据处理迅速上升为计算机应用的主要方面。在计算机的三大应用中(科学计算、数据处理及过程控制),数据处理所占比重约为70%左右。在60年代末,数据库技术就是作为数据处理中的一门技术发展起来的。第一节 数据库基础一VB数据库编程中的术语1)数据库引擎 数据库引擎存在于程序和物理数据库文件之间,将数据访问对象上的操作转换为对数据库文件自身的物理操作,来处理所有与各种数据库接口的机制。这使用户与正在访问的特定数据库无关,不管这个数据库是本地的VB数据库,还是所支持的其他任何数据库格式,所使用的数据访问对象和编程技术都是相同的。Jet数
15、据库引擎被包含在一组动态链接库(DLL)文件中,运行时,这些文件被链结到VB程序。它把应用程序的请求翻译成对.mdb文件或其他数据仓库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行结构化查询语言(SQL)查询,来实现所需要的数据库操作。另外还包含一个结果处理器,用来管理查询所返回的结果。 2)数据表 (Table) 数据表是一组相关的数据按行列来排列,可以把它想象成行列整齐的表格。每一行称作一条记录(Record),每一列称作一个字段(Field)。 3)记录(Record)在表中,每一行就是一条记录,它唯一描
16、述了一个有意义的事物。一般来说,数据库表的记录创建时任意两行都不能相同。4)字段(Field)在表中每一列就是一个字段,它的每一个元素描述了该元素所在行(记录)的某一个方面的性质。表是有其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,为每个字段分配一个数据类型、最大长度和其他属性。字段可包含各种字符、数字甚至图形、声音、动画等多媒体信息。5)索引(Index)为了加快访问数据库的速度并提高访问效率,特别赋予数据表中的某一个字段的性质,使得数据表中的记录按照该字段的某种方式排序(升序或降序)。6) 键(Key) 键就是表中的字段(或多个字段),它(们)为快速检索而被索引。
17、键可以是唯一的,也可以是非唯一的,取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。7) 关系(Relation) 数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。 二 VB数据库的组成 VB数据库的组成有三部分:用户界面、数据库引擎、数据库。其中数据库引擎存在于用户界面和数据库之间,起中介作用,用户通过它与所要访问的特定数据库联系。1用户界面 用户界面是进行人机交互的界面,用于显示数据并允许用户查看或更新数据。驱动用户界面的是VB编写的应用程序代码,这些代码包括用来请求数据库服务的数据访问对象和方法,如添加、删除记录和执行查询等。 由应用程序代码所发出的服务
18、请求是向数据库引擎提出的,而不是直接对物理数据库文件进行操作。对物理数据库的直接操作由数据库引擎发出,并向应用程序返回所需要的结果 。2数据库引擎 Jet数据库引擎包含在一组动态连接库(DLL)中。运行时动态连接库文件被连接到VB程序,他把应用程序的请求翻译成对.mdb文件或其他数据库的物理操作。Jet数据库引擎被包含在一组动态链接库(DLL)文件中,运行时,这些文件被链结到VB程序。它把应用程序的请求翻译成对.mdb文件或其他数据仓库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行结构化查询语言(SQL)查询,
19、来实现所需要的数据库操作。另外还包含一个结果处理器,用来管理查询所返回的结果。 3数据库 对于本地的VB或Microsoft Access 数据库来说,就是.mdb文件,对于其他的数据库,则可能包含其他扩展名的文件,例如:在SQL SERVER 7.0 中包含称为*.mdf和*.ldf的数据库。第二节 关系型数据库标准语言SQL一. SQL语言功能1) 数据定义(DDL):定义、删除、修改关系模式(基本表);定义、删除视图(View);定义、删除索引(Index)2)数据操纵(DML):数据查询;数据增、删改; 3)数据控制(DCL): 用户访问权限的授予、收回;n 数据查询的功能可以理解为使
20、用“动词SELECT”对数据记录或记录集进行查询;n 数据定义的功能可以理解为使用“动词”对数据库、基本表、视图和索引进行定义;n 数据操纵的功能可以理解为使用“动词”对数据记录或记录集进行插入、删除和修改操作;n 数据控制的功能可以理解为使用“动词”对用户或组进行授予和收回特定权限的控制操作;特定权限包括所有上述功能。 二.Select 查询数据查询是数据库应用的核心功能,是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。数据查询是对己建立的表中的数据进行检索的操作,SELECT语句不会更改数据库的中的数据。使用SELECT SQL命
21、令可以选择查询表中的任意列,它至少包括两个句子。本项目中使用的语句如下:select 我的数据库.* from 我的数据库 order by我的数据库.日期命令的意义为: 选取所有” 我的数据库内的记录及字段,并以日期先后,由早到晚作排序。我的数据库.*表示所有表中的字段三. 数据库的建立使用Microsoft Access 2003 创建数据库Access是一个数据库管理系统,它之所以被集成到Office 中而不是Visual Studio 中,是因为它与其它数据库管理系统(如)相比更加简单易学,一个普通的计算机用户即可掌握并使用它。注意:在离开Access之前还有一个问题必须解决,就是Ac
22、cess 2000 与VB 6.0 的兼容问题,用Access 2003建的数据库不能直接被VB 6.0访问,必须经过转化才行。第三节 DAO中常用对象的方法和属性一WorkSpace(工作区)对象 Workspace对象定义了使用何种方式连接数据库。在DAO中,可以使用Microsoft Jet引擎或ODBCDirect中的任何一种,视数据源而定,而连接方式的实现,则可以通过Workspace对象来定义。Workspace对象还提供了事务处理,为保证数据库的完整性提供了支持。 WorkSpace(工作区)对象的方法:Opendatabase 方法 该方法用于在工作区中打开数据库。* 语法表示
23、为 set database =workspace.Opendatabase(dbname,options,readonly,connect )* 参数说明a)Database 参数可选,为工作区的数据库对象变量;b)Dbname参数,用于指定要打开的数据库文件名或数据库路径名称;c)Options:参数可选,该参数对于Microsoft Jet 工作区,当其值为True时,以独占的方式打开数据库;其值为False(默认)时,以共享方式打开数据库; d)readonly参数,用于设置是否以只读的方式打开数据库,当设置为True时,以只读方式打开,否则相反,默认为False。e)Connect参
24、数,用于指定打开数据库的不同连接信息,包括口令等,该参数分为两个部分 ,数据库类型与其它选项,选项间可以使用分号连接。二DataBase对象即数据库对象,是用来管理一个打开的数据库连接的对象,大多数数据访问都是通过该对象进行的,是对数据库实施操作时首先要使用的对象。DataBase对象的方法OpenRecordset方法该方法用于创建新的记录集对象。*语法表示set recordset= db.Openrecordset( source,type,options, lockedits)* 参数说明a)source参数用于指定记录的来源,它的来源可以是表名字,查询名字或SQL语句返回的记录。对于
25、Microsoft Jet 数据库,数据来源只能是数据库表。b)Type可选参数,用于指定记录集的类型。通常该参数可取为: dbopentable dbopendynaset dbopensnapshotc)Options可选参数,指定记录集的特性。d)Lockedits可选参数用于指定记录集是否被锁定。三RecordSet对象当数据库和表建立后,就可以对表中的记录进行增加、删除、修改、查询和定位等操作,在DAO中,这些操作都是通过记录集来实现的,操作记录集主要是通过对记录集对象RecordSet的应用来实现的。RecordSet对象是一批记录的集合,由一系列的记录和字段组成。RecordSe
26、t对象的常用方法有:AddNew、Delete、Edit、Update等等。1、AddNew方法用于向数据表中增加记录;2、Delete方法用于从记录集中删除记录;3、Edit方法用于修改记录集的当前记录;4、Update方法用来把添加的新纪录或把当前记录的修改结果保存到数据表中,该方法只能在Edit方法或AddNew方法执行之后才能执行。第三章 Modbus协议ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。 ModBus功能码 0
27、1 READ COIL STATUS 02 READ INPUT STATUS 03 READ HOLDING REGISTER 04 READ INPUT REGISTER 05 WRITE SINGLE COIL 06 WRITE SINGLE REGISTER 15 WRITE MULTIPLE COIL 16 WRITE MULTIPLE REGISTER ModBus网络只是一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。表2是ModBus各功能
28、码对应的数据类型。 表2 Modbus功能与数据类型对应表Modbus协议有两种传输方式分别为:ASCII输和RTU传输。本项目使用的是RTU传输。下面介绍一下该传输模式的特性: RTU传输模式采用二进制编码方式,其中开始位1位、数据位8位、奇偶校验位1位、停止位1位或二位。错误校验位CRC(即循环冗余校验)。 在本试验中所需要得校验码,是通过RTU校验码生成软件计算所得的,因此在此不对CRC校验做过多的说明.第四章 系统分析第一节 系统功能简介本系统主要实现以下的功能:电压数据采集并实时显示在窗体所规定的区域、历史电压数据存入数据库、历史电压数据以报表的形式显示。用功能图表示如下: 系统在开
29、始运行时利用按钮命令向电路板输入控制命令,电路板在接受到命令数据后,经过分析向电脑返回所采集到的电压原始信号值。然后对所采集的数据进行处理(采集到的数据必须除以10所得到的数据才是我们所需要显示和存储的数据。),处理完成得的数据将在VB窗体上所设置的实时显示区域显示出来。与此同时,所采集到的数据将被存储到事先建成的数据库中,以供查询。当点击激发查看报表命令时,系统将把所存储的历史数据打印成报表的形式显示给工作人员。第二节 系统具体功能的实现一 系统窗体的设计该系统利用VB可视化编程的特点所布置的系统窗体如下图所示:二 数据库的建立利用Microsoft Access 2003建立数据库,其表的
30、结构如下图所示:字段名称类型日期日期或时间时间日期或时间线路1数字线路2数字。线路24数字线路25数字部分数据存储后数据库格式,如下图所示:三 报表的生成1. 报表的最后效果如下图所示:2Data Environment 和Data Report:1) data environment 和data report 的添加: Data report的添加:在【工程】菜单中找到【添加data report】菜单项,将出现【报表设计器】窗口。在该窗体内可设计数据报表。如下图所示: Data environment的添加:如果早【工程】菜单中找不到【添加Data environmen】的菜单项,可执行【
31、工程】【部件】命令,在下图所示的【部件】对话框的【设计器】选项卡中选中【Data environmen】,然后单击【确定】按钮。然后执行【工程】【添加Data environmen】命令, 然后得到数据环境设计器,如图:) 数据报表设计器包含的对象(1) datareport对象:一个数据报表就是一个datareport对象,它类似与VB窗体,具有可视的报表设计器和一个代码模块。在报表设计器中可以创建报表的布局。(2) Section对象:数据报表设计器的每一个部分都是一个Section对象。(3) Data report控件:在数据报表设计器中不能使用VB的内部控件或任何Active控件,必
32、须使用数据报表设计器自带的工具箱中的控件,该工具箱的名称为“数据报表”。) 数据报表设计器的组成部分 数据报表设计器主要由报表标头、页标头、分组标头、分组注脚、细节、页注脚、报表注脚等Section对象组成。) 数据报表设计器设计器控件箱里的控件(1) textbox控件用来在报表中显示文本并可以规定文本格式。(2) Label控件用来在报表中防止标签,用来标识字段或添加说明信息。(3) Image控件用来在报表中添加图形。(4) Line控件用来在报表中绘制线条。(5) Shape控件用来在报表中绘制矩形、三角形或圆形。(6) Fuction控件该控件是一个特殊的文本框,用来在生成报表时计算
33、函数或表达式的值。) 数据环境设计器报表中的数据来自与数据环境,每个环境都是一个树形的层次结构,可以包含多个Connection对象,每个Connection对象有可包含对个Command对象,每个Command对象又可包含对歌Field对象和多个Command对象。3. 报表功能的连接实现1)执行完【添加data report】惨淡命令,将自动添加一个数据报表窗口到当前工程中,数据报表名为“Data Report1”。2)根据下表设置Data Report1对象的属性。属性名设置值作用Name默认数据环境对象的名字Caption电压数据报表标题DataSourceDataEnvironmen
34、t1与数据环境联系在一起DatamemberMingling与数据环境中命令对象联系在一起1) 在报表标头中添加一个label控件,按照下表设置属性。属性名设置值作用Caption25路电压采集数据报表标题显示静态文字Alignment2-rptjustifycenter文字居中显示Font.size二号设置文字大小2) 在【工程资源管理器】窗口中双击【DataEnvironment】,打开数据环境设计器,单击“mingling”对象前面的“+”号,展开该对象,以便看到其中的字段。如下图所示3) 从数据环境设计器中拖动“日期”字段到【细节】部分中去,将会产生一个名为【txt日期】的文本框和一个
35、名为【label1】的标签控件,把标签控件拖动到【页标头】部分。4) 采用同样的方法把“时间”、“线路1”、“线路2”等字段拖放到【细节】部分,并把相应的标签控件拖放到【页标头】部分。4. 连接布局完毕的数据报表设计器如图所示:最后点击主窗体上的【显示报表】按钮就可以显示出所需要的报表。本项目得具体代码请参见目录。附 录一系统具体代码: Dim receivelen As IntegerDim receivedata() As ByteDim j1 As IntegerDim m As IntegerPrivate Sub Comm1_OnComm()Dim j As IntegerDim n
36、 As IntegerDim m As IntegerDim rdata As ByteDim x(25), y(25) As IntegerSelect Case Comm1.CommEvent Case comEvCD Case comEvCTS Case comEvDSR Case comEvRing Case comEvReceive Shape1.Visible = True Shape2.Visible = False receivelen = Comm1.InBufferCount ReDim receivedata(receivelen) receivedata = Comm1
37、.Input For i = 0 To receivelen - 1 data(i + j1) = receivedata(i) Next i j1 = j1 + 1Case Else Shape1.Visible = False Shape2.Visible = TrueEnd SelectFor j = 0 To 24Text1(j) = data(j) / 10Next jEnd SubPrivate Sub Command1_Click()DataReport1.ShowEnd SubPrivate Sub Command2_Click()Dim h As IntegerFor h =
38、 0 To 24Text1(h) = Picture1.ClsNext hTimer1.Enabled = TrueTimer2.Enabled = TrueEnd SubPrivate Sub Command3_Click()Dim sql As StringDim rs As RecordsetDim db As DatabaseDim i As IntegerDim l As IntegerDim xianlu As Stringxianlu = InputBox(请输入所要查看的线路:, 线路选择窗口)l = Val(xianlu)If l 25 ThenMsgBox 超出规定范围,请
39、重新输入!, vbCriticalExit SubEnd IfSet db = OpenDatabase(VB.App.Path & 我的数据库.mdb, False, False)sql = select 我的数据库.* from 我的数据库 order by 我的数据库.时间Set rs = db.OpenRecordset(sql, dbOpenDynaset)rs.MoveLastrs.MoveFirstIf rs.RecordCount = 0 ThenMsgBox 没有历史数据!, vbCriticalExit SubEnd IfWith MSChart1.TitleText =
40、历史数据曲线.RowCount = rs.RecordCountFor i = 1 To rs.RecordCount.Row = i.data = rs.Fields(线路 + xianlu).RowLabel = rs.Fields(时间)rs.MoveNextNext iEnd Withrs.CloseEnd SubPrivate Sub endCommand_Click()Comm1.PortOpen = FalseEndEnd SubPrivate Sub Form_Load() Shape1.Visible = TrueShape2.Visible = FalseMSChart1.
41、RowCount = 0Label1.Caption = Time()Timer1.Enabled = Falsei = 0Comm1.PortOpen = TrueEnd SubPrivate Sub Timer1_Timer()Comm1.InBufferCount = 0Dim r(0) As ByteDim h As Integerj1 = 0For h = 0 To 24Text1(h) = Picture1.ClsNext hr(0) = &H50r(1) = &H3r(2) = &H0r(3) = &H40r(4) = &H0r(5) = &HDr(6) = &H85r(7) = &HDBComm1.Output = rEnd SubPrivate Sub addrecord(savedata() As Byte)Dim sql As StringDim rs As RecordsetDim db As DatabaseDim data1(26) As ByteFo