西门子PLC数据采集(一):通过.net采集西门子PLC数据的方法
一、前言本文对于会一点.net Core开发的PLC自动化工程师及了解西门子PLC的.net 软件开发工程师比较友好谈到通过.net Core采集西门子PLC的数据其实不仅仅涉及到采集其中还包括数据的存储、展示、分析、数据上云等本文主要讲采集。一. 采集*采集主要通过西门子PLC自家的协议S7在VS中的NuGet搜索结果如下二. 存储目前关于采集的原始数据的存储我主要采用将原始数据存储为二进制数据或将原始数据存储到时序数据库中的方式。三. 展示数据展示主要通过Vue前端的各种数据展示插件Element Plus、Echart、Uplot四. 分析分析主要就是数据的时域或频域分析(FFT等)五. 数据上云数据上云主要采用Mqtt协议六. 数据传输简图二、采集前准备一. 以下两篇文章的说得比较清楚(依先后阅读)C#与西门子PLC通讯——新手快速入门C#利用S7netplus读写西门子PLC数据二. 对于上面两篇文章的补充说明*1. S7netplus主要可以采集的西门子的设备型号如下2. 采集的通道地址的规则说明a. 机架号槽号说明b. 通过PLC通道地址读取PLC通道数据说明(读取PLC不同类型的数据需要进行转换以下只是简单示例)c. 关于读取具体通道的说明d. 读取数据块e. 读取PLC变量c. 关于PLC smart 200的数据读取说明smart 200会出现以下VD开头的地址切记不能直接填写该地址采用DB块的读取方式读取比如读取VD414转换成DB1.DBD414附PLC变量一览表**补充说明**特别要注意String字符串的数据读取及写入Byte0→ 最大长度(MaxLen)Byte1→ 当前长度(CurrentLen)Byte2~n → 实际字符串内容ASCII举个例子定义STRING[10]PLC内存实际是字节位置 内容010最大长度15当前长度2-6Hello7-11 空读字符串publicstaticstringParseS7String(byte[]bytes){if(bytesnull||bytes.Length2)returnstring.Empty;intmaxLenbytes[0];intlenbytes[1];returnEncoding.ASCII.GetString(bytes,2,len);}写字符串publicstaticbyte[]BuildS7String(stringvalue,intmaxLen){varbytesnewbyte[maxLen2];// 最大长度bytes[0](byte)maxLen;// 当前长度varstrBytesEncoding.ASCII.GetBytes(value);intlenMath.Min(strBytes.Length,maxLen);bytes[1](byte)len;// 拷贝内容Array.Copy(strBytes,0,bytes,2,len);returnbytes;}vardataBuildS7String(Hello,10);plc.WriteBytes(DataType.DataBlock,1,0,data);