zoukankan      html  css  js  c++  java
  • winform空压机控制流程(学习笔记)

    1.自定义控件

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace MS_UI
    {
        /// <summary>
        /// 冷却泵
        /// </summary>
        public partial class LQB : UserControl
        {
            public LQB()
            {
                InitializeComponent();
                mytimer = new Timer();
                mytimer.Interval = 10;
                mytimer.Tick += Mytimer_Tick;
                mytimer.Enabled = true;
            }
    
            private void Mytimer_Tick(object sender, EventArgs e)
            {
                if (this.DeviceStateName != null)
                {
                    if (CommonMethods.CurrentValue != null && CommonMethods.CurrentValue.ContainsKey(DeviceStateName))
                    {
                        Start = CommonMethods.CurrentValue[DeviceStateName] == "1" ? true : false;
                    }
                }
    
    
                if (Start)
                {
                    if (this.index < this.indexMax)
                    {
                        this.index++;
                    }
                    else
                    {
                        this.index = 0;
                    }
                }
                this.change();
            }
    
            private void change()
            {
                switch (this.index)
                {
                    case 0: this.MainPic.Image = Properties.Resources._1; break;
                    case 1: this.MainPic.Image = Properties.Resources._2; break;
                    case 2: this.MainPic.Image = Properties.Resources._3; break;
                    case 3: this.MainPic.Image = Properties.Resources._4; break;
                    case 4: this.MainPic.Image = Properties.Resources._5; break;
                    case 5: this.MainPic.Image = Properties.Resources._6; break;
                    case 6: this.MainPic.Image = Properties.Resources._7; break;
                    case 7: this.MainPic.Image = Properties.Resources._8; break;
                    case 8: this.MainPic.Image = Properties.Resources._9; break;
                    case 9: this.MainPic.Image = Properties.Resources._10; break;
                    case 10: this.MainPic.Image = Properties.Resources._11; break;
                    default: this.MainPic.Image = Properties.Resources._1; break;
                }
    
            }
    
            //当前选择的图片序号
            private int index;
    
            //定义一个定时器
            private Timer mytimer;
    
            //定义定时器的时间间隔
            private int interval = 10;
    
            /// <summary>
            /// 定义设备状态变量
            /// </summary>
            public string DeviceStateName { get; set; }
    
            /// <summary>
            /// 定义设备启动变量
            /// </summary>
            public string DeviceStartName { get; set; }
    
            /// <summary>
            /// 定义设备停止变量
            /// </summary>
            public string DeviceStopName { get; set; }
    
            /// <summary>
            /// 定义设备名称
            /// </summary>
            public string DeviceName { get; set; }
    
    
            public int Interval
            {
    
                get { return mytimer.Interval; }
                set
                {
    
                    if (value != mytimer.Interval)
                    {
                        mytimer.Interval = value;
                    }
                }
            }
    
            //定义控件的转动属性
            private bool start = false;
            public bool Start
            {
                get { return start; }
                set { start = value; }
            }
    
            //最大图片数目
            private int indexMax = 11;
            public int IndexMax
            {
                get { return indexMax; }
                set { indexMax = value; }
            }
    
            public delegate void PumpClickDelegate(object sender, EventArgs e);
    
            public event PumpClickDelegate UserControlClick;
    //自定义控件的双击事件 private void MainPic_DoubleClick(object sender, EventArgs e) { if (UserControlClick != null) { UserControlClick(this, new EventArgs());//把自身传入 } } } }

     2,主程序运行的时候读取配置信息,把这两个通过键值对的方式储存

            private void InitialTxt()
            {
                //第一步:通讯接口信息
                CommonMethods.objModbusEntity = CommonMethods.GetConfigInfo(FilePath + "Modbus.ini");
                //第二步:变量集合信息
                CommonMethods.VarModbusList = CommonMethods.LoadXML(FilePath + "Variable_Modbus.xml");
                //第三部:存储区域集合
                CommonMethods.StoreAreaList = CommonMethods.LoadStoreAreaXML(FilePath + "StoreArea.xml");
                //第四步:报警变量集合
                CommonMethods.VarAlarmModbusList = CommonMethods.LoadAlarmXML(FilePath + "VarAlarm_Modbus.xml");
                //第五步:其他初始化
                foreach (Variable_Modbus item in CommonMethods.VarModbusList)
                {
                    if (!CommonMethods.CurrentValue.ContainsKey(item.VarName))//如果不包含
                    {
                        CommonMethods.CurrentValue.Add(item.VarName, "");//新加一个键值对
                        CommonMethods.CurrentVarAddress.Add(item.VarName, item.Address);
                    }
    
                    if (item.StoreArea == "01 Coil Status(0x)")
                    {
                        objComm.List_0x.Add(item);
                    }
    
                    if (item.StoreArea == "02 Input Status(1x)")
                    {
                        objComm.List_1x.Add(item);
                    }
    
                    if (item.StoreArea == "03 Holding Register(4x)")
                    {
                        objComm.List_4x.Add(item);
                    }
    
                    if (item.StoreArea == "04 Input Register(3x)")
                    {
                        objComm.List_3x.Add(item);
                    }
    
                    if (item.IsFiling == "1")//如果要归档
                    {
                        CommonMethods.FileVarModbusList.Add(item);
                        CommonMethods.CurrentVarNote.Add(item.VarName, item.Note);
                        CommonMethods.FileVarNameList.Add(item.Note);
                    }
                    if (item.IsReport == "1")//如果要参与报表
                    {
                        CommonMethods.ReportVarModbusList.Add(item);
                    }
                }
            }
    

      

    3,在控制的窗口添加自定义控件,自定义的控件  开始和停止 的名称和上面 变量的名称一致

     3.1 在控制的窗口代码添加方法

            private void Device_DoubleClick(object sender, EventArgs e)
            {
                string DeviceName = string.Empty;
                string StartAddress = string.Empty;
                string StopAddress = string.Empty;
                string DeviceStartName = string.Empty;
                string DeviceStopName = string.Empty;
    
                //设备判断
                if (sender is LQB)//如果是冷却泵
                {
                    LQB item = (LQB)sender;
                    DeviceName = item.DeviceName;//获取 冷却泵 控件的属性值
                    DeviceStartName = item.DeviceStartName;
                    DeviceStopName = item.DeviceStopName;
    
                }
                else if ( sender is Tap)//如果是冷却泵
                {
                    Tap item = (Tap)sender;
                    DeviceName = item.DeviceName;
                    DeviceStartName = item.DeviceStartName;
                    DeviceStopName = item.DeviceStopName;
                }
    
                if (!string.IsNullOrEmpty(DeviceName) && !string.IsNullOrEmpty(DeviceStartName) &&
                    !string.IsNullOrEmpty(DeviceStopName))
                {
                    //采集参数(获取开始地址和停止地址)
                    if (CommonMethods.CurrentVarAddress.ContainsKey(DeviceStartName))//CommonMethods.CurrentVarAddress在主窗体加载的时候传值的
                    {
                        StartAddress = CommonMethods.CurrentVarAddress[DeviceStartName];
                    }
                    if (CommonMethods.CurrentVarAddress.ContainsKey(DeviceStopName))
                    {
                        StopAddress = CommonMethods.CurrentVarAddress[DeviceStopName];
                    }
                }
                else
                {
                    MessageBox.Show("该控件未绑定需要的属性值");
                }
    
    
    
                //调用  设备控制的 窗体
                Frm_DeviceControl objFrm = new Frm_DeviceControl(DeviceName,StartAddress,StopAddress);
                objFrm.ShowDialog();
            }
    

      自定义空间的事件 绑定 控制窗体中写的方法

     分析上面的代码

     4,控制窗体接收上面传过来的值,Modbus写入

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace MS_UI
    {
        public partial class Frm_DeviceControl : Form
        {
            public Frm_DeviceControl()
            {
                InitializeComponent();
            }
    
            string StartAddress = string.Empty;
            string StopAddress = string.Empty;
    
            /// <summary>
            /// 构造方法(通过构造方法传参)
            /// </summary>
            /// <param name="DeviceName"></param>
            /// <param name="StartAddress">开始地址</param>
            /// <param name="StopAddress">停止地址</param>
            public Frm_DeviceControl(string DeviceName, string StartAddress, string StopAddress)
            {
                InitializeComponent();
                this.StartAddress = StartAddress;
                this.StopAddress = StopAddress;
                this.lbl_StartName.Text = "开启" + DeviceName;
                this.lbl_StopName.Text = "关闭" + DeviceName;
            }
    
            //开启按钮
            private void btn_Start_Click(object sender, EventArgs e)
            {
                CommonMethods.IsWriting = true;//表示我现在要写数据了
                Thread.Sleep(500);//防止我这边要写了,你那边还在干点什么,停止一会,让那边有足够的时间干完
                bool res1 = CommonMethods.objMod.PreSetKeepReg(CommonMethods.Address, int.Parse(this.StartAddress), 256);//预值寄存器
                bool res2 = CommonMethods.objMod.PreSetKeepReg(CommonMethods.Address, int.Parse(this.StartAddress), 0);//预值寄存器
                if (res1 && res2)
                {
                    MessageBox.Show(this.lbl_StartName.Text + "成功!", "设备开启");
                }
                else
                {
                    MessageBox.Show(this.lbl_StartName.Text + "失败!", "设备开启");
                }
                CommonMethods.IsWriting = false;//写完数据之后,要设置为false,表示我没有在写数据了,不然那边就读取不了数据
            }
    
            //停止按钮
            private void btn_Stop_Click(object sender, EventArgs e)
            {
                CommonMethods.IsWriting = true;
                Thread.Sleep(500);
                bool res1 = CommonMethods.objMod.PreSetKeepReg(CommonMethods.Address, int.Parse(this.StopAddress), 256);
                bool res2 = CommonMethods.objMod.PreSetKeepReg(CommonMethods.Address, int.Parse(this.StopAddress), 0);
                if (res1 && res2)
                {
                    MessageBox.Show(this.lbl_StopName.Text + "成功!", "设备关闭");
                }
                else
                {
                    MessageBox.Show(this.lbl_StopName.Text + "失败!", "设备关闭");
                }
                CommonMethods.IsWriting = false;
            }
        }
    }
    

      

     

  • 相关阅读:
    Ubuntu 14.04设置开机启动脚本的方法
    python 筛选
    分段压缩
    ubuntu 16.04 启用root用户方法
    Ubuntu 16.04 设置MySQL远程访问权限
    [分享]在ubuntu9.10下实现开机自动登录并运行自己的图形程序
    ubuntu live cd修复grub引导项
    安装dcm4chee-arc-light-5.4.1-mysql步骤
    数据库学习--wildfly配置postgreSQL数据源
    wildfly配置PostgreSQL数据源
  • 原文地址:https://www.cnblogs.com/baozi789654/p/12597597.html
Copyright © 2011-2022 走看看