这个……从哪里说起呢……
突然要写一个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的朋友能有所帮助。