摘 要:
C#通过以太网访问西门子S7300系列的PLC的变量,实现了基本的变量读取和写入。这里是Eric.Zhou的微信公众号“常州电气工程师”。
1. 软硬件版本
1.1. 西门子
1.1.1. 控制器硬件
S7-300系列,CPU314C-2 PN/DP,订货号6ES7 314-6EH04-0AB0
1.1.2. 控制软件
TIA博图软件,V15.1
1.2. 上位机
1.2.1. 普通电脑硬件
带有Windows系统的普通电脑,带有RJ45网口
1.2.2. C#开发软件
Visual Studio 2019 Community(免费的)
2. 准备工作
2.1. 通讯接线与电源
CPU314C-2 PN/DP为24V供电,和普通电脑之间,通过普通网线相连。
2.2. IP地址设定
已知PLC的IP地址是192.168.0.1,将普通电脑的IP地址设定为同网段的IP地址,比如192.168.0.2。
PLC的IP地址设定路径为:博图-->设备和网络-->设备视图-->PROFINET接口[X2]-->以太网地址。
电脑的IP地址设定路径为:控制面板-->网络和共享中心-->以太网-->属性-->网络选项卡-->Internet协议版本4(TCP/IPv4)-->属性-->使用下面的IP地址(S)。
2.3. PLC的设置
记住PLC的机架号和插槽号,这个在C#程序中会用到。如下图,机架号为0,插槽号为2.
将PLC的时钟存储器中的存储器字节,设定为0,这个设置在PLC编程中有用到。因为设定为0了,那么M0.5代表1Hz脉冲。为了方便观察,我们需要让PLC的某个输出,闪烁显示,所以需要M0.5作为1Hz脉冲。
在PLC变量中,定义3个变量,M10.0定义为启动,M10.1定义为停止,M10.2定义为输出。硬件组态中,配置第一个输出地址为Q0.0,定义为指示灯。
3. 编程操作
在C#中,编写一个画面,含有1方形指示灯,2个按钮。两个按钮定义分别为启动和停止。最终实现的效果是,当按下启动按钮后,指示灯闪烁;当按下停止按钮后,指示灯熄灭。这里是Eric.Zhou的微信公众号“常州电气工程师”。
3.1. PLC的编程
博图TIA编程软件中,在OB1中,用梯形图,编写程序如下:
因为指示灯呈现闪烁状态时,更容易观察,所以在Q0.0前面,添加了M0.5即1Hz脉冲。
3.2. C#的编程
在C#中创建新项目,项目类型是Windows窗体应用(.Net Framework),语言为C#,Windows桌面应用。
在“解决方案资源管理器”中,右击新建的项目,右键快捷菜单中选中“管理NuGet程序包(N)...”
选中S7netplus版本为0.20.0,点击安装。S7netplus是一个开源、免费的.Net库,专门用于C#与西门子PLC通讯。
向C#界面,拖放两个按钮Button,拖放1个显示控件PictureBox。
将两个按钮的Text属性,分别修改为启动和停止。
为了让指示灯,循环扫描Q点状态,我们需要向C#界面,拖放一个定时器Timer。
在Form1.cs中,添加语句 using S7.Net,这是一句命名空间引用指令,核心作用只有一个:让你的C#程序可以直接调用S7.Net库,实现与西门子S7系列PLC(例如S7-200、S7-300、S7-400、S7-1200、S7-1500)的以太网通讯。
在public partial class Form1:Form { }中,写上Plc myplc;这句话的意思是,声明了一个“Plc通信对象”的变量,给它取名字myplc。这里的Plc是S7.Net库里的一个类。myplc是我们起的变量名,以后用它来连接PLC、读写数据。
双击第一个按钮,进入启动按钮的Click响应事件。双击第二个按钮,进入停止按钮的Click响应事件。双击timer1,进入timer1的定时事件。将timer1属性的Enabled设置为True。
启动按钮的属性中,事件下面,选中MouseUp,双击后,进入鼠标抬起事件。同样的方法,给停止按钮,进入鼠标抬起事件。
Form1.cs的全部代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using S7.Net;
namespace CPP视频讲解程序_启停程序
{
public partial class Form1 : Form
{
Plc myplc;//只是声明变量
public Form1()
{
InitializeComponent();
myplc = new Plc(CpuType.S7300, "192.168.0.1", 0, 2);//真正的创建对象,IP地//址是PLC的IP地址,后面的0是机架号,2是插槽号,这句话是告诉电脑,这个PLC在哪里。
myplc.Open();//建立 C# 程序与 S7-300 PLC 的通信连接
}
private void button1_Click(object sender, EventArgs e)
{ //按下按钮执行的事情,M10.0变成True;
myplc.Write("M10.0",true);
}
private void button2_Click(object sender, EventArgs e)
{ //按下按钮执行的事情,M10.1变成True;
myplc.Write("M10.1", true);
}
private void button1_MouseUp(object sender, MouseEventArgs e)
{ //鼠标从按钮上抬起时,M10.0变为false.
myplc.Write("M10.0", false);
}
private void button2_MouseUp(object sender, MouseEventArgs e)
{ //鼠标从按钮上抬起时,M10.1变为false.
myplc.Write("M10.1", false);
}
private void timer1_Tick(object sender, EventArgs e)
{
object a= myplc.Read("Q0.0");//object代表任何类型的数据
if ((bool)a) //强制转成 真 / 假
{ //控件 pictureBox1 背景变成亮绿色(表示灯亮)
pictureBox1.BackColor = Color.Lime;
}
else
{ // 控件 pictureBox1 背景变成浅灰色(表示灯灭)
pictureBox1.BackColor = Color.FromArgb(224, 224, 224);
}
}
}
}
3.3. 调试运行
点击菜单里的“启动”,即可运行程序。如果程序没有Bug,我们可以看到运行效果如下:
当按下“启动”按钮时,方形指示灯闪烁,按钮实物也在闪烁。当按下“停止”按钮时,方形指示灯熄灭,按钮实物熄灭。