2、下载组态王653,我是在亚控科技官网下载的组态王653。
3、为保证OPC Toolbox 中对象和OPC 服务器对象连接起来,下载并安装客户端开发工具包OPC CoreComponents 200 Redistributable 220msi控件。打开matlab安装路径D:\ProgramFiles\MATLAB\R2010b\toolbox\opc\opc\private,
找到该文件双击安装。(有些版本这个控件已经损坏了,考一下别人的也可以安装)
4、打开matlab,在command window 输入命令opcregister('install'),注册OPC 服务器和客户端用到的来安装能在网络上浏览其他计算机并能与之通讯的核心组件,分别是:
OPC 通讯接口组件OPCcomn_psdll
OPC 自动化接口组件OPCdaAutodll
OPC 代理占位组件OPCProxydll
还有opc_aepsdll。
5、在OPC 服务器和OPC 客户端进行分布式COM的环境设置,这个步骤有些麻烦,有个名为“dcom配置”的文件步骤很详细,上面有好几个系统的dcom配置,看准了我们需要的XP系统的。
这一步目的同样是为使OPC Too lbox 中的对象和OPC 服务器对象之间建立连接
OPC是dcom技术,opc通信是软件与软件通信,本机通信较为简单,网络OPC通信有很多麻烦的系统设置。
modbus是物理硬件技术,是设备与设备通信,两个设备之间物理能通就可以通信,有串口和TCP。
扩展资料:
开发OPC的最终目标是在工业控制领域建立一套数据传输规范,现有的OPC规范涉及以下五个领域。
①在线数据监测。OPC实现了应用程序和工业控制设备之间高效、灵活的数据读写。
②报警和事件处理。OPC提供了OPC服务器发生异常时以及OPC服务器设定事件到来时,向OPC客户发送通知的一种机制。
③历史数据访问。OPC实现了对历史数据库的读取、 *** 作和编辑。
④远程数据访问。借助Microsoft的DCOM(Distributed Component Object Model)技术,OPC实现了高性能的远程数据访问能力。
⑤OPC实现的功能还包括安全性、批处理和历史报警事件数据访问等。
Modbus是在1970年末为可编程逻辑控制器通信开发的,这些有限的数据类型在那个时代是可以被PLC理解的,大型二进制对象数据是不支持的。
对节点而言,没有一个标准的方法找到数据对象的描述信息,举个例子,确定一个寄存器数据是否表示一个介于30-175度之间的温度。
由于Modbus是一个主/从协议,没有办法要求设备“报告异常”(构建在以太网的TCP/IP协议之上,被称为open-mbus除外)- 主节点必须循环的询问每个节点设备,并查找数据中的变化。
在带宽可能比较宝贵的应用中,这种方式在应用中消耗带宽和网络时间,例如在低速率的无线链路上。
Modbus在一个数据链路上只能处理247个地址,这种情况限制了可以连接到主控站点的设备数量(再一次指出以太网TCP/IP除外)。
Modbus传输在远端通讯设备之间缓冲数据的方式进行,有对通信一定是连续的限制,避免了传输中的缓冲区漏洞的问题。
Modbus协议自身提供针对未经授权的命令或截取数据没有安全性。
参考资料来源:百度百科-OPC
百度百科-Modbus通讯协议
一准备工作:下载opc基金会的OPC Proxy DLL然后按照说明进行安装。这些动态库是opc程序运行所必须的。
1 将下列文件拷贝至要运行OPC服务器和OPC客户端的机器上的SYSTEM32目录下
copy opcproxydll C:\WINDOWS\system32
copy opccomn_psdll C:\WINDOWS\system32
copy opc_aepsdll C:\WINDOWS\system32
copy opchda_psdll C:\WINDOWS\system32
copy aprxdistexe C:\WINDOWS\system32
copy opcenumexe C:\WINDOWS\system32
2 注册这些 dll 文件
REGSVR32 opcproxydll
REGSVR32 opccomn_psdll
REGSVR32 opc_aepsdll
REGSVR32 opchda_psdll
3 如果在windows 系统(\WINDOWS \system32)目下不存在actxprxydll,运行aprxdistexe
4 安装 opcenumexe
opcenum /regserver
二opcserver开发
1 新建vc工程。比如建一个控制台工程。在工程中包含如下头文件
#include "opcdah"
#include "opc_aeh"
#include "WTOPCsvrAPIh"
#include "WtOPCsvrEXTapih"
以上头文件在例子程序中都能找到,拷贝到自己的工程下。
WTOPCsvrAPIh是开发包动态库提供的导出函数文件。里面有每个函数的具体说明,调用的时候看一下说明。
2 在cpp中定义一个GUID这个guid是用来标识opcserver的唯一id可以通过 *** 作系统的工具生成,也可以编一个。格式如下。
const GUID
CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};
3 在工程中加入对WtOPCSvr动态库的连接。
WTOPCsvr动态库的有关文件都在之前的例子包里面能找到。
WTOPCsvrlib WTOPCsvrdll是对应lib和dll
4 初始化
(1)调用UpdateRegistry()函数完成注册。下面是一个调用参考例子代码
BOOL COPCSimSvrApp::InitInstance()
{
TCHAR szTokens[] = _T("-/ ");
CString HelpPath;
CString SvrName, SvrDescrip;
int i;
HelpPath = AfxGetApp()->m_pszHelpFilePath;
i = HelpPathReverseFind('\\');
HelpPath = HelpPathLeft(i+1);
HelpPath += "OPCSIMSVREXE";
//
// Self-Registration code
// (look for cmdline options to register & unregister server)
//
SvrName = "WinTECHOPCServer";
SvrDescrip = "WinTECH Software OPC Server Simulator";
CString tempCmdLine(m_lpCmdLine);
LPTSTR lpszToken = _tcstok(tempCmdLineGetBuffer(1), szTokens);
while (lpszToken != NULL)
{
if (_tcsicmp(lpszToken, _T("UnregServer"))==0)
{
UnregisterServer ((BYTE )&CLSID_OPCSimSvr, SvrName);
return (FALSE);
}
else if (_tcsicmp(lpszToken, _T("RegServer"))==0)
{
UpdateRegistry ((BYTE )&CLSID_OPCSimSvr,
SvrName,
SvrDescrip,
HelpPath);
return (FALSE);
}
lpszToken = _tcstok(NULL, szTokens);
}
(2)调用InitWTOPCsvr完成开发包dll初始化。
以上两个步骤不可颠倒。
5 创建item
这里的item是服务器所有的item,这些item通过opc库户端能浏览到。创建item的函数为CreateTag()
Opc有两种地址空间形式:扁平和多层结构的。
比如调用创建的点为item1、item2、item3这类结构就是扁平的。各个点类似与文件系统中的文件。
比如调用创建的点为testitem1、testitem2、testitem3这种点名,开发包会自动形成多层的点结构。Test类似与文件系统中的文件夹,item类似与文件系统中的文件夹下的文件。扁平式和多层结构在客户端浏览点名时体现。
多层结构的点名之间默认是用“”分隔。为了简单可以将我们的opcserver设计为扁平结构。
创建一个点时会返回一个handle用来标识这个点。我们程序需要自己建立这个handle和数据库中保存设备实时值的对应关系。这部分可以参考例子代码。
6 建立一个定时器采集设备数据
定时从数据库中取得各个handle对应的item的值。然后比较各个item的值是否和上一次读取的值有变化,如果有变化调用UpdateTagToList放入对应的队列。开发包会自动将变化的值送到客户端。
大致流程为
(1) 从数据库中采集一遍所有点的实时值。
(2) 调用StartUpdateTags()
(3) 循环读取每个item在数据库中的数据,和上一次读取到的进行比较。如果有变化调用UpdateTagToList()
(4) 最用调用EndUpdateTags()完成所有item的更新。
7 客户端控制
客户端写tag的值的时候,在opcserver是通过一个回调函数来响应的。
在服务器端必须调用EnableWriteNotification()来指定写值的回调函数。回调函数的格式为:
typedef VOID (CALLBACK WRITENOTIFYPROC)(HANDLE, VARIANT, DWORD);
然后在回调函数内部实现从HANDLE指定的tag写到具体的控制设备对应的变量中。
8 其它常用函数
RequestDisconnect()一般在opcserver在关闭时调用,用来通知客户端opcserver自己要关闭。
NumbrClientConnections()用来计算当前有多少个客户端连接到了opcserver
UninitWTOPCsvr()程序退出时清理
SetVendorInfo()设置厂商信息
三opc客户端测试
下面以本机opcquickclientexe为例说明服务器和客户端之间的应用关系。
1 运行opcquickclientexe
2 点击edit->new server connection 菜单。d出server properties对话框。从中展开opc data access server version 20会浏览到本机安装的所有opcserver。选中我们自己开发的opcserver,点击确定。完成与服务器的连接
3 点击edit->new group 用默认值添加组。
4 点击edit->new item d出如下对话框。(下图是一个多层结构地址空间的例子,单层的更简单)选中左侧的某个父节点,右侧会显示出各个子tag。选中要向opcserver查询的tag,点击add leaves。然后点击ok
5 在客户端主界面上能看到刚才要查询的tag。它会自动跟随opcserver端数据的变化而变换。
6 右键要控制的tag,在菜单中选择同步写或者异步写(一般建议用异步,避免阻塞客户端的正常运行)。键入要写入的值。查看设备上是否动作。从而检验opcserver是否编写的正确。不同系统间通过远程桌面登陆的用户和在本机上登陆的同一账户的权限是不一样的,所以可能出现能浏览计算机及OPCServer,但不能连接OPCServer,要把OPCServer的DCOM中的配置的改为Interactive的启动方式。本文档根据各种不同的情况,讲述如何进行OPC DCOM配置。
对于远程访问OPC服务器,需要在客户和服务器计算机上都进行DCOM设置,以前我们采用的方式是: 客户、服务器都建立一个名字、密码相同的具有管理员权限的帐号,并分别以次登录,在服务器端将OPC服务器的启动方式设为交互式用户。这种方法虽然方便,但安全性较差,不利于在实际应用中推广。这里提供一些较合理的解决方案。(假定都是在工作组里)
(1) 序言
在使用了OPC技术,并有网络数据访问的应用系统中,不可避免地要进行OPC DCOM权限配置。
DCOM配置与windows *** 作系统的安全体系结合在一起,而各版本的 *** 作系统(9x、NT、2000、XP等)的安全体现又或多或少地有所区别;同时,OPC服务器运行的方式也不尽相同(进程内、进程外、系统服务、有无界面……);而且,不同的应用系统对安全的要求也不同。总之,要想根据具体情况尽量合理地完成OPC DCOM配置并不是一件很轻松的事。
本文档根据各种不同的情况,讲述如何进行OPC DCOM配置。
(2) 准备
要进行DCOM安全配置, *** 作者通常必须拥有客户和服务器计算机的管理员权限。
注意一般情况下,DCOM通信是基于TCP/UDP的,所使用的端口不固定,很可能被一些防火墙软件屏蔽。如果本文下述配置不成功的话,请尝试关闭客户和服务器计算机上的防火墙,或者以带网络连接的安全模式启动系统(这时防火墙软件一般不被自动运行)。
(3) 最简单的情况
如果用户对网络安全基本上没有要求,或者处于客户、服务器程序开发阶段,
(4) 服务器计算机始终有用户登录的情况(NT/2000)
这也是实际应用中比较常见的情况,但对于以NT服务方式运行的OPC服务器不适合。设置方法如下:
Ø 在服务器计算机上建立一个用户,如OPCUser,可以是管理员,也可以是一般用户,服务器计算机在运行OPC服务器时必须以这个用户登录。
Ø 在服务器计算机上建立一个用户组,如OPCClients。
(单一客户情况下可以不建立,建这个组的目的是管理方便)
Ø 在各个OPC客户计算机中,分别建立OPCUser用户,口令也要与服务器上的一致,可以设为普通用户以保证安全。
Ø 客户计算机运行时不必以OPCUser登录,比如使用ClientA登录,就要在服务器上建立相同的用户ClientA及相同的密码。并在服务器计算机上将ClientA加入到OPCClients组中。ClientA在客户和服务器计算机上都可以是普通用户。
Ø 服务器端DCOM配置
运行dcomcnfg,进行如下设置:
默认属性:
启用DCOM;
默认身份验证级别:连接
默认模拟级别:标识
默认安全机制:
默认访问权限:
至少要保证OPCClients组允许访问,也可放宽至Everyone;
默认启动权限:至少保证允许INTERACTIVE用户调用;
默认配置权限:一般情况下不需修改。
默认协议:保证面向连接的TCP/IP在最上,其它可以删除。
具体的服务器配置:
常规:身份验证级别为默认值;
位置:在这台计算机上运行;
安全性:使用默认的访问和启动权限,配置权限不要修改;
身份标识:交互式用户。
终结点:不修改。
OPCEnum程序配置:
在dcomcnfg程序的应用程序列表里找到opcenumexe,对其按照上面具体服务器的配置进行设置。
Ø 客户计算机的配置:
为了保证OPC数据订阅等回调机制能正常运行,需要对客户计算机的DCOM权限进行配置。
默认属性、默认协议的配置和服务器端基本一致;
默认安全机制只需要修改默认访问权限。保证允许OPCUser访问。也可放宽至Everyone。
注意
在服务器没有用户登录的情况下,远程将无法启动OPC服务器;
对于有用户界面,并需要界面交互的OPC服务器,建议(可能必须)采用这种方式。
(5) OPC服务器为后台程序的情况(NT/2000)
这种情况下,服务器计算机可以没有用户登录。
做为后台程序,OPC服务器有两种运行方式:系统服务(service)方式和普通用户程序。
这里只介绍普通程序方式,系统服务方式的配置说明以后添加。
OPC服务器做为普通方式运行的后台程序,一般没有用户界面。完全可以按照(1)中有界面的方式进行配置,即设置为交互式用户启动。
但是(1)的配置方式限定了服务器计算机必须有用户登录,而且登录用户必须在客户计算机上有DCOM访问权限。所以,无界面的后台OPC服务器可以用另一种更灵活的方式运行。
配置方法:(未明确说明的部分与(1)相同)
在服务器端按照(1)中所述建立一个OPCUser用户,专门用来运行OPC服务器。然后在OPC服务器属性配置中,将启动方式改为指定用户,注意要输入用户密码。
这样,OPC服务器计算机可以用任意用户登录,当客户计算机发出连接请求时,系统负责以OPCUser的身份运行OPC服务器,如果已经运行则使用已有的OPC服务器。
注意还有一种启动方式,是“启动”用户。即系统以发连接请求的用户的身份启动OPC服务器,这可能造成服务器计算机上同时运行多个OPC服务器的实例,显然不妥。所以一般情况下不建议设置为“启动”用户,虽然它是缺省选项。
(6) Windows XP系统下的配置说明
在XP *** 作系统(SP1,不包括SP2及其以后版本)下,OPC的配置实际上和NT/2000基本一样,这体现在OPC DCOM相关的各项配置在注册表中的位置、名称都是一致的。
二者只是配置界面不同
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)