您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页三相智能电表软件系统设计

三相智能电表软件系统设计

来源:保捱科技网


西华大学课程设计说明书

三相智能电表软件系统设计

摘 要:三相智能电表适用于电力电网、自动化控制等领域,他集遥测、遥信、遥控、

显示、通讯等众多功能与一体,能够完成1回线路的电流、电压、功率、功率因素、频率、电度等电参量的监测。产品具有可编程功能、DC4~20mA模拟量输出、RS232串行口和开关量输出等功能,可以实现与监控系统的联网或数据的远程传输等功能。本三相智能电表软件系统基于Visual Basic语言程序设计,由串口链接和可视化程序界面(数据采集、显示,保存和查询)组成。能实现三相电力数据的采集、显示、保存和查询等功能。

关键词: Visual Basic,RS232串行口,数据库

Abstract: Three phase smart meter is suitable for the power grid, automation control and

other fields, he set telemetry, remote communication, remote control, display, communication, and many other functions, and an organic whole, can complete 1 line current, voltage, power, power factor, frequency, the monitoring of electrical parameters, such as electric degrees. Product has the function of the programmable, DC4 ~ 20 ma analog output and RS232 serial port and switch output, and other functions, can be achieved with the monitoring system of the network, or data remote transmission, and other functions. The three phase smart meter software system based on Visual Basic language programming, by serial links and visualization program interface (data collection, display, save and query). Can realize three-phase power data acquisition, display, save and query, etc.

Keywords: Visual Basic,RS232 serial port,data base

西华大学课程设计说明书

目录

1 前言 .................................................................. 1 2 总体方案 .............................................................. 2

2.1方案一 ............................................................ 2 2.2方案二 ............................................................ 2 3单元模块设计 .......................................................... 4

3.1 数据接收 .......................................................... 4

3.1.1 单片机电路 .................................................. 4 3.1.2 RS232串口 ................................................... 5 3.2 数据显示模块 ...................................................... 6 3.3历史数据查询 ...................................................... 9 4软件设计 ............................................................. 11

4.1 RS232串口通信标准 ............................................... 11 4.2登录界面的软件代码设计原理 ....................................... 12 4.3实时数据显示界面的软件代码设计原理 ............................... 12 4.4历史数据显示界面的软件代码设计原理 ............................... 17 4.5软件设计流程图 ................................................... 20 5基于Visual Basic的数据库操作 ......................................... 21

5.1创建数据库的步骤 ................................................. 21 5.2查询数据的步骤 ................................................... 21 7总结与体会 ........................................................... 23 8参考文献 ............................................................. 24 附录 ............................................................................ 25

1 Visual Basic设计界面 .............................................. 25 2Visual Basic 代码 ................................................... 28

西华大学课程设计说明书 1 前言

伴随着我国工业化进程的前进步伐,工业及居民用电急剧增加,庞大的供电网络给用电管理单位带来了巨大挑战,也给居民工厂带来了诸多不便。为此我国在“十二五规划”中提出建设“智能电网”的解决方案,实现电网、计算机网、电信网三网融合。传统的机械式电表及电子式电表无论是在计量精度还是在信息传递方面都难以满足“智能电网”的需求,在这种情况下智能电表应运而生。智能电表是指具有多功能化、智能化、网络化等功能的新式电表,是智能电网的基本设备之一,承担着原始电能数据采集、计量和传输的任务。

智能电表设计的课题研究富有实用价值和市场前景。首先,智能电表能够更方便、精确地计量电能,数字显示界面更加直观方便;其次其智能化可以帮助管理单位实现远程管理、提醒居民按时缴费、详细记录用电明细表。节省了管理单位的人力、物力资源。最后智能电表可以通过加密防止用户窃电,安全性更高

国内智能电表的设计尚处于起步阶段,主要集中在应用方面,电量测量ASIC则主要依赖进口产品。在2007年12月初,国家发布了《多功能电能表》和《多功能电能表通信协议》两个行业标准,2009年10月,国家电网公司公布了智能电表新标准,提高了电表在计量、费控、通信、功耗、电子线路布线等技术指标,含有MCU成为必选项,要求有更高的计算能力。随着我国智能电网的建设,智能电表的大规模应用即将启动,预计2015年我国智能电表覆盖率80%,2020年达到100%。

可见我国的智能电表设计研究还有很大的潜力空间,智能电表在网络化、智能化、多功能化等方面还需要我们继续深入研究。

第 1 页

西华大学课程设计说明书

2 总体方案

分析课题需求,将系统整体分为电量测量和历史数据的存储管理两部分。电量测量部分选用RS232串口和VB程序语言实现,能够完成三相电量的准确计量。该部分是设计的关键和基础。历史数据的存储管理管理部分除核心元件微处理器外,这部分电路把第一部分测试的三相电参数进行存储、显示和远传;完成人机交互,方便用户或操作人员查询数据;还可以扩展三相智能电度表的其它功能要求,使其达到智能化,易于功能扩展。

2.1方案一

被测三相电压、三相电流通过相应互感器转变为能被后端电路接收的电信号,变化

之后的信号需要做两方面的处理,一方面检测电压电流的相位差,确定功率因数,另一方面线性调整信号,传输给后端的A/D转换器。电压、电流转换后的数字量和功率因数值传输给CPU处理器,根据三相功率、三相能量等电参数的计算公式计算相应的各个电参数,并对计算数据做相应处理。

该方案存在电路结构复杂,参数测试误差大,编程复杂、故障排除复杂等缺点。该技术方案已不再适用于工业环境中三相电能表的电参数测量。

RS232串口 数据接CPU处理器 图2.1数据采集显示流程图 数据显示 2.2方案二

使用RS232串口和Visual Basic编程软件直接对电能的各项参数进行检测和转换,在结合STC90C52单片机与VB界面显示就能对电能的各项参数进行显示。再将测得的各项参数由数据库保存,便于完成人机交互,方便用户或操作人员查询数据。

比较以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现,故实际设计中拟采用方案二。

本设计方框图如图2.2所示,它由四部分组成:1、控制部分主芯片采用单片机STCC52和RS232串口;2、VB显示界面;3、实时数据显示传输;4、历史数据查询。

该方案的智能电表能够更方便、精确地计量电能,数字显示界面更加直观方便;其

第 2 页

西华大学课程设计说明书 次其智能化可以帮助管理单位实现远程管理、提醒居民按时缴费、详细记录用电明细表。节省了管理单位的人力、物力资源。最后智能电表可以通过加加密防止用户窃电,安全性更高。

图2.2总体设计方案

以该方案为基础选择Visual Basic软件设计方法,完成多点数据采集上位机处理

单片机与RS232串口 VB显示界面

实时数据显示 历史数据查询 系统的编程工作,需要进一步熟悉Visual Basic语言的基本知识与Visual Basic数据库有关的知识,需要团队协作与请教同学与老师,还需要到图书馆借阅资料与上网查阅相关资料,这样才能完成该课程设计。多点数据采集上位机处理系统该软件的难点是Visual Basic的编程方面,与怎样实现PC机与单片机的连接问题及数据的采集与如何将数据写入数据库等问题。可以将多点数据采集上位机处理系统应用于三相智能电表的软件系统,从而完成智能电表的设计。

第 3 页

西华大学课程设计说明书

3单元模块设计

3.1 数据接收

通过RS232串口将单片机与微机相连,通过vb程序的处理,完成数据的接收。

3.1.1 单片机电路

单片机电路如图3.1.1示。

图3.11单片机电路

ATC52是一款超强抗干扰/高速/低功耗的单片机,ATC52是一个低电压,高性能

CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生

第 4 页

西华大学课程设计说明书 产,兼容标准MCS-51指令系统,片内置通用8位处理器和Flash存储单元,功能强大的ATC52单片机可为您提供许多较复杂系统控制应用场合。

ATC52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,ATC52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 3.1.2 RS232串口

RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道。

在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。

RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。

RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的rs232(9针)接口通信。

第 5 页

西华大学课程设计说明书 图3.1.2 RS232串口图

3.2 数据显示模块

主要是通过Visual Basic软件处理RS232串口传来的数据,并在Visual Basic的

界面中显示数据。其中包括界面和代码两部分。

(1)界面部分如图3.2.1,其中图片框Picture1,要在属性窗口中设置它的picture属

性,以便加入图片,并在Picture1的属性窗口中设置它的BorderStyle属性为

0,目的是去除Picture1的边框,再将Picture1的AutoSize属性设置为True,以便图像框的大小适应图片框的大小,这样西华大学的标致就完美的加入在图片框里面了。其中图片框Picture2中包含lable2和label4两个标签,这两个标签的Caption属性均设置为:

图3.2.1登录界面

欢饮进入西华大学电能管理中心!并将两个lable的AutoSize属性设置为True,Lable2和

Lable4

两者之间有一定的距离。再加上与代码的配合,

第 6 页

西华大学课程设计说明书 这个标志便能在图片框Pictuer2中滚动显示

了,并且当Lable2的“欢”字消失的时候,Lable4的“欢”字刚好出现,二者配合的

相当完美。其中

的AutoSize属性为True, 其中

成,并设置它的Caption属性为“登陆”。其中

由Lable1构成,并设置它由命令按钮Command1构为时钟控件,它的应用是为了完成

的滚动显示。其中

由Lable2组成,并设置它的AutoSize属性为True,一边字体的大小适应Lable2的大小,并修改Lable2的Caption属性为Copyright(c)fyr 2013,这样Lable2的设计就完成了,再将Form1的Caption属性设置为“登陆”,这样登陆窗体的第一个界面就完成了。

第 7 页

西华大学课程设计说明书 图3.2.2实时数据显示界面(1)

图3.2.2实时数据显示界面(2)

(2)数据显示界面包括实时数据显示和历史数据显示,图3.2.2为实时数据显示界面。首先要添加一个名称为SSTab1的控件,并将该控件的Height与Width属性值与Form2窗体的属性值设置为同一值。并将Form2的Caption属性值设置为“电能参数”。将SSTab1控件的Tabs与TabsPerRow属性值均设置为2。并将SSTabs控件的Caption属性值设置为“实时数据”与“历史数据”这样SSTabs1控件就完成了,然后如图3.2.2所示再在SSTab1上添加16个文本框控件与label标签。添加组合框控件Combo1,并将其text属性设置为COM1,并将其list属性值设置为COM1、COM2、COM3、COM4、COM5,以便串口的选择。其中

为通信控件,实现的是RS232控件与上位机的通信,其中

为时

钟控件,控制的是采样的频率,其中为图像框Shape控件,要将图像框的shape属

性选择为3-circle,将BackStyle属性设置为1-Opaque,这样图像框的设计就完成了。 再添加设计。

第 8 页

和这两个控件,这样就完成了实时数据界面的

西华大学课程设计说明书 图3.2.3历史数据显示界面 图3.2.3历史数据显示界面主要包括DataGrid控件、钮控件和

的命令按

的时钟控件。该界面的设计很简单主要是完成历史数据的查询和显示。

3.3历史数据查询

单击图3.2.3历史数据显示界面中的3.3.1历史数据查询界面。其中

命令按钮就会弹出图分别为两个标签,其中

与分别为两个文本框,其中为命令按

钮。其中为名称为datDatactl的控件。其作用

是显示查询后的历史数据。分别在为本框text1和text2中输入查询时间,单击命令

第 9 页

西华大学课程设计说明书

图3.3.1历史数据查询界面

按钮,就可以完成历史数据的查询,并将结果显示在

控件中,这样整个历史数据的查询就完成了。

整个操作过程非常简单便捷。

第 10 页

西华大学课程设计说明书

4软件设计

4.1 RS232串口通信标准

串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal

Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:

a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步

第 11 页

西华大学课程设计说明书 的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

4.2登录界面的软件代码设计原理

登陆界面如图4.2.1,其中和需要设置代码,

的代码为Form1.Hide 与Form2.Show,这部分代码的功能是单击登陆按钮后隐藏登陆界面,显示实时数据显示界面与历史数据显示界面,便于数据的显示。

的timer事件的代码为Label2.Left = Label2.Left – 100,其作用是每

向左移动100

个一个时钟周期也就是200ms,就将

各单位的距离。If Label2.Left <= -(Label2.Width) Then Label2.Left = 5070 End If 这三句代码的作用是当

时,它距离图片框左边的距离为

5070

全部移动到图片框外个单位,以便

控件能够在图片框中滚动显示。Label4.Left =

Label4.Left – 100 If Label4.Left <= -(Label4.Width) Then Label4.Left = 5070 End If这部分代码的作用与前一部分代码的功能类似,

代码的作用是为了让两个

标签中的“欢迎进入西华大学电能管理中心!”的字体循环显示。

4.3

实时数据显示界面的软件代码设计原理

按钮和

按钮与控件

图4.3.1实时数据显示界面中的

需要设置代码,还有窗体的form load事件需要代码,

第 12 页

西华大学课程设计说明书 需要代码,该通讯控件需要代码。(1)按钮的名称为ckcmd,代码If

ckcmd.Caption = \"打开串口\" 的作用是:如果的caption属性是“打开串

口”,代码Then MSComm1.PortOpen = True的作用是打开相应的RS232串口,代码 ckcmd.Caption = \"关闭串口\"的作用是名称为ckcmd的按钮的caption属性变为“关闭串口”,代码 Shape1.FillColor = &HFF&的作用是将shape控件的颜色变为红色,代码Combo1.Enabled = False 的作用是组合框不可用, 代码dqcmd.Enabled = True的作用是

按钮变为可用。代码Else ckcmd.Caption = \"打开串口\"的作用是:

如果名称为ckcmd按钮的caption属性是“关闭串口”单击该命令按钮之后ckcmd的按钮caption属性变为“打开串口”,代码MSComm1.PortOpen = False的作用是:单击命令按钮后,关闭相应的串口。代码Combo1.Enabled = True的作用是组合框

用,可以选择相应的串口。代码 Shape1.FillColor = 0 Shape2.FillColor = 0 的作用是两个图像框均变为黑色,以显示现在未从串口中读取数据。代码 dqcmd.Caption = \"自动读取\" 的作用是

按钮的caption属性变为

“自动读取”代码dqcmd.Enabled = False End If Exit Sub的作用是

按钮变为不可用,结束If语句和退出Sub过程。代码 On Error GoTo BLAK的作用是:如果出错就跳到名称为BLAK的子程序。代码BLAK: MsgBox \"串口不存在或者被占用!\vbOKOnly, \"提示信息\"的作用是如果出错就用MsgBox显示相应的提示信息。如图4.3.2所示。(2)读取\" 的作用是如果

命令按钮的名称为dqcmd,代码If dqcmd.Caption = \"自动

按钮的caption属性是“自动读取”,代码 Then

dqcmd.Caption = \"暂停读取\" 的作用是单击该按钮后名称为dqcmd的命令按钮的caption属性变为 “暂停读取”。代码 Shape2.FillColor = &HFF& 的作用是shape2的颜色变为红色,代码Timer1.Enabled = True的作用是timer1不可用,代码Else

第 13 页

西华大学课程设计说明书

图4.2.1登录界面

图4.3.1实时数据显示界面(1)

第 14 页

西华大学课程设计说明书

图4.3.2错误提示界面

图4.3.1实时数据显示界面(2)

化SSTab1控件的高度、宽度等参数。代码MSComm1.Settings = \"9600,n,8,1\" 的作用是清空从接收缓存器中读到的字符。代码Timer1.Interval = 1000 Timer1.Enabled = False的作用是设置Timer1的Interval属性为1s。代码

的作用是:设置初始化参数,设置RS232的波特率等,代码MSComm1.InputLen = 0

dqcmd.Enabled = False的作用是最开始按钮不可用。代码

Data2.DatabaseName = \"C:\\fyr\\My Documentsjkh.mdb\" Data2.RecordSource = \"jkh\"

第 15 页

西华大学课程设计说明书 的作用是在C盘创建一个文件夹以便保存数据。 代码Timer2.Interval = 60000 的作用是设置数据库采样周期为6秒。代码Text1.Text = \"\" Text2.Text = \"\"Text3.Text = \"\"Text4.Text = \"\"Text5.Text = \"\"Text6.Text = \"\"Text7.Text = \"\"Text8.Text = \"\"Text9.Text = \"\"Text10.Text = \"\"Text11.Text = \"\"Text12.Text = \"\"Text13.Text = \"\"Text14.Text = \"\"Text15.Text = \"\"Text16.Text = \"\"的作用是在form load事件中将这16个文本框清空。代码 End Sub 的作用是结束form load这个事件过程。(5)

,该组合框按钮的名称是Combo1,代码MSComm1.CommPort =

Combo1.ListIndex + 1的作用是:单击组合框打开相应的串口。(6)它为通讯控

件,它能实现单片机与上位机之间的通讯。代码Dim m1 As Single的作用是设置m1是单精度类型的变量,代码Select Case MSComm1.CommEvent的作用是控件MSComm1的CommEvent事件,代码Case comEventRxOver Exit Sub的作用是如果检测到comEventRxOver事件就退出Sub过程。代码Case comEvReceive BytReceived = MSComm1.Input的作用是MSComm1控件的comEvReceive事件,将接受到的数据放到BytReceived()变量中,代码For i = 0 To UBound(BytReceived)的作用是for循环从0开始到BytReceived的上限,代码 If Len(Hex(BytReceived(i))) = 1 Then strData = strData & \"0\" & Hex(BytReceived(i))的作用是将BytReceived(i)转换为16进制数,如果只有一位数则在前面添0,并将它赋给strData这个数组中,代码Else strData = strData & Hex(BytReceived(i))的作用是:否则,直接将BytReceived(i)赋给变量strData中,代码End If flag = strData的作用是:结束if语句,将strData 赋给变量 flag,代码 If Len(flag) = 2 Then的意思是:如果flag的长度是2,代码If flag = \"F0\" Or \"F1\" Or \"F2\" Or \"F3\" Or \"F4\" Or \"F5\" Or \"F6\" Or \"F7\" Or \"F8\" Then flag = \"\" Else strData = \"\" flag = \"\" End If End IF的作用是设置F0,F1,F1,F3,F4,F5,F6,F7,F8为标志位,如果检测到标志位则将flag清空,如果没有检测到标志位,则将flag和ctrData均清空。代码If Len(flag) = 10 Then flag = Mid(flag, 9, 2)的作用是如果flag的长度是10,则取flag的后两位赋给新的变量flag, 代码的If flag = \"0F\" Then flag = \"\" gl = \"AP\" ElseIf flag = \"1F\" Then flag = \"\" gl = \"AQ\" ElseIf flag = \"2F\" Then flag = \"\" gl = \"ASZ\" ElseIf flag = \"3F\" Then flag = \"\" gl = \"BP\" ElseIf flag = \"4F\" Then flag = \"\" gl = \"BQ\" ElseIf flag = \"5F\" Then flag = \"\" gl = \"BSZ\" ElseIf flag = \"6F\" Then flag = \"\" gl = \"CP\" ElseIf flag = \"7F\" Then flag = \"\" gl = \"CQ ElseIf flag = \"8F\" Then flag = \"\" gl = \"CSZ\"这部分代码的作用是根据需要将A、B、C三相的有功,无功和视在电功放在相应的变量中。代码newdata = Mid(strData, 3, 6) strData

第 16 页

西华大学课程设计说明书 = \"\" End If的作用是将strData的3至6位赋值给变量newdata中。代码findata = Val(\"&H\" & newdata)的作用是将newdata转化为16进制数赋给findata中。代码 Select Case gl Case AP Text1.Text = findata Case AQ Text2.Text = findata Case ASZ Text3.Text = findata Case BP Text5.Text = findata Case BQ Text6.Text = findata Case BSZ Text7.Text = findata Case CP Text9.Text = findata Case CQ Text10.Text = findata Case CSZ Text11.Text = findata End Select的作用是把电功在对应的文本框中显示。代码Text13.Text = Text1.Text + Text5.Text + Text9.Text的作用是在text13中显示总的有功,代码Text14.Text = Text2.Text + Text6.Text + Text10.Text的作用是在text14中显示总的无功,代码 Text15.Text = Text3.Text + Text7.Text + Text11.Text的作用是在text15中显示总的视在电功。代码Text4.Text = Text1.Text / Text3.Text的作用是在text4中显示A相功率因素,代码Text8.Text = Text5.Text / Text7.Text的作用是在text8中显示B相功率因素,代码 Text12.Text = Text9.Text / Text11.Text的作用是在text12总显示C相功率因素。代码Text16.Text = Text13.Text / Text15.Text的作用是在text16中显示总的功率因素,代码Nexti End Select End Sub的作用是结束select语句,结束sub过程。以上便是整个实时数据界面的软件代码的设计的详细解释与说明,没有任何的语法错误。

4.4历史数据显示界面的软件代码设计原理

历史数据显示界面如图4.4.1所示,其中和

需要设计代码。

第 17 页

西华大学课程设计说明书

图4.4.1历史数据显示界面 (1)其中

的代码If Data2.Recordset.EOF = False Then的作用是在数据库的末尾加

Data2.Recordset.Fields(0)

=

入新记录。代码Data2.Recordset.MoveLast End If 的作用是加入新记录。代码Data2.Recordset.AddNew

的作用是添加系统日期。代码

Date

Data2.Recordset.Fields(1) = Time

的作用是将系统时间写入数据库中。代码Data2.Recordset.Fields(2) = Val(Text13.Text) 的作用是将总有功写入数据库中。代码Data2.Recordset.Fields(3) = Val(Text14.Text) 的作用是将总无功写入数据库中。代码Data2.Recordset.Fields(4) = Val(Text15.Text)的作用是将总视在电功写入数据库中。代码Data2.Recordset.Fields(5) = Val(Text16.Text) 的作用是将总功率因数写入数据库中。代码Data2.Recordset.Fields(6) = Val(Text1.Text)的作用是将A有功写入数据库中,代码Data2.Recordset.Fields(7) = Val(Text2.Text) 的作用是将A无功写入数据库中,代码Data2.Recordset.Fields(8) = Val(Text5.Text) 的作用是将的作用是将B相无功写入数据库中。代码Data2.Recordset.Fields(10) = Val(Text9.Text)的作用是将C相有功写入数据库中。代码Data2.Recordset.Fields(11) = Val(Text10.Text) Data2.Recordset.Updat的作用是将C相无功写入数据库中。(2)

第 18 页

B相有功写入数据库中。代码Data2.Recordset.Fields(9) = Val(Text6.Text)

西华大学课程设计说明书 其中的代码Form3.Show的作用是单击该命令按钮就进入form3历史

数据查询窗体。如图4.4.2所示。

图4.4.2 对于图4.4.2的窗体需要对

和窗体的form load事件写代码。(1)其中

的代码Set dbs = OpenDatabase(\"c:\\fyr\\My Documentsjkh.mdb\")

strSQL = \"PARAMETERS [DateFrom] DateTime, \" & \"_ \" & \"[DateTo] DateTime;\" strSQL = strSQL & \"SELECT*FROM jkh WHERE\" & \"_\" & \"日期 BETWEEN \" strSQL = strSQL & \"[DateFrom] AND [DateTo];\" 的作用是创建一个非存储的参数查询。代码Set qdf = dbs.CreateQueryDef(\"\strSQL) 的作用是:提示输入起始日期。代码strDateFrom = InputBox(\"输入查询起始日期\") 的作用是提示输入终止日期。代码strDateTo = InputBox(\"输入查询终止日期\")的作用是设置查询的参数。代码qdf.Parameters(\"DateFrom\") = strDateFrom qdf.Parameters(\"DateTo\") = strDateTo 的作用是起始日期显示。代码Text1.Text = strDateFrom的作用是终止日期显示。代码Text2.Text = strDateTo的作用是对查询打开动态集记录。代码Set rst = qdf.OpenRecordset(dbOpenDynaset) Set datDatactl.Recordset = rst的作用是赋

第 19 页

西华大学课程设计说明书 值并显示。(2)form load事件的代码datDatactl.DatabaseName = \"c:\\fyr\\My Documentsjkh.mdb\" datDatactl.RecordSource = \"jkh\"的作用是查询数据库中的内容并复制显示。

4.5软件设计流程图

登陆界面及密码界面及 代码设计 代码设计

历史数据查询界面

及代码设计

用电量数据界面及代码设计 电能参数数据界面及代码设计 串口提示界面及代码设计 历史数据界面及代码设计 第 20 页

西华大学课程设计说明书

5基于Visual Basic的数据库操作

5.1创建数据库的步骤

外接程序》可视化》文件》新建数据库》Microsoft Access》Version 2.0 MDB》输入要创建的数据库名称,这样就能在指定的磁盘位置创建一个目录。

5.2查询数据的步骤

外接程序》可视化》文件》打开数据库》Microsoft Access》My Documentsjkh.mdb》

打开。这样就能打开事先创建好的数据库。

第 21 页

西华大学课程设计说明书

6课程设计结论

本次课程设计是比较的,《三相智能电表软件系统》设计的难点主要是代码。

界面设计比较简单,及控件的属性设置较为复杂,还有就是程序与RS232之间的通讯比 较难实现,必须要求代码的准确无误。还有必须注重团队合作和查阅相关的资料及向陈高燕老师的请教。

第 22 页

西华大学课程设计说明书

7总结与体会

本设计使用的Visual Basic语言简单、可视化,具有一定的实际应用价值。该课程设计是控制领域的一个简单实例,还有许多需要完善的地方,例如可以将测得的数据通过单片机与通讯模块相连接,以手机短消息的方式发送给用户,使用户能够随时对温度进行监控。此外,还能广泛地应用于其他一些工业生产领域,如建筑,仓储等行业。本控制系统可以应用于多种场合。用户可灵活选择本设计的用途,有很强的实用价值。

通过这次课程设计,让我对单片机以及RS232串口,及vb程序语言有了进一步的了解、巩固和加深,并且对所学知识的得以实际应用。与我所学芯片再一次零距离接触,进一步加深我对各个芯片的功能和特性的了解。

微机控制与接口技术课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.回顾起此次课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在短短的两个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次微机控制与接口技术的课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和思考的能力。

在此智能电表的软件系统设计中设计过程中,让我了解到了现代程序设计的原理。以前在实际生活中看到的电表等产品就只会用他们并不知道他们的工作原理,通过这次课程设计对这些产品的原理有了深入的了解。

同时这次课程设计大大提高了我的动手能力,为我以后的工作和学习奠定了基础,在以后的生活中我也可以用我所学的知识和对芯片功能的了解来设计一些日常生活所需的电子产品。

实训时间很短,但是通过这次实训可以学到很多书本没有的东西,有了这一次的实践经验,我们的动手能力和思维能力也相应的得到了的提高,这次实训进一步锻炼了自己的逻辑思维能力,并从中总结出宝贵的经验。

最后,在此感谢陈高燕老师的细心指导与其他各位同学的无私帮助!

第 23 页

西华大学课程设计说明书

8参考文献

[1].李长林编《Visual Basic串口通信技术与典型实例》北京:清华大学出版社. [2].范逸之 等编《Visual Basic实现串并行通信技术》北京:清华大学出版社.

[3].四维科技 赵思恩编《Visual Basic数据库编程技术与实例》北京:人民邮电出版社. [4].张朝昆 施丽娜著《Visual Basic数据库开发基础与应用》北京:人民邮电出版社 [5].姚巍主编《Visual Basic数据库开发从入门到精通》北京:人民邮电出版社

[6].李江全等编《Visual Basic数据库采集与串口通信测控应用实战》北京:人民邮电出版社 [7]. 李江全等编《Visual Basic串口通信与测控应用技术实战详解》北京:人民邮电出版社

第 24 页

西华大学课程设计说明书

附录

1 Visual Basic设计界面

图3.2.1登录界面

图4.3.1用电量数据显示界面

第 25 页

西华大学课程设计说明书

图4.3.2电能参数数据界面

图4.3.2错误提示界面

图4.3.3错误信息提示界面

第 26 页

西华大学课程设计说明书

图4.4.1历史数据显示界面

图4.4.2历史数据查询界面

第 27 页

西华大学课程设计说明书 2Visual Basic 代码

Private Sub Command1_Click() 'Text2.passowrdchar = \"*\"

If Text1.Text = \"xhdn\" And Text2.Text = \"fyr\" Then Form1.Hide Form2.Show Else

MsgBox \"请输入正确的用户名和密码!\错误信息\" End If End Sub

Private Sub Command2_Click() Text1.Text = \"\" Text2.Text = \"\" End Sub

Private Sub Form_Load() Text1.Text = \"\" Text2.Text = \"\"

Text2.PasswordChar = \"*\" '密码框显示为* Timer1.Interval = 200 End Sub

Private Sub Timer1_Timer() Label2.Left = Label2.Left - 100 If Label2.Left <= -(Label2.Width) Then Label2.Left = 5070 End If

Label4.Left = Label4.Left - 100 If Label4.Left <= -(Label4.Width) Then Label4.Left = 5070 End If End Sub

第 28 页

西华大学课程设计说明书 '================================================= '系统加载部分

'================================================= Dim BytReceived() As Byte

Dim strBuff As String, strData As String, newdata As String, flag As String, dn As String, AP As String, AQ As String

Dim AV As String, AI As String, AGL As String, BV As String, BI As String, BGL As String Dim CV As String, CI As String, CGL As String

Dim ASZ As String, BP As String, BQ As String, BSZ As String, CP As String, CQ As String, CSZ As String Dim i%, j%, k%, m% Dim findata As Single Private Sub Form_Load() SSTab1.Top = 0 SSTab1.Left = 0

SSTab1.Height = Form2.Height SSTab1.Width = Form2.Width

MSComm1.Settings = \"9600,n,8,1\" '设置初始化参数

MSComm1.InputLen = 0 '清空从接收缓存器中读到的字符 Timer1.Interval = 1000 Timer1.Enabled = False dqcmd.Enabled = False

Data2.DatabaseName = \"C:\\fyr\\My Documentsjkh.mdb\" '!zhuyi Data2.RecordSource = \"jkh\"

Timer2.Interval = 60000 '数据库采样周期为6秒 Text1.Text = \"\" Text2.Text = \"\" Text3.Text = \"\" Text4.Text = \"\" Text5.Text = \"\" Text6.Text = \"\" Text7.Text = \"\" Text8.Text = \"\" Text9.Text = \"\"

第 29 页

西华大学课程设计说明书 Text10.Text = \"\" Text11.Text = \"\" Text12.Text = \"\" Text13.Text = \"\" Text14.Text = \"\" Text15.Text = \"\" Text16.Text = \"\" Text17.Text = \"\" Text18.Text = \"\" Text19.Text = \"\" Text20.Text = \"\" Text21.Text = \"\" Text22.Text = \"\" Text23.Text = \"\" Text24.Text = \"\" Text25.Text = \"\" Text26.Text = \"\" Text27.Text = \"\" Text28.Text = \"\" End Sub

'================================================= '端口选择部分程序

'================================================= Private Sub Combo1_Click()

MSComm1.CommPort = Combo1.ListIndex + 1 End Sub

'================================================= '打开串口部分

'================================================= Private Sub ckcmd_Click() On Error GoTo BLAK

If ckcmd.Caption = \"打开串口\" Then

第 30 页

西华大学课程设计说明书 MSComm1.PortOpen = True ckcmd.Caption = \"关闭串口\" Shape1.FillColor = &HFF& Combo1.Enabled = False dqcmd.Enabled = True Else

ckcmd.Caption = \"打开串口\" MSComm1.PortOpen = False Combo1.Enabled = True Shape1.FillColor = 0 Shape2.FillColor = 0 dqcmd.Caption = \"自动读取\" dqcmd.Enabled = False End If Exit Sub BLAK:

MsgBox \"串口不存在或者被占用!\提示信息\" End Sub

'=============================================== '端口数据改变触发事件

'=============================================== Private Sub MSComm1_OnComm() Dim m1 As Single

Select Case MSComm1.CommEvent Case comEventRxOver Exit Sub Case comEvReceive

BytReceived = MSComm1.Input For i = 0 To UBound(BytReceived)

If Len(Hex(BytReceived(i))) = 1 Then

strData = strData & \"0\" & Hex(BytReceived(i)) Else

第 31 页

西华大学课程设计说明书 strData = strData & Hex(BytReceived(i)) End If flag = strData If Len(flag) = 2 Then

If flag = \"F0\" Or \"F1\" Or \"F2\" Or \"F3\" Or \"F4\" Or \"F5\" Or \"F6\" Or \"F7\" Or \"F8\" Or \"E0\" Or \"E1\" Or \"E2\" Or \"E3\" Or \"E4\" Or \"E5\" Or \"E6\" Or \"E7\" Or \"E8\" Then

flag = \"\" Else

strData = \"\" flag = \"\" End If End If

If Len(flag) = 10 Then flag = Mid(flag, 9, 2) If flag = \"0F\" Then flag = \"\"

dn = \"AP\" '\"dn\"取“电能”之意 ElseIf flag = \"1F\" Then flag = \"\" dn = \"AQ\" ElseIf flag = \"2F\" Then flag = \"\" dn = \"ASZ\" ElseIf flag = \"3F\" Then flag = \"\" dn = \"BP\" ElseIf flag = \"4F\" Then flag = \"\" dn = \"BQ\" ElseIf flag = \"5F\" Then flag = \"\" dn = \"BSZ\" ElseIf flag = \"6F\" Then

第 32 页

西华大学课程设计说明书 flag = \"\" dn = \"CP\" ElseIf flag = \"7F\" Then flag = \"\" dn = \"CQ\" ElseIf flag = \"8F\" Then flag = \"\" dn = \"CSZ\" ElseIf flag = \"0E\" Then flag = \"\"

cs = \"AV\" '\"cs\"取“参数”之意 ElseIf flag = \"1E\" Then flag = \"\" cs = \"AI\"

ElseIf flag = \"2E\" Then flag = \"\" cs = \"AGL\" ElseIf flag = \"3E\" Then flag = \"\" cs = \"BV\" ElseIf flag = \"4E\" Then flag = \"\" cs = \"BI\"

ElseIf flag = \"5E\" Then flag = \"\" cs = \"BGL\" ElseIf flag = \"6E\" Then flag = \"\" cs = \"CV\" ElseIf flag = \"7E\" Then flag = \"\" cs = \"CI\"

ElseIf flag = \"8E\" Then flag = \"\"

第 33 页

西华大学课程设计说明书 cs = \"CGL\"

newdata = Mid(strData, 3, 6) strData = \"\" End If End If

findata = Val(\"&H\" & newdata) Select Case gl Case AP

Text1.Text = findata Case AQ

Text2.Text = findata Case ASZ

Text3.Text = findata Case BP

Text5.Text = findata Case BQ

Text6.Text = findata Case BSZ

Text7.Text = findata Case CP

Text9.Text = findata Case CQ

Text10.Text = findata Case CSZ

Text11.Text = findata Case AV

Text17.Text = findata Case AI

Text20.Text = findata Case AGL

Text23.Text = findata Case BV

Text18.Text = findata Case BI

第 34 页

西华大学课程设计说明书 Text21.Text = findata Case BG

Text24.Text = findata Case CV

Text19.Text = findata Case CI

Text22.Text = findata Case CGL

Text25.Text = findata End Select

Text13.Text = Text1.Text + Text5.Text + Text9.Text Text14.Text = Text2.Text + Text6.Text + Text10.Text Text15.Text = Text3.Text + Text7.Text + Text11.Text Text28.Text = Text17.Text + Text18.Text + Text19.Text Text27.Text = Text20.Text + Text21.Text + Text22.Text Text26.Text = Text23.Text + Text24.Text + Text25.Text Text4.Text = Text1.Text / Text3.Text Text8.Text = Text5.Text / Text7.Text Text12.Text = Text9.Text / Text11.Text Text16.Text = Text13.Text / Text15.Text Next i End Select End Sub

'===================================================== '读取命令选择

'===================================================== Private Sub dqcmd_Click()

If dqcmd.Caption = \"自动读取\" Then dqcmd.Caption = \"暂停读取\" Shape2.FillColor = &HFF& Timer1.Enabled = True Else

dqcmd.Caption = \"自动读取\"

第 35 页

西华大学课程设计说明书 Shape2.FillColor = 0 Timer1.Enabled = False End If End Sub

Private Sub tccmd_Click() Form1.Show Unload Me End Sub

Private Sub Timer1_Timer() m = m + 1 End Sub

'================================================= '创建历史数据库

'================================================= Private Sub Timer2_Timer()

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '将实时数据存入历史数据库中 If Data2.Recordset.EOF = False Then '在数据库的末尾加入新记录 Data2.Recordset.MoveLast End If '加入新记录

Data2.Recordset.AddNew

Data2.Recordset.Fields(0) = Date '系统日期 Data2.Recordset.Fields(1) = Time '系统时间 Data2.Recordset.Fields(2) = Val(Text13.Text) '总有功 Data2.Recordset.Fields(3) = Val(Text14.Text) '总无功 Data2.Recordset.Fields(4) = Val(Text15.Text) '总视在 Data2.Recordset.Fields(5) = Val(Text16.Text) '总功率因数 Data2.Recordset.Fields(6) = Val(Text1.Text) 'A有功 Data2.Recordset.Fields(7) = Val(Text2.Text) 'A无功 Data2.Recordset.Fields(8) = Val(Text5.Text) 'B有功

第 36 页

西华大学课程设计说明书 Data2.Recordset.Fields(9) = Val(Text6.Text) 'B无功 Data2.Recordset.Fields(10) = Val(Text9.Text) 'C有功 Data2.Recordset.Fields(12) = Val(Text17.Text) 'A电压 Data2.Recordset.Fields(13) = Val(Text18.Text) 'B电压 Data2.Recordset.Fields(14) = Val(Text19.Text) 'C电压 Data2.Recordset.Fields(15) = Val(Text20.Text) 'A电流 Data2.Recordset.Fields(16) = Val(Text21.Text) 'B电流 Data2.Recordset.Fields(17) = Val(Text22.Text) 'C电流 Data2.Recordset.Fields(18) = Val(Text28.Text) 'A功率因数 Data2.Recordset.Fields(19) = Val(Text27.Text) 'B功率因数 Data2.Recordset.Fields(20) = Val(Text26.Text) 'C功率因数 Data2.Recordset.Update

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> End Sub

'================================================= '显示历史数据查询窗口

'================================================= Private Sub lscxmd_Click() Form3.Show End Sub

Private Sub Form_Unload(Cancel As Integer) Form1.Show End Sub

'================================================= '窗体初始化

'================================================= Dim dbs As Database Dim rst As Recordset Dim qdf As QueryDef

第 37 页

西华大学课程设计说明书

'================================================= '参数查询

'================================================= Private Sub Form_Load() Text1.Text = \"\"

'区别查询前后DBGrid1的数据的变化。

datDatactl.DatabaseName = \"c:\\fyr\\My Documentsjkh.mdb\" datDatactl.RecordSource = \"jkh\" End Sub

'================================================= '查询

'================================================= Private Sub Command1_Click()

Set db = OpenDatabase(\"c:\\fyr\\My Documentsjkh.mdb\") sesrchStr$ = Text1.Text

Data1.Recordset.FindFirst \"日期=\" & \"sesrchStr\" If Data1.Recordset.NoMatch Then MsgBox (\"要查找的记录不存在\") End If End Sub

Private Sub Command2_Click() End End Sub

第 38 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务