网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
运用VC#编程通过OPC方式实现PC机与西门子PLC通讯(2)
作者:管理员    发布于:2015-08-16 22:27:49    文字:【】【】【
 说明:使用该函数时,在类的开头,应该先声明整数数据,以用于保存由本函数返回的服务器对每一项分配的Item ID号:
 
  8、 下面编写的是一个最重要的重载函数,当检测到当前活动组中的某个变量发生变化时,就会调用委托。
 
//数据变化时处理的问题
 public virtual void OnDataChange ( Int32 dwTransid ,
 Int32 hGroup ,
 Int32 hrMasterquality ,
 Int32 hrMastererror ,
 Int32 dwCount ,
 int[] phClientItems ,
 object[] pvValues ,
short[] pwQualities ,
 OpcRcw.Da.FILETIME[] pftTimeStamps ,
 int[] pErrors )
 {
 dtChange(pvValues,phClientItems);
 
}
   该函数的代码只有一句,即调用委托函数。
   以上编写的是需要实现监控的最重要的方法,当然不完善,还有许多方法和重载函数可以编写,这里就不详细介绍。
 
  9、 编写基本的测试程序,用于检测上面编写的异步类AsynServer
 
<1>、 重新创建一个工程,添加对上面编写的异步类的引用,并在类的开头部分添加变量声明:
 //声明委托
 private S7Connection.DataChange dt;
 //声明服务器
 S7Connection.AsynServer server;
 
<2>、初始化服务器数据
 dt=new S7Connection.DataChange(DataChange);
 server =new AsynServer(S7Connection.ServerType.OPC_SimaticNET,dt);
 string err;
 server.Open(out err);
 server.AddGroup("maiker",1,300,out err);
 server.AddItems("maiker",m1,nt1);
 server.AddGroup("maiker1",1,300,out err);
 server.AddItems("maiker1",m2,nt2);
 nt[0]=nt1[0];nt[1]=nt1[1];
 
<3>、添加两个单选按钮,用于选择某个组,并编写相应的程序
 string err,err1;
 if(server==null) return;
 if(radioButton1.Checked)
 { nt[0]=nt1[0];nt[1]=nt1[1];
 server.AciveGroup("maiker",true,out err);
 server.AciveGroup("maiker1",false,out err1);
 
}
 else
 {
 nt[0]=nt2[0];nt[1]=nt2[1];
 server.AciveGroup("maiker1",true,out err);
 server.AciveGroup("maiker",false,out err1);
 
}
 
<4>、添加文本框、按钮等,并编写委托执行函数:
 private void DataChange(object[] obj,int[] itemsID)
 {
for(int j=0;j {
 if(itemsID[j]==nt[0])
 this.textBox1.Text=obj[j].ToString();
 if(itemsID[j]==nt[1])
 this.textBox4.Text=obj[j].ToString();
 }
 }
 
  其中参数obj用于返回当前发生变化的变量的结果值,而itemsID返回当前发生变化的变量的ID号,其与添加变量时服务器返回的ID号对应。以上就是一个基本的测试函数,其相对同步编程来说,应该还简单一些。
 
3、 同步编程与异步编程的使用场合
 
  一般来讲,同步编程需要使用定时器来循环检测变量,而异步编程则不需要,当服务器检测到数据发生变化时,可以直接调用传入的函数,从这方面来讲,使用异步编程更简单一些,但同步编程使用外部的定时器控制,编程则会更加灵活,一般只监控变量时可以使用异步编程,而当需要写入数据时可以使用同步编程,但这也不是绝对的,我曾编写了一个标准监控程序,没有使用异步编程。
 
4、 关于开发监控界面的说明
 
  毫无疑问,我们应该开发一系列控件,用于简化界面的设计,否则工作量会异常大。设计一个标准模块,用于第一次运行监控软件时添加变量,并可以设定当前已经组态的界面中的各控件元素与之关联,这样在以后再运行该软件时,不需要再设定,就可以直接连接变量,并进行相应的变化。否则若在编程时编写代码进行关联,其工作量将会异常大。
 
  其实该类我早已经开发了,但一直没有时间写成文章,本来想开发一系列标准控件和标准模块,但由于换到上海工作,可能不会再有时间搞这方面的研究了。
 
作者:吴向阳
wuyang26@sohu.com         
作者单位:宇姆莱自动化设备(上海)有限公司  
 地址:上海、青浦工业园区、盈秀路266号 201700 
 Email:wuyang26@sohu.com
本文来自: 高校自动化网(Www.zdh1909.com) 详细出处参考(转载请保留本链接):http://www.dqjsw.com.cn/dianqi/zhuanti/ximenziPLC/8346_2.html
浏览 (73) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们