简化监控软件的编程方法
2006/4/25 11:58:00
我曾发表过《运用VC#编程通过OPC方式实现PC机与西门子PLC通讯》的文章,并且自己开发了一个标准类库:S7Connection,然后我使用该类库与西门子PLC通讯,运用VC#编程设计监控界面,但在实际使用中我发现其工作量比使用标准的组态软件WinCC、Intouch要大得多,其工作量主要体现在PLC变量的创建、管理与访问上,现在我终于找到了一套解决方法,大大的简化了编程。 以下是整个框架图: 
上图中的三个类S7MPI、AsynServer、SynServer在我之前发表的三篇文章中有介绍,这里主要针对同步访问类SynServer来介绍如何设计简化的编程结构。 1、创建和使用数据库 在一个监控系统中可能需要几百个变量与PLC通讯,西门子的OPC编程把变量称为项(Item),把扫描周期相同的项归纳成组(Group),使用过WinCC的人很熟悉项和组。在使用OPC编程时,首先需要向服务器添加组,然后向相应的组中添加一系列用于访问PLC信息 的项,当项多大几百个时,用手动编程的方式去添加它,工作量非常大,容易出错,也不便于管理。 我们可以考虑设计一个标准数据库,用于存储项和组,然后设计一个管理软件用于编辑数据库中的这些项和组(上图中的ProgramProduce软件),再编写一个标准类,用于读取该数据库的信息,并自动把项和组添加到服务器中,在人机界面中访问PLC变量时,直接通过该类获取数据,这就是上图中Data类所起的作用。 所以创建的数据库需要起到储存项和组信息的作用,以下是三个表的关系: 
顾名思义,Table_Server用于存储服务器设定信息,Table_Group用于存储组信息,Table_Item用于存储项信息。 2、设计访问变量管理软件ProgramProduce <1>该软件首先需要能打开上面的数据库,如下图: 
<2>能够添加、编辑和删除组,如下图(要求点击左边的树形结构时,右侧能够显示当前被选中的组信息): 
<3>能够添加、编辑和删除项,如下图(要求点击左边的树形结构时,右侧能够显示当前被选中的项信息): 
〈4〉要求能够设定服务器信息: 
〈5〉由于变量常常使用Excel软件输入,故还要求该软件能够把Excel文件中的内容导入其中,而Excel的输入应该有规定,类似于下图: 
导入对话框的设计可参照下图: 
右上角列出当前可用的组,左边列出已成功导入的Excel文件中的内容,选中相应的一些项和某一个组,可把这些项添加到选定的组中。 这就是该软件应该具备的基本功能,在我把这个小软件设计出来后,我感觉比其他一些组态软件在变量管理方面好用一些。 3、 设计Data类 首先应该根据指定的文件名打开数据库,然后完成添加组和项的工作,最后应该提供访问接口,以便外部程序能够通过其获取和写入PLC数据。严重建议读写PLC数据以变量的符号名为准,就像Step 7中的符号名。 4、现在来瞧一下我们访问PLC信息需要的编程量 《1》、在程序开头,创建对象,并确保该对象能够被程序中的所有窗口访问 S7Connection.Data dt=new S7Connection.Data(); 《2》、在需要访问数据的每一个窗体中添加一个定时器,并将Enable属性设为false 《3》、在程序的某个初始化处编写类似以下代码,以打开访问接口: string fileName = System.IO.Directory.GetCurrentDirectory(); fileName += "\\dbHMI.mdb"; if (succ) timer1.Enabled = true; 当然,可以使用序列化记录数据库路径,若找不到数据库,弹出对话框,让用户寻找数据库。 《4》、在定时器触发事件中编写读取数据的代码,类似如下: dt.RefreshGroup("wxy"); textBox1.Text = dt["MW1"].ToString(); textBox2.Text = dt["M2.0"].ToString(); … 注:在读取数据前,一定要先使用代码:dt.RefreshGroup("wxy");其中”wxy”为上面Table_Group表中的Name_Group字段存储的值。而”MW1”则为Table_Item中的Symbol字段存储的值(符号名可以是任意合法的名字,但不容许重复)。 若读取另一个组中的数据则需要再次编写代码: dt.RefreshGroup(groupName); 就这么简单,比以前的编程工作量小多了。 5、编写自己的.Net控件,这样可以设计美丽的外观,也可以减少很多重复性的工作量。 我将会上传: S7Connection类库: S7Connection.dll及说明文档:struct.doc ProgramProduce软件: ProgramProduce.exe 数据库文件:dbHMI.mdb Excel变量实例:address.xls 基本控件库:OPCControls.dll









提交
查看更多评论
其他资讯
工业自动化设计高级参考
使用西门子的SCL语言编写ABB变频器的总线控制程序块
PLC的面向对象编程
Siemens OPC编程的.NET类库及使用说明