使用S7.net动态库对西门子Plc S7-1200进行通讯操作

1.最近使用plc和上位机进行通讯的时候,上位机工程师有点懵逼,为了项目的正常推进,只能让我这个plc工程师写个demo,使劲的打打他的脸啊 ,上位机使用的是c#,那我就用动态库给他写一个demo吧

废话不说直接上程序:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using S7.Net;

namespace s7nent和西门子1200通讯

{

class Program

{

static void Main(string\[\] args)

{

ErrorCode errcode;

Plc plc = new Plc(CpuType.S71200,"192.168.1.10",0,0);

plc.ReadTimeout = 1500;

plc.WriteTimeout = 1500;

try

{

plc.Open();

Console.WriteLine("plc连接成功");

//判定plc是否连接成功

if (plc.IsConnected)

{

Task.Run(()=> {

#region 1.对plc的bool量进行读写

//for (int i = 0; i < 10; i++)

//{

// int a = i / 8;

// int b = i % 8;

// string Sname = "DB1.DBX1"+a.ToString()+"." + b.ToString();

// plc.Write(Sname, 1);

// Console.WriteLine(Sname + ":写入1成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

//for (int i = 9; i >= 0; i--)

//{

// int a = i / 8;

// int b = i % 8;

// string Sname = "DB1.DBX1" + a.ToString() + "." + b.ToString();

// plc.Write(Sname,0);

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

#endregion

#region 2.对字节进行有效读写

//for (int i = 0; i < 10; i++)

//{

// string Sname = "DB1.DBB" + i.ToString();

// plc.Write(Sname, Convert.ToByte(i*10));

// Console.WriteLine(Sname+":写入1成功!写入的数据为:"+plc.Read(Sname));

// Thread.Sleep(2000);

//}

//for (int i = 9; i >= 0; i--)

//{

// string Sname = "DB1.DBB" + i.ToString();

// plc.Write(Sname, Convert.ToByte(0));

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

#endregion

#region 3.对字进行有效的读写

//for (int i = 0; i < 10; i++)

//{

// string Sname = "DB1.DBW" + (12+i*2).ToString();

// plc.Write(Sname, Convert.ToUInt16(i * 100+1));

// Console.WriteLine(Sname + ":写入1成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

//for (int i = 9; i >= 0; i--)

//{

// string Sname = "DB1.DBW" + (12+i*2).ToString();

// plc.Write(Sname, Convert.ToUInt16(0));

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

#endregion

#region 4.对浮点数进行有效的读写

//for (int i = 0; i < 10; i++)

//{

// string Sname = "DB1.DBD" + (32 + i * 4).ToString();

// plc.Write(Sname, Convert.ToSingle(-i * 100 +5.53996));

// Console.WriteLine(Sname + ":写入成功!写入的数据为:" +((uint)plc.Read(Sname)).ConvertToFloat());

// Thread.Sleep(2000);

//}

//for (int i = 9; i >= 0; i--)

//{

// string Sname = "DB1.DBD" + (32 + i * 4).ToString();

// plc.Write(Sname, Convert.ToSingle(0));

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + ((uint)plc.Read(Sname)).ConvertToFloat());

// Thread.Sleep(2000);

//}

#endregion

#region 5.对双字进行有效的读写

//for (int i = 0; i < 20; i++)

//{

// string Sname = "DB1.DBD" + (72 + i * 4).ToString();

// plc.Write(Sname, Convert.ToUInt32(Math.Pow(2,i)));

// Console.WriteLine(Sname + ":写入成功!写入的数据为:" +plc.Read(Sname));

// Thread.Sleep(2000);

//}

//for (int i =19; i >= 0; i--)

//{

// string Sname = "DB1.DBD" + (72 + i * 4).ToString();

// plc.Write(Sname, Convert.ToUInt32(0));

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

#endregion

#region 6.对short类型进行读写

//for (int i = 0; i < 20; i++)

//{

// string Sname = "DB1.DBW" + (152 + i * 2).ToString();

// plc.Write(Sname, Convert.ToInt16(100-i*100));

// Console.WriteLine(Sname + ":写入成功!写入的数据为:" + ((ushort)plc.Read(Sname)).ConvertToShort());

// Thread.Sleep(2000);

//}

//for (int i = 19; i >= 0; i--)

//{

// string Sname = "DB1.DBW" + (152 + i * 2).ToString();

// plc.Write(Sname, Convert.ToInt16(0));

// Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

// Thread.Sleep(2000);

//}

#endregion

#region 7.对int类型进行读写

for (int i = 0; i < 20; i++)

{

string Sname = "DB1.DBW" + (192 + i * 4).ToString();

plc.Write(Sname, Convert.ToInt32(100 - i * 100));

Console.WriteLine(Sname + ":写入成功!写入的数据为:" + ((ushort)plc.Read(Sname)));

Thread.Sleep(2000);

}

for (int i = 19; i >= 0; i--)

{

string Sname = "DB1.DBW" + (192 + i * 4).ToString();

plc.Write(Sname, Convert.ToInt32(0));

Console.WriteLine(Sname + ":写入0成功!写入的数据为:" + plc.Read(Sname));

Thread.Sleep(2000);

}

#endregion

Thread.Sleep(100);

Console.WriteLine("BYTE读写完毕");

});

}

}

catch(Exception ex)

{

Console.WriteLine("plc连接失败!"+ex.ToString());

}

Console.ReadKey();

}

}

}

这样就直接搞定,再有问题那就去枪毙哦

相关推荐
chingho6 小时前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目
学以智用7 小时前
Visual Studio 模板详解
.net
波力海苔夹心脆6752 天前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
慧都小妮子2 天前
Stimulsoft 2026.4 发布:Markdown 组件、桑基图与 .NET 11 支持
.net·数据可视化·stimulsoft·版本更新·报表控件·桑基图·.net 11
波力海苔夹心脆6753 天前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
hez20103 天前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
QUDONG_biubiubiu3 天前
.NET Runtime 6.0/7.0/8.0/9.0下载修复教程,软件打不开这样解决
.net·net runtime下载·net运行库修复·net runtime安装
宝桥南山3 天前
.NET 11 - 尝试创建一下AGUIServer和AGUIClient(基于新版.NET SDK for AG-UI)
microsoft·ai·微软·c#·aigc·.net
波力海苔夹心脆6753 天前
C# LINQ 入门到上手:一篇讲透查询语法、常用操作符与延迟执行(含示例与速查表
经验分享·c#·.net·solr·linq