技术论坛

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

作者 主题
侠圣

经验值: 3279
发帖数: 310
精华帖: 8
主题:【分享】C#基于Sharp7(二次封装)读取西门子plc变量(上)
推荐帖


只看楼主 楼主 2021-01-14 21:48:05

先实例化一个类

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
分享帖版主置评: 实操原创,有意义的分享。 (推荐人:东方红一红)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1669553&b_id=7&s_id=0&num=16

奇侠

经验值: 9619
发帖数: 1550
精华帖: 14
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 1楼 2021-01-15 06:48:44

感谢楼主分享,请问ConnectTo建立的IP连接,使用的什么协议读写PLC的?


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1942
发帖数: 106
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 2楼 2021-01-15 07:54:18

 添加收藏了,谢谢分享


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1047
发帖数: 89
精华帖: 1
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 3楼 2021-01-15 08:33:37

感觉工作范围又扩大了


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7770
发帖数: 1150
精华帖: 1
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 4楼 2021-01-15 08:52:02

   谢谢分享,,哎呀,就是看不懂啊


,,
以下网友喜欢您的帖子:

  
至圣

经验值: 10582
发帖数: 1796
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 5楼 2021-01-17 13:22:53


收藏了,谢谢。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 5689
发帖数: 767
精华帖: 1
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 6楼 2021-01-17 13:25:14


感谢楼主无私的分享。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 9561
发帖数: 2050
精华帖: 3
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 7楼 2021-01-17 15:00:13
谢谢分享!
 
以下网友喜欢您的帖子:

  
至圣

经验值: 18410
发帖数: 2409
精华帖: 1
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 8楼 2021-01-17 19:07:28

持续关注中


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18914
发帖数: 2108
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 9楼 2021-01-17 19:19:16

楼主厉害哦,感谢分享


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 5547
发帖数: 626
精华帖: 6
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 10楼 2021-01-17 19:31:32

好帖子,值得好好学习。




 
以下网友喜欢您的帖子:

  
侠客

经验值: 685
发帖数: 41
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 11楼 2021-01-22 23:40:33

感谢分享,很高级


爱拼才会赢
以下网友喜欢您的帖子:

  
侠士

经验值: 1991
发帖数: 725
精华帖: 1
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 12楼 2021-02-02 11:36:56


好好学习先进经验


可爱
以下网友喜欢您的帖子:

  
侠圣

经验值: 2576
发帖数: 79
精华帖: 2
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 13楼 2021-02-17 14:16:57

不错,收藏了。


别低估专业,别高估自己,精进的人生,从敬畏专业开始。
以下网友喜欢您的帖子:

  
新手

经验值: 28
发帖数: 1
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 14楼 2021-02-19 22:04:58

感谢分享,学习了。正在找相关的资料。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2149
发帖数: 200
精华帖: 0
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 15楼 2021-02-20 10:51:13

 

厉害,学习了


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1413
发帖数: 157
精华帖: 6
回复:C#基于Sharp7(二次封装)读取西门子plc变量(上)


只看楼主 16楼 2021-03-08 15:47:36

路过,收藏,楼主赛高


活到老,学到老。
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
C#基于Sharp7(二次封装)读取西门子plc变量(上)
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。