Bootstrap

C#读取PLC的不同数据类型

        对于西门子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();

        }
    }
}

;