使用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();

}

}

}

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

相关推荐
玩泥巴的6 小时前
源生成与 AOT 就绪的微信生态 .NET SDK:结构、能力边界与 API 定位方法
ai·微信·.net·agent·aot·roslyn
1-1=07 小时前
C# 泛型
c#·.net·.netcore
有志冬瓜7 小时前
.NET Framework全部版本离线下载安装教程
安全·.net·软件需求
IT规划师8 小时前
Redis 数据类型全解 - Set 的三个真相:去重、标签、共同好友(四)
redis·.net
椒颜皮皮虾྅1 天前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
玩泥巴的1 天前
可能是最现代化的微信生态 .NET 服务端 SDK
ai·微信·.net·aot
IT规划师2 天前
Redis 数据类型全解 - List:用对是队列用错是灾难(二)
redis·消息队列·.net
1-1=02 天前
.NET Core 编译技术
.net·.netcore