软件课程设计报告北京科技大学.docx

上传人:b****5 文档编号:14794890 上传时间:2023-06-27 格式:DOCX 页数:25 大小:179.41KB
下载 相关 举报
软件课程设计报告北京科技大学.docx_第1页
第1页 / 共25页
软件课程设计报告北京科技大学.docx_第2页
第2页 / 共25页
软件课程设计报告北京科技大学.docx_第3页
第3页 / 共25页
软件课程设计报告北京科技大学.docx_第4页
第4页 / 共25页
软件课程设计报告北京科技大学.docx_第5页
第5页 / 共25页
软件课程设计报告北京科技大学.docx_第6页
第6页 / 共25页
软件课程设计报告北京科技大学.docx_第7页
第7页 / 共25页
软件课程设计报告北京科技大学.docx_第8页
第8页 / 共25页
软件课程设计报告北京科技大学.docx_第9页
第9页 / 共25页
软件课程设计报告北京科技大学.docx_第10页
第10页 / 共25页
软件课程设计报告北京科技大学.docx_第11页
第11页 / 共25页
软件课程设计报告北京科技大学.docx_第12页
第12页 / 共25页
软件课程设计报告北京科技大学.docx_第13页
第13页 / 共25页
软件课程设计报告北京科技大学.docx_第14页
第14页 / 共25页
软件课程设计报告北京科技大学.docx_第15页
第15页 / 共25页
软件课程设计报告北京科技大学.docx_第16页
第16页 / 共25页
软件课程设计报告北京科技大学.docx_第17页
第17页 / 共25页
软件课程设计报告北京科技大学.docx_第18页
第18页 / 共25页
软件课程设计报告北京科技大学.docx_第19页
第19页 / 共25页
软件课程设计报告北京科技大学.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

软件课程设计报告北京科技大学.docx

《软件课程设计报告北京科技大学.docx》由会员分享,可在线阅读,更多相关《软件课程设计报告北京科技大学.docx(25页珍藏版)》请在冰点文库上搜索。

软件课程设计报告北京科技大学.docx

软件课程设计报告北京科技大学

北京科技大学

课程设计(软件设计)

报告

班级:

姓名:

学号:

指导教师:

日期:

年月日

 

1设计内容

OPC(OLEforProcessControl)又称为过程控制的对象连接与嵌入技术。

它是它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。

在过去,为了存取现场设备的数据信息,每一个应用软件开发商都需要编写专用的接口函数。

由于现场设备的种类繁多,且产品的不断升级,往往给用户和软件开发商带来了巨大的工作负担。

通常这样也不能满足工作的实际需要,系统集成商和开发商急切需要一种具有高效性、可靠性、开放性、可互操作性的即插即用的设备驱动程序。

在这种情况下,OPC标准应运而生。

OPC标准以微软公司的OLE技术为基础,它的制定是通过提供一套标准的OLE/COM接口完成的,在OPC技术中使用的是OLE2技术,OLE标准允许多台微机之间交换文档、图形等对象。

OPC的出现大大缩短了软件开发的时间。

本次课程设计就是要求使用VB设计一个简单的客户端程序,这个程序能读取本机服务器上面的数据,并以直观的柱形图显示出来。

另外,还应该添加一些别的功能。

2应用程序总体分析与设计

为了能连接服务器,首先在PC机运行模拟的服务器。

然后,在VB6.0环境下,创建各种用于显示数据和控制的控件。

给每一个控件添加事件响应函数。

程序运行的流程如下:

3应用程序各功能模块分析与设计

3.1连接服务器

首先使用new关键字创建一个OPC对象,然后调用Connect方法连接到服务器。

然后书写连接按钮的响应函数。

PrivateSubBtnConnnect_Click()

'调用Connect子程序

CallConnect("OPCJ.SampleServer.1")

EndSub

SubConnect(strProgIDAsString,OptionalstrNodeAsString)

IfobjServerIsNothingThen

'建立一个OPC服务器对象

SetobjServer=NewOPCServer

EndIf

IfobjServer.ServerState=OPCDisconnectedThen

'连接OPC服务器

objServer.ConnectstrProgID,strNode

EndIf

IfobjGroupsIsNothingThen

'建立一个OPC组集合

SetobjGroups=objServer.OPCGroups

EndIf

IfobjTestGrpIsNothingThen

'添加一个OPC组

SetobjTestGrp=objGroups.Add("TestGrp")

EndIf

EndSub

3.2加项

对OPC服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。

这里添加OPC标签的标识符和数目是固定的,但是实际的OPC应用程序往往要按照用户的指定或读取组态文件取得和处理需要添加OPC标签。

SubAddItem()

DimstrItemIDs

(2)AsString

DimlClientHandles

(2)AsLong

DimlErrors()AsLong

DimIAsInteger

IfobjTestGrpIsNothingThen

ExitSub

EndIf

IfNotobjItemsIsNothingThen

IfobjItems.Count>0Then

ExitSub

EndIf

EndIf

'设置组活动状态

objTestGrp.IsActive=True

'取消组非同期通知

objTestGrp.IsSubscribed=False

'建立OPC项集合

SetobjItems=objTestGrp.OPCItems

'生成标签的项标识符

strItemIDs

(1)="反应罐温度.Value"

strItemIDs

(2)="反应罐液位.Value"

lClientHandles

(1)=1

lClientHandles

(2)=2

'添加OPC项

CallobjItems.AddItems(2,strItemIDs,_

lClientHandles,lServerHandles,lErrors)

EndSub

PrivateSubbtnAddItem_Click()

'调用AddItem子程序

CallAddItem

IfNotobjTestGrpIsNothingThen

IfobjTestGrp.OPCItems.Count>0Then

'启动定时器

TmUpdate.Enabled=True

Else

EndIf

EndIf

EndSub

3.3读取数据

为了实时显示数据,还要设置一个定时中断类型的服务函数,然后没间隔一段时间去向服务器读取一下数据。

定时器会在加载项的时候启动。

PrivateSubtmUpdate_Timer()

DimvtItemValues()AsVariant

DimlErrors()AsLong

DimstrBufAsString

DimnWidthAsInteger

DimnHeightAsInteger

DimnDrawHeightAsInteger

DimsglScaleAsSingle

DimIAsInteger

'同期读取

SyncReadOPCCache,vtItemValues,lErrors

'棒图的表示

ForI=1To4

'数据的格式化

IfPauseFlag(I)=0Then

strBuf=Format(vtItemValues(I),"###.000")

'表示数据字符串

lbBar(I).Caption=strBuf

'计算棒的宽和高

nWidth=PicBar(I).ScaleWidth

nHeight=PicBar(I).ScaleHeight

sglScale=vtItemValues(I)/100

nDrawHeight=CInt(nHeight*sglScale)

'清除现棒图

PicBar(I).Cls

'绘制棒图

'IfvtItemValues(I)<20OrvtItemValues(I)>90Then

'PicBar(I).Line(0,nHeight-nDrawHeight)-(nWidth,nHeight),RGB(255,0,0),BF

'Else

'PicBar(I).Line(0,nHeight-nDrawHeight)-(nWidth,nHeight),RGB(0,255,0),BF

'EndIf

PicBar(I).Line(0,nHeight-nDrawHeight)-(nWidth,nHeight),RGB(vtItemValues(I)*2.55,255-vtItemValues(I)*2.55,0),BF

EndIf

Next

IfFileFlag=1Then

Print#FileNo,Date;Time,Str(vtItemValues

(1)),Str(vtItemValues

(1)),Str(vtItemValues

(1)),Str(vtItemValues

(1))

EndIf

EndSub

3.4显示与隐藏

为了方便显示与隐藏其中某些项,这里给一个柱形图配置一个复选框,当复选框选中的时候,该项目便隐藏起来。

取消复选框,该项目又会显示出来。

这样子的功能对于只需要观察某些数据的时候,很是方便。

具体实现方式如下:

PrivateSubCheck1_Click()

IfCheck1.Value=1Then

PicBar

(1).Visible=False

lbBar

(1).Visible=False

Label1.Visible=False

Else

PicBar

(1).Visible=True

lbBar

(1).Visible=True

Label1.Visible=True

EndIf

EndSub

PrivateSubCheck2_Click()

IfCheck2.Value=1Then

PicBar

(2).Visible=False

lbBar

(2).Visible=False

Label2.Visible=False

Else

PicBar

(2).Visible=True

lbBar

(2).Visible=True

Label2.Visible=True

EndIf

EndSub

PrivateSubCheck3_Click()

IfCheck3.Value=1Then

PicBar(3).Visible=False

lbBar(3).Visible=False

Label3.Visible=False

Else

PicBar(3).Visible=True

lbBar(3).Visible=True

Label3.Visible=True

EndIf

EndSub

PrivateSubCheck4_Click()

IfCheck4.Value=1Then

PicBar(4).Visible=False

lbBar(4).Visible=False

Label4.Visible=False

Else

PicBar(4).Visible=True

lbBar(4).Visible=True

Label4.Visible=True

EndIf

EndSub

3.5暂停与继续

在实际生产环境中,遇到一些特殊情况需要暂停以观察数据,以防止被后面新的数据刷新。

所以四个柱形图又都配置了一个暂停复选框,当复选框选中的时候,柱形图暂停更新,当取消复选框,柱形图继续更新。

实现代码如下:

PrivateSubCheck5_Click()

IfCheck5.Value=1Then

PauseFlag(4)=1

Else

PauseFlag(4)=0

EndIf

EndSub

PrivateSubCheck6_Click()

IfCheck6.Value=1Then

PauseFlag

(1)=1

Else

PauseFlag

(1)=0

EndIf

EndSub

PrivateSubCheck7_Click()

IfCheck7.Value=1Then

PauseFlag

(2)=1

Else

PauseFlag

(2)=0

EndIf

EndSub

PrivateSubCheck8_Click()

IfCheck8.Value=1Then

PauseFlag(3)=1

Else

PauseFlag(3)=0

EndIf

EndSub

其中的PauseFlag是个全局变量用于指示该柱形图的数据是不是暂停了,如果是,在程序刷新的过程中则不对其刷新。

3.6报表与记录

工业生产中,保留历史数据是必须的。

为了分析一些特殊情况下的原因,必须要知道相关的数据,所以保留历史数据是很重要的部分。

数据量大的时候可以使用数据库,但是小数据量可以使用文件保存数据的方式。

这里,使用文件的方式记录读取的数据。

PrivateSubCheck9_Click()

FileFlag=Check9.Value

IfFileFlag=1Then

FileNo=FreeFile()

Open"C:

\Users\Cheng\Desktop\shunjun\"&Str(Year(Now))&"年"&Str(Month(Now))&"月"&Str(Day(Now))&"日.txt"ForAppendAsFileNo

Else

CloseFileNo

EndIf

EndSub

当保存文件复选框选中的时候,打开今天所对应的文件,当取消选中的时候,关闭打开的文件。

如果文件打开,相应的变量的状态会更改以指示当前需要向文件中写入数据,所以定时中断的时候,会向文件中写入数据。

IfFileFlag=1Then

Print#FileNo,Date;Time,Str(vtItemValues

(1)),Str(vtItemValues

(1)),Str(vtItemValues

(1)),Str(vtItemValues

(1))

EndIf

4程序测试

4.1测试过程

软件的测试主要包含连接测试,显示与隐藏测试,暂停测试和数据记录测试。

4.1.1连接测试

打开程序,点击运行。

然后分别点击连接和加项按钮。

图4-1连接测试

4.1.2显示与隐藏测试

在程序运行状态下,选中隐藏复选框。

图4-2显示与隐藏

4.1.3暂停按钮

取消所有隐藏复选框,然后选中部分暂停按钮。

如下图所示

图4-3暂停

4.1.4数据保存

选中保存数据复选框,记录当前时间,过30秒取消选中。

图4-4保存数据

4.2测试结果

4.2.1连接结果

为了更方便的显示结果,显示的颜色会随着数据的变化而变化,数据越接近于100柱形图的颜色就越接近于红色。

数据越接近于0,柱形图颜色越接近于绿色。

图4-5数据显示测试

4.2.2显示与隐藏结果

勾选前两个隐藏复选框后,发现相关的内容隐藏了。

图4-6显示与隐藏

4.2.3暂停显示

勾选暂停显示后,相应的柱形图不再同旁边的数据一起刷新了。

图4-7暂停显示

4.2.4数据保存结果

当勾选保存数据复选框后,数据便被写入当天的文本文件。

下图中左边一列记录的日期和时间,右边记录的是四个变量的数据。

图4-8数据保存

5程序文档

5.1使用说明

双击shunjun文件夹中的“工程1.exe”,程序开始执行。

连接->加项,数据就能正常显示了。

隐藏,暂停和保存数据复选框分别控制的是隐藏柱形图,柱形图暂停更新和保存文件。

5.2程序说明

OptionBase1

OptionExplicit

'建立OPC对象-声明变量

DimWithEventsobjServerAsOPCServer

DimobjGroupsAsOPCGroups

DimWithEventsobjTestGrpAsOPCGroup

DimobjItemsAsOPCItems

DimlServerHandles()AsLong

DimPauseFlag(1To4)AsInteger

DimFileFlagAsInteger

DimFileNo

PrivateSubBtnConnnect_Click()

'调用Connect子程序

CallConnect("OPCJ.SampleServer.1")

EndSub

PrivateSubbtnAddItem_Click()

'调用AddItem子程序

CallAddItem

IfNotobjTestGrpIsNothingThen

IfobjTestGrp.OPCItems.Count>0Then

'启动定时器

TmUpdate.Enabled=True

Else

EndIf

EndIf

EndSub

PrivateSubbtnQuit_Click()

'卸载窗体

UnloadFmMain

EndSub

PrivateSubCheck1_Click()

IfCheck1.Value=1Then

PicBar

(1).Visible=False

lbBar

(1).Visible=False

Label1.Visible=False

Else

PicBar

(1).Visible=True

lbBar

(1).Visible=True

Label1.Visible=True

EndIf

EndSub

PrivateSubCheck2_Click()

IfCheck2.Value=1Then

PicBar

(2).Visible=False

lbBar

(2).Visible=False

Label2.Visible=False

Else

PicBar

(2).Visible=True

lbBar

(2).Visible=True

Label2.Visible=True

EndIf

EndSub

PrivateSubCheck3_Click()

IfCheck3.Value=1Then

PicBar(3).Visible=False

lbBar(3).Visible=False

Label3.Visible=False

Else

PicBar(3).Visible=True

lbBar(3).Visible=True

Label3.Visible=True

EndIf

EndSub

PrivateSubCheck4_Click()

IfCheck4.Value=1Then

PicBar(4).Visible=False

lbBar(4).Visible=False

Label4.Visible=False

Else

PicBar(4).Visible=True

lbBar(4).Visible=True

Label4.Visible=True

EndIf

EndSub

PrivateSubCheck5_Click()

IfCheck5.Value=1Then

PauseFlag(4)=1

Else

PauseFlag(4)=0

EndIf

EndSub

PrivateSubCheck6_Click()

IfCheck6.Value=1Then

PauseFlag

(1)=1

Else

PauseFlag

(1)=0

EndIf

EndSub

PrivateSubCheck7_Click()

IfCheck7.Value=1Then

PauseFlag

(2)=1

Else

PauseFlag

(2)=0

EndIf

EndSub

PrivateSubCheck8_Click()

IfCheck8.Value=1Then

PauseFlag(3)=1

Else

PauseFlag(3)=0

EndIf

EndSub

PrivateSubCheck9_Click()

FileFlag=Check9.Value

IfFileFlag=1Then

FileNo=FreeFile()

Open"C:

\Users\Cheng\Desktop\shunjun\"&Str(Year(Now))&"年"&Str(Month(Now))&"月"&Str(Day(Now))&"日.txt"ForAppendAsFileNo

Else

CloseFileNo

EndIf

EndSub

PrivateSubForm_Load()

TmUpdate.Enabled=False

TmUpdate.Interval=1000

EndSub

SubConnect(strProgIDAsString,OptionalstrNodeAsString)

IfobjServerIsNothingThen

'建立一个OPC服务器对象

SetobjServer=NewOPCServer

EndIf

IfobjServer.ServerState=OPCDisconnectedThen

'连接OPC服务器

objServer.ConnectstrProgID,strNode

EndIf

IfobjGroupsIsNothingThen

'建立一个OPC组集合

SetobjGroups=objServer.OPCGroups

EndIf

IfobjTestGrpIsNothingThen

'添加一个OPC组

SetobjTestGrp=objGroups.Add("TestGrp")

EndIf

EndSub

SubAddItem()

DimstrItemIDs(4)AsString

DimlClientHandles(4)AsLong

DimlErrors()AsLong

DimIAsInteger

IfobjTestGrpIsNothingThen

ExitSub

EndIf

IfNotobjItemsIsNothingThen

IfobjItems.Count>0Then

ExitSub

EndIf

EndIf

'设置组活动状态

objTestGrp.IsActive=True

'取消组非同期通知

objTestGrp.IsSubscribed=False

'建立OPC项集合

SetobjItems=objTestGrp.OPCItems

'生成标签的项标识符

strItemIDs(4)="TAG4"

strItemIDs

(1)="TAG1"

strItemIDs

(2)="TAG2"

strItemIDs(3)="TAG3"

lClientHandles(4)=4

lClient

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2