发表于:2007-02-12 12:33:00
楼主
Visual Basic程序刚开始运行时就已经自动初始化COM库,用New关键词生成OPC服务器对象,获得OPC服务器对象初始接口的指针,通过接口指针就可以调用该接口的方法。在Visual Basic 6.0中,如果要调用其它接口的方法,可以通过执行一个Set操作实现。当不再使用接口指针时,在Visual Basic 6.0中,引用在其作用域外会自动释放,也可以显式地把它设置为“Nothing”。程序结束时,Visual Basic可以自动取消COM初始化。也就是说用Visual Basic 6.0编写OPC客户端程序时,一定要先建立一个服务器对象,然后才能根据OPC服务器的ProgID来连接OPC服务器,实现从客户端启动OPC服务器,最后添加组、添加项等操作。读写数据时,OPC服务器提供了同步和异步两种方法。同步的方式客户端必须等待返回的结果,效率很低,此种方式一般在故障诊断时使用。异步的方式使客户端可以在访问数据后继续下一步操作,在结果返回时,OPC服务器会通过IOPCDataCallback通知客户端,这种方式访问效率高,但客户端必须实现IOPCDataCallback接口。在OPC自动化接口中,是通过OPCGroup事件来实现异步读取数据。规范定义的OPCGroup事件包含如下四个事件:
Datachange事件在服务器方数据发生变化时由服务器方激发;
AsyncReadcomplete事件在异步读操作完成时由服务器方激发;
AsyncWritecomplete事件在异步写操作完成后由服务器方激发;
AsyncCancelcomplete事件在取消操作时(取消某一个异步读或写操作)由服务器方激发。
其中Datachange是实现数据订阅的主要事件,客户端在OPC服务器IConnectionPointContainer中注册客户端接收器,当满足一定的条件时,OPC服务器通过IOPCDataCallback返回结果,激发相应的事件来通知客户端程序做相应的处理。
当通信完毕,客户端需要退出访问时,必须断开与OPC服务器的连接,释放所有的内存和接口。如果OPC服务器程序自行退出,可以通过激发客户程序的OPCServer对象事件ServerShutDown来通知OPC客户端程序。