当前位置:   article > 正文

C#使用S7netPlus与PLC通讯(超简单)

s7netplus

前言

在这里插入图片描述

刚接到手一个项目,是开发一款程序,要和PLC有数据交互,如上图,设备发生故障后,PLC会发电报,我们收到电报后把故障显示出来,同时点击解除故障,也会给PLC发送相对应的电报。查了蛮多资料但是感觉还是无从下手(资料是挺多的,但是感觉太繁琐了,有很多地方都没有必要,比如模拟PLC环境,一连下四五个软件,我感觉没有必要。),最后问了一下我之前公司的好哥们,正好他就是做上位机的,所以跟着学会了怎么连接PLC,怎样读写数据。我这里暂时也没有PLC,所以我使用的也是仿真模拟软件:HslCommunication
在这里插入图片描述
安装包下载:

链接:https://pan.baidu.com/s/1dE3KAFUQgXJ2wRB7oWJewA 
提取码:acpk
  • 1
  • 2

1.引入S7netPlus包

在这里插入图片描述

2.连接

           //PLC类型 IP地址 机架号 槽号
           //这里我们使用的是仿真软件,所以默认是的IP地址是本机地址
           Plc plc = new Plc(CpuType.S7300, "127.0.0.1", 0, 0);
            try
            {
                plc.Open();
                if (plc.IsConnected == false)
                {
                    textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ")+"PLC连接失败!";
                }
                else
                {
                    textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ")+"PLC连接成功!";
                }
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.Message;
            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

效果图如下:
在这里插入图片描述
在这里插入图片描述
这样就连接上了,真实情况下的PLC也可以连接上。

3.读取数据

我这里写的比较多,是因为我专门写了个Demo来测试连接、读写的。

///代码中用到三种数据获取方式: DBX、DBW、DBD,深入理解的可以查一下网上资料
            ///简单理解就是 DBX读取位,比如bool类型;DBW读取字;DBD读取数值
            ///注释中是对应的 TIA Portal 数据块类型
            var db1Bool1 = (bool)plc.Read("DB1.DBX0.0");
            Console.WriteLine("DB1.DBX0.0: " + db1Bool1);

            bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1");
            Console.WriteLine("DB1.DBX0.1: " + db1Bool2);

            // Int
            int intVariable = (ushort)plc.Read("DB1.DBW2.0");
            Console.WriteLine("DB1.DBW2.0: " + intVariable);
            // Real
            var realVariabl = ((uint)plc.Read("DB1.DBD4.0")).ConvertToFloat();
            Console.WriteLine("DB1.DBD4.0: " + realVariabl);
            // DInt
            var dIntVariable = (uint)plc.Read("DB1.DBD8.0");
            Console.WriteLine("DB1.DBD8.0: " + dIntVariable);
            // DWord
            var dWordVariable = (uint)plc.Read("DB1.DBD12.0");
            Console.WriteLine("DB1.DBD12.0: " + dWordVariable);
            // Word
            var wordVariable = (ushort)plc.Read("DB1.DBW16.0");
            Console.WriteLine("DB1.DBW16.0: " + wordVariable);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

拿DB1.DBD12.0来举例:

var dWordVariable = (uint)plc.Read("DB1.DBD12.0");
textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ")+"DB1.DBD12.0读取值为:"+dWordVariable ;
  • 1
  • 2

在这里插入图片描述
我们可以看到在软件里面这个程序块的值是123456,那么我们接下来用程序试一下。
在这里插入图片描述
很完美,读取到了这个模块里的值。

4.写入数据

 plc.Write("DB1.DBD12.0", 123457);
  • 1

一行写入,简单到爆炸,那么我们验证下效果。
在这里插入图片描述
写入成功!是不是超级简单。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/290059
推荐阅读
相关标签
  

闽ICP备14008679号