赞
踩
最近一个项目需要读取西门子300PLC里面的数据,300PLC是用Step编写的,不是现有的使用较多博途软件。在读取数据上,有些不一样,所以将这里的坑记录一下;
在这里需要使用到的软件和工具:
Visual Studio 2019
Step V5.6
S7 PLCSIM
NetToPLCsim
连接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
因为没有300的PLC,所以需要在电脑上仿真模拟PLC;这里比较麻烦;
这里遇到的坑一是Step7 V5.6软件
安装的Step7 V5.6软件里面的硬件组态不全,网上百度了好久,最后不得不卸载重新安装才完成;硬件组态不全,没办法添加PLC,没有办法写PLC程序;
网上也提供了一些更新硬件组态的方法,同样也试了,很容易就卡死了;提供下面别人分享的链接,以供参考:
坑二:仿真并连接虚拟地址
一定要按照,顺序打开软件,有时候往往一次不能成功,可以多试几次;
坑三:读取的PLC数据
PLC程序如果没有用功能块,一定要用MD去存你要读取的数据;不然读取的数据会有问题;西门子MD是存 Double Word;我们的整型的数如果太大了,会涉及到需要存在两个Word中;浮点数一定是两个字的;
打开NetToPLCsim软件会报这个, 点 是 就可以了;
等待加载完成
加载完成,点击OK
NetToPLCsim软件界面
点击ADD,进入站点设置界面(一定要先仿真之后,再ADD)
PLCSIM IP Address后面的 … 在如果争取打开Step7 的仿真软件的情况下,是可以选取的;
配置完成后点击Start Server开启转接服务
下载程序完成后,需要将PLC置为RUN
最后: 西门子300的PLC是需要用到一些比较老的知识,这里自己去B站需要补一下知识;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。