C#通过S7.net读取西门子300PLC的数据

这里写自定义目录标题

  • C#通过S7.net读取西门子300PLC的数据
    • 一、连接PLC
    • 二、读取数据
    • 三、无实物PLC,离线模拟读取
    • 四、注意事项
      • 1.NetToPLCsim软件
      • 2、S7-PLCSIM软件
      • 3、Step7 V5.6软件

C#通过S7.net读取西门子300PLC的数据

最近一个项目需要读取西门子300PLC里面的数据,300PLC是用Step编写的,不是现有的使用较多博途软件。在读取数据上,有些不一样,所以将这里的坑记录一下;
在这里需要使用到的软件和工具:

Visual Studio 2019
Step V5.6
S7 PLCSIM
NetToPLCsim

一、连接PLC

连接PLC很简单,VS 创建好项目后,在NetGet管理中下载S7.net 的DLL,加入项目中;
在项目里引用

	// 使用S7.net dll
	using S7.Net;

连接PLC 先实例化PLC类

	// New 一个300PLC的对象
	 Plc plc =  new Plc(CpuType.S7300, ip, 0, 2);

建立连接

	//建立连接
	 plc.Open();

这里如果IP地址没有问题的话,会显示连接成功!
如果是实体PLC的话,直接访问PLC的网络地址就好了;
如果是虚拟地址,这里需要多尝试几次;

二、读取数据

使用 public object? Read(string variable) 方法读取
读取十进制数:

				//获取输入PLC地址
                string temp = tbAdress.Text.Trim();
                //读取地址里的数据,转换成int类型
                int a = Convert.ToInt32(plc.Read(temp));
                 ShowLog("当前地址" + temp + ":的十进制为" + a.ToString());
                

我这里读取的是PLC的 MD10(读取PLC Double Word寄存器数据
当前地址MD10:的十进制为100000
读取浮点数:

				//获取输入PLC地址
				string temp = tbAdress.Text.Trim();
				 //读取地址里的数据,转换成int类型
                int a = Convert.ToInt32(plc.Read(temp));
                //10机制转换成16进制字符串
                string A = Convert.ToString(a, 16).ToUpper().PadLeft(8, '0');
                //16进制字符串转换成浮点数
                double result = FloatHelper.HexToFloat(A);
                ShowLog("当前地址" + temp + ":的十进制为" + a.ToString());
                ShowLog("当前地址" + temp + ":的浮点数为:" + result.ToString("0.00"));
                

我这里读取的是PLC的 MD30(读取PLC Double Word寄存器数据
当前地址MD30:的十进制为1084479242
当前地址MD30:的浮点数为:5.12

三、无实物PLC,离线模拟读取

因为没有300的PLC,所以需要在电脑上仿真模拟PLC;这里比较麻烦;

  1. 首先需要在电脑上安装Step7 V5.6软件,并激活使用
  2. 下载NetToPLCsim.exe 软件
  3. 当我们有了这两个软件之后,我们需要按顺序打开软件
Created with Raphaël 2.3.0 打开Step7 V5.6,加载项目程序 打开NetToPLCsim软件,自动加载软件,不用管,点确定 点仿真模拟,下载程序到虚拟PLC中 切换到NetToPLCsim软件,点Add添加站点 打开VS程序,输入站点IP,点击连接 输入需要读取的地址,点击读取

这里遇到的坑一是Step7 V5.6软件
安装的Step7 V5.6软件里面的硬件组态不全,网上百度了好久,最后不得不卸载重新安装才完成;硬件组态不全,没办法添加PLC,没有办法写PLC程序;
网上也提供了一些更新硬件组态的方法,同样也试了,很容易就卡死了;提供下面别人分享的链接,以供参考:

坑二:仿真并连接虚拟地址
一定要按照,顺序打开软件,有时候往往一次不能成功,可以多试几次;

坑三:读取的PLC数据
PLC程序如果没有用功能块,一定要用MD去存你要读取的数据;不然读取的数据会有问题;西门子MD是存 Double Word;我们的整型的数如果太大了,会涉及到需要存在两个Word中;浮点数一定是两个字的;

四、注意事项

1.NetToPLCsim软件

打开NetToPLCsim软件会报这个, 点 就可以了;
C#通过S7.net读取西门子300PLC的数据_第1张图片
等待加载完成
C#通过S7.net读取西门子300PLC的数据_第2张图片
加载完成,点击OK
C#通过S7.net读取西门子300PLC的数据_第3张图片
NetToPLCsim软件界面C#通过S7.net读取西门子300PLC的数据_第4张图片
点击ADD,进入站点设置界面(一定要先仿真之后,再ADD
C#通过S7.net读取西门子300PLC的数据_第5张图片
PLCSIM IP Address后面的 在如果争取打开Step7 的仿真软件的情况下,是可以选取的;
C#通过S7.net读取西门子300PLC的数据_第6张图片
配置完成后点击Start Server开启转接服务

C#通过S7.net读取西门子300PLC的数据_第7张图片

2、S7-PLCSIM软件

下载程序完成后,需要将PLC置为RUN
C#通过S7.net读取西门子300PLC的数据_第8张图片

3、Step7 V5.6软件

C#通过S7.net读取西门子300PLC的数据_第9张图片
C#通过S7.net读取西门子300PLC的数据_第10张图片

C#通过S7.net读取西门子300PLC的数据_第11张图片
C#通过S7.net读取西门子300PLC的数据_第12张图片

最后: 西门子300的PLC是需要用到一些比较老的知识,这里自己去B站需要补一下知识;

你可能感兴趣的:(C#,Step7,c#)