冠冕堂皇

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  from:http://www.wangchao.net.cn/bbsdetail_72542.html

  这个……从哪里说起呢……
  突然要写一个OPC Client,于是,就开始写了-v-
  开发工具:
  我用VC6比较熟,那就用这个了。
  OPC Client可以用两种接口Curstom interface和automation interface,既然用的是VC就可以直接用Curstom interface。
  OPC动态连接库:
  opc_aeps.dll
  opccomn_ps.dll
  opchda_ps.dll
  opcproxy.dll
  aprxdist.exe
  opcenum.exe
  全部先装上。
  资料:
  这个是一定要的了:OPC DA 2.05a Specification.pdf,连官方文档都没有,怎么混得下去。
  顺便:www.opcfoundation.org,这个是OPC官方网站。
http://www.gongkong.com/tech/default.asp,中国工控网的OPC区也有不少资料。
  需要完成的功能:
  1. 连接,远程连接。
  2. 建组,删组,建项,删项。
  3. 遍历服务器点。
  4. 读,写,自动刷新点。
  那么,就开始写了:
  1. 先Get服务的CLSID,没有这个就连不上接口了。
  2. 通过CoCreateInstanceEx得到接口,需要用到的OPC接口有这么几个:
  IOPCServer(Server管理), 
  IOPCItemMgt(Item管理),
  IOPCBrowseServerAddressSpace(浏览服务器点),
  IOPCAsyncIO2(异步读写),
  IOPCSyncIO(同步读写),
  IOPCDataCallback(数据Callback)
  3. 成功得到IOPCServer就说明连接成功了。
  4. m_pIServer->AddGroup(),增加组,并得到IOPCItemMgt接口。
  5. m_pItemMgt->AddItems(),增加项。
  6. 可以用IOPCBrowseServerAddressSpace接口来得到项路径。
  服务器上项的存放是以树的形式。
  m_pIBrowse->ChangeBrowsePosition():到指定的位置。
  m_pIBrowse->BrowseOPCItemIDs():得到某一层的所有节点。
  7. 同步异步方式的读写。
  pIAsync2->Read(), pIAsync2->Write(), pISync->Read(), pISync->Write()
  8. 通过IOPCDataCallback::OnDataChange()来进行数据的自动刷新。
  以上,完成了。
  这里只是对步骤和要用到的接口做个简单的介绍。
  查找和阅读资料用了2天,写程序用了3天,做了一些简单的封装,现在凑活可以用了。
  希望对急着几天要K一个OPC Client的朋友能有所帮助。(王朝网络 wangchao.net.cn)

posted on 2013-03-29 14:25  冠冕堂皇  阅读(1025)  评论(1)    收藏  举报