怎样用Delphi编写OPC客户端??我是想通过用DELPHI写的OPC的客户端程序来 采集WINCC里的OPC SERVER的变量的值.请问有人知道用Delphi编写OPC客户端??

解决方案 »

  1.   

    http://www.autocontrol.com.cn/book/doc/04.06/13.doc
      

  2.   

    在VC环境中使用定制接口开发OPC客户应用程序,下面是程序实现的关键步骤。 
    4.1  包含OPC头文件 
    开发OPC客户应用程序,除了需要OPC接口外,还需要在程序中包含OPC标准库文件,可以从OPC基金会网站(网址:www.opcfoundation.org)下载这些文件: 
    #include "opcda_i.c"    OPC数据存取接口 
    #include "opcda.h"      OPC数据存取2.0头文件 
    #include "opccomn_i.c"  OPC公共接口定义 
    #include "opccomn.h"    OPC公共头文件 
    4.2  初始化COM支持库 
    由于OPC是基于COM技术制定,所以在使用接口类之前必须首先使用CoInitialize(NULL)函数初始化COM库,如果成功,函数返回值等于S_ OK。 
    4.3  连接opc服务器 
    OPC 客户能够连接到OPC服务器上,并建立OPC组和OPC数据项,这是OPC数据访问的基础,如果没有这个机制,数据访问的其它机能不可能实现[4]。连接 OPC服务器,OPC客户需要事先指定计算机名(如果OPC服务器和OPC客户不在同一台计算机上)和OPC数据访问服务器名 (RSI.RSView32OPCTagServer)。实现代码如下: 
    ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown) 

    CLSID OPCCLSID; 
    HRESULT hRet=CLSIDFromProgID(ProgID,&OPCCLSID); 
    //将字符串ProgID转换为唯一OPCCLSID 
    if(IsRemote) 
    //opc服务器和opc客户不在同一台计算机上 
    {    
    COSERVERINFO ServerInfo; 
    memset(&ServerInfo,0,sizeof(ServerInfo)); 
    ServerInfo.pwszName=T2OLE("ServerComouter"); 
    MULTI_QI qi[1]; 
    memset(qi, 0, sizeof(qi)); 
    qi[0].pIID=&IID_IUnknown; 
    HRESULT hRet=CoCreateInstanceEx(OPCCLSID,NULL,CLSCTX_REMOTE_SERVER, 
    &ServerInfo,1,qi); 
    *ppUnknown=qi[0].pItf; 
    }  
    else 
    //opc服务器和opc客户在同一台计算机上 

    hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown, 
    (void **)ppUnknown); 

    }  
    4.4  创建OPC组 
    IOPCServer接口的AddGroup()方法可以创建一个有指定名称和属性的OPC组。在调用该方法之前,可以使用上一步得到的Iunknown接口指针,通过QueryInterface()方法请求IOPCServer接口指针。代码如下:    
    ppUnknown->QueryInterface(IID_IOPCServer,(void **)&pServer); 
    //得到IOPCServer接口指针 
    pServer->AddGroup(L"",TRUE,500,1235,&lTimeBias,&fTemp,0,&hOPCServerGroup,  &dwActualRate,IID_IOPCItemMgt,& pOPCItemMgt); 
    4.5  添加数据项 
    IOPCItemMgt接口的AddItem()方法可以添加具有特殊属性的指定数量的数据项。 
    pOPCItemMgt->AddItems(ItemNumber,ItemArray, 
    (OPCITEMRESULT**)&pItemResult,(HRESULT **)&pErrors); 
    ItemArray 为OPCITEMDEF类型结构数组,它包含数据项的详细信息,客户需要知道要进行交换的数据在RSView32标签数据库中的名称、数据类型及作为 OPC服务器的RSView32项目名称。添加数据项之前,要用这些数据项信息对ItemArray结构数组进行初始化。 
    4.6  数据交换 
    成功地增加完所需要的数据项后,OPC客户(VC应用程序)和OPC服务器(RSView32)就可以进行数据交换了。在数据量不大的情况下,可以使用 IOPCSyncIO同步接口的Write()和Read()两个方法进行数据的读写操作,从而实现OPC客户(VC应用程序)和OPC服务器 (RSView32)之间的数据交换。代码如下: 
    ppUnknown->QueryInterface(IID_IOPCSyncIO,(void **)&pOPCSync); 
    //得到IOPCSyncIO接口指针 
    pOPCSync->Read(OPC_DS_CACHE,ReadNumber,hServerRead,&pItemValue,&pErrors); 
    //读ReadNumber个数据 
    pOPCSync->Write(WriteNumber,hServerWrite,WriteValue,&pErrors); 
    //写WriteNumber个数据 
    4.7  释放接口指针 
    在VC应用程序停止运行之前必须使用Release()方法删除已创建的OPC对象并释放内存。 5  结束语 
    OPC技术规范把硬件供应商和应用软件开发者分离开来,使得双方的工作效率都有了很大提高。软件开发商无需了解硬件的实质和操作过程,就能访问OPC数据服务器中的数据,尤其是开发商在已使用了组态软件进行实时监控的过程控制系统基础上,用C++等高级语言开发系统时,大大简化了过去从设备传输数据的复杂过程。在某铝厂的自动配料系统开发中,应用OPC技术方便地实现了VC应用程序和RSView32的数据交换,间接地实现了VC应用程序与PLC的通信,获得了很好的结果。
      

  3.   

    最好能有在DELPHI里面的介绍,我用的DELPHI来开发的。
      

  4.   

    请问是不是一定要有一个OPCClient.dll 或 OPCClient.ocx 方面的东西才能做吗?
      

  5.   

    不知道有没有支持delphi的包文件
    如果你有就按上面的开发
    如果没有你自已到网上找找
      

  6.   

    怎样用Delphi写OPC客户端??通过OPC实现DELPHI与西门子WinCC软件的通信。
    谁能给出优化了的源代码?? 请高手指教
      

  7.   

    在Delphi7 中注册了OPCDAAuto.dll后,在 active面板里出现OPCSERVER,OPCGroup,OPCGroups 三个组件,请问然后要怎么开始OPC CLIENT 的编??
      

  8.   

    你把Simple OPC Client的源码下载下来看看
      

  9.   

    因为我安装了WINCC,所以有OPCDAAuto.dll,它是一个Active 控件。
      

  10.   

    http://www.163vc.com/Article/biancheng/zh/200611/42692.html
    这个是那个控件的简单连接opc例子
    各个控件使用方法去他们主站下好了http://www.iocomp.com/
    我前几天刚回答过一个类似的,最近都转行做自动化了吧,用dde也可以与组态软件(组态王,rsview232)进行数据交换,wincc不知道行不,wincc和excel的连接不错,也可以考虑通过这个中转
      

  11.   

    Simple OPC Client的那个程序只能连接本地的OPC服务器?
    “brightyang(伊莎贝尔)”提供的办法看起来似乎可行,不过其中有几个变量没找到在哪里定义:&IID_IUnknown、IID_IOPCServer……
      

  12.   

    提供这方面的技术支持,联系方式E-MAIL:[email protected]
                                  msn:[email protected]
      

  13.   

    到什么地方看有用的,关于delphi