记录|.NET上位机开发和PLC通信的实现

3 篇文章 0 订阅
1 篇文章 0 订阅

本文记录源自:B站视频
实验结果:跟视频做下来是没有问题的。能运行。


前言

在练习完基本的C#和.NET使用后,做下了记录|C#连接PLC通讯
现在打算跟B站视频做一个简单的C#项目。这篇文章做这个记录。
在这里插入图片描述


一、项目

Step1. 创建项目

  • 是个Windows窗口(.NET framework)

Step2. 创建动态图片展示

  • 首先,在自己项目的Debug文件位置处,去建立个images文件,用于存放图片【其中,Debug文件是指自己调试的程序;Release文件是指上线使用的程序】
    在这里插入图片描述
  • 动图需要准备一张.png和一张.gif
  • 在使用PictureBox组件,将图片添加进去,将组件的属性中的SizeMode改为Zoom
    在这里插入图片描述

Step3. 创建图片型按钮

  • 目的:实现一个具有图片的按钮【本质是button控件】
  • 先对button中FlatSytle属性改为Flat,之后才能使用Image属性。
    在这里插入图片描述
    据此创建出两个图片按钮:
  • 连接PLC按钮
  • 启动设备按钮
    在这里插入图片描述

Step4. 创建下拉框

  • ComboBox组件
    在里面提前设定好两个值:S71200和S71500
    在这里插入图片描述

Step1~4的效果展示

在这里插入图片描述


Step5. 编程

实体类

  • 创建Models文件夹,存放实体类EquipState。
  • 实体类类名:EquipState
  • 只存放方法名,等待实现

EquipState类:

namespace thinger.ProjectDemo
{
    /// <summary>
    /// 生产设备状态实体类
    /// </summary>
    internal class EquipState
    {
        public bool Start { get; set; }//设备启动

        public bool Stop { get; set; }//停止

        public bool Task1 { get; set; }//任务1

        public bool Task2 { get; set; }
        public bool Task3 { get; set; }
        public bool RunState { get; set; }//运行状态:1,正常   0 报警
        public ushort RunModel { get; set; }//运行模式:1,普通 2,加速    3,满载
        public float SiteData1 { get; set; }//位置数据1
        public float SiteData2 { get; set; }//位置数据2
        public float SiteData3 { get; set; }//位置数据3
        public float SpeedData1 { get; set; }//速度数据1
        public float SpeedData2 { get; set; }//速度数据2
    }
}

操作类

  • 创建个Manager文件,该文件夹下面创建EquipControlManager类
  • 类中的基本3个方法:ConnectPLC、ClosePLC、WriteDataToPLC
  • ConnectPLC,实现对PLC的连接并返回提示。因此,返回类型位string。

EquipControlMananger类:

namespace thinger.ProjectDemo.Manager
{
    /// <summary>
    /// 设备操作类
    /// </summary>
    internal class EquipControlManager
    {
        //先对Plc对象进行声明
        private Plc s7NetPlc = null;

        /// <summary>
        /// 连接PLC
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <param name="cpuType"></param>
        /// <returns></returns>
        public string ConnectPLC(string ipAddress, string cpuType)
        {
            try
            {
                //CpuType是个enum,枚举类型,因此,需要对string类型进行转换
                CpuType currentCpuType = (CpuType)Enum.Parse(typeof(CpuType), cpuType, true);

                s7NetPlc = new Plc(currentCpuType, ipAddress, 0, 0);
                s7NetPlc.Open();
                return "PLC连接成功";
            }
            catch (Exception ex)
            {
                return $"PLC连接失败,{ex.Message}";
            }

        }

        /// <summary>
        /// 关闭PLC
        /// </summary>
        public void ClosePLC()
        {
            s7NetPlc.Close();
        }

        /// <summary>
        /// 按照指定地址,写入数据【位、字节、字、双字】
        /// </summary>
        /// <param name="varAddress"></param>
        /// <param name="varValue"></param>
        /// <returns></returns>
        public string WriteDataToPLC(string varAddress, object varValue)
        {
            lock (this)
            {
                try
                {
                    this.s7NetPlc.Write(varAddress, varValue);
                    return "写入数据成功";
                }
                catch (Exception ex)
                {
                    return $"写入数据失败,{ex.Message}";
                }

            }
        }
    }
}

Main函数

namespace thinger.ProjectDemo
{
    public partial class FrmMain : Form
    {
        private EquipControlManager controlManger=new EquipControlManager();
        public FrmMain()
        {
            InitializeComponent();
        }
        
        /// <summary>
        /// 打开和关闭PLC
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPLCConnect_Click(object sender, EventArgs e)
        {
            //Tag记录的是之前的开关状态,只有off和on
            //如果之前off,那么改为on
            if (this.btnPLCConnect.Tag.ToString().Equals("off"))
            {
                string connectManager = controlManger.ConnectPLC("192.168.0.10", this.cbbPLCType.Text);
                this.btnPLCConnect.Tag = "on";
                this.btnPLCConnect.Image = Image.FromFile("images/plcOpen.png");
                MessageBox.Show(connectManager);
            }
            else
            {
                controlManger.ClosePLC();
                this.btnPLCConnect.Tag="off";
                this.btnPLCConnect.Image = Image.FromFile("images/plcClose.png");
            }
        }
    }
}

Step1~5的效果展示

在这里插入图片描述


Main函数

  • 添加了修改操作
       /// <summary>
       /// 操作设备
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void btnSwitch_Click(object sender, EventArgs e)
       {
           if (this.btnPLCConnect.Tag.ToString().Equals("off"))
           {
               MessageBox.Show("请先连接PLC", "操作提示");
               return;
           }
           //获取Tag中的地址值
           string[] tags = this.btnSwitch.Tag.ToString().Split('-');

           if (tags[0].Equals("off"))
           {
               //打开冷却泵
               this.pictureBox1.Image = Image.FromFile("images/电机.gif");
               this.btnSwitch.Image = Image.FromFile("images/btnOn.png");
               this.btnSwitch.Tag = $"on-{tags[1]}";
               //修改PLC中的值
               controlManger.WriteDataToPLC(tags[1], true);
           }
           else
           {
               this.pictureBox1.Image = Image.FromFile("images/电机.png");
               this.btnSwitch.Image = Image.FromFile("images/btnOff.png");
               this.btnSwitch.Tag = $"off-{tags[1]}";
               //修改PLC中的值
               controlManger.WriteDataToPLC(tags[1], false);
           }

       }

最终效果:

在这里插入图片描述


二、补充内容

1. FlatStyle属性

  • 功能:设置Windows Forms控件(如:按钮、标签等)。
  • Flat:产生“平面”效果,将空间的边框移除
  • Standard:默认,三维效果。

更新时间线

  • 2024.07.15:创建文章
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PLC上位机程序S7.NET是一种用于与PLC进行通信和控制的软件。它基于S7协议,可以与西门子PLC进行数据交换和监控。S7.NET程序可以在Windows操作系统上运行,为用户提供了一个友好的界面来管理和监控PLC系统。 S7.NET具有强大的功能,可以读取和写入PLC的输入输出数据,以实现对控制过程的监控和操作。通过S7.NET,用户可以轻松设置和修改PLC的参数和逻辑功能,以满足实际应用的需求。 S7.NET还支持多种通信方式,如以太网、串口等,使用户可以根据需要选择合适的通信方式与PLC进行连接。此外,S7.NET还支持数据记录和远程访问功能,可以将PLC的数据保存到本地或远程数据库,方便用户进行数据分析和远程监控。 对于开发人员来说,S7.NET提供了丰富的编程接口和开发工具,使他们可以轻松地开发自己的应用程序。通过S7.NET,开发人员可以自定义界面和逻辑,实现更高级的功能和定制化需求。 总的来说,PLC上位机程序S7.NET是一款强大而灵活的软件工具,它为用户提供了方便的操作界面和丰富的功能来管理和控制PLC系统。无论是对于终端用户还是开发人员,S7.NET都是一个重要的工具,能够大大简化PLC系统的维护和开发过程。 ### 回答2: PLC(可编程逻辑控制器)是一种广泛应用于工业自动化领域的控制设备,它通过编程控制各种外部设备的操作,实现对工程设备的自动化控制。而上位机程序是PLC通常使用的软件工具,用于监控和控制PLC系统的操作。 S7.NET是一种针对西门子公司所生产的S7系列PLC通信协议。该协议是基于以太网的通信方式,允许计算机或上位机与PLC之间进行数据交换和通信。通过使用S7.NET协议,可以方便地实现PLC的监控和控制,以及对PLC系统的各种参数进行调整和配置。 上位机程序通常由开发人员编写和设计,它通过与PLC系统进行通信,实时获取并分析PLC系统的数据。上位机程序还提供用户界面,用于操作者与PLC系统进行交互。通过上位机程序,操作者可以监视PLC系统的工作状态、收集和分析数据,并进行必要的控制调整。 S7.NET作为一种常用的通信协议,具有以太网通信的高速性能和稳定性,可以与各种上位机软件进行集成。通过使用S7.NET,上位机程序可以与S7系列PLC实现快速、可靠的数据交换和通信,使PLC系统的监控和控制更加方便和可靠。 总之,PLC上位机程序S7.NET是一种用于与S7系列PLC进行通信的软件工具,它能够实现PLC系统的监控和控制,为工业自动化提供了便利和可靠性。 ### 回答3: PLC上位机程序S7.NET是一种用于与西门子S7系列PLC进行通信的程序。S7.NET提供了一套强大的API(应用程序接口),使开发人员能够从上位机中读取和写入PLC的数据,实现远程监控和控制。 S7.NET使用C#编程语言,可以在Microsoft Visual Studio等开发环境中进行编写和调试。它可以通过TCP/IP以太网或串行连接与PLC进行通信,支持支持多线程操作,允许同时与多个PLC进行通信。 通过S7.NET,开发人员可以轻松地编写代码来读取和写入PLC的数据寄存器、位、字节等信息。还可以对PLC进行诊断和监控,实时显示PLC的状态信息。此外,S7.NET还支持对PLC程序进行远程下载和更新的功能,极大地简化了PLC程序的管理和维护过程。 对于需要与PLC进行通信的应用程序开发而言,S7.NET是一个非常有用的工具。它不仅提供了高效的通信接口,还具有丰富的功能和易于使用的API,使得开发人员能够快速地实现PLC的数据交互和控制。 总而言之,PLC上位机程序S7.NET是一种用于与西门子S7系列PLC进行通信的程序,它提供了强大的API和丰富的功能,可以方便地实现PLC的远程监控和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值