admin 管理员组

文章数量: 888143


2023年12月21日发(作者:uighurs)

C#与S7-1200的数据读写方法

Github上有的源码,大家随便下/killnine/s7netplus

是针对西门子系列PLC的驱动程序, 而且这个驱动只能用于支持Profinet通信的CPU,最常用的还是S7-1200和S7-1500,整个驱动是用C#开发的。

可以通过github进行下载,也可以在微软的Visual Studio中通过NuGet直接下载库文件

/packages/s7netplus

C#编程

这次我通过图形界面的方式进行与PLC的通信,界面的样子是这样的

CPU type可以选择不同类型的CPU。

IP地址是连接PLC的计算机IP,如果是本机运行可以写127.0.0.1。

Rack和Slot针对S7-1200分别是0和1

点击Connect按钮即可实现连接,连接之后,可以通过Read或者Write对指定的数据区进行读取和写入。

代码基本就是下面的样子

using

using

using

using

System;

c;

entModel;

;

using g;

using ;

using ;

using ;

using ;

using ;

namespace WindowsFormsApplication1

{

public partial class FormMain : Form

{ //

private Plc plc = null;

private ErrorCode errorState = r;

public FormMain()

{

InitializeComponent();

}

// 关闭窗口

private void FormMain_FormClosed(object sender, FormClosedEventArgs e)

{

try

{

if (plc != null)

{

();

}

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

// 窗口加载

private void FormMain_Load(object sender, EventArgs e)

{

try

{

urce = es(typeof(CpuType));

edIndex = 3; //for 1200 CPU

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

//Connect按钮按下

private void btnConnect_Click(object sender, EventArgs e)

{

try

{

CpuType cpuType = (CpuType)(typeof(CpuType), ng());

string ipAddress = ;

short rack = ();

short slot = ();

plc = new Plc(cpuType, ipAddress, rack, slot);

errorState = ();

if (errorState != r) throw new Exception(ng());

d = false;

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

//Disconnect按钮按下

private void btnDisconnect_Click(object sender, EventArgs e)

{

try

{

if (plc != null)

{

();

}

d = true;

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

//Read按钮按下

private void btnRead_Click(object sender, EventArgs e)

{

try

{

if (plc != null)

{

string variable = ;

object result = (variable);

= ("{0}", ng());

}

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

//Write按钮按下

private void btnWrite_Click(object sender, EventArgs e)

{

try

{

if (plc != null)

{

string variable = ;

object value = ;

(variable, value);

}

}

catch (Exception ex)

{

(this, e, "Information", , ation);

}

}

}

}

PLC编程

PLC的编程相对很简单,简单到就没有程序,只是建了一个数据块用于测试读取和写入的功能。使用NetToPLCSim建立模拟器月PLC Sim之前的通信,这一步可以参看之前的文章,都是一样的。

这里需要注意数据块属性中需要取消勾选优化的数据块,CPU的保护属性中需要勾选允许访问通过PUT/GET

这两个地方如果没有设置,会出现通讯不上的问题

联机测试

设置好软件参数后,按照下图,选择一个需要进行读取或者写入的数据区,点击读取,写入试试看看吧,祝大家玩的开心!!


本文标签: 数据 读取 需要 写入