vb opc客户端源码报错,求助

22:29 提问
JAVA OPC客户端远程调用OPC服务端问题
引用JEasyOpc的代码,在OPC服务端本地可以运行成功,但远程访问却报如下错误。
javafish.clients.opc.exception.ConnectivityException: The connection to the OPC Server has failed: 172.20.4.11-&ABB.AfwOpcDaSurrogate
at javafish.clients.opc.JCustomOpc.connect(JCustomOpc.java:204)
at javafish.clients.opc.SynchReadItemExample.main(SynchReadItemExample.java:30)
javafish.clients.opc.exception.UnableAddGroupException: Unable to register some group to server.
at javafish.clients.opc.JOpc.registerGroups(JOpc.java:293)
按赞数排序
package javafish.clients.
import javafish.ponent.OpcG
import javafish.ponent.OpcI
import javafish.clients.ponentNotFoundE
import javafish.clients.opc.exception.ConnectivityE
import javafish.clients.opc.exception.SynchReadE
import javafish.clients.opc.exception.UnableAddGroupE
import javafish.clients.opc.exception.UnableAddItemE
import javafish.clients.opc.variant.V
public class SynchReadItemExample {
public static void main(String[] args) throws InterruptedException {
SynchReadItemExample test = new SynchReadItemExample();
JOpc.coInitialize();
JOpc jopc = new JOpc("172.20.4.11", "800Service", "JOPC1");
OpcItem item1 = new OpcItem("[DIRECT][Control Structure]Root.PLC_connect.OPC.TS1_DCU10.5AA10", true, "");
//OpcItem item1 = new OpcItem("Random.Real8", true, "");
//OpcItem item1 = new OpcItem("Random.String", true, "");
OpcGroup group = new OpcGroup("group1", true, 500, 0.0f);
group.addItem(item1);
jopc.addGroup(group);
**jopc.connect();//报错**
System.out.println("JOPC client is connected...");
catch (ConnectivityException e2) {
e2.printStackTrace();
jopc.registerGroups();
System.out.println("OPCGroup are registered...");
catch (UnableAddGroupException e2) {
e2.printStackTrace();
catch (UnableAddItemException e2) {
e2.printStackTrace();
synchronized(test) {
test.wait(50);
// Synchronous reading of item
int cycles = 7;
int acycle = 0;
while (acycle++ & cycles) {
synchronized(test) {
test.wait(1000);
OpcItem responseItem = jopc.synchReadItem(group, item1);
System.out.println(responseItem);
System.out.println(Variant.getVariantName(responseItem.getDataType()) + ": " + responseItem.getValue());
catch (ComponentNotFoundException e1) {
e1.printStackTrace();
catch (SynchReadException e) {
e.printStackTrace();
JOpc.coUninitialize();扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
opc客户端与服务器建立连接opc客户端在每次与服务器建立连接时,就弹出“由于另一个程序正在运行中,此操作无法完成”。这是怎么一回事?
wjvgvcn119
扫二维码下载作业帮
1.75亿学生的选择
服务器的话要看,如果是client-server结构的DCS,服务器位于上位和控制器之间,他将你的指令和现场数据通过服务器来经过交换,服务器一般是冗余配置,如果是并行结构来说没有所谓服务器的概念,只有个工程师站,程序...
为您推荐:
扫描下载二维码OPC协议(7)
& & OPC的环境配置还是比较简单的,但是需要注意几点问题:
& & 1、首先是OPC客户端的用户名和密码需要和OPC服务器端的用户名和密码相同,而且需要赋予管理员权限,笔者也不是特别清楚这么做的原因是什么,但是如果没有这么配置的话,根本获取不到OPC的服务器列表。索性这样配置比不配置要好。
& & 2、WINDOWS防火墙一定要关闭,在我的电脑(计算机)-&控制面板-&系统和安全-&WINDOWS防火墙-&打开或关闭Windows防火墙,两项都要关闭。
& & 3、DCOM安全设置,在开始-&运行中输入dcomcnfg,弹出DCOM安全设置窗口。
& & 在属性-&默认属性中进行如下配置:
& & 在属性-&默认协议中把DCOM协议改为面向连接的TCP/IP协议,如果没有的话,在下面的“添加”里面进行添加:
& & 在属性-&COM安全中,进行配置:
& & 如上图所示,分别有四项,访问权限的编辑限制和编辑默认值,和启动和激活权限的编辑限制和编辑默认值,Google一下的话,配置方式不一,笔者综合了一下,四项都分别添加了ANONYMOU LOGON、Everyone、INTERACTIVE、Administrator(当前登录的管理员帐户),把这些用户的权限全部勾选,一切OK。
& & 在我的电脑-&Distributed Transaction Coordinator-&本地DTC的属性中进行设置:
& & 在安全选项卡下配置结果如下:
& &&如此,则完成了第三步的配置。
& &4、本地安全策略设置,在我的电脑-&控制面板-&系统和安全-&管理工具-&本地安全策略中,打开本地策略-&安全选项,在网络访问:本地帐户的共享和安全模型,更改为经典-对本地用户进行身份验证,不改变其本来身份,这项基本上是默认设置,但是非常重要。
& & 到此,OPC客户端运行环境配置完毕。如果是OPC服务器的话,还需要在DCOM安全设置中针对具体的OPC服务器进行权限设置,因为网络上资料很多,笔者在此不做详细叙述。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:15933次
排名:千里之外
转载:15篇
(4)(2)(1)(1)(1)(1)(10)(4)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
& & 注意事项:& & 设计时需要注意OPC对象的VARAINT结构类型、引用计数问题、内存管理问题和处理错误返回代码问题。由于一个OPC客户程序可能与多个OPC服务器相连,因此设计时也最好采用多线程,同时与多个OPC服务器程序进行交换以保证较高的通信效率。另外客户程序中OPC接口部分如何与其它功能模块进行数据交换需要根据实际情况仔细考虑。2.1 使用MFC的COM库函数开发OPC客户端& & 直接使用COM库函数开发OPC客户端,是最基本也是最灵活的方式,这种开发方式难度和工作量都大,要求开发人员对OPC规范和COM技术原理又比较深入的了解。早些时候VisualC++编译器还不支持模板,因此,它们不得不借助非模板的其它手段来将COM功能掺入类中。Microsoft通过加入一些虚函数到CCmdTarget类和一些宏中解决了这个问题,使得在MFC中实现COM接口有了可能。& & 客户要创建一个COM对象首先应得到类厂对象,再由类厂对象创建COM对象。为了实现类厂对象,MFC提供了一个通用的类厂COleObjectFactory,其从CCmdTarget派生,并实现了IclassFactory2接口。在COleObjectFactory的成员中,最主要的是对象的类标识符(CLSID)和类型信息,类厂的CreateInstance成员函数利用这些信息在运行中创建COM对象。& & OPCServer应用程序包括了一个Server对象、多个Group对象、多个Item对象,Server对象实现IOPCServer接口;Group对象实现IOPCItemMgt、IOPCSyncIO接口;Item对象不实现任何接口,只是建立与数据源的连接。& & 数据通信是通过OPC客户对OPC服务器的多次调用完成的。OPC客户首先要通过类厂对象创建OPCServer对象,由OPCGroup对象的IUnknown接口查询到IOPCServer接口,再通过调用这一接口根据客户需要增加多个OPCGroup对象;这样OPC客户就可以通过创建的OPCGroup对象调用IOPCItemMgt接口增加实际数量的Item对象;即创建OPCItem对象;接着通过调用OPCGroup对象的IOPCSyncIO接口成员函数Read和Write同步读写该组所包含的Item对象的属性,即实际数据值;最后OPC客户在退出时释放所有的接口并依次删除OPCItem、OPCGroup和OPCServer对象。& & 客户端程序与OPC数据存取服务器连接的过程:& & 步骤1:初始化COM库。& & hr=CoInitialize(NULL);& & if(FAILED(HR))& & {& & & &AfxMessageBox(“CoInitialize fail!”)& & & & & & & && & &}& & …….& & CoUninitialize();& & return FALSE;& & 步骤2:创建Server对象(以下代码均略去变量定义、出错处理等部分)。& & CLSIDFromProgID(PROGRAM_ID,&clsid);& & HRESULT hr=CoCreateInstance & (clsid,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,reinterpret_cast&void**&(&m_pUnknown));& & if(FAILED(hr))& & MessageBox(“can't create server”);& & return TRUE;& & 步骤3:获得IOPCServer 接口。& & m_pUnknown-&QuertyIterface(IID_IOPCServer,( void**)(&m_pServer));& & 步骤4:添加组& & m_pServer-&AddGroup(“GROUP”,TURE,CLIENT_RATE,1,NULL,NULL,O,&m_hGroup,&revisedUpdateRate,ID_IOPCItemMgt,(LPUNKNOWN*)(&m_pItemMgt));& & 步骤5:添加其他接口& & m_pItemMgt-&QueryInterface(IID_IOPCSyncIO, ( void**)(&m_pSyncIO));& & m_pItemMgt-&QueryInterface(IID_IOPCASyncIO, ( void**)(&m_pASyncIO));& & 利用IOPCServer接口,可以实现增加或删除组对象等管理功能;利用IOPCItemMgt接口在组中可以实现增加(IOPCItemMgt::AddItems()、删除(IOPCItemMgt::DeleteItems())及管理项等功能,利用IOPCSyncIO和IOPCASyncIO可进行数据的同步或异步读写操作,不多赘述。2.2 通过创建包装类实现客户端& & 利用#import伪指令引入类型库,编辑器从类型库中读取信息并且创建包装类。不仅可以对类型库文件(.tlb)使用#import指令,也可以对组件DLL或EXE文件,甚至支持类型库的复合文件和LoadTypeLib函数可以理解的任何其他文件格式使用#import指令。#import指令将产生两个文件,他们位于输出路径,和类型库具有相同的名称,后缀分别为“.tlh”和“.tli”。用#import指令引入类型库时,在StdAfx.h文件中添加:#import “...\...\OPCServer\OPCServer.tlb”\,其他步骤代码类似COM库函数开发方式。& & 包装类封装了COM库函数,Visual C++客户程序通过包装类访问组件提供的属性和方法。虽然中间多了一层,但对客户程序开发人员来说,却方便多了。#import指令利用了一个新的类:_com_ptr_t,也被成为智能指针,是一个模板类,它封装了接口指针并提供了一些方法和重载操作符来简化指针的操作。智能指针自动执行COM的CoCreateInstance和QuertyIterface、AddRef和Release函数。要实现异常处理,可使用try/catch块。在catch块中,异常对象类型为_com_error对象。_com_error类封装了HERSULT错误代码和IerrorInfo接口提供的相关环境信息。用#import伪指令,使得在Visual C++中使用代码组件和在VBA中一样方便,而且不需要在工程中对组件进行源代码维护。2.3 利用第三方的动态连接库或工具包快速开发OPC客户端& & 互联网上有一些OPC客户端和服务器的开发工具包(ToolKit),利用这些工具包可以快速地开发OPC程序,但这些工具包大多需要付费。Factory Soft还开发了比较通用的服务器和客户端的快速开发工具,文献[4]介绍了把它用于先进控制软件平台的开发和应用情况,但这个开发工具价格昂贵,不适合中小型系统的自主开发。也有一些是免费的客户端程序和可产生仿真数据的服务器程序以及一些测试评价工具。比如Wintech OPC Server Client Develop Kit (1.0),其源代码可从http://www.csdn.net或http://www. /index.htm 下载,解压缩后需注意四个文件:WTclient.dll、Wtclient lib文件、WTclientAPI.h、Wtclient Word文档。WTclientAPI.h 定义了部分API函数,这些API函数的实现以DLL的形式封装起来,详见WTclient DLL User
阅读(473)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'OPC DA客户端的三种实现方式',
blogAbstract:'.cn/dianqi/OPC/310.htmlOPC DA客户端的三种实现方式时间: 来源:未知 编辑:电气自动化技术网 点击:301次 字体设置: 大 中 小',
blogTag:'opc',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:2,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 opc客户端软件 的文章

 

随机推荐