基于OPC软件设计北京科技大学

合集下载

基于OPC技术的远程监控系统应用研究的开题报告

基于OPC技术的远程监控系统应用研究的开题报告

基于OPC技术的远程监控系统应用研究的开题报告一、选题背景和意义近年来,随着工业自动化水平的不断提高和互联网技术的快速发展,基于OPC技术的远程监控系统在工业控制、智能制造等领域得到了广泛应用。

OPC技术是一种开放的数据通信协议,它可以实现不同设备、不同厂家的数据交换和通信,简化了设备之间的集成难度,提高了互操作性,降低了设备集成和维护成本,从而增强了系统的可靠性和稳定性。

基于OPC技术的远程监控系统具有以下优点:1. 可以实现实时监测和远程控制,提高了生产过程的可控性和自动化水平;2. 可以快速获取和处理大量的数据和信号,实现全面的数据分析和优化;3. 可以实现分布式和分级管理,增强了系统的可维护性和可扩展性。

因此,研究基于OPC技术的远程监控系统在自动化生产中的应用,对于提高生产效率、降低管理成本、优化生产过程、保障生产安全等方面具有重要意义。

二、研究目的本文旨在研究基于OPC技术的远程监控系统在自动化生产中的应用,探讨其实现原理、技术特点、应用场景和研究现状,结合实际工程案例,构建一个完整的远程监控系统,实现对生产过程的实时监控和控制,为工业自动化和智能制造领域的发展提供有益的参考和借鉴。

三、研究内容和步骤本文的研究内容主要包括以下几个方面:1. OPC技术概述:介绍OPC技术的基本概念、结构、分类、应用领域等,了解OPC技术的优势和局限性。

2. 远程监控系统设计:通过对系统的需求分析和数据采集,确定系统的架构设计、功能模块划分、数据通信协议等,为后续的开发和实现奠定基础。

3. 系统实现和测试:根据系统设计的要求,利用C#语言和OPC技术,编写相应的程序代码和接口协议,实现远程监控系统的各个功能模块,经过实验测试和实际运行,验证系统的性能和稳定性。

4. 应用案例分析:以某企业的生产管理系统为例,利用所研发的远程监控系统进行生产数据采集、分析和控制,并对系统的效果和经济效益进行评估。

研究步骤如下:1. 文献调研和资料收集。

基于 OPC的 Matlab与 S7-200 PLC实时通信在过程控制实验装置中应用

基于 OPC的 Matlab与 S7-200 PLC实时通信在过程控制实验装置中应用

基于 OPC的 Matlab与 S7-200 PLC实时通信在过程控制实验装置中应用陈宏希;邹益民【摘要】Experimental teaching is essential key to modern education activities .In this paper , the application plan of real-time communication of Matlab with S 7-200 PLC based on OPC technology in A3000 process control experiment device was proposed .The single neuron PID control scheme was real-ized by Matlab using S7-200 PLC as OPC server and Matlab as OPC client.The single neuron PID control had the capacity of self-learning and adaptive , thus to a certain extent , solved the difficult of traditional PID controller tuning parameters in real time and improved the adaptability of the system to environmental changes .This program made Matlab simulation was no longer confined to traditional offline computing and pure digital simulation , and easy to implement advanced algorithms in real systems .%实验教学是现代教育教学活动必不可少的关键环节。

基于 OPC 技术分析建筑智能化系统集成

基于 OPC 技术分析建筑智能化系统集成

基于 OPC 技术分析建筑智能化系统集成摘要:伴随技术进展,建筑特有的智能化水准被不断提升。

这种状态下,建筑融汇了居住性能、美观特性,含有多样空间。

智能化架构下的集成建筑,整合了高层级的舒适及安全性,有着交互特性,整合多重节点。

为了适应需求,应着力增添建筑架构内的智能要素[1]。

本文探析了OPC特有的技术路径,这类新颖技术架构内的集成体系,提升了互联特性,可以互动操作。

关键词:OPC技术;建筑智能化;集成系统智能化特有的新颖建筑体系,集成了原有的分散设备,融汇各类信息。

依托微机网络,建筑细分出来的多重空间都被涵盖在完备的体系内。

依照这种思路,供应了便捷及高效的、舒适安全的新颖空间。

智能化范畴的集成体系,历经传统路径下的集散调控,进展至现有的总线管控。

然而,各类厂商制备出来的多样配件,存在拟定的接口差异。

这就缩减了彼此关联着的子系统性能,影响彼此互联。

为此,有必要探析新颖的集成体系,采纳OPC这一技术新思路,建构集成模型。

1 解析集成模式1.1 中心集成框架BAS特有的集成体系,包含中心形式。

它紧密关联着安全管控、建筑火情警报,串联各类体系。

它增添了平日内的信息互通,联动控制模块,监管着FAS及体系内的SAS。

BAS设定了体系内的监控中心,以便联动微机。

这种途径优势,是运用特有的网关转化来衔接彼此的子系统。

然而,它也含有弊病:若BAS建构的中心凸显了故障,那么关联着的其他分支,都会失去控制。

工程建造中,中心系统特有的总构架还是偏复杂的。

子系统拓展出来的互联分支,关系着网络拓扑平常的稳定特性。

此外,体系开放状态也应被考量。

例如:布设的开放接口,是否可支撑OPC;是否配有明晰的协议[2]。

考量这些要素,这类模式很难采纳固定的架构来描绘。

结合真实状态,才可确认适宜的拓扑框架。

1.2 平等集成框架集成体系衔接着多层级的子系统,它们彼此平等,同时彼此独立。

某一分支停机,不会干扰其他。

采纳开放接口,把存留着的实时数据变更为拟定好的某一格式,然后再次存留于数据库。

一类基于OPC的工业控制系统的研究的开题报告

一类基于OPC的工业控制系统的研究的开题报告

一类基于OPC的工业控制系统的研究的开题报告
标题:基于OPC的工业控制系统研究
1. 研究背景和目的
随着信息技术的发展,工业控制系统不再是封闭的传统系统,而是逐渐向着基于网络
和计算机的智能化、开放式的方向发展。

在此背景下,OPC(OLE for Process Control)作为一种通信协议成为了工业控制系统中重要的组成部分。

本研究旨在探究基于OPC
的工业控制系统的设计与实现,为优化工业控制系统提供科学依据。

2. 研究内容和方法
本研究将运用文献调研和实际案例分析相结合的方法,围绕基于OPC的工业控制系统的设计与实现进行详细研究。

具体内容包括:
(1)OPC协议的概述及其在工业控制系统中的应用。

(2)基于OPC的工业控制系统的架构设计,包括客户端、服务器、通信协议等方面
的设计。

(3)基于OPC的工业控制系统的实现,包括系统软件和硬件的实现。

(4)基于实际案例验证系统设计的有效性和可行性。

3. 预期研究成果和意义
通过本研究,我们预期将得到以下成果:
(1)建立基于OPC的工业控制系统的设计与实现方法。

(2)探究基于OPC的工业控制系统的优缺点,并提出改进方法。

(3)通过实际案例验证系统的有效性和可行性。

本研究对于提高工业控制系统的可靠性、安全性、灵活性和智能化水平具有重要的现
实意义和应用价值。

基于OPC技术的先进控制半实物实训平台设计

基于OPC技术的先进控制半实物实训平台设计

基于 OPC 技术的先进控制半实物实训平台设计
阎 群 1,2,李 擎 1,2,李希胜 1,2,崔家瑞 1,栗 辉 1
(1. 北京科技大学 自动化学院,北京 100083; 2. 北京科技大学 北京市工业波谱成像工程技术研究中心,北京 100083)
摘 要:基于 CDIO 实验室现有自动化生产线实训平台,利用 OPC 通信构建了先进控制半实物实训平台,
充分发挥了组态王在界面设计和 MATLAB 在算法设计与仿真方面的优势,实现了控制器和监控系统之间的
数据交பைடு நூலகம்,降低了先进控制策略应用于实物实训装置的复杂性。以水平双容水箱液位单神经元 PID 控制项目
为例,详细介绍了整个实训平台的实训过程。实际教学效果表明,该先进控制半实物实训平台方案合理,运
行稳定,有效拓展了原有自动化生产线实训平台的应用范围,激发了学生实训的兴趣。同时,该平台有利于
YAN Qun1,2, LI Qing1,2, LI Xisheng1,2, CUI Jiarui1, LI Hui1
(1. School of Automation and Electrical Engineering, University of Science and Technology Beijing, Beijing 100083, China; 2. Beijing Engineering Research Center of Industrial Spectrum Imaging, University of Science and Technology Beijing, Beijing 100083, China)
Abstract: Based on the existing automation production line training platform of CDIO laboratory, the advanced control hardware-in-the-loop training platform is constructed by using OPC communication. The platform makes full use of the advantages of King view in interface design and MATLAB in algorithm design and simulation, realizes the data exchange between the controller and the monitoring system, and reduces the complexity of the advanced control strategy applied to the physical training device. By taking the single neuron PID control project of horizontal double tank as an example, the training process of the whole training platform is introduced in details. The actual teaching results show that the advanced control hardware-in-the-loop training platform is reasonable and stable. It effectively expands the application scope of the original automatic production line training platform and stimulates students’ interest in practical training. At the same time, the platform is beneficial for students to concentrate more on the theoretical and practical research of the advanced control algorithm and enhance the purpose of training. Key words: OPC; MATLAB; king view; advanced control; training platform

北京科技大学软件课程设计报告-自动化专业

北京科技大学软件课程设计报告-自动化专业

北京科技大教之阳早格格创做课程安排(硬件安排)报告班级:姓名:教号:共组共教:指挥西席:曾慧日期: 2014 年 11 月 13 日目录1安排真质通过本质支配进一步相识OPC的百般观念,掌握OPC客户端的编写要领.并对于微硬的DCOM有一定的相识,央供通过符合的DCOM摆设,使客户端不妨读与搜集上服务器中的数据.1)利用VB谈话编写出一个简朴的OPC客户端步调,央供那个客户端不妨读与服务器中的数据,并隐现出去.2)摆设DCOM,使客户端不妨能过DCOM读与另一台服务器上的数据.2应用步调总体分解与安排应用步调与OPC服务器举止连交并读与服务器端的数据,共时把读与到的数据通过棒柱战文本框隐现,并不妨保存数据便于查找,共时应用了Picture控件对于真时数据变更趋势分解.修坐一个Visual Basic工程1)开用Visual Basic,新修一个Visual Basic工程.采用[Standard EXE]动做新修工程的典型.图 Visual Basic 工程的修坐2.2 OPC修坐对于OPC包拆DLL举止备案:从Visual Basic菜单里采用[Project]-[References].正在[Available References]表示中,采用 [OPC Automation 2.0].图2.2 引用的树坐正在Visual Basic里,是以对于象的单位对于OPC服务器举止考察.OPC自动化交心是由以下四种对于象所定义.OPC服务器OPC组(OPC组集中)OPC标签(OPC标签集中)OPC欣赏器1)变量声明图2.3 OPC对于象变量的声明其中,部分变量声明意思睹表所示.变量名证明objServer OPCServer对于象,用于连交OPC服务器.objGroups OPCGroups对于象,用于增加OPC组的OPC组集中objTestGrp OPCGroup对于象,演示用的OPC组.objItems OPCItems对于象,用于增加OPC标签的OPC标签集中. lServerHandles() 少整型的数组,用于保存OPC标签的服务器句柄.3应用步调各功能模块分解与安排窗体中所使用的控件种类如表3.1所示.控件称呼窗体(Form) FmMain 下令按钮(CommandButton) BtnConnect下令按钮(CommandButton) BtnAddItem下令按钮(CommandButton) BtnQuit下令按钮(CommandButton) BtnSave下令按钮(CommandButton) BtnStop下令按钮(CommandButton) Btndraw定时器(Timer) tmUpdate定时器(Timer) dataUpdate 对于话框(CommonDialog) CommonDialog1图像(PictureBox) picBar(动做数组使用,从左开初1~2) 标签(Label) lbBar(动做数组使用.从左开如1~2) 文本框(TextBox) dataInfo图像(Picture) Picture1那里用“NEW”闭键词汇死成OPC服务器的对于象,而后调用OPC服务器对于象的“Connect”要领,战OPC服务器连交.Connect子步调如下:'连交OPC服务器战修坐OPC组Sub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 修坐一个OPC服务器对于象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 连交OPC服务器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then' 修坐一个OPC组集中End IfIf objTestGrp Is Nothing Then' 增加一个OPC组Set objTestGrp = objGroups.Add("TestGrp")End IfEnd Sub增加OPC标签对于OPC服务器举止考察前,必须先正在OPC组里增加要考察的OPC标签.AddItem子步调如下:‘增加OPC标签Sub AddItem()Dim strItemIDs(8) As StringDim lClientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If' 树坐组活动状态objTestGrp.IsActive = True' 与消组非共期报告objTestGrp.IsSubscribed = False' 修坐OPC项集中' 死成标签的项标记符For I = 1 To 2strItemIDs(I) = "TAG"lClientHandles(I) = INext' 增加OPC项Call objItems.AddItems(8, strItemIDs, _lClientHandles, lServerHandles, lErrors)End Sub断开服务器连交着OPC服务器的OPC应用步调,正在退出前必须断开战OPC服务器的连交.果为OPC服务器本去不知讲OPC应用步调的退出,如果不先断开连交,那么OPC服务器使用的估计机资材便不被释搁.如果那样的问题反复爆收,暂而暂之,连绝运止的自动统造系统大概会使估计机资材徐徐枯竭进而爆收宽沉问题.Disconnect子步调如下:'断开OPC服务器Sub Disconnect()Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 扫除OPC项objItems.Remove 2, lServerHandles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 扫除OPC组objGroups.Remove "TestGrp"Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then' 断开OPC服务器.End IfSet objServer = NothingEnd IfEnd Sub客户端使用2个定时器TmUpdate战dataUpdate,定时为1S.正在TmUpdate事变中调用共步读与数据函数SyncRead,每隔1S读与服务器端的数据,共时对于棒柱的隐现举止刷新.正在定时器dataUpdate事变中读与系统时间本去不竭刷新TextBox的真质,隐现目前的时间战数据.为了是隐现越收人情化,对于分歧范畴的数值隐现采与了分歧的颜色.当数值过矮大概者过下时分别隐现深蓝色战白色以示告诫.中间值隐现绿色战橙黄色.步调代码如下所示:SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的要领化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBufdataTemp(I) = strBuf' 估计棒的宽战下nWidth = picBar(I).ScaleWidthnHeight = picBar(I).ScaleHeightsglScale = vtItemValues(I) / 100nDrawHeight = CInt(nHeight * sglScale)' 扫除现棒图picBar(I).Cls' 画造棒图If vtItemValues(I) < tHoldValue1 ThenpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(0, 0, 255), BFElseIf vtItemValues(I) < tHoldValue2 ThenpicBar(I).Line (0, nHeight - tHoldValue1 / 100 * nHeight)-(nWidth, nHeight), RGB(0, 225, 0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue1 / 100) * nHeight), RGB(225, 225, 0), BFElsepicBar(I).Line (0, nHeight - tHoldValue1 / 100 * nHeight)-(nWidth, nHeight), RGB(0, 225, 0), BFpicBar(I).Line (0, nHeight - tHoldValue2 / 100 * nHeight)-(nWidth, (1 - tHoldValue1 / 100) * nHeight), RGB(225, 225, 0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue2 / 100) * nHeight), RGB(255, 0, 0), BFEnd IfEnd IfIf I = 1 Theny(num1) = vtItemValues(I)num1 = num1 + 1Elsez(num2) = vtItemValues(I)num2 = num2 + 1End IfNextEnd Sub步调代码如下:Private Sub dataUpdate_Timer()If SaveFlag Then '保存数据中断后扫除本去的数据dataInfo.Text = Year(Now()) & Month(Now()) & Day(Now()) & " " & Hour(Now()) & ":" & Minute(Now()) & ":" & Second(Now()) & " " & "反应罐温度:" & dataTemp(1) & " " & "反应罐液位:" & dataTemp(2) & Chr(13) & Chr(10)SaveFlag = FalseElsedataInfo.Text = dataInfo.Text & Year(Now()) & Month(Now()) & Day(Now()) & " " & Hour(Now()) & ":" & Minute(Now()) & ":" & Second(Now()) & " " & "反应罐温度:" & dataTemp(1) & " " & "反应罐液位:" & dataTemp(2) & Chr(13) & Chr(10)End IfEnd Sub此处定义bool型的SaveFlag为保存标记,正在保存时停止对于新的数据的交支.主要用到CommonDialog控件.该控件可用于创修“文献挨开”、“文献保存”、“文献挨印”、“颜色树坐”、“字体树坐”、“助闲”6种对于话框.步调代码如下所示:Private Sub BtnSave_Click()TmUpdate.Enabled = FalsedataUpdate.Enabled = FalseCommonDialog1.DialogTitle = "另存为"CommonDialog1.DefaultExt = "txt"If Len(CommonDialog1.FileName) > 0 ThenOpen CommonDialog1.FileName For Output As #1Close #1SaveFlag = TrueEnd IfEnd SubPicture是功能强盛坐标图画造硬件,本次安排中采与VB中Picture控件举止真时直线画造.正在安排时增加2个系列直线,代表二个通讲,即温度战液位与时间的闭系.并正在图中画出二条警戒线,能更直瞅天比对于数据的变更.部分步调代码如下所示:If Check1.Value = 0 ThenIf col < 201 ThenFor u = 1 To 2For j = col To colX = jY = vtItemValues(u)px(j, u) = Xpy(j, u) = YNext jNext ucol = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtItemValues(s)Next sEnd IfElsecol = colEnd IfIf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py(1, w))For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w)), QBColor(w * 2)Next jNext wEnd If'画二条警戒线Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue' 指示警戒值,警戒值以上改变隐现颜色If lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 ThenLabel7.Caption = "出现非常十分!"ElseLabel7.Caption = "正正在瞅测!"End IfIf lbBar(1).Caption > 150 ThenText2.Text = "温度过下!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 150 ThenText2.Text = "温度稳固!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text = "液里过下!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BF4步调尝试运止步调后,先单打“连交”按钮,包管客户端连交上组态王数据库.而后单打“加载”按钮,瞅察数据时间仄常隐现,棒柱的数据战颜色是可仄常,文本框内的时间战数据是可仄常以及瞅是可能真时隐现直线.单打“保存数据”按钮,弹出对于话框,采用路径,挖写文献名后保存数据.末尾单打“退出”按钮,瞅成可仄常退出步调.运止步调,注意将bin文献夹搁到工程下.从尝试截止上瞅,所有步调不bug,各个功能仄常.从画图的截止不妨瞅出从服务器传去的数据是按正弦顺序变更的.图4.2步调尝试图二5步调文档(1)运止步调,连交乐成后,开用,此时棒状图以及文本框内便会隐现反应罐温度战反应罐液位的值.(2)当数据聚集到一定程度之后,面打“画图”按钮,应罐温度战反应罐液位数值变更直线便会隐现出去,每面打一次,便会刷新一次.进而真止了数据的真时隐现.步调中数据刷新为1s,果此正在面打“画图”按钮时频次最佳不要超出1s.(3)保存数据.面打“保存”按钮,会弹出对于话框,输进赞同的文献名保存即可.保存数据后,所有履历数据会被浑空.浑单Option Base 1Option ExplicitDim WithEvents objServer As OPCServerDim objGroups As OPCGroupsDim objTestGrp As OPCGroupDim objItems As OPCItemsDim lServerHandles() As LongDim px(200, 2) As Single, py(200, 2) As SingleDim col As IntegerDim pl As IntegerDim dataTemp(2) As StringDim DrawFlag As BooleanDim SaveFlag As BooleanSub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 修坐一个OPC服务器对于象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 连交OPC服务器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then' 修坐一个OPC组集中End IfIf objTestGrp Is Nothing Then' 增加一个OPC组Set objTestGrp = objGroups.Add("TestGrp")End IfEnd SubSub AddItem()Dim strItemIDs(2) As StringDim lClientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If' 树坐组活动状态objTestGrp.IsActive = True' 与消组非共期报告objTestGrp.IsSubscribed = False' 修坐OPC项集中' 死成标签的项标记符strItemIDs(1) = "反应罐温度.Value"strItemIDs(2) = "反应罐液位.Value"lClientHandles(1) = 1lClientHandles(2) = 2' 增加OPC项Call objItems.AddItems(2, strItemIDs, _lClientHandles, lServerHandles, lErrors)End SubSub Disconnect()Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 扫除OPC项objItems.Remove 2, lServerHandles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 扫除OPC组objGroups.Remove "TestGrp"Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then ' 断开OPC服务器.End IfSet objServer = NothingEnd IfEnd SubPrivate Sub btnConnect_Click()' 调用Connect子步调Call Connect("kingview.view.1")Label7.Caption = "与服务器连交乐成!"End SubPrivate Sub btnAddItem_Click()' 调用AddItem子步调Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then' 开用定时器tmUpdate.Enabled = TruedataUpdate.Enabled = TrueElseEnd IfEnd IfPrivate Sub btnQuit_Click()' 卸载窗体Unload fmMainEnd SubPrivate Sub Form_Unload(Cancel As Integer)' 调用Disconnect子步调Call DisconnectEnd SubPrivate Sub tmUpdate_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim I As Integer, u As Integer, j As Integer, s As Integer, t As Integer, w As Integer Dim X As Single, Y As Single' 共期读与SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的要领化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBufdataTemp(I) = strBuf' 估计棒的宽战下nWidth = picBar(I).ScaleWidthnHeight = picBar(I).ScaleHeightsglScale = vtItemValues(I) / 700nDrawHeight = CInt(nHeight * sglScale)' 扫除现棒图picBar(I).Cls' 画造棒图picBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFNext'直线画造If Check1.Value = 0 ThenIf col < 201 ThenFor u = 1 To 2For j = col To colX = jY = vtItemValues(u)px(j, u) = Xpy(j, u) = YNext jNext ucol = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtItemValues(s)Next sEnd Ifcol = colEnd IfIf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py(1, w))For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w)), QBColor(w * 2)Next jNext wEnd If'画二条警戒线Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue' 指示警戒值,警戒值以上改变隐现颜色If lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 ThenLabel7.Caption = "出现非常十分!"ElseLabel7.Caption = "正正在瞅测!"End IfIf lbBar(1).Caption > 150 ThenText2.Text = "温度过下!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 150 ThenText2.Text = "温度稳固!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text = "液里过下!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption < 600 ThenText1.Text = "液里稳固!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfEnd SubSub SyncRead(nSource As Integer, ByRef vtItemValues() As Variant, _ ByRef lErrors() As Long)Dim lServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then' 共期读与objTestGrp.SyncRead nSource, 2, lServerHandles, _vtItemValues, lErrorsEnd IfEnd SubPrivate Sub Form_Load()tmUpdate.Enabled = FalsetmUpdate.Interval = 100dataUpdate.Enabled = FalsedataUpdate.Interval = 1000'初初化时间变量col = 1' 调用时间函数,隐现时间Call date1'初初化坐标范畴Picture1.Scale (0, 750)-(200, 0)End Sub'调用系统时间子函数Sub date1()Label3.Caption = Trim(Str(Year(Date))) + "年" + Trim(Str(Month(Date))) + "月" + Trim(Str(Day(Date))) + "日"Label4.Caption = "目前时间:" + Trim(Str(Hour(Time))) + "时" + Trim(Str(Minute(Time))) + "分" + Trim(Str(Second(Time))) + "秒"End Sub'保存数据事变处理Private Sub BtnSave_Click()tmUpdate.Enabled = False。

基于OPC技术的自动化软件的研究分析

基于OPC技术的自动化软件的研究分析

科技创新12产 城基于OPC技术的自动化软件的研究分析柳长春 王大方沈阳新松机器人自动化股份有限公司,辽宁沈阳110169摘要:随着信息技术水平的不断进步和自动化水平的不断发展,为了促进生产过程中自动化控制和信息应用之间的互操性,进而满足人们对现代企业生产中信息技术的要求,本文将通过分析研究OPC 技术,并结合为了自动化软件发展的方向,从而实现OPC信息的集成,进而提高企业的生产效率。

关键词:OPC技术原理;概念;体系;结构;设备数据1 OPC系统的技术原理OPC其能够为Windows的应用程序和现场过程控制应用之间建立起一座非常重要的桥梁。

OPC技术是我国企业控制中非常关键的技术,其对企业生产的有效开展提供了重要的技术支持。

之所以该技术在企业生产控制中应用广泛,是因为控制网上的PLC与DCS往往都是来自于不同的商家的,这些商家们之间的通讯是极为复杂的。

也正因为如此,想要在控制网中高效、可靠地获取那些重要的、需要的实时数据,就需要采用OPC通讯技术。

通过利用OPC技术,可以在过程控制方面有效使用对象连接以及嵌入技术,进而为控制系统提供了标准的数据访问。

通过利用OPC技术,可以有效实现控制网与管理网之间的互联,当两个网络形成一个整体时,就可以很好地保证上层应用软件和控制设备之间的数据通讯,这不但提高了控制质量,也提高了工作效率。

可以说,在遵守OPC规范的前提下,可以在任何时间有效获取工艺生产的过程数据,而这一程序是通过OPC接口来完成的。

2 OPC的一些基本概念、体系和结构OPC服务器由三类对象组成:服务器、组、数据项。

服务器对象拥有服务器的所有信息,同时也是组对象的容器。

组对象拥有本组的所有信息,同时包容并逻辑组织OPC数据项。

OPC组对象提供了客户组织数据的一种方法。

客户可对之进行读写,还可设置客户端的数据更新速率。

当服务器缓冲区内数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理,而无需浪费大量的时间进行查询。

基于OPC的服务机器人监控系统设计

基于OPC的服务机器人监控系统设计

中 圈分类号: P15 T3・ 1
基 于 O C 的服 务机 器人监控 系统设计 P
智少磊 ,夏筮强 ,张 炯
( 北京航空航天大学机械工程及 自动化学 院,北京 10 9 ) 0 11

要 : 出一种适 用于敬老院环境的助老助残服务机器人监控系统设 计方案。基于专为服务机 器人制定的助老助残服务机器人以太网协 提
C B A缺乏 Itre 编程 支持 ,难 以实现基于 Itre 的远 O R nent nent
是为不同数据源进 行通信 的工业标准 ,为不 同设备 间相互通
信提供标准统一接 口, 它是基于 Mioo 公 司的分布式 网络 c st r f
应用( i r ue ew r p l ain D ) D s i tdN t ok A pi t , NA 构架和组件对象 tb c o 模型( o o et bet d lC M) C mp nn jc Mo e O 技术 ,采用客户端/l O , , 务 i l 器 模 式 。 J O C规范以 O EDC M 为技术基础 , O ED O 支 P L/ O 而 L /C M
bo e r ws r
D :1.9 9 .s.0 03 2 . 1 . . 9 OI 03 6 /i n1 0 —4 82 21 0 js 0 47
1 概 述
随着我 国老龄化现象越来越严重 ,越来越 多的老人选择 在敬老 院生活 ,以减少儿女的负担。但 是多数老 人行动或 生
于 T PI C/ P协议 的数据传输格式 。根据此协议 和 O C规范 , P 本文提出一套服务机器人综合监控系统方案。
2 系统架构
21 E hr e/D P协议 . te nt AR S
活不便 ,需要护工进行照料 。因此 ,研究一 种适 用于敬老 院 环境的助老助残服务机器人有 了广 阔的发展前景 。为了方 j

基于OPC的安全生产指挥调度系统的设计与应用论文

基于OPC的安全生产指挥调度系统的设计与应用论文

基于OPC的安全生产指挥调度系统的设计与应用论文基于OPC的安全生产指挥调度系统的设计与应用论文1 OPC技术简介OPC(OLE for Process Control)是由自动化领域中主要厂商协作制定的软件接口标准。

OPC 技术提供了不同系统间通信的标准接口,实现了异构环境中控制网络数据的统一集成。

现代工业生产对控制系统的要求,已不再局限于一般的生产过程自动化,而是着眼于整个生产过程的最优化,随着 OPC 技术在现代工业控制领域的广泛应用,控制系统能够以统一的方式实现对各种自动化设备的访问与控制。

通过建立基于 OPC 技术管控一体化的生产控制系统,可以对生产过程的全局进行实时监控,完成统一的生产流程控制。

在对整个生产流程进行统一管控过程中,OPC服务器能记录生产现场各控制设备的实时数据、历史数据、报警与事件信息等。

通过搭建符合 OPC协议标准的客户端,建立工业自动化应用统一数据传输平台,支持分布式应用和异构环境下应用程序间软件的无缝集成和互操作性,使异构系统间数据交换更方便,实现生产数据与管理控制数据统一。

工业生产领域的 OPC 控制应用主要关注于控制项目设备本身的需要。

安全生产辅助相关的指挥调度系统属于独立的通信系统,并没有接入到统一的 OPC 管控平台中,也没有参与生产过程信息的交换和生产过程的跟踪与监控,在工业现场形成自动化的信息孤岛,因此启动安全生产指挥调度系统所需的控制指令需要进行人工触发,约束了自动化生产领域安全生产保障的进一步深化拓展和应用。

为了将工业生产领域的自动控制技术与安全生产指挥调度系统无缝地融合在一起,解决生产现场的自动化信息孤岛问题,减少人为干预自动生产控制流程现象,保证安全生产指挥调度系统能准确实时响应工业生产的自动控制流程指令,提出一种基于 OPC 的安全生产指挥调度系统及其通信控制方法。

2 技术方案原理说明2.1 技术方案原理基于 OPC 通信的安全生产指挥调度系统包括:控制系统服务器、音频矩阵切换器、音频接口卡、调度系统交换机及调度通信终端、功放及扬声器设备。

基于OPC技术的PLC全虚拟仿真系统设计

基于OPC技术的PLC全虚拟仿真系统设计

PLC 是一种数字化运算操作的电子系统,专为工控环境下的应用而设计,它的出现弥补了继电器控制系统由于体积大、可靠性低、故障检修困难而造成的缺陷[1]。

由于涉及到系统外部接线的问题,PLC 硬件调试的过程比较麻烦,因此PLC 控制及监控的虚拟仿真得到了较多的关注。

1全虚拟仿真系统的构成全虚拟仿真系统由三菱编程软件GX Developer (包含GX_Simulator 仿真软件)进行下位机程序的编写,用三菱OPC 服务软件MX OPC Server 作为PLC 与组态软件的通信连接,通过通用版组态软件MCGS 完成上位机监控界面的编写,从而构成完整的虚拟仿真系统。

1.1三菱编程软件GX Developer三菱全系列PLC 中文编程软件GX Developer ,包含GP-PW 编程软件和模拟仿真软件两个部分。

模拟仿真的功能,需要单独下载GX_Simulator 安装实现。

在GX Developer 软件中,可通过梯形图、语句表及SFC 编程实现PLC 的编程调试。

仿真软件GX_Simulator 也称之为梯形图逻辑测试工具,可实现PLC的离线和在线调试功能。

本系统采用离线调试功能。

1.2OPC 技术及三菱OPC 服务软件MX OPC Server工业控制系统中,为实现监控层与现场硬件设备的实时数据交换,传统的客户机/服务器模型不仅需要解决硬件和软件的复杂系统所带来的问题,还需要为不同应用程序的开发不同的接口程序以满足数据交换的需要。

大量的接口任务,不仅不利于系统的开发,而且会影响系统的稳定性、可靠性及通用性[2]。

OPC (OLE for Process Control ,即过程控制的对象链接与嵌入)规范就是在这样的背景下提出来的,它定义了一个工业标准接口,它使数据源之间的通信处理具有更大的互操作性[3,5]。

使用OPC 技术,需要硬件提供带有OPC 接口的服务器,这样就可以与带有OPC 接口的客户程序进行数据交换[2]。

基于C#的OPC客户端设计

基于C#的OPC客户端设计

基于C#的OPC 客户端设计①龚 勋, 王淑营(西南交通大学 信息科学与技术学院, 成都 611756)通讯作者: 龚 勋, E-mail: *****************摘 要: 现代工业生产过程的数据采集要求高采样率和传输的高实时性, 而现有OPC 数据采集客户端不能满足要求. 为了解决这个问题, 通过分析OPC 标准、服务器数据访问接口和组建对象模型, 并结合当前工业控制中数据采集的特点, 设计实现了基于订阅式数据采集方式的OPC 客户端. 该方案在解决当前工业数据采集中遇到的问题具有较高的应用价值. 并在实际的生产环境中验证了其与标准OPC 服务器在数据传输的稳定性和实时性, 为生产过程控制提供了可靠的数据基础.关键词: 数据采集; OPC; 组建对象模型; 订阅式; 过程控制引用格式: 龚勋,王淑营.基于C#的OPC 客户端设计.计算机系统应用,2020,29(5):239–244. /1003-3254/7373.htmlDesign of OPC Client Based on C#GONG Xun, WANG Shu-Ying(School of Information Science and Technology, Southwest Jiaotong University, Chengdu 611756, China)Abstract : Data collection in modern industrial production processes requires high sampling rates and high real-time transmission, while existing OPC clients of data acquisition cannot meet the requirements. In order to solve this problem,by analyzing the OPC standard, accessing the server data interface and component object model, combined with the characteristics of data acquisition in current industrial control, the OPC client based on subscription data collection is designed and implemented. This solution has high application value in solving the problems encountered in current industrial data collection. And in the actual production environment, it verifies the stability and real-time performance of the data transmission with the standard OPC server, which provides a reliable data foundation for production process control.Key words : data collection; OPC; building object model; subscription; process control传统工业数据采集系统, 由于生产设备种类较多、规格不一, 缺乏统一的工业标准, 不同设备厂商提供的硬件设备在设备驱动程序的开发、设备升级更新之后的维护工作、以及各应用程序之间通信方面存在困难[1,2]. OPC (Object Linking and Embedding for Process Control, 过程控制的对象链接与嵌入技术) 技术的诞生解决了这些问题, 极大提高了数据采集系统的开放性和互通性. OPC 技术是基于微软的COM/DCOM 技术(Component Object Model, 组件对象模型)发展而来, 所有符合OPC 标准的数据采集客户端程序都可以读取OPC 服务器采集的生产过程数据,大大提高了控制系统、现场生产设备和企业上层应用软件之间的互操作性, 为数据采集系统的发展奠定了基础[3].计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: ************.cn Computer Systems & Applications,2020,29(5):239−244 [doi: 10.15888/ki.csa.007373] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 基金项目: 山东省重大科技创新工程(2017CXGC0608-02)Foundation item: Major Science and Technology Innovation Engineering of Shandong Province (2017CXGC0608-02)收稿时间: 2019-09-24; 修改时间: 2019-10-22; 采用时间: 2019-10-30; csa 在线出版时间: 2020-05-07近年来, 较多学者在OPC数据采集客户端的设计与实现上进行了相关研究, 但是这些实现的客户端难以适应复杂多变的采集环境. 文献[4]介绍了OPC客户端与服务器之间的接口、数据读取方式等, 对实现OPC客户端有一定参考价值, 但并未进行具体实现. 文献[5]基于VB语言、自动化接口实现OPC客户端, 通过使用OPCDAAuto.dll自动化包装库, 把定制接口转换成自动化接口. 但由于其在大数据量数据采集时, 传输实时性较低, 以及多客户端连接时, OPC服务器压力较大等方面的限制. 文献[6]讨论了在读取OPC服务器数据后, OPC客户端和数据库通信问题, 实现利用数据库存储采集数据. 但是随着数据采集量越来越多, 这种方式不支持海量数据存储, 并且会失去数据库已有检索算法的优势, 精确查询的性能会降低.相比于传统的OPC客户端开发周期长, 难度大,适应性差. 本文通过分析OPC客户端和服务器之间的通信接口、数据读取方式、数据存储方式, 基于C#设计实现了采用自动化通信接口, 订阅式数据读取方式的OPC客户端, 在简化开发工作量的同时支持采集数据直接存储到实时数据库, 方便精确查询使用, 还支持以文本文件形式存储, 以备后续进行问题追溯时查询,在性能方面, OPC服务器能同时支持多个OPC客户端连接访问, 对服务器的性能消耗较低. 所以, 本文设计的客户端在功能支持、发开工作量、数据传输实时性、对服务器性能消耗方面都有较大改进.1 确定与OPC服务器通信接口在OPC标准下, 客户端与服务器之间有两种通信接口: 定制接口和自动化接口[7], 其中定制接口主要使用C/C++等过程性编程语言开发, 使用定制接口和服务器通信的方式比较复杂; 另一种是自动化接口, 主要使用Visual Basic, C#等语言开发, 相比于定制接口, 由于自动化接口集成了组建对象模型特征, 可以使用自动化包装库, 所以开发相对简单. 并且, 使用C#语言实现OPC客户端, 不仅可以实现数据采集功能, 还可以实现其他功能. 其结构如图1所示.采用定制接口方式与服务器通信需要开发人员熟练掌握相应的COM和DCOM知识的综合应用, 并且清楚的了解客户端和服务器的整个通信过程, 并且开发周期比较长. 而采用自动化接口方式则更为方便, 因为可以使用自动化包装库实现自动化接口转化为定制接口. 通过这种方式访问服务器, 降低了对开发人员的要求, 缩短了开发周期. 所以本文采用了自动化接口对方式.图1 客户端与服务器通信接口根据OPC标准, OPC服务器包括6类对象, 分别是: 服务器对象(OPC Server)、OPC浏览器对象(OPC Browser)、OPC组集合对象(OPC Groups)、OPC组对象(OPC Group)、OPC项集合对象(OPC Items)、OPC项对象(OPC Item). 开发人员需要熟悉了解这6个对象的属性、事件和方法[8–10].OPC服务器对象: OPC标准中定义对COM对象,是OPC服务器的实例, 也是创建其他5个对象的基础;OPC浏览器对象: 包含在服务器中存在的分支或项目名称的集合, 属于与可选部分, 如果连接的服务器不支持这个对象, 客户端则不会创建;OPC组集合对象: OPC Groups与OPC Group之间存在一对多的关系, 是OPC Group对象的集合, 主要用于创建、删除和管理OPC组对象;OPC组对象: 主要用来管理客户端需要采集的数据项;OPC项集合对象: 与OPC项之间存在一对多的关系, 是OPC组的属性之一, 当新添加一个数据采集项时被赋默认的属性, 比如默认状态(defaultIsActive)、默认数据更新周期(defaultRequestedDataType);OPC项对象: 是客户端与服务器之间的数据访问连接. 每个项由采集ID, 变量值和时间戳构成.2 确定数据读取方式OPC数据读取规范定义了OPC客户端对现场生产设备产生数据对读取方式. 每个OPC客户端可以连接到多个不同的服务器, 只要服务器满足OPC规范;多个OPC服务器也可以和一个客户端进行通信, 只要客户端符合OPC标准. 在OPC标准中, OPC客户端访计算机系统应用2020 年 第 29 卷 第 5 期问服务器的方式有3种: 分别是同步数据访问、异步数据访问和订阅式方式, 其中订阅式方式是特殊的异步方式[11].2.1 同步访问方式同步数据访问方式可用于客户端访问服务器数据,也可以用于客户端向服务器写入数据, 当客户端读取OPC项对应的实时数据时, 客户端程序一直处于等待状态, 直到数据读取完毕才能继续下一阶段的工作, 当写入数据时也是如此. 所以采用这种数据访问方式会阻塞客户端线程, 适合短时间请求数据并且和服务器的数据交互量少的情况. 当出现大量数据交互或者客户访问, 容易造成网路拥塞, 性能下降[12,13].2.2 异步访问方式同样异步数据访问方式可用于客户端访问服务器数据, 也可以用于客户端向服务器写入数据, 当客户端向服务器发送读取或写入数据请求后, 不用等待消息的返回, 随后就可以进行其他事务的处理, 当服务器完成请求处理之后, 服务器转为客户端, 主动向原来的客户端发送异步数据访问完成事件, 并将数据访问结果返回给客户端, 客户端接收处理完成事件. 在这种方式下, 数据访问效率更高, 能避免多客户端大数据量请求造成的阻塞, 并且可以节约CPU和网络资源. 但是该方式需要客户端程序增加事务管理功能, 接收处理访问完成事件, 增加了编程难度, 也额外增加了开发人员工作量.2.3 订阅式访问方式订阅式数据访问方式是一种特殊的异步数据访问方式, 但不同于的是订阅式方式只能用于客户端读取服务器端的数据, 不能向服务器写入指令. 但是在实际工业数据采集系统中, 大部分情况是采集客户端数据.关键在于, 进行数据交互时并不需要客户端程序实时向服务器发送请求, 而是服务器自动周期性的扫描数据缓冲区, 若缓冲区中的数据值发生变化或者变化超过一定幅度, 则更新数据缓冲区, 并向客户端发送数据变化事件, 客户端实时处理接收的数据变化事件, 所以采用订阅式方式, 需要服务器通知客户端数据更新, 客户端需要增加接收器对象, 接收器涉及到组建对象模型编程的相关知识, 具体可查阅相关文献, 这里不在赘述. 采用订阅式数据访问方式如图2所示.其中数据更新的变化范围被称为敏感带(DeadBand),由于敏感带的存在, 可以无视模拟量的微小变化, 减少了客户端和服务器的负荷. 相比于同步和异步数据访问方式, 订阅式数据方式有效的降低了客户端访问服务器的次数, 减少了服务器的工作量, 并且避免了因传输数据量大而造成的网络阻塞情况, 所以这种方式在大数据量访问优势更为明显. 针对当前制造业生产过程数据采集特点: 采集数据量大、采样频率高并且传输实时性高, 所以本文设计的OPC客户端选用订阅式方式无疑是最佳的选择.图2 订阅式方式3 OPC客户端实现3.1 总体设计OPC客户端总体设计如图3所示, 主要分为3个部分: 分别是建立连接、读取数据和断开连接; 其中建立连接部分需要完成OPC服务器与OPC客户端之间的身份确认, 连接信息的保存等功能, 具体包括枚举本地OPC服务器、初始化服务器对象、预览初始化接口、枚举地址空间等; 读取数据部分需要客户端按照定义的分组信息完成从服务器读取指定数据项, 并完成数据转储功能, 具体包括添加服务器对象、添加组对象、添加项对象、转储数据等; 断开连接部分需要客户端终止与服务器的连接, 释放资源, 同时服务器也需要确认客户端连接释放. 以上3个功能模块保证OPC客户端能顺利访问OPC服务器所有数据项的时间戳、采集点唯一ID和采集值[14,15].其中关键部分包括创建OPC服务器对象、OPC 组对象和OPC项对象, 并管理这些对象的工作周期.一个OPC服务器对象可以包含多个OPC组对象, 并且可以创建和删除组对象; 一个OPC组对象可以包含多个OPC项对象, OPC组对象主要包含自身基本信息和其中所有的OPC项对象信息; 而OPC项对象是最基本的单位, 主要包含OPC客户端和服务器的连接信息和采集数据项信息等. 其中OPC服务器对象, OPC 组对象和OPC项对象以及每个对象需要用到的函数关系如图4所示.2020 年 第 29 卷 第 5 期计算机系统应用图3 OPC客户端总体设计图4 OPC各对象之间关系图4中提供的OPC对象是所有对象的父类, 只具有最基本的CompareTo()比较函数, 其他的子对象可以根据自身需要进行扩展; 同时, 提供了专门用于管理OPC对象的OPCManager管理单元, 包含create()、add()和remove()等3个函数分别用于新建、添加和删除OPC对象. OPC服务器对象负责新增和删除一个或者多个组对象, 其中包含的getOPCBrowseTree()函数用于浏览地址空间并建立树型关系. OPC组对象主要是负责新建、添加、编辑和删除OPC项对象, 项对象是与现场生产设备对应的最基本的数据对象; OPC 项对象调用getItemProperty()函数可以获取采集数据项的唯一标识ID、采集值和时间戳.3.2 读取服务器数据OPC客户端完成服务器数据读取的过程包括预览和初始化OPC服务器、预览地址空间以及添加和删除组对象和项对象、数据读取、数据转储.预览OPC服务器名称主要是通过枚举本地所有的服务器信息并初始化需要连接的服务器对象来获取服务器名称和唯一标识符, 做好连接OPC服务器的准备工作; 在初始化服务器对象的过程中需要调用OPC 规范中管理各对象的函数. 比如OPCServerListClass()函数得到服务器的唯一标识符, 即可获得初始化服务器, 调用OPCServer.addGroup()方法创建OPC组对象,然后接着获取GroupName、updateRate和ID等参数信息, 其中updateRate表示采集数据等更新频率, ID就是标识采集点的唯一标识符.建立OPC服务器连接的过程就是初始化COM对象的过程, 需要根据之前获得的唯一服务器标识符来获取COM对象句柄地址并初始化OPCServer接口函数, 然后进行服务器的连接. 此阶段OPC服务器分为远程服务器和本地服务器, 如果连接的是本地服务器则较为简单, 若连接的是远程服务器需要设置访问类型为远程访问, 然后继续调用COM对象初始化函数进行服务器的远程连接.预览地址空间包括预览通信接口并初始化和填充TreeView控件等功能, 为后续添加OPC项对象做准备, 若数据采集的量比较大, 需要手动输入采集项名称和路径则效率较低, 所以采用预览地址空间的方法避免手动添加, 直接调用OPCBrowseAddressSpace()函数作为预览地址空间的函数接口, 然后接着使用ChangeBrowsePosition()函数做为改变位置的函数接口, 使用BrowseOPCItemIDS()函数获取采集数据项相关参数, 方便用户添加或者删除需要的服务器对象、组对象和项对象. 其读取服务器数据的时序图如图5.图5 数据读取时序图首先是创建一个OPC组对象并验证组对象的有效性, 如果无效则会抛出相应的异常并重新添加组对计算机系统应用2020 年 第 29 卷 第 5 期象, 有效则继续执行, 浏览服务器的地址空间, 并调用函数addItem()添加项对象, 每个项对象就是需要读取的数据项基本单位, 调用项对象的getQuality()、realItemValue()和dateTime()函数开始读取数据.3.3 数据转储本文设计的数据转储模块可以将读取的数据转储到MySQL数据库, 也可以转储为文本文件, 连接MySQL数据库时需要使用到MySQL.Data.dll, 这是专门用来管理连接和断开数据库连接的库. 转储数据到MySQL数据库时提供了数据库连接模式和断开模式,在连接模型下数据库和客户端一直保持连接状态, 在断开模式下客户端和数据库只在有数据更新的情况下才进行连接操作. 结合现代制造业数据采集特点, 采用断开模式优势较为明显, 其中将数据转储到MySQL数据库时需要以下几步:(1)使用Connection连接对象连接客户端和数据库, Connection对象包含Open()和Close()方法, 用于打开和关闭数据库连接, 只包含一个属性ConnectionStrng 属性, 这个属性又包含了服务器名DataSourse、数据库名I n i t i a l C a t a l o g、用户名U s e r N a m e和密码PassWord等;(2)使用Command对象对已经建立连接的数据库发出请求操作数据命令;(3)将从服务器读取来的数据放到数据适配器DataAdapter对象中, 然后把数据转储到DataSet对象中;(4)然后在本地的DataSet对象中管理数据, 接着利用DataAdapter对象进行数据库写入操作更新数据,最后关闭Connection连接.在断开模式下, 不需要客户端和数据库服务器一直保持连接状态, 这样大大降低了服务器承受的压力,减少了资源的浪费, 支持多个客户端同时发起连接请求的情况.3.4 实现展示OPC客户端首页如图6所示, 在首页可以配置连接服务器的相关信息, 服务器IP地址和服务器名. 为了使用的方便, 该部分设计为只需一次配置的形式, 首次配置的信息保存为XML配置文件, 如果服务器不更改则不用重新配置; 同时提供定义分组、查看分组信息和分组管理功能的入口, 以及显示当前正在采集的信息, 包括采集组数量、采集项数量和开始采集时间等.点击查看分组信息, 可以查看当前客户端已配置的所有分组列表, 每个分组下的所有采集数据项列表,以及每个数据项当前的采集时间点, 采集值, 具体如图7所示.图6 客户端首页图7 查看分组信息点击定义分组, 可以新建分组, 定义分组名, 配置该分组需要采集的所有数据项列表, 以及该分组的数据项更新频率等, 具体如图8所示.图8 定义分组2020 年 第 29 卷 第 5 期计算机系统应用4 结论与展望本文通过分析现代制造业的发展趋势, 以及当前数据采集技术的弊端, 设计开发了适合当前工业控制系统需求的OPC 数据采集客户端. 其中详细介绍了OPC 客户端的通信接口、数据读取方式和具体的实现步骤, 并在实际生产环境投入使用, 真正解决了当前制造业在数据采集方面遇到的难点; 验证了客户端与服务器数据读取的稳定性和实时性; 对OPC 技术在数据采集方面的应用进行了更深入的拓展. 最后, 希望本文可以为将来数据采集技术的深入研究起到抛砖引玉的作用.参考文献杜赟萌. 基于OPC 技术的工业通讯应用. 科技风, 2019,(15): 81.1杨虎, 乔立慧. OPC 技术在工业网络控制系统中的应用.电子科技与软件工程, 2019, (16): 137–138.2OPCFoundation. Data Access Custom InterfaceSpecification Version 2.05. 2001: 11–15.3朱立军, 安娜, 陈未如. 基于Visual C#的OPC 客户端实现.现代电子技术, 2009, 32(2): 171–173. [doi: 10.3969/j.issn.1004-373X.2009.02.051]4王绪彪, 张望, 江丹玲. 基于VB 的OPC 客户端软件的设计与实现. 自动化与仪器仪表, 2011, (2): 46–49.5张河, 鲁五一. OPC 客户端与实时数据库通信的实现. 计算机工程与科学, 2008, 30(5): 81–83. [doi: 10.3969/j.issn.61007-130X.2008.05.025]Torrisi NM, Oloveira JFG. Remote control of CNC machinesusing the CyberOPC communication system over public networks.TheInternationalJournalofAdvancedManufacturing Technology, 2008, 39(5–6): 570–577. [doi:10.1007/s00170-007-1244-0]7Burke TJ. The performance and throughput of OPC c-arockwell software perspective. Rockwell Software Inc.,2004.8顾键, 王京春, 黄德先. OPC-COM 技术在工业自动化软件中的应用. 计算机工程应用, 2002, 38(12): 207–209.9袁小坊, 王东, 谢高岗. OPC 中订阅机制的实现分析. 计算机工程与应用, 2009, 45(1): 89–91. [doi: 10.3778/j.issn.1002-8331.2009.01.026]10IwanitzF. OPC: Fundamentals, Implementation &Application. Heidelberg: Huthing, 2002. 113–115.11Jia ZP, Li X. OPC-based architecture of embedded webserver. In: Wu Z, Chen C, Guo M, et al, eds. Embedded Software and Systems. Berlin, Heidelberg: Springer-Verlag,2005. 362–367.12Son M, Yi M. A study on OPC specifications: Perspectiveand challenges. International Forum on Strategic Technology 2010. Ulsan, South Korea. 2010. 193–197.13刘会令. 基于. NET 的嵌入式系统OPC 客户端开发[硕士学位论文]. 北京: 北京化工大学, 2013.14尤枫, 邵俊军, 赵恒永. 基于WinCE 的OPC 数据采集系统设计与实现. 计算机工程与科学, 2007, 29(6): 124–127.[doi: 10.3969/j.issn.1007-130X.2007.06.037]15计算机系统应用2020 年 第 29 卷 第 5 期。

基于OPC技术的WEB服务

基于OPC技术的WEB服务

基于OPC技术的WEB服务
郑雪峰;汤劫莹
【期刊名称】《微计算机信息》
【年(卷),期】2007(023)012
【摘要】据实际工程需要,用VC++开发设计了一个应用于工控自动化远程实时数据传输系统,该系统通过OPC服务器从内存网卡RFM5565获取冶金自动化控制过程中的各项数据,然后将此数据通过网络实时传输到客户端,用户通过IE浏览就可查看冶金过程中的相关信息.它的实时性与稳定性经过运行证明达到预期效果,其方法与思路在自动化控制方面具有典型意义.可以被广泛借鉴与运用.
【总页数】3页(P4-5,39)
【作者】郑雪峰;汤劫莹
【作者单位】100083,北京,北京科技大学信息工程学院;100083,北京,北京科技大学信息工程学院
【正文语种】中文
【中图分类】TP273
【相关文献】
1.Web服务实战之一基于Web服务的供应链管理 [J], 柴晓路
2."工控软件互操作规范OPC技术"讲座第7讲基于OPC技术的DCS组态软件的设计与实现 [J], 梁坚;王锦标
3.基于轻量型Web服务器的嵌入式设备的Web服务编程设计 [J], 陈培新;赵炯
4.基于OPC技术的WEB服务 [J], 郑雪峰;汤劫莹
5.基于OPC技术的白车身生产智能管理系统 [J], 韩金丰
因版权原因,仅展示原文概要,查看原文内容请购买。

基于OPC技木的组态软件仿真对象程序设计

基于OPC技木的组态软件仿真对象程序设计

基于OPC技木的组态软件仿真对象程序设计
王庆华
【期刊名称】《科技创新与生产力》
【年(卷),期】2015(000)012
【摘要】首先对OPC技术标准进行了简要介绍,同时对OPC技术标准在工业控制方面带来的优点作了介绍,然后对OPC技术标准中的OLE/COM技术作了较为详细的论述,详细论述了COM技术的语言无关性、可重用性和COM技术的通信机制(可连接点机制、数据通报机制和DCOM技术).然后用Visual C++ 6.0环境详细介绍了为OPC客户端提供数据服务的功能.
【总页数】3页(P69-71)
【作者】王庆华
【作者单位】太原航空仪表有有限公司,山西太原030006
【正文语种】中文
【中图分类】TP391.9
【相关文献】
1.OPC技木在电梯控制柜型式试验中的应用 [J], 雷桥兵;张祺;何永胜
2."工控软件互操作规范OPC技术"讲座第7讲基于OPC技术的DCS组态软件的设计与实现 [J], 梁坚;王锦标
3.对象技术与OPC技术在监控组态软件中的应用 [J], 李正兵;楼佩煌
4.组态软件仿真功能在PLC程序设计中的应用 [J], 付海
5.基于OPC技术的组态软件仿真对象程序设计 [J], 王庆华;
因版权原因,仅展示原文概要,查看原文内容请购买。

OPC课程设计

OPC课程设计

OPC课程设计北京科技大学课程设计(软件设计)报告班级:姓名:同组人:学号:指导教师:日期: 2013 年 10 月 26 日目录1设计内容 (i)2应用程序总体分析与设计 (i)3应用程序各功能模块分析与设计 (i)3.1连接程序:与服务器相连 (i)3.2 加项程序:用于加载数据 (ii)3.3 退出程序:程序退出 (ii)3.4 窗体卸载事件处理:断开连接 (ii)3.5 定时器定时时间处理:数据读取,报警,实时时间显示 (iii)3.6 SyncRead子程序 (v)4程序测试 (vii)4.1测试过程:两项均正常 (vii)4.2测试结果:两项均不正常 (vii)4.3测试结果:一项正常,一项不正常 (vii)5程序文档 (viii)5.1使用说明 (viii)5.2 程序说明 (viii)6.实验总结和心得 (xvii)1设计内容制作一个实际的OPC访问程序,能够实现数据的读取,并能在棒图上显示,实现意外情况的报警,显示当前日期、时间。

2应用程序总体分析与设计要实现设计内容,必须有连接,加项,实时读取,报警等子程序,程序总体流程图如下:3应用程序各功能模块分析与设计3.1连接程序:与服务器相连Private Sub Command1_Click()' 调用Connect子程序Call Connect("OPCJ.SampleServer.1")Label1.Caption = "与服务器连接成功"End Sub3.2 加项程序:用于加载数据Private Sub Command2_Click()' 调用AddItem子程序Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then ' 启动定时器Timer1.Enabled = TrueElseEnd IfEnd IfEnd Sub3.3 退出程序:程序退出Private Sub Command3_Click()' 卸载窗体Unload Form1End Sub3.4 窗体卸载事件处理:断开连接Private Sub Form_Unload(Cancel As Integer)' 调用Disconnect子程序Call DisconnectEnd Sub3.5 定时器定时时间处理:数据读取,报警,实时时间显示Private Sub Timer1_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim I As IntegerDim a As Integer'Dim b As Integer' 同期读取SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的格式化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBuf' 计算棒的宽和高nWidth = Picture1(I).ScaleWidthnHeight = Picture1(I).ScaleHeightsglScale = vtItemValues(I) / 700nDrawHeight = CInt(nHeight * sglScale)' 清除现棒图Picture1(I).Cls' 绘制棒图Picture1(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFNext' 指示警戒值,警戒值以上改变显示颜色If lbBar(1).Caption > 50 Or lbBar(2).Caption > 80 ThenLabel1.Caption = "出现异常!"Else: Label1.Caption = "正在观测!"End IfIf lbBar(1).Caption > 50 ThenText1.Text = "温度过高!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 50 ThenText1.Text = "温度平稳!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 80 ThenText2.Text = "液面过高!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption < 80 ThenText2.Text = "液面平稳!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfLabel5.Caption = Now'a = a + 1'b = a * 0.1'Label6.Caption = "已观测时间:" + Trim(b) + "秒"End Sub3.6 SyncRead子程序Sub SyncRead(nSource As Integer, ByRef vtItemValues() As Variant, _ ByRef lErrors() As Long)Dim lServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then' 同期读取objTestGrp.SyncRead nSource, 2, lServerHandles, _ vtItemValues, lErrorsEnd IfEnd Sub4程序测试4.1测试过程:两项均正常4.2测试结果:两项均不正常4.3测试结果:一项正常,一项不正常5程序文档5.1使用说明程序运行时,先按下连接按钮,再按下加项按钮,系统就可以观测了,如果想退出的话,按下退出按钮即可5.2 程序说明Sub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 建立一个OPC服务器对象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 连接OPC服务器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then' 建立一个OPC组集合Set objGroups = objServer.OPCGroupsEnd IfIf objTestGrp Is Nothing Then' 添加一个OPC组Set objTestGrp = objGroups.Add("TestGrp") End IfEnd SubSub AddItem()Dim strItemIDs(2) As StringDim lClientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If' 设置组活动状态objTestGrp.IsActive = True' 取消组非同期通知objTestGrp.IsSubscribed = False' 建立OPC项集合Set objItems = objTestGrp.OPCItems' 生成标签的项标识符strItemIDs(1) = "TAG1.Value"strItemIDs(2) = "TAG2.Value"lClientHandles(1) = 1lClientHandles(2) = 2' 添加OPC项Call objItems.AddItems(2, strItemIDs, _lClientHandles, lServerHandles, lErrors) End SubSub Disconnect()Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 清除OPC项objItems.Remove 2, lServerHandles, lErrors End IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 清除OPC组objGroups.Remove "TestGrp"Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then ' 断开OPC服务器.objServer.DisconnectEnd IfSet objServer = NothingEnd IfEnd SubPrivate Sub Command1_Click()' 调用Connect子程序Call Connect("OPCJ.SampleServer.1")Label1.Caption = "与服务器连接成功"End SubPrivate Sub Command2_Click()' 调用AddItem子程序Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then ' 启动定时器Timer1.Enabled = TrueElseEnd IfEnd IfEnd SubPrivate Sub Command3_Click()' 卸载窗体Unload Form1End SubPrivate Sub Form_Load()Timer1.Enabled = FalseTimer1.Interval = 100End SubPrivate Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End SubPrivate Sub Form_Unload(Cancel As Integer)' 调用Disconnect子程序Call DisconnectEnd SubSub SyncRead(nSource As Integer, ByRef vtItemValues() As Variant, _ ByRef lErrors() As Long)Dim lServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then' 同期读取objTestGrp.SyncRead nSource, 2, lServerHandles, _vtItemValues, lErrorsEnd IfEnd SubPrivate Sub Timer1_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim I As IntegerDim a As Integer'Dim b As Integer' 同期读取SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的格式化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBuf' 计算棒的宽和高nWidth = Picture1(I).ScaleWidthnHeight = Picture1(I).ScaleHeightsglScale = vtItemValues(I) / 700nDrawHeight = CInt(nHeight * sglScale)' 清除现棒图Picture1(I).Cls' 绘制棒图Picture1(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _Next' 指示警戒值,警戒值以上改变显示颜色If lbBar(1).Caption > 50 Or lbBar(2).Caption > 80 ThenLabel1.Caption = "出现异常!"Else: Label1.Caption = "正在观测!"End IfIf lbBar(1).Caption > 50 ThenText1.Text = "温度过高!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 50 ThenText1.Text = "温度平稳!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 80 ThenText2.Text = "液面过高!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption < 80 ThenText2.Text = "液面平稳!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _End IfLabel5.Caption = Now'a = a + 1'b = a * 0.1'Label6.Caption = "已观测时间:" + Trim(b) + "秒"End Sub6.实验总结和心得(1)总结:本次课程设计的任务以VB设计的界面显示从模拟OPC服务器接收到的数据,显示的同时增加一些其他的功能,结果也表明,本次课程设计的设计任务得到了很好的完成。

基于OPC技术的过程控制算法测试平台设计

基于OPC技术的过程控制算法测试平台设计

基于OPC技术的过程控制算法测试平台设计
石朝阳
【期刊名称】《微计算机信息》
【年(卷),期】2007(023)034
【摘要】先进过程控制算法实测平台结合Matlab强大的工程计算能力和组态王采集实时数据的优势,利用更为可靠的OPC技术建立Matlab 7.0与组态王之间的数据通讯.平台封装了Matlab与组态王之间的OPC数据通讯接口,使用方便简单,实现了Matlab下算法验证数据的实时获取,对先进控制算法的实测有很好的实用价值.
【总页数】2页(P308-309)
【作者】石朝阳
【作者单位】510300,广东,广州,广东轻工职业技术学院
【正文语种】中文
【中图分类】TP273
【相关文献】
1.基于OPC技术的飞行器测试与控制系统设计 [J], 卢逸斌;王楠;朱智超;吴睫;唐亮
2.基于SOPC技术的通用显卡测试仪设计 [J], 钱斌;
3.基于SIHC仿真平台的船舶航向控制算法性能测试 [J], 蒋娇;李丽娜;陈国权;赵晴
4.基于SOPC技术的通用显卡测试仪设计 [J], 钱斌
5.虚拟现实技术下船舶航向控制算法测试平台设计 [J], 杜春梅;冀志刚;国光友
因版权原因,仅展示原文概要,查看原文内容请购买。

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

北京科技大学课程设计(软件设计)报告班级:姓名:子同组人:学号:指导教师:日期:2013 年10 月26 日目录1设计内容 ................................................................................................................................. i i 2应用程序总体分析与设计 ..................................................................................................... i i 3应用程序各功能模块分析与设计 ......................................................................................... i i3.1连接程序:与服务器相连 .......................................................................................... i i3.2 加项程序:用于加载数据 ........................................................................................ i ii3.3 退出程序:程序退出 ................................................................................................ i ii3.4 窗体卸载事件处理:断开连接 ................................................................................ i ii3.5 定时器定时时间处理:数据读取,报警,实时时间显示 .................................... i v3.6 SyncRead子程序 ..................................................................................................... v i 4程序测试 (viii)4.1测试过程:两项均正常 (viii)4.2测试结果:两项均不正常 (viii)4.3测试结果:一项正常,一项不正常 (viii)5程序文档 (ix)5.1使用说明 (ix)5.2 程序说明 (ix)6.实验总结和心得 (xviii)1设计内容制作一个实际的OPC访问程序,能够实现数据的读取,并能在棒图上显示,实现意外情况的报警,显示当前日期、时间。

2应用程序总体分析与设计要实现设计内容,必须有连接,加项,实时读取,报警等子程序,程序总体流程图如下:3应用程序各功能模块分析与设计3.1连接程序:与服务器相连Private Sub Command1_Click()' 调用Connect子程序Call Connect("OPCJ.SampleServer.1")Label1.Caption = "与服务器连接成功"End Sub3.2 加项程序:用于加载数据Private Sub Command2_Click()' 调用AddItem子程序Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then ' 启动定时器Timer1.Enabled = TrueElseEnd IfEnd IfEnd Sub3.3 退出程序:程序退出Private Sub Command3_Click()' 卸载窗体Unload Form1End Sub3.4 窗体卸载事件处理:断开连接Private Sub Form_Unload(Cancel As Integer)' 调用Disconnect子程序Call DisconnectEnd Sub3.5 定时器定时时间处理:数据读取,报警,实时时间显示Private Sub Timer1_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim I As IntegerDim a As Integer'Dim b As Integer' 同期读取SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的格式化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBuf' 计算棒的宽和高nWidth = Picture1(I).ScaleWidthnHeight = Picture1(I).ScaleHeightsglScale = vtItemValues(I) / 700nDrawHeight = CInt(nHeight * sglScale)' 清除现棒图Picture1(I).Cls' 绘制棒图Picture1(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFNext' 指示警戒值,警戒值以上改变显示颜色If lbBar(1).Caption > 50 Or lbBar(2).Caption > 80 ThenLabel1.Caption = "出现异常!"Else: Label1.Caption = "正在观测!"End IfIf lbBar(1).Caption > 50 ThenText1.Text = "温度过高!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 50 ThenText1.Text = "温度平稳!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 80 ThenText2.Text = "液面过高!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption < 80 ThenText2.Text = "液面平稳!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfLabel5.Caption = Now'a = a + 1'b = a * 0.1'Label6.Caption = "已观测时间:" + Trim(b) + "秒"End Sub3.6 SyncRead子程序Sub SyncRead(nSource As Integer, ByRef vtItemValues() As Variant, _ ByRef lErrors() As Long)Dim lServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then' 同期读取objTestGrp.SyncRead nSource, 2, lServerHandles, _ vtItemValues, lErrorsEnd IfEnd Sub4程序测试4.1测试过程:两项均正常4.2测试结果:两项均不正常4.3测试结果:一项正常,一项不正常5程序文档5.1使用说明程序运行时,先按下连接按钮,再按下加项按钮,系统就可以观测了,如果想退出的话,按下退出按钮即可5.2 程序说明Sub Connect(strProgID As String, Optional strNode As String)If objServer Is Nothing Then' 建立一个OPC服务器对象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 连接OPC服务器objServer.Connect strProgID, strNode End IfIf objGroups Is Nothing Then' 建立一个OPC组集合Set objGroups = objServer.OPCGroups End IfIf objTestGrp Is Nothing Then' 添加一个OPC组Set objTestGrp = objGroups.Add("TestGrp") End IfEnd SubSub AddItem()Dim strItemIDs(2) As StringDim lClientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If' 设置组活动状态objTestGrp.IsActive = True' 取消组非同期通知objTestGrp.IsSubscribed = False' 建立OPC项集合Set objItems = objTestGrp.OPCItems' 生成标签的项标识符strItemIDs(1) = "TAG1.Value"strItemIDs(2) = "TAG2.Value"lClientHandles(1) = 1lClientHandles(2) = 2' 添加OPC项Call objItems.AddItems(2, strItemIDs, _lClientHandles, lServerHandles, lErrors) End SubSub Disconnect()Dim lErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then' 清除OPC项objItems.Remove 2, lServerHandles, lErrors End IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 清除OPC组objGroups.Remove "TestGrp"Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then ' 断开OPC服务器.objServer.DisconnectEnd IfSet objServer = NothingEnd IfEnd SubPrivate Sub Command1_Click()' 调用Connect子程序Call Connect("OPCJ.SampleServer.1")Label1.Caption = "与服务器连接成功" End SubPrivate Sub Command2_Click()' 调用AddItem子程序Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then' 启动定时器Timer1.Enabled = TrueElseEnd IfEnd IfEnd SubPrivate Sub Command3_Click()' 卸载窗体Unload Form1End SubPrivate Sub Form_Load()Timer1.Enabled = FalseTimer1.Interval = 100End SubPrivate Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End SubPrivate Sub Form_Unload(Cancel As Integer)' 调用Disconnect子程序Call DisconnectEnd SubSub SyncRead(nSource As Integer, ByRef vtItemValues() As Variant, _ ByRef lErrors() As Long)Dim lServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then' 同期读取objTestGrp.SyncRead nSource, 2, lServerHandles, _vtItemValues, lErrorsEnd IfEnd SubPrivate Sub Timer1_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerDim sglScale As SingleDim I As IntegerDim a As Integer'Dim b As Integer' 同期读取SyncRead OPCCache, vtItemValues, lErrors' 棒图的表示For I = 1 To 2' 数据的格式化strBuf = Format(vtItemValues(I), "###.000")' 表示数据字符串lbBar(I).Caption = strBuf' 计算棒的宽和高nWidth = Picture1(I).ScaleWidthnHeight = Picture1(I).ScaleHeightsglScale = vtItemValues(I) / 700nDrawHeight = CInt(nHeight * sglScale)' 清除现棒图Picture1(I).Cls' 绘制棒图Picture1(I).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _Next' 指示警戒值,警戒值以上改变显示颜色If lbBar(1).Caption > 50 Or lbBar(2).Caption > 80 ThenLabel1.Caption = "出现异常!"Else: Label1.Caption = "正在观测!"End IfIf lbBar(1).Caption > 50 ThenText1.Text = "温度过高!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 50 ThenText1.Text = "温度平稳!"Picture1(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 80 ThenText2.Text = "液面过高!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFEnd IfIf lbBar(2).Caption < 80 ThenText2.Text = "液面平稳!"Picture1(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _End IfLabel5.Caption = Now'a = a + 1'b = a * 0.1'Label6.Caption = "已观测时间:" + Trim(b) + "秒"End Sub6.实验总结和心得(1)总结:VB是我们经常用到的软件,OPC服务器是我们以后工作中会遇到的技术。

相关文档
最新文档