S7.Net与西门子PLC通讯——纯新手必看

本文档适合从未接触过PLC的.NET开发程序员入门查看。(其实看完了之后,PLC开发也就那样)

由于项目还未开发完成,准备空抽补充陆续完成这篇博客,更好的设计思路也能给自己加深印象。

近期公司有一个跟雷达、光电、干扰炮等设备通讯的项目,让我来负责,整个项目只有我一个人且没有PLC开发经验的同事,这对于从未接触过PLC开发的我来说,无疑是一团迷雾,不知从何入手。公司之前也没有PLC开发经验和项目,头大。。。

正所谓“没有撤退可言,只有活下来的人才有资格清兵线!”

开始在网上找各种资料,在此记录一下学习的过程和踩过的坑

1.快速锁定有效文章,对于初学来说,先看理论,有些花里胡哨且乱的资料直接关闭

2.尽量能找到可以理解的demo,觉得有用但还看不懂的可以先notepad做下笔记

4.最后的最后找到S7NetPlus,成功实现了PLC的通讯,博客也会总结对S7NetPlus的使用

5.要有中心思路,不要一会这个,一会看那个

由于也是初学,如有讲错或不到位的地方还望大佬指教,及时修正!

链接:
提取码:lllg

开发环境准备

同时由于设备还未采购,没有设备进行测试开发,会安装一个仿真模拟器进行调试。(真心的,谁想到还能仿真模拟设备)

需要安装的软件包括

◦TIAPortalV14

◦S7-PLCSIMV14

◦NetToPLCsim-S7o-v-1-2-2-0

TIAPortal

西门子官方管理设备数据块的客户端,每一个项目等同于一个设备型号,可以理解为是我们经常使用的数据块客户端

S7-PLCSIM

创建一个仿真的模拟环境,使用TIAPortal进行调用,控制仿真设备的运行停止

NetToPLCsim

提供本地服务去连接到仿真设备,和PLCsim之间建立网络通讯

安装完TIA之后,有两处需要进行设置(重要!)

1.选中组态的PLC设备,常规下找到防护与安全,选择允许从远程伙伴使用PUT/GET通信访问


2.建立的数据块文件,右键属性,需要取消优化的块访问选项,使用绝对地址


软件交互使用

第一步:TIAPortal新建项目,选择需要通讯的设备型号


第二步:添加数据块





第六步:设置NetToPLCsim

6.2NetWorkIPAddress手写填为本机(127.0.0.1)

6.4根据不同设备型号设置Rack/Slot,我是S7-1200,设置0/1


第七步:开启服务,这里也很坑!如果没有按顺序操作,也能StartServer,但是编码时连接不到。最开始不懂仿真设备,在这里研究了好久,Demo硬是连不上


ok!现在就可以开始进行编码了,这里重点介绍从[连接]到[读写]的集中方式和介绍

创建连接

以前的历史版本();会有一个返回值,可以通过返回值获取ErrorCode和ErrorMessage

我使用了当前最新版(),没有返回值使用try-catch

using(varplc=newPlc(,"127.0.0.1",0,1)){try{();}catch(Exception){(region单个数据项读取vardb1Bool1=("");(":"+db1Bool1);booldb1Bool2=(bool)("");(":"+db1Bool2);//IntintintVariable=(ushort)("");(":"+intVariable);//RealvarrealVariabl=((uint)("")).ConvertToFloat();(":"+realVariabl);//DIntvardIntVariable=(uint)("");(":"+dIntVariable);//DWordvardWordVariable=(uint)("");(":"+dWordVariable);//WordvarwordVariable=(ushort)("");(":"+wordVariable);region批量数据项读取/读取整个DB//DataType:数据类型,DB或Memory等//DB:DataBlock=1,Memory=0//count:偏移量(offset),设置多少就获取到具体位置的数据//eg:比如最后一个DBW是16,那么数据类型长度为2,count就需要传18才能获取到varbytes=(,1,0,18);(bytes);varbool1=bytes[0].SelectBit(0);(":"+bool1);varbool2=bytes[0].SelectBit(1);(":"+bool2);//IntintintVariable=((2).Take(2).ToArray());(":"+intVariable);//RealDoublerealVariable=((4).Take(4).ToArray());(":"+realVariable);//DWorduintdWordVariable=((12).Take(4).ToArray());(":"+dWordVariable);//WordvarwordVariable=((16).Take(2).ToArray());(":"+wordVariable);region读取数据块(DB)到实体类vardb1=newDb1();(db1,1,0);region多个数据块(DB)同时读取();#region

写入单个数据【Write】

看完上面的内容,就很容易理解这里

//写入数据("",true);("",123457);

我也是第一次接触PLC设备通讯,还有很多没有讲全面,如果有更好的方案或经验欢迎留言一起探讨,感谢!

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系