HRESULT rl;
rl=CoInitialize(NULL);
rl=CoGetMalloc(MEMCTX_TASK,&g_pIMalloc);
Step.2
每个COM 服务器有一个ProgID 通过它可以得到一个全球唯一的CLSID 用
CLSIDFromProgID()函数可以实现这个变换ProgID 用变量szName 进行参数传
递在示例程序中它的值是L”OPC.SimaticNET”
m_Popc
rl=CLSIDFromProgID(szName,&clsid);
Step.3
CoCreateInstance()函数创建一个类实例其CLSID 值设定如下:
r2=CocreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnkown,
(void**)&Punk);
这段程序的结果是一个指向服务器对象IUnknown 接口的指针变量pUNK
Step.4
从IUnkown 接口通过QueryInterface()方法可以得到其它接口的指针
HRESULT r3;
r3=pUNK->QueryInterface(IID_IOPCServer , (void **)&m_Popc);
这段程序的结果是得到一个指向服务器对象IOPCServer 接口的指针(变量m_Popc)
Step.5
IOPCServer 接口的AddGroup()方法可以创建OPC 组
m_pItemMgt)
HRESULT r1;
r1=m_Popc->AddGroup(szName,TRUE,500,1,&TimeBias,
&PercDeadband,dwLCID,&m_GrpServerHandle,
&RevUpRate,IID_IOPCItemMgt,
(LPUNKNOWN*)&m_pItemMgt);
这段程序的执行结果是创建一个有指定名称和属性的组在返回的参数中有一
个指向所需要的进程组对象接口的指针在这里是IOPCItemMgt(变量
Step.6
IOPCItemMgt 接口有AddItem()方法可以创建OPC 项
HRESULT r1;
r1=m_pItemMgt->AddItems(NumItems,pItems, &m_pItResult,&pErrors);
这段程序的结果是创建有特殊属性的指定数量的项除此之外事件结构变量
m_pItResult 服务器句柄目标系统上的项数据类型等也被赋值
用于执行所需操作的指针需要通过现有的指向IOPCItemMgt 接口的指针得到如
如果用户要进行异步通信就需要指向IOPCAsyncIO 接口的指针
HRESULT rl;
r1=m_pItemMgt->Queryface(IID_IOPCAsyncIO, (void * *) & pAsyncIO);
通过该接口的Read() 和Write()两个方法可以读写项的数值
r2=pAsyncIO->Read(m_dwConnection,OPC_DS_CACHE,dwNumItems,phServer, &m_TransactionID,&pErrors);
这段程序的执行结果是OPC 项的数据被送到客户程序的IAdviseSink 接口
Step.7
在程序停止运行之前必须删除已创建的OPC 对象并释放内存到目前为止用到
的各种接口都有相应的函数
5.4 r1=m_pItemMgt->RemoveItems(dwNumItems,phServer,&pErrors);
r1=m_Popc->RemoveGroup(m_GrpServerHandle,TRUE);
m_pItemMgt->Release();
m_pOPC->Release();
VB DEMO!!!!!
STEP_1:Init Server!!
Set Svr=CreateObject(ProgID)
STEP_2:AddGroup!!
Set Group=Svr.AddGroup "szTaoYanBinGRP" false RateRequested,GroupClientHdl, PercentDeadband, dwLangId_ENGLISH,GroupServerHdl, RateRevised
Set PtrItemMgt =Group
STEP_3:AddItems!!!
ItemsActive(0)= True: ItemsActive(1)= True
PtrItemMgt.AddItems NbrItems, ItemsIDs,ItemsActivity, ItemsClientHdls,ItemsSvrHdls, ItemsErrors, ItemsObjects, accessPath
STEP_4:Read&Write Items!!!!
Set ptrSyncIO = group
WHILE (true)
PtrSyncIO.OPCRead OPC_DS_DEVICE, NbrItems, ItemsSvrHdls,pValues, pQualities, pTimeStamps, ItemsErrors
WEND
STEP_5: Free Group&Items!!!!!!
Svr.RemoveGroup GroupServerHdl, False
Set Group = Nothing
Set Svr = NothingS
OPC HTML DEMO
szTaoyanbin注,把OPC SEVER作为JAVA小程序的插件,加入HEML中,OBJECT的标记名称定义为GRP1则可!!!!!
<Script Language="VBScript"><!--
Dim Item1
Dim Server
Dim fValue
Dim ItemValue
Sub Window_OnLoad()
Server = "szTaoYanBin_Group"
GRP1.Init Server, ""
GRP1.AddItem "", Item1
GRP1.Read
fValue = GRP1.GetValue(Item1)
GRP1.Start 500
End Sub
Sub Window_OnUnload()
GRP1.Stop
End Sub
Sub GRP1_OnGroupChange()
fValue = GRP1.GetValue(Item1)
End Sub
--></Script>
HRESULT rl;
rl=CoInitialize(NULL);
rl=CoGetMalloc(MEMCTX_TASK,&g_pIMalloc);
Step.2
每个COM 服务器有一个ProgID 通过它可以得到一个全球唯一的CLSID 用
CLSIDFromProgID()函数可以实现这个变换ProgID 用变量szName 进行参数传
递在示例程序中它的值是L”OPC.SimaticNET”
m_Popc
rl=CLSIDFromProgID(szName,&clsid);
Step.3
CoCreateInstance()函数创建一个类实例其CLSID 值设定如下:
r2=CocreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnkown,
(void**)&Punk);
这段程序的结果是一个指向服务器对象IUnknown 接口的指针变量pUNK
Step.4
从IUnkown 接口通过QueryInterface()方法可以得到其它接口的指针
HRESULT r3;
r3=pUNK->QueryInterface(IID_IOPCServer , (void **)&m_Popc);
这段程序的结果是得到一个指向服务器对象IOPCServer 接口的指针(变量m_Popc)
Step.5
IOPCServer 接口的AddGroup()方法可以创建OPC 组
m_pItemMgt)
HRESULT r1;
r1=m_Popc->AddGroup(szName,TRUE,500,1,&TimeBias,
&PercDeadband,dwLCID,&m_GrpServerHandle,
&RevUpRate,IID_IOPCItemMgt,
(LPUNKNOWN*)&m_pItemMgt);
这段程序的执行结果是创建一个有指定名称和属性的组在返回的参数中有一
个指向所需要的进程组对象接口的指针在这里是IOPCItemMgt(变量
Step.6
IOPCItemMgt 接口有AddItem()方法可以创建OPC 项
HRESULT r1;
r1=m_pItemMgt->AddItems(NumItems,pItems, &m_pItResult,&pErrors);
这段程序的结果是创建有特殊属性的指定数量的项除此之外事件结构变量
m_pItResult 服务器句柄目标系统上的项数据类型等也被赋值
用于执行所需操作的指针需要通过现有的指向IOPCItemMgt 接口的指针得到如
如果用户要进行异步通信就需要指向IOPCAsyncIO 接口的指针
HRESULT rl;
r1=m_pItemMgt->Queryface(IID_IOPCAsyncIO, (void * *) & pAsyncIO);
通过该接口的Read() 和Write()两个方法可以读写项的数值
r2=pAsyncIO->Read(m_dwConnection,OPC_DS_CACHE,dwNumItems,phServer, &m_TransactionID,&pErrors);
这段程序的执行结果是OPC 项的数据被送到客户程序的IAdviseSink 接口
Step.7
在程序停止运行之前必须删除已创建的OPC 对象并释放内存到目前为止用到
的各种接口都有相应的函数
5.4 r1=m_pItemMgt->RemoveItems(dwNumItems,phServer,&pErrors);
r1=m_Popc->RemoveGroup(m_GrpServerHandle,TRUE);
m_pItemMgt->Release();
m_pOPC->Release();
VB DEMO!!!!!
STEP_1:Init Server!!
Set Svr=CreateObject(ProgID)
STEP_2:AddGroup!!
Set Group=Svr.AddGroup "szTaoYanBinGRP" false RateRequested,GroupClientHdl, PercentDeadband, dwLangId_ENGLISH,GroupServerHdl, RateRevised
Set PtrItemMgt =Group
STEP_3:AddItems!!!
ItemsActive(0)= True: ItemsActive(1)= True
PtrItemMgt.AddItems NbrItems, ItemsIDs,ItemsActivity, ItemsClientHdls,ItemsSvrHdls, ItemsErrors, ItemsObjects, accessPath
STEP_4:Read&Write Items!!!!
Set ptrSyncIO = group
WHILE (true)
PtrSyncIO.OPCRead OPC_DS_DEVICE, NbrItems, ItemsSvrHdls,pValues, pQualities, pTimeStamps, ItemsErrors
WEND
STEP_5: Free Group&Items!!!!!!
Svr.RemoveGroup GroupServerHdl, False
Set Group = Nothing
Set Svr = NothingS
OPC HTML DEMO
szTaoyanbin注,把OPC SEVER作为JAVA小程序的插件,加入HEML中,OBJECT的标记名称定义为GRP1则可!!!!!
<Script Language="VBScript"><!--
Dim Item1
Dim Server
Dim fValue
Dim ItemValue
Sub Window_OnLoad()
Server = "szTaoYanBin_Group"
GRP1.Init Server, ""
GRP1.AddItem "", Item1
GRP1.Read
fValue = GRP1.GetValue(Item1)
GRP1.Start 500
End Sub
Sub Window_OnUnload()
GRP1.Stop
End Sub
Sub GRP1_OnGroupChange()
fValue = GRP1.GetValue(Item1)
End Sub
--></Script>