C#---S7.Net编写PLC通讯(从资源安装到功能实现)附代码

在电脑实现C#控制PLC最好安装虚拟软件进行模拟,简单且方便,那么接下来让我们一步步来

1.首先准备好材料,一共需要三个软件分别为:SIMATIC_PLCSIM_Advanced_V3.exe、TIA_Portal_STEP7_Prof_Safety_WINCC_Adv_Unified_V16.exe和po解的EKB

这篇主要是编写如何完成,安装部分简单说明一下;

C#---S7.Net编写PLC通讯(从资源安装到功能实现)附代码_第1张图片

这个无脑安装即可,一路下一步就行

C#---S7.Net编写PLC通讯(从资源安装到功能实现)附代码_第2张图片

这个也同样无脑安装

安装完成之后需要进行连接,有的可能会出现提示,显示需要连接net start npf,那么这个可能是因为没有WinPcap,给出资源链接:https://pan.baidu.com/s/1EPyb3diTJ2Ymdn0GFBcbfA 
提取码:2mzv,打开安装就可以用,安装完成之后需要管理员权限启动cmd,输入
net start npf这个命令,就可以解决了

2.安装和连接完成之后先输入一些数据

先建一个db数据块

输入一些数据

C#---S7.Net编写PLC通讯(从资源安装到功能实现)附代码_第3张图片 3.对命令的解释

要明白这些都应该怎么用,首先是db的名字DB109之后是根据数据类型进行分类,不同的数据类型,后面跟着的是不一样的,其中DBW是字,DBX是位,DBD是双字,这个要明确,比如int就是

 DBW,后面就是偏移量,那么连起来就是DB109.DBW.0.0

4.对程序的实现

首先是连接:

public void open()
        {
            CpuType cpu = (CpuType)(Enum.Parse(typeof(CpuType), comboBox1.Text, true));
            plc = new Plc(cpu, textBox1.Text, 0, 1);
            try
            {
                plc.Open();
                link = true;
                timer1.Enabled = true;
                button1.Text = "关闭";
                button1.ForeColor = Color.Green;
            }
            catch(Exception)
            {
                Console.WriteLine($"连接到PLC设备失败:IsConnect = {plc.IsConnected}");
                return;
            }

        }

再是关闭:

public void close()
        {
            try
            {
                plc.Close();
                link = false;
                timer1.Enabled = false;
                button1.Text = "打开";
                button1.ForeColor = Color.Red;
            }
            catch
            {

            }
        }

再是读:

使用plc.Read函数

public void Read(string variable)
        {
            if (link == false)
            {
                Console.WriteLine("未连接,状态:",plc.IsConnected);
            }
            else
            {
                try
                {
                    string[] arr = (comboBox2.Text.ToUpper()).Split('.');
                    string val = arr[1].Substring(0, 3);
                    Console.WriteLine(val);
                    if (val == "DBX")
                    {
                        bool text1 = (bool)plc.Read(comboBox2.Text.ToUpper());
                        bt = text1;
                        Console.WriteLine("读取数据为:" + text1);
                    }
                    else if (val == "DBW") {
                        int text2 = (ushort)plc.Read(comboBox2.Text.ToUpper());
                        Console.WriteLine("读取数据为:" + text2);
                    }
                    else if(val == "DBD")
                    {
                        var text3 = (uint)plc.Read(comboBox2.Text.ToUpper());
                        Console.WriteLine("读取数据为:" + text3);
                    }
                }
                catch
                {

                }
            }
        }

 最后是写:

public void write()
        {
            string nm = textBox2.Text;
            string mm = comboBox2.Text;
            string[] var = (comboBox2.Text.ToUpper()).Split('.');
            string val1 = var[1].Substring(0, 3);
            if (val1 == "DBW")
            {
                plc.Write(mm, Convert.ToInt16(nm));
                Console.Write("写入数据为:" + nm);
            }
            else if (val1 == "DBD")
            {
                plc.Write(mm, Convert.ToInt32 (nm));
                Console.Write("写入数据为:" + nm);
            }
        }

按照我的写法基本应该没问题,如果有任何疑问可与我沟通

特别的,如果有朋友实现或者安装上有问题可以咨询我哈

你可能感兴趣的:(解决问题,串口通讯,c#,.net,开发语言,PLC)