技术论坛

 C#基于Sharp7(二次封装)读取西门子plc变量(上)

返回主题列表
作者 主题
匆匆又三年
侠圣

经验值: 3258
发帖数: 310
精华帖: 8
楼主    2021-01-14 21:48:05
主题:C#基于Sharp7(二次封装)读取西门子plc变量(上)

先实例化一个类

S7Client plc = new S7Client();

连接PLC

 plc.ConnectTo("192.168.31.100", 0, 1);

方法一、注册标签名读写变量

1、注册变量plc.Add(变量名, 地址, 数据类型);

            plc.Add("D1", "D1.0.0", S7Type.Bit);

            plc.Add("D2", "D1.1", S7Type.Byte);

            plc.Add("D3", "D1.2", S7Type.Word);

            plc.Add("D4", "D1.4", S7Type.Int);

            plc.Add("D5", "D1.6", S7Type.DWord);

            plc.Add("D6", "D1.10", S7Type.DInt);

            plc.Add("D7", "D1.14", S7Type.Real);

            plc.Add("D8", "D1.18", S7Type.LWord);

            plc.Add("D9", "D1.26", S7Type.LInt);

            plc.Add("D10", "D1.34", S7Type.LReal);

2、读取变量 plc.Read(变量名)

           plc.Read("D1");

           plc.Read("D2");

           plc.Read("D3");

           plc.Read("D4");

           plc.Read("D5");

           plc.Read("D6");

           plc.Read("D7");

           plc.Read("D8");

           plc.Read("D9");

           plc.Read("D10");

3、写入变量plc.Write(变量名,值)

           plc.Write("D1",1);

           plc.Write("D2",2);


           plc.Write("D3",3);

           plc.Write("D4",4);


           plc.Write("D5",5);

           plc.Write("D6",6);


           plc.Write("D7",7);

           plc.Write("D8",8);


           plc.Write("D9",9);

           plc.Write("D10",10);

方法二、地址加类型读写变量

1、读取变量 plc.Read(地址,数据类型)

               plc.Read("I0.0", S7Type.Bit);

            plc.Read("I1", S7Type.Byte);

            plc.Read( "I2", S7Type.Word);

            plc.Read("I4", S7Type.Int);

            plc.Read( "I6", S7Type.DWord);

            plc.Read("I10", S7Type.DInt);

            plc.Read("I14", S7Type.Real);

            plc.Read("I18", S7Type.LWord);

            plc.Read("I26", S7Type.LInt);

            plc.Read("I34", S7Type.LReal);

2、写入变量 plc.Write(地址,数据类型,值)

            plc.Write("I0.0", S7Type.Bit,1);

            plc.Write("I1", S7Type.Byte, 2);

            plc.Write("I2", S7Type.Word, 3);

            plc.Write("I4", S7Type.Int, 4);

            plc.Write("I6", S7Type.DWord, 5);

            plc.Write("I10", S7Type.DInt, 6);

            plc.Write("I14", S7Type.Real, 7);

            plc.Write("I18", S7Type.LWord, 8);

            plc.Write("I26", S7Type.LInt, 9);

            plc.Write("I34", S7Type.LReal, 10);


方法三、读取一个类,再利用方法一写入变量

1、新建一个类

class   Udt

    {

        private bool _Static_1;

         public bool Static_1

        {

            get => _Static_1;

            set => _Static_1 = value;

        }


        private byte _Static_2;

        public byte Static_2

        {

            get => _Static_2;

            set => _Static_2 = value;

        }


        private ushort _Static_3;

        public ushort Static_3

        {

            get => _Static_3;

            set => _Static_3 = value;

        }


        private short _Static_4;

        public short Static_4

        {

            get => _Static_4;

            set => _Static_4 = value;

        }


        private UInt32 _Static_5;

        public UInt32 Static_5

        {

            get => _Static_5;

            set => _Static_5 = value;

        }


        private Int32 _Static_6;

        public Int32 Static_6

        {

            get => _Static_6;

            set => _Static_6 = value;

        }


        private float _Static_7;

        public float Static_7

        {

            get => _Static_7;

            set => _Static_7 = value;

        }


        private UInt64 _Static_8;

        public UInt64 Static_8

        {

            get => _Static_8;

            set => _Static_8 = value;

        }

        private Int64 _Static_9;

        public Int64 Static_9

        {

            get => _Static_9;

            set => _Static_9 = value;

        }


        private double _Static_10;

        public double Static_10

        {

            get => _Static_10;

            set => _Static_10 = value;

        }

    }

2、初始化类

                Udt D2 = new Udt();

            Udt I0 = new Udt();

            Udt Q0 = new Udt();

            Udt M0 = new Udt();

3、读取变量

            plc.ReadClass(D2,S7Area.DB, 2, 0);//读取DB2地址从0.0开始的十个变量

            plc.ReadClass(I0,  S7Area.PE, 0, 0);//读取I区地址从0.0开始的十个变量

            plc.ReadClass(Q0, S7Area.PA, 0, 0);//读取Q区地址从0.0开始的十个变量

            plc.ReadClass(M0, S7Area.MK, 0, 0);//读取M区地址从0.0开始的十个变量


4、写入变量

1.先用plc.Add(类,实例名, 数据区域,DB编号,起始地址)方法注册字典

            plc.Add(D2, "D2", S7Area.DB, 2,0);

            plc.Add(I0, "I0", S7Area.PE, 2, 0);

            plc.Add(Q0, "Q0", S7Area.PA, 2, 0);

            plc.Add(M0, "M0", S7Area.MK, 2, 0);

2.再利用plc.Write(变量名,值)

           plc.Write("D2. Static_1", 1);

           plc.Write("I0. Static_1", 1);

           plc.Write("Q0. Static_1", 1);

           plc.Write("M0. Static_1", 1);

方法四、通过配置XML文件读取变量,件

1、加载Debug目录下的PlcTag.xml配置文

S7Client plc1 = new S7Client(System.IO.Path.Combine(Environment.CurrentDirectory, "PlcTag.xml"));

plc1.ConnectTo("192.168.31.100", 0, 1);

2、plc1.Read();读取变量

变量的值存放在plc1.Tag中,可以使用foreach循环获取

foreach (KeyValuePair<string,Tag> item in plc1.Tag)

            {

//打印结果

Console.WriteLine($"<编号>{ item.Key} <变量名>{ item.Value.name}<数据类型>{ item.Value.s7type}<地址>{ item.Value.address}<值>{ item.Value.value}");

            }

3、写入变量 plc.Write(变量名,值)

 写入变量通过方法一 plc1.Write("name", Value);......name是通过配置文件<Package/> 中的name值加上<Name/>中的number值

            例如Package中 name="Package_D1",Name中number="1" 则name="Package_D1"+"."+1;

            例如Package中 name="Package_Q0",Name中number="10" 则name="Package_Q0"+"."+10;

                 plc1.Write("Package_D1.1", 1);

                 plc1.Write("Package_D1.2", 1);

                 plc1.Write("Package_Q0.10", 1);


rar压缩包包含三个文件,一个vs2019、一个使用说明书、一个v15项目,xml文件在Test项目下的Debug目录下PlcTag.xml文件




Dome.rar




C#基于Sharp7(二次封装)读取西门子plc变量(下)





有事联系邮箱 203161926@qq.com
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。