近来一直在学习C#,但是对于输出个HELLO WORLD之类的教程实在提不起什么兴趣,于是上网想找找有没有使用C#做一些和自动化相关的事情,不查不知道,原来C#一直是被用来开发通信协议以及HMI界面的不二利器,于是乎产生了是不是能通过PLC和C#之间建立某种连接来学习C#语法的念头,就这样,产生了这篇文章。
先发个视频,这是我在Youtube上找到的一系列视频中的一个,作者通过S7.net的dll控件实现了与西门子S7系列的PLC通信的功
软件的安装
需要安装的软件包括
TIA Portal V14
S7-PLCSIM V14
Visual Studio 2013 ultimate
NetToPLCsim-S7o-v-1-2-2-0
PLC程序的编写
因为是个例子程序,所以PLC的程序相对很简单,而且也不是必须需要使用PLC硬件,因为TIA 软件自带模拟器,完全可以通过软件实现功能,这里需要使用NetToPLCsim的模拟工具,这个工具可以和PLCsim之间建立网络通讯模拟功能,这样C#就可以作为一个SCADA系统进行数据的读写操作。
PLC程序里面需要有两处进行设置
1. 选中组态的PLC设备,之后在保护选项下面的连接机制中,选择允许从远程伙伴使用PUT/GET通信访问
2. 建立的数据块文件,需要取消优化的块访问选项,使用地址
数据块中建立如下图所示的变量
主程序如下图所示,也可以编写自己的主程序
C#程序的编写
我们不需要重头写完整的C#程序,只需要例子程序,之后配置好后,在主程序中进行C#程序的编写练习与PLC的读写操作.
打开例子程序,引用中引用了S7.Net的控件,如果显示有一个叹号,可以将其删除,通过在项目上右键点击,选择管理NuGet程序包进行搜索S7.Net,之后安装.
C#的主程序是写在Program类下的Main函数中,具体程序如下
class Program { static void Main(string[] args) { using(var plc = new Plc(CpuType.S71200, "127.0.0.1", 0, 1)) { plc.Open(); bool db1Bool1 = (bool)plc.Read("DB1.DBX0.0"); Console.WriteLine("DB1.DBX0.0: " + db1Bool1); bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1"); Console.WriteLine("DB1.DBX0.1: " + db1Bool2); } Console.WriteLine("\nPress a key to continue..."); Console.ReadKey(); } .......... }
其中using(var plc = new Plc(CpuType.S71200, “127.0.0.1”, 0, 1)) 是建立与S71200PLC的连接,127.0.0.1是指服务器是运行在本机电脑上,即之前我们的NetToPLCsim-S7o-v-1-2-2-0软件模拟的服务器。
之后使用Open方法,打开PLC,之后就可以进行数据的读取了,都是很基本的语法,DB1.DBX0.0正是我们在PLC上建立的数据块。
通过Console.WriteLine方法将结果输出到控制台界面。
PLC模拟器的开启
至此程序就全部完成了,我们需要将PLC运行起来,首先需要使用NetToPLCsim软件模拟出一个本机的服务器.
按照图示设置参数即可,之后点击StartServer按钮即可.
之后启动TIA仿真器,仿真一个PLC.
C#程序运行
点击编辑器上方工具条上的启动按钮,C#程序即可运行,因为我们建立的是个控制台程序,所以输出的是一个黑窗口,当前显示了PLC程序中两个Bool变量的状态.
与我们在TIA中监控的数值是一致的.