Kepware连接OPC服务器设置
<meta name="source" content="lake">
1、打开Kepware软件
2、右键连接性,新建通道,添加通道向导中选择OPC DA Client或者OPC UA Client均可,选择下一步。
3、通道名字起个自己可以识别的名字,如果是工业互联网现场实施需要预先制定驱动命名规范。
4、Server Browse中选择需要连接的OPC服务
5、添加设备,设备名字按照要求设置,其他默认,在Import Items中选择需要连接的点位。
6、到这一步OPC服务的连接就建好了,下一步可以用OPC Client监视模拟的点位的状态了。
远程访问
OPC SERVER DCOM
的配置
一、在装有
OPC
服务器的机器上
DCOM
1
运行服务器上的
dcomcnfg
程序,进行
DCOM
配置。
2
进入
DCOM
的总体默认属性页面,将“在这台计算机上启用分布式
COM”打上
勾,将默认身份级别改为“无”。
3
进入
DCOM
的总体默认安全机制页面,
确认默认访问权限和默认启动权限中的
默认值无
EveryOne
,
如果不去掉
EveryOne
,应用服务器不能正常启动。
4
在常规页面中,
双击你的应用服务器
(
opc20ifix
)
,
打开你的应用服务器
DCOM
属性设置。
5
将常规页面中的身份验证级别改为“无”。
6
位置页面中选上“在这台计算机上运行应用程序”。
7
将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将
EveryOne
加入用户列表中
8
身份标识页面中,选择“交互式用户”。
注意NT的
GUEST
用户不能禁用。
二、在客户端机器上
DCOM
1
后点”开始”
-
>”运行”
,
输入”dcomcnfg”,然后回车,启动
dcom
配
置。
2
.
常规页面中,双击你的应用服务器(
Matrikon opc server simulation and
testing
),打开你的应用服务器
DCOM
属性设置。
3
.
将常规页面中的身份验证级别改为“无”。
4
.
身份标识页面中,选择“交互式用户”。
5
.
位置页面中
,
选择“在这台计算地方工具栏,机上运行应用程序”。
进入
DCOM
的总体默认属性页面,将“在这台计算机上启用分布式
COM”打上勾,
将默认身份级别改为“无”。
两端配置好后,客户端机器就可以访问远方机器的
OPCSERVER
了。
另外,
远程的计算机必须在本机的网络邻居里看的到,
而且登陆两台计算机的用
户名和口令必须完全相同。
补充
关于补充
XP2
、
XP3
进行
OPC
通信时的
DCOM
配置要素
经验一、客户端连接目标机器的
OPC
服务器时,客户端
(FactorySoft
OPC Client)
提示:
EnumClassesOfCategories failed:
拒绝访问
解决办法:
在用户权限
(OPCServer
计算机
)
上,
找到
控制面板—管理
工具—本地安全策略—安全选项—网络访问:
本地账户的共享和安全
模式
改为:经典
-
本地用户以自己的身份验证
或者:
确保双击我的电脑—工具菜单—文件夹选项—查看标签—下面
的使用简单文件共享
(
推荐
)
不要打√
经验二、连接
YOKOGAW
A
的
CS3000
或其它型号的
OPCServer
时,
尽最大可能在
OPCClient
机器安装由
OPCServer For CS3000
机器上,
生成的一个客户端
CENTUM
用户安装盘;
OPCServer For CS3000
机器操作步骤简述:
(1)
将一个格式化过的软盘插入
OPCServer For CS3000
的计算机中
(2)
运行
CS3000/CS1000\Program\BKHCOPYOPCexe
(3)
按“
OK
”键,开始生成一个客户端
CENTUM
用户安装盘
备注:安装后的
CENTUM
用户在控制面板—用户账户是看不到的,
你可以在右击我的电脑—管理—本地用户和组—用户—这时你就可
以看到
CENTUM
用户了,但这个用户,界面显示不隶属于任何账户
另外,安装后的
CENTUM
用户密码也是:
CENTUM
,请你不要随意
改变。
再另外,产生的这个
OPCClient
端
CENTUM
用户安装盘,包括一个
INSTALL
文件夹和一个
SETUPEXE
文件,
必须将这两个文件放置于
盘符的根目录下,如
C:\\
或
D:\\
或
A:\\
经验三、
必须严格确信
OPCClient
端和
OPCServer
端使用了一模一样
的
Adminstrator
用户和密码
经验四、
OPC
客户端
Guest
用户不要启用
一准备工作:
下载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 菜单。弹出server properties对话框。从中展开opc data access server version 20会浏览到本机安装的所有opcserver。选中我们自己开发的opcserver,点击确定。完成与服务器的连接
3 点击edit->new group 用默认值添加组。
4 点击edit->new item 弹出如下对话框。(下图是一个多层结构地址空间的例子,单层的更简单)选中左侧的某个父节点,右侧会显示出各个子tag。选中要向opcserver查询的tag,点击add leaves。然后点击ok
5 在客户端主界面上能看到刚才要查询的tag。它会自动跟随opcserver端数据的变化而变换。
6 右键要控制的tag,在菜单中选择同步写或者异步写(一般建议用异步,避免阻塞客户端的正常运行)。键入要写入的值。查看设备上是否动作。从而检验opcserver是否编写的正确。
opc通讯协议传数据步骤:1、从数据库读取数据,放入程序内存。(通常技术)2、建立OPC Client连接OPC server,将数据写入OPC server。 本人靠这个吃饭。步骤告诉你了。如果想要现成的程序,那是要付费的哦。
扩展资料
OPC是世界上最受欢迎的基于标准的数据通信方法。它旨在解决自动化行业中的最大的挑战:如何摆脱传统的基于特制驱动器的通信方式,在不同设备、控制器、和/或应用程序之间实现通讯。
OPC之所以能够成功地创造真正独立于供应商的通讯是因为,OPC从双方提取了数据发送设备(例如PLC)和数据接收端(例如HMI)的执行细节,因此可以在它们之间进行数据交换而不需要了解彼此的本地通信协议和内部数据组织形式。
这与特制驱动器的要求满足只针对于通信方两端的编写方法形成了鲜明的对比。OPC可以代表为一个位于数据发送端和数据接收端之间的“提取”界面,这个界面允许在数据发送端和数据接收端之间交换数据而不需要对对方有任何了解。
OPC的“设备细节提取”是通过运用两个称为OPC客户端和OPC服务器的OPC构件得以实现的。其中每一个构件将在以下章节予以描述。需要注意的是,数据发送端和数据接收端能够彼此通过OPC进行通讯并不意味着它们各自的本地协议就不需要了,或者是被OPC取代了。
相反,这些本地协议和/或接口仍然存在,但只是与两个OPC构件的其中某一个通讯。然后,OPC构件之间进行数据交换,从而结束数据传递。数据也可以从应用程序端被传输至设备,而不需要彼此直接联系。
0条评论