|  首页  |  资讯  |  评测  |  活动  |  学院  |  访谈  |  专题  |  杂志  |  产服  |  
您现在的位置:硅谷网> 学院> 论文>

硅谷杂志:基于opc的c#与rslinx通信程序设计

2014-01-28 20:55 作者:李长安 来源:硅谷网 HV: 编辑: 【搜索试试
  硅谷网9月9日消息 《硅谷》杂志2012年第14期刊文称,OPC(OLEforProcessControl,用于过程控制的OLE)是一个工业标准,它定义一个开放的接口,在这个接口上,基于PC的软件组件能交换数据。在工控软件开发过程中,经常遇到需要和plc进行数据交换的情况,以罗克韦尔plc的数据枢纽软件rslinx为opc服务器,通过c#编程语言,利用opc接口开发一套可以与rslinx进行数据交换的通信程序,从而可以实现软件与plc之间的数据交换。
  1opc及编程工具技术介绍
  1.1opc技术介绍
  OPC(OLEforProcessControl)是根据Microsoft的OLE(现在Active)、COM(部件对象模型)和DCOM(分布式部件对象模型)技术所要求的功能制定的一个开放和互用式的用户界面标准,它保证了控制应用程序和设备之间的数据通信。它以OLE/COM的机制作为应用程序级的通讯标准,采用了CS架构模式。OPC规范提供两套接口方案,即自动化接口和定制接口。自动化接口使用解释性语言和宏语言访问OPC服务器,一般采用VB等语言的客户会编写自动化接口进行访问;定制接口效率很高,通过定制接口可以发挥OPC服务器的最佳性能,通常采用C++或c#语言的客户会编写定制接口进行访问;OPC的数据存取服务器包含三类对象:服务器(Server)、组(Group)、数据项(Item)。所有对OPC数据项的操作都是通过包含此项的OPC组对象进行的[1]。每个数据项都有数值(Value)、品质(Quality)和时间戳(TimeStamp)三个属性。数值代表数据项的值,品质代表数值的可信度,时间戳代表数据的存取时间。OPC的数据传输机制主要分为同步读写和异步读写两种。同步数据传输,指客户端直接调用OPC服务器的IOPCSyncIO接口的同步读写函数,在发出读取数据请求后一直等待,直到数据返回。这种方法简单可靠,但当OPC服务器采集数据的时间较长时,客户端等待的时间就会较长,有点影响客户程序的效率,适合较少数据量的读写,本程序采用的就是同步读写方式。异步数据传输,指客户端在发出读写数据请求后,可立即返回进行其它数据处理,OPC服务器在收到数据请求后,访问现场设备,读写数据后主动把采集的结果通知客户端。这种传输机制的优点是可以避免空等待,提高了客户程序的效率,缺点是编程复杂。
  1.2c#技术介绍
  C#(CSharp)是微软(Microsoft)为.NETFramework量身订做的程序语言,是微软公司在2000年6月发布的一种面向对象编程语言。C#是一种安全的、稳定的、简单的,由C和C++衍生出来的面向对象的编程语言。它在继承C++强大功能的同时去除了一些它们的复杂特性(例如不允许多重继承,限制了指针使用等等)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、创新的语言特性、优雅的语法风格和便捷的面向组件编程的支持成为.NET开发的首选语言。
  c#内存管理提供了与java一样的自动内存管理功能,让程序员从繁重的内存管理中摆脱出来,内存管理提高了代码的质量和提高了开发效率。c#限制了着指针的使用,免除了程序员对内存泄漏的烦恼,但是不是意味着向java程序员一样c#程序员再也不能使用指针代来的好处。微软在设计C#语言时考虑到这个问题,在一方面抛弃指针的同时,另一方面采用折衷的办法,通过unsafe标志来使程序引入指针[2]。
  2具体设计步骤
  2.1新建项目
  打开vs2008主界面,点击文件菜单新建项目visualc#windows应用程序,并在名称里面输入OPCTEST项目名称。如图1所示:
  
  图1新建项目
  点击确定后,会出现默认的Form1窗口程序。
  
  2.2添加控件
  在Form1窗口上面增加连接按钮,读取按钮,写入按钮,以及读取写入的文字编辑输入框,最后再添加方便测试用的当前值组合框,里面有tag值、品质、时间戳等数值显示框。窗体编辑完毕后如图2:
  
  图2新建项目的窗体
  
  2.3引用命名空间并添加私有变量
  窗体编辑完毕后,右击窗体,点击查看代码,打开Form1.cs,首先要添加命名空间代码如下:
  usingSystem.Collections.Generic;
  usingSystem.Windows.Forms;
  usingSystem.ComponentModel;
  usingSystem.Data;
  usingSystem;
  usingRsiOPCAuto;
  usingSystem.Net;
  usingSystem.Collections;
  usingSystem.Text;
  然后在引用里面添加对RsiOPCAuto.dll的引用。以rslinx软件安装在C盘为例,RsiOPCAuto.dll文件通常在“C:\ProgramFiles\CommonFiles\Rockwell”目录下,引用时右击解决方案的引用菜单->添加引用->浏览,然后找到相应文件点击确定即可。
  在Form1.cs文件里面添加如下私有变量:
  OPCServerKepServer;//服务器
  OPCGroupsKepGroups;//组集
  OPCGroupKepGroup;//组
  OPCItemsKepItems;//标签集
  OPCItemKepItem;//标签
  stringstrHostIP="";//主机IP
  stringstrHostName="";//主机名称
  boolopc_connected=false;//连接状态
  intitmHandleClient=0;//客户端句柄
  intitmHandleServer=0;//服务端句柄
  2.4增加关键方法
  2.4.1获取OPC服务器信息
  privatevoidGetServerInfo()
  {
  tsslServerStartTime.Text="开始时间:"+KepServer.StartTime.ToString()+"";
  tsslversion.Text="版本:"+KepServer.MajorVersion.ToString()+"."+KepServer.MinorVersion.ToString()+"."+KepServer.BuildNumber.ToString();
  }
  2.4.2创建组
  本方法主要功能是创建组
  privateboolCreateGroup()
  {try
  {
  KepGroups=KepServer.OPCGroups;
  KepGroup=KepGroups.Add("OPCFIRSTGROUP");//此处组名可以随意写
  SetGroupProperty();
  returntrue;
  }
  catch(Exceptionerr)
  {
  MessageBox.Show("创建组出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
  returnfalse;
  }
  }
  2.4.3设置组信息
  privatevoidSetGroupProperty()
  {
  KepServer.OPCGroups.DefaultGroupIsActive=true;
  KepServer.OPCGroups.DefaultGroupDeadband=0;
  KepGroup.UpdateRate=500;
  KepGroup.TimeBias=0;
  KepGroup.DeadBand=0.01F;
  KepGroup.IsActive=true;
  KepGroup.IsSubscribed=true;
  }
  2.4.4连接OPC服务器
  本方法主要功能为连接OPC服务器,本方法有两个输入参数,第一个为IP地址,第二个为服务器名称,如果IP地址省略,并且第二个参数填写“RSLinxOPCServer”,则表示连接本机rslinx服务器;如果填写IP地址,并且第二个参数填写“RSLinxRemoteOPCServer”,则表示连接远程rslinx服务器。
  privateboolConnectServer(stringremoteServerIP,stringremoteServerName)
  {
  Try
  {
  KepServer=newOPCServer();
  KepServer.Connect(remoteServerName,remoteServerIP);
  if(KepServer.ServerState==(int)OPCServerState.OPCRunning)
  {
  tsslServerState.Text="已连接到-"+KepServer.ServerName+"";
  }
  else
  {
  //这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档
  tsslServerState.Text="状态:"+KepServer.ServerState.ToString()+"";
  }
  }
  catch(Exceptionerr)
  {
  MessageBox.Show("连接远程服务器出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
  returnfalse;
  }
  returntrue;
  }
  2.4.5断开OPC服务器
  privatevoidDisConnectOPCServer()
  {
  try
  {
  if(!opc_connected)
  {
  return;
  }
  if(KepServer!=null)
  {
  KepServer.Disconnect();
  KepServer=null;
  }
  opc_connected=false;
  }
  catch(Exceptionerr)
  {
  MessageBox.Show("初始化出错:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
  }
  }
  2.4.6读取标签值
  本方法主要作用为同步读取标签值,包括数值、品质、时间戳。
  privatevoidReadTagValue(stringtagName)
  {
  try
  {
  this.txtTagValue.Text="";
  this.txtQualities.Text="";
  this.txtTimeStamps.Text="";
  itmHandleClient=1234;
  KepItem=KepItems.AddItem(textBoxTagName.Text,itmHandleClient);
  objectvalue,quality,timeStamp;
  //同步读,第一个参数只能为1或2
  KepItem.Read(1,outvalue,outquality,outtimeStamp);
  itmHandleServer=KepItem.ServerHandle;
  this.txtTagValue.Text=value.ToString();
  this.txtQualities.Text=quality.ToString();
  this.txtTimeStamps.Text=timeStamp.ToString();
  }
  catch(Exceptionex)
  {
  this.txtTagValue.Text="";
  this.txtQualities.Text="";
  this.txtTimeStamps.Text="";
  MessageBox.Show(ex.Message);
  return;
  }
  }
  
  2.5连接按钮代码
  在服务器IP地址输入框不填写内容,点击连接按钮,可以导航到按钮的click事件代码,可以实现服务器连接功能和创建组功能,具体编程代码:
  privatevoidButton_Connect_Click(objectsender,EventArgse)
  {
  try
  {
  if(!opc_connected)
  {
  opc_connected=ConnectServer(textBoxRemoteOPCServerIP.Text,"RSLinxOPCServer");//此处代表连接本机rslinxopc服务器
  }
  GetServerInfo();//获取opc服务器信息
  if(!CreateGroup())//创建组
  {
  return;
  }
  }
  catch(Exceptionerr)
  {
  MessageBox.Show("初始化出错:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
  }
  }
  2.6读按钮代码
  在TagName栏填写[S3]N7:0,点击读按钮可以导航到click事件代码,可以实现PLC标签值、品质、时间戳的读取并且在相应位置显示,具体编程代码:
  privatevoidButton_Read_Click(objectsender,EventArgse)
  {
  ReadTagValue(textBoxTagName.Text);
  }
  2.7写按钮代码
  在TagValue栏填写数值,点击写按钮可以导航到该按钮的click事件代码,可以实现PLC标签值的写入,具体编程代码:
  privatevoidButton_Write_Click(objectsender,EventArgse)
  {
  KepItem.Write(textBoxTagvalue.Text);
  }
  2.8程序退出代码
  点击Form1窗口关闭时,执行本代码,主要功能为断开OPC服务器:
  privatevoidFrmRSLinxOPCClient_FormClosing(objectsender,FormClosingEventArgse)
  {
  DisConnectOPCServer();
  }
  3系统测试效果
  3.1Rockwell软件准备
  1)运行RSlogixEmulate5软件,并打开测试plc程序,本文中以“S3程序2012-2-22.X5”为例,并点击run命令,如图3:
  
  
  图3RSlogixEmulate5软件
  2)运行rslinx软件,在ConfigureDrivers对话框里组态仿真驱动,选择PLC-5(DH+)EmulatorDriver驱动->AddNew,StationName填写3,点击确定,如图4
  
  图4组态仿真驱动
  3.2读取plc标签值测试
  首先打开rslogix5编程软件,选择仿真在线plc并上线,然后打开相应的数据表,在N7:0的地址栏中写入测试数值39,如图5:
  
  图5PLC数据表数值
  然后打开本文设计的窗口程序,在TagName栏填写[S3]N7:0,然后点击读按钮,会将plc的N7:0数值读出,并且显示数值、品质和时间戳,效果如图6:
  
  图6读取plc数值测试窗口
  3.3写入plc标签值测试
  在本设计的窗口程序中,在TagValue栏里面填写65,然后点击写按钮,会将plc的N7:0数值改写为65,如图7所示:
  
  图7写入plc数值测试结果
  4结论
  本文以RSLinx软件作为OPC服务器,利用c#语言开发了一套OPC客户端通信程序,根据测试证明本程序可以实现定制软件与plc之间的数据交换,可以灵活方便的进行各种工业应用,突破了plc厂家自身HMI软件的局限性,值得大力推广。
  参考文献:
  作者简介:
  李长安(1982-),工程师,2000年毕业于上海港湾学校,现任神华黄骅港务有限责任公司设备维修中心技术员。(原文载于《硅谷》杂志2012年第14期,硅谷网及《硅谷》杂志版权所有,未经允许禁止转载)
  
【对“硅谷杂志:基于opc的c#与rslinx通信程序设计”发布评论】

版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
广告
相关
头条
硅谷网解密:4G网络中的微波传输解决方案 硅谷网解密:4G网络中的微波传输解决方案
在2013年12月4日,工信部向中国移动、中国联通、中国电信颁发TD-LTE(4G)经营许可之后……
·硅谷网解密:4G网络中的微波传输解决方案
·创意产业的批量化规律 工业造型方法论之加减
·《硅谷》杂志:浅谈电信运营商开展IPTV业务
·《硅谷》杂志:新型桌面搜索关键技术的研究与
·硅谷杂志:基于时间技术的搜索引擎排名算法
图文
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介
最新
·佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
·利用重力势能做功发电介绍和势能输出系统介绍
·李磊:新时代下电网调度自动化技术的发展分析
·提升企业竞争力以及企业人力资源管理优化思考
·《硅谷》杂志:采油分层测静压工艺技术浅究
热点
·判断连续时间系统的线性非时变性和因果性
·3DMAX+Vary室内漫游动画制作的技法浅析
·长期使人困惑的问题:TCP连接中断的实时检测
·佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
·关于汽轮机油系统失火原因分析及防范措施的一
旧闻
·徐海:智能变坡水槽控制系统的设计与实现
·硅谷杂志:关于网络安全解决方案的探讨
·探讨气体检测中如何应用数字信号处理技术
·硅谷杂志:云计算在飞行试验数据处理中的探索
·博物馆数字化展示应用研究
广告
硅谷影像
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
佳惠安抗菌喷剂敷料杀(抑)菌临床检验结论
利用重力势能做功发电介绍和势能输出系统介绍
利用重力势能做功发电介绍和势能输出系统介绍
公关负责人离职背后:危机公关案例分析
公关负责人离职背后:危机公关案例分析
硅谷网解密:4G网络中的微波传输解决方案
硅谷网解密:4G网络中的微波传输解决方案
使用Autoit脚本在虚拟内存盘设置考试模拟系统
使用Autoit脚本在虚拟内存盘设置考试模拟系统
探秘开滦集团设备租赁管理系统的设计和实现
探秘开滦集团设备租赁管理系统的设计和实现
关于我们·About | 联系我们·contact | 加入我们·Join | 关注我们·Invest | Site Map | Tags | RSS Map
电脑版·PC版 移动版·MD版 网站热线:(+86)010-57255600
Copyright © 2007-2020 硅谷网. 版权所有. All Rights Reserved. <京ICP备12003855号-2>