学位论文查重申诉书申诉书学号姓名导师论文题目学院机电工程学院申请时间电话总复13.5% 总重合字数 4718 制比申述论文中复制相似字申述理由导师意见重复比数段落13.1 OPC 概述第三章21% 1645 3.1.1 OPC 技术的本质重复语句: 监控系(1)计算机技术以及网络技术的发展飞速,计算机监控系统作为工业控制中的重要领域统中OPC也随之普遍采取分布式结构的形式,分布式系统具有非常显著的特点就是它的异构性。
技术的OPC 技术的本质是采用COM/DCOM技术[5] 应用这里使用了计算机技术、网络技术、分布式、COM/DCOM等通信和工控领域常用的词汇,非常容易与其它文章重合,对引用的语句已经标注了引用的文献[5]。
(2)支持局域网之内、广域网甚至是互联网上的不同设备之间的通讯[10]。
COM 是一种组件化的标准,COM定义了组件与组件间相互通讯的标准,也给组件创建了组件运行需要的环境。
在COM标准的定义中,一个组件程序既可以是动态链接库的形式, ,也可以是可执行程序,也就是我们通常所说的进程内组件和进程外组件 [11]。
这里引用了文献[10][11]中关于COM组件化标准的定义(3) COM标准的内容包含了COM规范以及COM的实现两大部分,其中规范制定了组件与组件之间进行通信需要遵守的机制。
COM技术的基本的模型是Client/Server模型,而OPC也是COM模型为基础,所以OPC也是基于Client/Server模型的,因此在进行OPC程序开发时分为服务器的开发和客户端的开发,OPC服务器程序的开发一般由硬件的厂商来实现,而OPC客户端程序的开发则由组态软件厂商或者监控系统的开发者来实现。
这里COM分布式组件技术以及OPC的开发内容是通用技术,COM、OPC、组件、CLIENT/SERVER等关键词汇很难避免不重复。
3.2 OPC体系结构3.2.1OPC基本框架重复语句:(1)一个OPC 客户端可以连接一个OPC服务器或多个的OPC 服务器,而多个OPC 客户端可以同时去连接同一个OPC 服务器[15],如图 3-2所示。
这里引用了文献[15]的内容来说明OPC服务器和OPC客户端之间的关系(2) 在OPC标准中,一个OPC 服务器包含了三个对象:服务器(Server),组(Group),项(Item) [16]。
服务器对象提供OPC服务器的相关属性和信息。
OPC 组对象的作用是提供组的属性和相关信息,并且提供了组织和管理项的方法.在组对象提供了很多的方法给客户程序用来组织和管理数据。
比如一个OPC组可以代表一个设备的控制器中的一个变量组。
这里引用了文献[16]中关于OPC服务器的结构的定义(3) 客户程序可以通过编程实现设置组对象的各种属性以及需要管理的数据项等。
在OPC规范中有了两种属性的组对象:公共组(PUBLIC)和私有组(PRIVATE)[17]。
这里引用了文献[17]中关于OPC组的属性的定义.3.2.2 本系统的OPC 的接口体系重复语句:在OPC 规范织中提供了两种不同的接口:自定义接口(the OPC Custom Interfaces),自动化接口(the OPCAutomation interfaces)[19] [20]。
这里引用了文献[19][20]中OPC规范的两种接口的说明3.2.3 OPC 接口定义重复语句:(1)和所有的COM对象一样,OPC 服务器对象通过提供一些方法去读取或者修改数据源中的数据。
客户程序通过那些标准接口建立与服务器的通讯。
通过服务器对象所获得的接口,OPC 客户程序可以调用服务器接口的方法来创建组对象,并且把需要操作的数据项分门别类地加入到不同定义的组对象中,组对象可以激活,也可以不激活。
对于客户程序来说,不管是OPC服务器还是组对象接口,可见的知识它们的COM接口。
图3-6是OPC 规范中所定义的服务器对象,图3-7是OPC 组对象的COM 接口[21]。
这里引用了文献[21]中关于OPC服务器对象、组对象的COM接口的说明 (2) 在上图的接口中:IOPCItemMgt的作用是为OPC 客户程序添加组员、删除组员等操作提供方法。
IOPCGroupStateMgt是组对象状态获取接口,它的作用是当OPC 客户程序需要操作组对象或者需要获取组对象的信息时提供方法和函数以允许组对象进行操作。
IOPCPublicGroupStateMgt 是一个选配的接口,它的作用是实现私有组对象向公有组对象进行转换的目的,一般情况下都不会用到,所以很多厂商开发的OPC 服务器中,都没有这个接口。
选配接口IdataObject 以及IOPCAsyncIO 接口则主要是用在异步数据的访问(在1.0版本以后的OPC标准规范中,已被IOPCAsyncIO2接口所取代)。
IOPCSyncIO接口用于同步数据访问。
上述这两个接口为OPC DA数据访问规范中进行数据通信的最重的两个接口。
这里OPC的接口的名称是标准的,作用也是固定的,因此造成了部分重复。
3.3本系统的 OPC 通讯机制重复语句:OPC通讯的方式主要有两种:异步通讯和同步通讯[24]。
在那些常见的通讯方式中比如串口、以太网等也同样有同步和异步通信之分,它们的基本原理都相似。
如图3-8所示,当进行同步通信时,客户程序对服务器的操作必须一致持续直至服务器操作完成释放之后才能中断,在这个过程中客户端一直处于等待中。
所以同步通讯的速度虽然较快,但是占用的资源比较多,当需要对大量数据操作或一个OPC服务器被许多个客户端同时访问时,会造成一定的阻塞现象。
这里异步通讯和同步通讯的名称以及原理在各种总线通信中都类似,并且文中也引用了文献[24]的内容.3.4本系统的 OPC 通讯机制重复语句:VC++环境下访问OPC 服务器的主要步骤如下:1(初始化COM 库,CoInitialize。
2(通过OPC 服务器的ProgID 来查询CLISD,CLSIDFromProgID。
3(创建OPC 服务器对象,并查询对象的IID_IOPCServer 接口,CoCreateInstance。
4(添加一个group 对象,并查询IOPCItemMgt 接口,AddGroup。
5(为group 对象添加item,AddItems。
6(查询Group对象的异步接口7(得IOPCGroupStateMgt接口。
8(创建回调对象实例。
9. 创建服务器的连接点与Client程序之间的连接。
10.数据访问操作。
这里OPC客户访问OPC服务器过程中调用的接口和方法都是标准的,因此名称上会有重合论文中复制相似字申述理由导师意见重复比数1段落24.3 数据库操作程序的设计和实现第四章重复语句: 27.7% 1561ADO对象包括[29]:Connection Object(连接对象)、Command Object(命令对象)、RecordSet 注塑Object(记录集对象)、Field Object(字段对象)、Record Object(记录对象)、Error Object机数据(错误对象)、Parameter 分析Object(参数对象)、Property Object(属性对象)和Stream Object(流对象)。
其中,最为重要的和数据是Connection 库建签Object(连接对象)、Command Object(命令对象)和RecordSet Object(记录集对象)。
立字Connection Object代表了一个和数据源的连接,以后的数据库操作都建立在这个连接这里引用了文献[29]的内容.ADO对象模型的组成是标准的,其中的那些关键字必须使用,不能改写,因此会造成这一段的内容都被认为是重复的.4.3.1数据库的连接重复语句:(1)VC++环境下通过ADO连接MySql数据库,首先得安装MyODBC服务器程序。
MyODBC版本要和MySql的版本相匹配,否则会连接不上。
在本系统中用的MySql 版本和MyODBC的版本分别是mysql-connector-odbc-5.1.5-win32.msi和mysql-5.1.48-win32.msi。
安装好MyODBC服务器后,点击开始,>设置,>控制面板,>管理工具,>数据源(ODBC),>用户DSN,>添加,>选择MySQLODBC 5.1 Driver[37]。
如图4-6:图4-6 添加MYSQL ODBC 驱动程序Fig.4-6 Add MYSQL ODBC drive然后双击MySQL ODBC 5.1 Driver进行配置。
配置好可以点Test进行测试(如图4-7),如果连上则会弹出connectionsuccessful的文本。
这里关于MYODBC服务器以及MYSQLODBC驱动程序的安装引用了文献[37]中的内容,并且程序的安装路径基本是一致的,所以会造成重复(2) 配置完成后,就可以在VC++环境中编程来访问MYSQL数据库了。
部分代码如下: (1)首先导入ADO类型库。
(2) 建立Connection对象,连接MYSQL数据库{{CoInitialize(NULL);m_pConnection.CreateInstance(__uuidof(Connection));try{//设置连接时间//打开数据库连接RESULT hr = m_pConnection->Open("DSN=MySqlODBC;server=localhost;database=OPC_DATABASE","root", "root",adModeUnknown);}catch(_com_error &e){MessageBox(NULL, e.Description(), _T(""), MB_OK);return FALSE;}return TRUE;}(2)执行SQL语句BOOL CDBManagerSub::ExecuteSQL( _bstr_t bstrSQL ){// _variant_t RecordsAffected;try{// 是否已经连接数据库if(m_pConnection == NULL){//重新连接数据库Open(m_dbType, m_strServer, m_strUserName, m_strPasswor,m_strDBName); }// 连接的执行: (_bstr_t CommandText, VARIANT * RecordsAffected, long Options ) // 参数Command Text 一般是需要执行的SQL命令。