① VS 2022社区版,安装其中的 “.NET桌面开发” 即可 ;
安装完成后,下载S7.net组件(若没有NuGet包,先从 “扩展—管理扩展” 中搜索并下载NuGet工具):
② S7-200 Smart PLC(S7-200/1200/1500等均可)
③ S7.net使用说明:S7.Net中文说明书(使用手册) 中文PDF版 电子书 下载-脚本之家
① 界面设计:
新建 “Windows窗体应用程序” 项目;
从 “工具箱” 中添加相应的控件;
在 “属性” 中修改各控件的属性;
在 “事件” 中选择各控件关联的事件;
② 程序代码:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using S7.Net; //S7.net开源库
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace WindowsFormsApplication4 //命名空间
{
public partial class Form1 : Form //自动生成
{
public Form1() //构造窗体,自动生成
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
//窗体加载时触发事件
{
}
Plc plc1 = new Plc(CpuType.S71200, "192.168.2.1", 0, 1);
//创建PLC实例,注意200 smart使用S7-1200类型,机架0、槽号1
private void button1_Click(object sender, EventArgs e)
{
plc1.Open(); //按钮1,连接PLC
}
private void button2_Click(object sender, EventArgs e)
{
plc1.Close(); //按钮2,断开连接
}
private void timer1_Tick(object sender, EventArgs e)
//周期触发组件,在属性中设置周期,这里设置了100ms
{
if (plc1.IsConnected) //检查PLC的连接状态
{
textBox1.Text = "已连接"; //文本框1显示连接状态
textBox2.Text = ((ushort)plc1.Read("DB1.DBW0")).ToString(); //读无符号字
textBox3.Text = ((ushort)plc1.Read("DB1.DBW2")).ConvertToShort().ToString(); //读整数
textBox4.Text = ((uint)plc1.Read("DB1.DBD4")).ConvertToFloat().ToString(); //读实数
label7.Text = ((ushort)plc1.Read("DB1.DBW8")).ToString();
}
else
{
textBox1.Text = "未连接";
}
}
private void textBox5_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
plc1.Write("DB1.DBW8", Convert.ToUInt16(textBox5.Text));
//键盘Enter按下,将文本框5中输入的数据写入PLC
}
}
}
}
其中,PLC地址、机架、槽号的相关定义:
详细资料:https://snap7.sourceforge.net/
本文只完成了单个数据的基本读写,不包含多字节/复杂结构的读写、异常错误处理、断线重连等功能,仅供参考。
更多例程(含多种语言的各种应用):https://sourceforge.net/projects/snap7/files/
参考:C#用S7.NET与SMART通信测试-技术论坛-工业支持中心-西门子中国