工控智汇

工控智汇

C#遇上WINCC

admin 173 148
前言

在工控领域中,WinCC仍然占有很大的市场份额。很多时候我们说学习C,能做哪些事情呢?今天跟大家分享一下如何使用C联合WINCC访问到PLC里的变量,前提是WINCC项目已经开发好,并且处于运行状态,操作步骤如下:

1、首先创建一个S7连接,并创建4个变量分别为data1、data2、data3、data4,地址对应、、、,如下图所示:


2、创建一个画面,拖入4个显示控件,分别绑定这4个变量,通过博图将4个变量的值分别设置为50.5、60.5、70.5、80.5,如下图所示:


3、运行WINCC画面,如下图所示:


访问WINCC变量

1、首先创建一个新的Windows窗体应用,再从WINCC安装目录中找到两个dll,分别是和,位置默认处于C:\ProgramFiles(x86)\CommonFiles\Siemens\Bin,将这两个dll复制到debug根目录下并手动添加引用:


2、Windows窗体界面设计,下图所示:


3、编写读取变量代码,如下图所示:

//创建通信对象=();//创建计时器Stopwatchsw=newStopwatch();///summary///读取变量////summary///paramname="ser"/param///paramname="e"/paramprivatevoidbtn_Read_Click(objectser,EventArgse){//开始计时();//读取变量objectdata1=["data1"].Read();objectdata2=["data2"].Read();objectdata3=["data3"].Read();objectdata4=["data4"].Read();//显示变量_=data1?.ToString();_=data2?.ToString();_=data3?.ToString();_=data4?.ToString();//显示耗时_=()+"ms";}

4、编写写入变量代码,如下图所示:

///summary///写入变量////summary///paramname="ser"/param///paramname="e"/paramprivatevoidbtn_Write_Click(objectser,EventArgse){//开始计时();//写入变量try{["data1"].Write((_));["data2"].Write((_));["data3"].Write((_));["data4"].Write((_));}catch(Exception){("写入失败");return;}//显示耗时_=()+"ms";}

5、读取测试结果如下图所示:


6、写入测试结果如下图所示:


访问WINCC控件

1、重新新建一个窗体,窗体内容和布局与之前一致,如下所示:


2、编写读取控件属性代码,如下所示:

//创建通信对象=();//创建计时器Stopwatchsw=newStopwatch();///summary///读取变量////summary///paramname="ser"/param///paramname="e"/paramprivatevoidbtn_Read_Click(objectser,EventArgse){//开始计时();try{//读取变量dynamicdata1=["NewPdl1"].ScreenItems[".NET控件1"];dynamicdata2=["NewPdl1"].ScreenItems[".NET控件2"];dynamicdata3=["NewPdl1"].ScreenItems[".NET控件3"];dynamicdata4=["NewPdl1"].ScreenItems[".NET控件4"];//显示变量_=();_=();_=();_=();}catch(Exception){("读取失败");return;}//显示耗时_=()+"ms";}

3、编写写入控件属性代码,如下所示:

///summary///写入变量////summary///paramname="ser"/param///paramname="e"/paramprivatevoidbtn_Write_Click(objectser,EventArgse){//开始计时();//写入变量try{dynamicdata1=["NewPdl1"].ScreenItems[".NET控件1"];dynamicdata2=["NewPdl1"].ScreenItems[".NET控件2"];dynamicdata3=["NewPdl1"].ScreenItems[".NET控件3"];dynamicdata4=["NewPdl1"].ScreenItems[".NET控件4"];=(_);=(_);=(_);=(_);}catch(Exception){("写入失败");return;}//显示耗时_=()+"ms";}

4、读取结果如下所示:


5、写入结果如下所示:


整体总结

本文主要以学习研究为主,针对C#与WINCC之间的数据通信做了较为详尽的描述,相信对于很多电气工程师,尤其是以西门子PLC为主的电气工程师来说,会有很大帮助。