C#OPC的应用(三)

  在上文成功的建立和OPCServer的连接之后,就可以和Server进行互操作..

  主要的操作有:读,写以及捕捉数据的变化..

  捕捉数据的变化是被动操作..服务器会将变化的数据发送到客户端..客户端只需要在连接Server时候,生成的theGrp_DataChanged事件中,写代码就可以..

捕捉数据变化

 

根据HandleClient来判断是哪一个数据项发生变化..降变化的数据保存下来,供系统调用..

数据的读写操作....

theGrp_ReadCompleted和theGrp_WriteCompleted 这个两个方法,是获取操作结果的方法..

在theGrp_ReadCompleted中可以,获取到最近一次读取的数据项的值..

代码如下:

获取读取数据结果
 
将读取到的数据更新到数据表中..
读取数据代码:
读取最新数据

 

 

其中,readSer数组保存的是服务器端句柄..transactionID 是一个标致,在返回读取结果的时候,会用到,可以判断是不是上次读取的结果..

 

写入数据的代码如下:

写入数据

 

最后,因为项目的需要,自己写了两个写入的方法..1个单值写入,1个一次多值写入..写出来,只是为了方便大家的使用,代码并没有什么含金量,如下:

写入数据(自定义方法)

 

因为theGrp_WriteCompleted 方法,项目中没有使用到..所以,就没有添加代码,只是留了个空方法..

 

至此,OPCServer和c#客户端的通讯已经介绍完毕,基本满足简单应用,更深层的需要可能还需要继续努力..

奉献上完整代码:

写入数据(自定义方法)


数据库中Point创建的SQL语句

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Point]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Point]
GO

CREATE TABLE [dbo].[Point] (
    [PointId] [int] NOT NULL ,
    [PointName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [PointDesc] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ClientHandel] [int] NULL ,
    [ServerHandel] [int] NULL ,
    [PV] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [isUse] [int] NULL
) ON [PRIMARY]
GO

到此,该系列结束..还包括很多应用没有提到,包括OPCServer的浏览等..以后,如果用到这方面的东西,再继续补充...

posted @ 2010-05-21 17:49  CoderLau  阅读(2467)  评论(5编辑  收藏  举报