精华内容
下载资源
问答
  • C# S7.Net 连接S7PLC代码
  • C# S7.Net.dll连接读写PLC

    2020-03-21 00:45:47
    C# S7.Net.dll连接读写PLC C# S7.Net.dll连接读写PLCC# S7.Net.dll连接读写PLC
  • C#S7.net

    2018-11-03 21:23:08
    网上找的资料,拿出来分享:资料中有s7.net.dll文件及其使用文档,同时还有反编译软件,通过反编译软件可以轻松看到s7.net.dll内部程序结构
  • 通过C#语言做的一个与西门子PLC通信的上位机DEMO,可做参考使用。使用的是西门子的S7.NET库文件进行,对上位机开发有帮助
  • S7.Net.dll文件里PLC类型里没有S7-200Smart类型,所有很多人不知道怎么通过S7.net与S7-200SmartPLC通信,实际上要想跟SmartPLC通信,用PLC类型选S7-1200,读取V区变量用DB1表示,其他的跟读取S7-1200一样了。...

    1.S7.Net.dll文件支持西门子所有PLC的通讯,本人通过几个星期的测试,搞懂了他的使用方法,并写了一个库函数,已经应用到多个系统中。该库里PLC类型里没有S7-200Smart类型,所有很多人不知道怎么通过S7.net与S7-200SmartPLC通信,实际上要想跟SmartPLC通信,用PLC类型选S7-1200,读取V区变量用DB1表示,其他的跟读取S7-1200一样了。具体测试代码如下。如果想了解具体怎么使用的可以下载上面的DOME。

    2.如果想知道具体的使用方法,控制的注意事项可以加V:1357448516咨询

     

    using System;

    using System.Collections.Generic;

    using System.Drawing;

    using System.Windows.Forms;

    using S7.Net;                      //与西门子PLC建立连接的开源代码库,开源社区中可以找到该库,VS中联网就可以搜索到

     

    namespace WindowsFormsApplication1

    {

        public partial class Form1 : Form

     

        {

            bool status=false;

            Plc plc1 = new Plc(CpuType.S71200, "192.168.6.1", 0, 1);    

     

            public Form1()

            {

                InitializeComponent();                                    

            }

            //连接到PLC

            private void btnConnect_Click(object sender, EventArgs e)

            {

                try

                {

                    plc1.OpenAsync();                  

                    status = true;                      

                    toolStripStatusLabel1.Text ="正在连接" + plc1.IP ;

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);      

                }

            }

     

            private void button1_Click(object sender, EventArgs e)

            {

                textBox1.Text = "";                            

                foreach (var readdata in ReadMultipleBytes(13, 1, 0))    //读取VB0开始的13个字节

                {

                        textBox1.Text = textBox1.Text + readdata+" ";    

                }  ;   

            }

         

            private void timer1_Tick(object sender, EventArgs e)

            {

                if (status)

                {

                    if (plc1.IsConnected)

                    {

                        toolStripStatusLabel1.ForeColor = Color.Black;                    

                        toolStripStatusLabel1.Text = plc1.IP + " 已成功连接 ";

                    }

                    else

                    {

                        toolStripStatusLabel1.ForeColor = Color.Red;                     

                        toolStripStatusLabel1.Text = plc1.IP + " 连接连接断开";

                    }

                }

            }

          

            private List<byte> ReadMultipleBytes(int numBytes, int db, int startByteAdr )

            {

                List<byte> resultBytes = new List<byte>(); 

                int index = startByteAdr;

                while (numBytes > 0)                    

                {

                    var maxToRead = (int)Math.Min(numBytes, 200);    

                    byte[] bytes = plc1.ReadBytes(DataType.DataBlock, db, index, (int)maxToRead);  

                    if (bytes == null)                    

                        return new List<byte>();

                    resultBytes.AddRange(bytes);          

                    numBytes -= maxToRead;                 

                    index += maxToRead;

                }

                return resultBytes;                  

            }

       

            private void timer2_Tick(object sender, EventArgs e)

            {

                 try

                {

                    byte[] bytes = plc1.ReadBytes(DataType.DataBlock, 1, 0, 1);

                    if (bytes == null)                                      

                    {

                        status = false;

                        plc1.OpenAsync();                                 

                        toolStripStatusLabel1.Text = "正在连接" + plc1.IP;                     

                    }

                    else

                        status = true;                                       

                }

                catch (Exception ex)

                {

                   MessageBox.Show(ex.Message);                             

                }

            }

     

          

            private void button3_Click(object sender, EventArgs e)

            {

                plc1.Close();                                           

            }

        }

    }

     

     

     

     

    展开全文
  • C#通过S7.NET库,将连接,断开连接,读取和写入数据写成类库,然后再去调用
  • 里面有S7.Net.dll以及使用说明英文版的,不用区网上下载了。实现C#连接PLC1200,并读写DB块数据。项目工程师完整的,可以直接学习使用。 更新:内部添加sharp7连接PLC增加读写bool变量,增加读PLC string类型,...
  • 资料中有s7.net.dll文件及其使用文档,西门子200,,300,1200,1500的通信!C#
  • C#通过微软类库,S7.NET读写西门子Siemens S7(200,300,400,1200,1500)数据块实例代码。 方便开发人员轻松实现读写DB块的功能(具体读(写)哪个块,读(写)开始位置,读(写)长度,以参数形式传递,傻瓜式应用), 开发...
  • C#使用S7.Net.DLL连接PLC,读写数据

    万次阅读 热门讨论 2019-08-30 23:21:23
    C#使用S7读写西门子1200 ...完整程序包和S7.Net库及使用说明:https://download.csdn.net/download/weixin_38950569/11645430 上传个界面让大家看的更明白一些,感觉我的命名还可以,应该都能直接看懂吧,看不...

    C#使用S7读写西门子1200

    学习慧兰博的C#与工业自动化U盘版,在这里做记录。有什么错误的地方请指出来,互相学习。(PS如果侵权慧兰博请及时联系我删除。)

    完整程序包和S7.Net库及使用说明:https://download.csdn.net/download/weixin_38950569/11645430

    上传个界面让大家看的更明白一些,感觉我的命名还可以,应该都能直接看懂吧,看不懂我也没办法了~

    废话不说直接上代码:

      Plc S71200;//声明一个类型为PLC的内部变量
    
    
             private void Form1_Load(object sender, EventArgs e)
              {
                  comDT.Items.Add("Int");
                  comDT.Items.Add("DInt");
                  comDT.Items.Add("Real");
                  comDT.Text = "Real";
              }
    
     //连接
            private void btnLink_Click(object sender, EventArgs e)
            {
                //创建连接对象
                S71200 = new Plc(CpuType.S71200, txtAddress.Text, Convert.ToInt16(txtRack.Text), Convert.ToInt16(txtSlot.Text));
    
                S71200.Open();
    
            }
            //断开
            private void btnBreak_Click(object sender, EventArgs e)
            {
                S71200.Close();
            }
    
            //读数据
            private void btnRead_Click(object sender, EventArgs e)
            {
                //浮点
                if(comDT.Text=="Real")
                {
                    double MyPlcData = ((uint)S71200.Read("DB" + txtDB.Text + "." + "DBD" + txtStart.Text)).ConvertToDouble();
                    MessageBox.Show(MyPlcData.ToString());
                }
                  //整数
                else if(comDT.Text == "Int")
                {
                    short MyPlcData = ((ushort)S71200.Read("DB" + txtDB.Text + "." + "DBW" + txtStart.Text)).ConvertToShort();
                    MessageBox.Show(MyPlcData.ToString());
                }
                 //双整数
                else if(comDT.Text =="DInt")
                {
                    int MyPlcData = ((uint)S71200.Read("DB" + txtDB.Text + "." + "DBD" + txtStart.Text)).ConvertToInt();
                    MessageBox.Show(MyPlcData.ToString());
                }
            }
            //写PLC
            private void btnWrite_Click(object sender, EventArgs e)
            {
                //浮点
                if (comDT.Text == "Real")
                {
                    double MyData = Convert.ToDouble(txtWrite.Text);
                    S71200.Write("DB" + txtDB.Text + "." + "DBD" + txtStart.Text,MyData.ConvertToUInt()); 
                    
                }
                //整数
                else if (comDT.Text == "Int")
                {
                    short MyData = Convert.ToInt16(txtWrite.Text);
                    S71200.Write("DB" + txtDB.Text + "." + "DBW" + txtStart.Text,MyData.ConvertToUshort());
                }
                //双整数
                else if (comDT.Text == "DInt")
                {
                    int myData = Convert.ToInt32(txtWrite.Text);
                    S71200.Write("DB" + txtDB.Text + "." + "DBD" + txtStart.Text,myData);
                }
             }
    
    
    

    完整程序包和S7.Net库及使用说明:https://download.csdn.net/download/weixin_38950569/11645430

    展开全文
  • 距离上一篇C#使用KepService连接已经好久了,这次把S7.net的更新上来。在此鸣谢一下(李,罗,任。) 附上github链接:https://github.com/S7NetPlus/s7netplus/wiki 第一步,首先把西门子PLC端配置好,如下图。这个...

    距离上一篇C#使用KepService连接已经好久了,这次把S7.net的更新上来。在此鸣谢一下(李,罗,任。)

    附上github链接:https://github.com/S7NetPlus/s7netplus/wiki

    第一步,首先把西门子PLC端配置好,如下图。这个很重要,后面编码都会依据这个,也就是说想要C#做读做写那么PLC部分要先规划好。

    这个是DB1块的。

    这个是DB3块的。

    上面步骤不懂请自行学习PLC相关知识。

    二、添加S7.NET引用。

    安装完成后我们开始正题。

    CpuType:PLC的cpu型号。我这里是1200。

    IP:PLC的IP地址。

    rack:机台号的位置,这个也是PLC的知识点。

    slot:插槽号的位置,也是PLC的知识点。

    使用这个属性来判别是否连接成功。

    三、读取数据。

    Read方式读取。直接根据DB1.DBX.0.0地址读取

    列如:myplc.read("DB1.DBX.0.0");

    将会返回一个obj的类型数据。我们需要根据PLC内不同数据类型去转换。就可以读取到相应的值

     

    Read还有一个按偏移量去读取的,可以批量连续读取相同数据类型的,我这里的案例就只读一个出来,为了演示而已。

    DataType:数据存储的位置类型。这里我是固定的选着DB块类型。

    DB:第几个DB块。

    startByteAdr:开始的偏移量位置。

    varType:数据的类型。

    carCount:结束的偏移量位置

     

    ReadBytes方式读取根据偏移量去读取,可以是不同数据读取上来

    DataType:数据存储的位置类型。这里我是固定的选着DB块类型。

    DB:第几个DB块。

    startByteAdr:开始的偏移量位置。

    count:结束的偏移量位置,也可以理解读取多少个位数据上来。

    ReadClass按照类的方式读取。

    首先我们要根据上面的PLC去建立类

    这个是根据DB3建立的类

    然后我们使用方法读取

    sourceClass:要读取的类。

    DB:哪个db块

     

     

    ReadStruct读取,使用结构去读取

    和类一样,我们要根据PLC去建立结构

    这个是根据DB1块建立的结构体

    structType:结构体。

    db:哪个db快。

    四、写入数据。

    Write写入。单个数据写入

    variable:PLC具体写入块名称(例如:DB1.DBX0.0)

    value:写入的值

     

    还有按偏移量写入的就不演示了,具体看案例。

     

     

    WriteBytes方式写入。

    DataType:数据存储的位置类型。这里我是固定的选着DB块类型。

    DB:第几个DB块。

    startByteAdr:开始的偏移量位置。

    value:要写入的byte数组。

     

     

    WriteClassAsync 使用类方式写入数据

    类写入的情况一样我们要用到刚刚建立的类,然后给类赋值,这里使用DB3块做样例。

    classValue:类的值。

    db:第几个db块。

     

    WriteStructAsync 使用结构方式写入数据

    structValuue:结构体。

    db:第几个db块。

    源码已上传,有需要可以下载,也可以联系我留下邮箱发送。

    https://download.csdn.net/download/weixin_38801976/18416486?spm=1001.2014.3001.5503

    ----------------小尾巴分割----------------------------------------

    菜鸟的记录也是进步~如果对你有所帮助,那就点赞一下吧。-----来自没有代码的程序员小萝卜

    展开全文
  • C# ReadClass S7.net

    2020-12-26 13:06:32
    <p>I am using the S7.net library in C# in order to read data from a VIPA PLC (similar to S7-300). The C# project runs on a virtual machine (Windows 10 Pro, 64 bit) and is programmed in Visual Studio ...
  • C#基于.net直接访问西门子PLC的类库——S7.net,可以实现西门子200含Smart、300、1200、1500寄存器地址的直接读写操作
  • 经过一周时间的研究,终于弄明白S7.Net.DLL类库与西门子S7-200Smart的通讯和PLC数据读写操作。 下面是我对西门子S7-200Smart做的测试代码。 using System; using System.Collections.Generic; using System....

    经过一周时间的研究,终于弄明白S7.Net.DLL类库与西门子S7-200Smart的通讯和PLC数据读写操作。

    下面是我对西门子S7-200Smart做的测试代码。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using S7.Net;

    namespace SiemensTest
    {
        public partial class S7_200SmartCommunicationTest : Form
        {
            public S7_200SmartCommunicationTest()
            {
                InitializeComponent();
            }
            Plc plc;//声明plc连接对象
            /// <summary>
            /// 连接plc
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnConnect_Click(object sender, EventArgs e)
            {
                string TypeName = txtPLCType.Text;//PLC型号名称
                string Ip = txtIp.Text;//plcIp地址
                switch (TypeName)
                {
                    case "200":
                    case "1200":
                        /*S7.Net.dll类库中没有S7-200Smart类型,想跟S7-200Smart通讯选择S71200即可*/
                        plc = new Plc(CpuType.S71200, Ip, 0, 2);//创建plc实例
                        break;
                    case "300":
                        plc = new Plc(CpuType.S7300, Ip, 0, 2);//创建plc实例
                        break;
                    case "400":
                        plc = new Plc(CpuType.S7400, Ip, 0, 2);//创建plc实例
                        break;
                    case "1500":
                        plc = new Plc(CpuType.S71500, Ip, 0, 2);//创建plc实例
                        break;
                }
                plc.Open();//连接plc
                if (plc.IsConnected)//检查plc是否连接上
                {
                    //连接成功
                }
                else
                {
                    //连接失败
                }
            }
            /// <summary>
            /// 给plc指定寄存地址写入数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnWrite_Click(object sender, EventArgs e)
            {
                string address = txtAddress.Text;//寄存地址
                string writedata = txtWriteData.Text;//写入数据
                /*
                 检查plc的可用性,检查此属性时,回向plc发送ping命令,如果plc响应ping则返回true,否则返回false.
                 */
                if (plc.IsAvailable)
                {
                    plc.Write(address,writedata);
                }
                else
                {
                    //连接失败
                }
            }
            /// <summary>
            /// 读取单个plc数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnReadSingleData_Click(object sender, EventArgs e)
            {
                string address = txtAddress2.Text;//寄存地址
                /*
                 检查plc的可用性,检查此属性时,回向plc发送ping命令,如果plc响应ping则返回true,否则返回false.
                 */
                if (plc.IsAvailable)
                {
                    var bytes = plc.Read(address);
                    txtReadSingleData.Text = bytes.ToString();
                }
                else
                {
                    //连接失败
                }
            }
            
            /// <summary>
            /// 读取多个plc数据,最多读取200个,超过则需要使用递归
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnReadMultipleData_Click(object sender, EventArgs e)
            {
                txtReadMultipleData.Clear();//清空文本框数据
                int AddressType = Convert.ToInt16(txtAddRessType.Text);//地址类型
                int Address = Convert.ToInt16(txtAddRess3.Text);//寄存地址
                int ReadCount = Convert.ToInt16(txtReadCount.Text);//读取个数
                var bytes = plc.ReadBytes(DataType.DataBlock, AddressType, Address, ReadCount);
                for (int i = 0; i < bytes.Count(); i++)
                {
                    txtReadMultipleData.AppendText(bytes[i].ToString() + "\r\n");
                }
            }
            /// <summary>
            /// 递归读取数据
            /// </summary>
            /// <param name="numBytes"></param>
            /// <param name="db"></param>
            /// <param name="startByteAdr"></param>
            /// <returns></returns>
            private List<byte> ReadMultipleBytes(int numBytes, int db, int startByteAdr = 0)
            {
                List<byte> resultBytes = new List<byte>();
                int index = startByteAdr;
                while (numBytes > 0)
                {
                    var maxToRead = (int)Math.Min(numBytes, 200);
                    byte[] bytes = plc.ReadBytes(DataType.DataBlock, db, index, (int)maxToRead);
                    if (bytes == null)
                        return new List<byte>();
                    resultBytes.AddRange(bytes);
                    numBytes -= maxToRead;
                    index += maxToRead;
                }
                return resultBytes;
            } 
        }
    }
     

     

    展开全文
  • 简单的通信小程序,网上几乎找不到200smart通信案例,这里其实还是通过其他的方式对200smart进行通信,不过好歹能通信上,能做一些简单的应用,太复杂的估计就不行了,不过复杂的操作也用不到200smart了。
  • 基于VS2019(C#)的西门子S7系列PLC读写组件,直接引用S7.Net.dll文件,有演示代码,仅供学习交流。网上收集整理,测试可以使用。资料中有s7.net.dll文件及其使用文档。
  • 基于C#平台通过S7.net实现与西门子S-1200PLC的通信方法
  • S7.NET-EXE.rar

    2020-10-14 11:55:56
    C#使用S7.NET库编写的读取西门子各型号PLC数据的Windows程序,包括打包好的exe文件,源代码,S7.NET源文件及S7.NET手册。详细介绍:https://blog.csdn.net/thebestleo/article/details/109068000
  • Communication with Siemens S7 Plc with C# and S7.Net plc driver inPLC,PLC Drivers,Siemens134 Comments66,987 Views In this article I explain how to implement a Siemens S7 plc driver by usin...
  • C#与西门子PLC通信通过S7.NET

    千次阅读 2020-12-26 19:24:04
    S7.NET支持连接S7-200SMART,S7-1200,S7-1500,S7-300,S7-400PLC,只支持西门子系列PLC,而且连接方式要是profinet通信 一,引用S7.NET的dll文件 二,using S7.Net; 三,实例化PLC 如果是连接PLC SMART200...
  • S7.NET-EXE

    2020-10-14 11:23:59
    C#使用S7.NET库编写的读取西门子各型号PLC数据的Windows程序。该程序可以直接安装测试。详细介绍:https://blog.csdn.net/thebestleo/article/details/109068000
  • 基于C#平台通过S7.net实现与西门子S-1200PLC的通信方法 需要提前准备的软件和文件: 1.Visual Studio 2019(自己到官网上下载安装) 2.S7.net.dll文件(需要的话链接我会放在文末) 3.西门子PLC软件TIA PORTAL V15.0...
  • S7.Net是一个用C#编写的plc驱动程序,这意味着您不必处理与本机代码的任何互操作性,但它只使用OO编程和您熟悉的所有.Net功能。 基本功能: •可以使用套接字与plc连接和断开连接 •给定起始地址和字节数,可以从...
  • 1、首先说下报的异常 (1)S7.Net.PlcException: 无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接 (2)索引超出范围,请重新输入! 针对第一个报的异常,很明显是一个硬件问题,但是由于对PLC不熟悉,...
  • 西门子S7.Net.dll

    2021-04-09 21:52:59
    1、C#使用S7.Net.DLL连接PLC,读写数据【https://download.csdn.net/download/hjsbbt/12044882?utm_source=iteye_new】 2、C#使用S7.Net,Sharp7连接读写PLC...
  • C#与西门子PLC连接库S7.NET及详细的使用说明文档.zip

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

c#s7.net

c# 订阅