对于西门子PLC不同数据类型读取的方法一直困扰了好久,今天进行了系统性的总结,主要还是通过图片和代码进行展示,PLC的基础设置就不进行说明了,网上都有的。
using S7.Net; using S7.Net.Types; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test { //plc中类型与c#类型 bool => Bit //Byte => byte //word => ushort //DWord => uint //Int => short //DInt => int //Real => float //LReal => double //String => string //Date_And_Time =>DateTime //DTL=>DateTimeLong //s7wstring=>string //ReadTimeout,WriteTimeout,分别为读取和写入等待时间 internal class Program { static void Main(string[] args) { Plc plc = new Plc(CpuType.S71500, "192.168.0.1", 0, 1); plc.Open(); if (plc.IsConnected) { Console.WriteLine("连接成功!"); } try { #region String数据类型 //String 用于存放英文数字标点符号等ASCII字符,每个字符占用一个字节 var count1 = plc.Read(DataType.DataBlock,1,2,VarType.Byte,1); //字符串定义长度 var count = plc.Read(DataType.DataBlock,1,2+1,VarType.Byte,1); //字符串实际长度 string Str = (string)plc.Read(DataType.DataBlock, 1, 2 + 2,VarType.String, Convert.ToInt32(count));//+2表示读取偏移值(跳过)的字符 #endregion #region S7String数据类型 //S7String 用于存放英文数字标点符号等ASCII字符,每个字符占用一个字节 var s7Definecount = plc.Read(DataType.DataBlock,1,258,VarType.Byte,1); //字符串定义长度 var s7Actualcount = plc.Read(DataType.DataBlock,1,258+1,VarType.Byte,1); //字符串定义长度 var s7Content = plc.Read(DataType.DataBlock, 1, 258, VarType.S7String, 30); #endregion S7WString数据类型 //WString宽字符串用于存放中文、英文、数字等Unicode字符,每个字符占用两个字节 #region var S7WString = plc.Read(DataType.DataBlock,1,290, VarType.S7WString, 254); #endregion #region Bit数据类型 var bit = plc.Read(DataType.DataBlock,1,802,VarType.Bit,1); #endregion #region word数据类型 var word = plc.Read(DataType.DataBlock, 1, 804, VarType.Word, 1); #endregion var dword = plc.Read(DataType.DataBlock, 1, 806, VarType.DWord, 1); #region DWord数据类型 #endregion #region Int数据类型 var inter = plc.Read(DataType.DataBlock, 1, 810, VarType.Int, 1); #endregion #region DInt数据类型 var dInter = plc.Read(DataType.DataBlock, 1, 812, VarType.DInt, 1); #endregion #region Real数据类型 var real = plc.Read(DataType.DataBlock, 1, 816, VarType.Real, 1); #endregion #region LReal数据类型 var lReal = plc.Read(DataType.DataBlock, 1, 820, VarType.LReal, 1); #endregion #region DateTimeLong数据类型 var dateTime = plc.Read(DataType.DataBlock, 1, 828, VarType.DateTime, 1); var dateTimeLog = plc.Read(DataType.DataBlock, 1, 836, VarType.DateTimeLong, 1); #endregion #region ReadTimeout,WriteTimeout数据类型 #endregion } catch (PlcException ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); } } }