using DataBlockHelper;
using DataBlockHelper.DBHelpers;
using DataBlockHelper.Entity.DB2106Entity;

using DevExpress.Data.Extensions;

using HslCommunication;
using HslCommunication.Instrument.DLT;

using log4net;
using log4net.Config;
using Mesnac.Action.Base;
using Mesnac.Action.ChemicalWeighing.FreeDb;
using Mesnac.Action.ChemicalWeighing.InterfaceDocking;
using Mesnac.Action.ChemicalWeighing.InterfaceDocking.DockingEntity;
using Mesnac.Action.ChemicalWeighing.LjMaterial;
using Mesnac.Action.ChemicalWeighing.LjReport.OpenDoor;
using Mesnac.Action.ChemicalWeighing.MainDetailControl.Entity;
using Mesnac.Action.ChemicalWeighing.Report;
using Mesnac.Basic;
using Mesnac.Controls.Base;
using Mesnac.Controls.ChemicalWeighing;
using Mesnac.Controls.Default;
using Mesnac.Core.Service;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

using Timer = System.Windows.Forms.Timer;

namespace Mesnac.Action.ChemicalWeighing.ManualControl
{
    public class InitAction : ChemicalWeighingAction, IAction
    {

        DB2107Helper DB2107;
        DB2119Helper DB2119;
        DB2103Helper DB2103;

        List<DbMCControl> McControllist; // InitData控件
        List<DbMCControl> _McControllist; // Modify控件
        List<Control> allControl;

        HslSwitchEntity hslSwitchEntity;

        DbMCControl materialGridControl;

        Timer timer;

        int no = 0;

        Color backColor;

        Dictionary<int, int> WetStatus = new Dictionary<int, int>();

        #region 控件变量

        IBaseControl WaterActualValue1;
        IBaseControl WaterActualValue2;
        IBaseControl WaterActualValue3;
        IBaseControl WaterActualValue4;
        IBaseControl WaterMetValue1;
        IBaseControl WaterMetValue2;
        IBaseControl WaterMetValue3;
        IBaseControl WaterMetValue4;
        IBaseControl SpiralActValue1;
        IBaseControl SpiralActValue2;
        IBaseControl SpiralActValue3;
        IBaseControl SpiralActValue4;
        IBaseControl SpiralMetValue1;
        IBaseControl SpiralMetValue2;
        IBaseControl SpiralMetValue3;
        IBaseControl SpiralMetValue4;
        IBaseControl MetageState1;
        IBaseControl MetageState2;
        IBaseControl MetageState3;
        IBaseControl MetageState4;
        IBaseControl WaterOutState1;
        IBaseControl WaterOutState2;
        IBaseControl WaterOutState3;
        IBaseControl WaterOutState4;
        IBaseControl SpiralState1;
        IBaseControl SpiralState2;
        IBaseControl SpiralState3;
        IBaseControl SpiralState4;

        IBaseControl SetWaterValue1;
        IBaseControl SetWaterValue2;
        IBaseControl SetWaterValue3;
        IBaseControl SetWaterValue4;
        IBaseControl SetSpiralValue1;
        IBaseControl SetSpiralValue2;
        IBaseControl SetSpiralValue3;
        IBaseControl SetSpiralValue4;

        MCRadioButton Gel1;
        MCRadioButton Gel2;
        MCRadioButton Gel3;
        MCRadioButton Gel4;
        MCRadioButton Gel5;
        MCRadioButton Gel6;
        MCRadioButton Gel7;
        MCRadioButton Gel8;
        MCRadioButton Wet1;
        MCRadioButton Wet2;
        MCRadioButton Wet3;
        MCRadioButton Wet4;
        MCRadioButton Wet5;
        MCRadioButton Wet6;
        MCRadioButton Wet7;
        MCRadioButton Wet8;

        #endregion

        public void Run(RuntimeParameter runtime)
        {

            base.RunIni(runtime);       //必须要调用的

            #region 控件获取

            McControllist = GetAllDbMCControlsByOption(DbOptionTypes.InitData);
            _McControllist = GetAllDbMCControlsByOption(DbOptionTypes.Modify);
            allControl = GetAllControls();

            FillHslSwitch();

            WaterActualValue1 = GetBaseControl("WaterActualValue1");
            WaterActualValue2 = GetBaseControl("WaterActualValue2");
            WaterActualValue3 = GetBaseControl("WaterActualValue3");
            WaterActualValue4 = GetBaseControl("WaterActualValue4");
            WaterMetValue1 = GetBaseControl("WaterMetValue1");
            WaterMetValue2 = GetBaseControl("WaterMetValue2");
            WaterMetValue3 = GetBaseControl("WaterMetValue3");
            WaterMetValue4 = GetBaseControl("WaterMetValue4");
            SpiralActValue1 = GetBaseControl("SpiralActValue1");
            SpiralActValue2 = GetBaseControl("SpiralActValue2");
            SpiralActValue3 = GetBaseControl("SpiralActValue3");
            SpiralActValue4 = GetBaseControl("SpiralActValue4");
            SpiralMetValue1 = GetBaseControl("SpiralMetValue1");
            SpiralMetValue2 = GetBaseControl("SpiralMetValue2");
            SpiralMetValue3 = GetBaseControl("SpiralMetValue3");
            SpiralMetValue4 = GetBaseControl("SpiralMetValue4");
            MetageState1 = GetBaseControl("MetageState1");
            MetageState2 = GetBaseControl("MetageState2");
            MetageState3 = GetBaseControl("MetageState3");
            MetageState4 = GetBaseControl("MetageState4");
            WaterOutState1 = GetBaseControl("WaterOutState1");
            WaterOutState2 = GetBaseControl("WaterOutState2");
            WaterOutState3 = GetBaseControl("WaterOutState3");
            WaterOutState4 = GetBaseControl("WaterOutState4");
            SpiralState1 = GetBaseControl("SpiralState1");
            SpiralState2 = GetBaseControl("SpiralState2");
            SpiralState3 = GetBaseControl("SpiralState3");
            SpiralState4 = GetBaseControl("SpiralState4");


            SetWaterValue1 = _GetBaseControl("SetWaterValue1");
            SetWaterValue2 = _GetBaseControl("SetWaterValue2");
            SetWaterValue3 = _GetBaseControl("SetWaterValue3");
            SetWaterValue4 = _GetBaseControl("SetWaterValue4");
            SetSpiralValue1 = _GetBaseControl("SetSpiralValue1");
            SetSpiralValue2 = _GetBaseControl("SetSpiralValue2");
            SetSpiralValue3 = _GetBaseControl("SetSpiralValue3");
            SetSpiralValue4 = _GetBaseControl("SetSpiralValue4");


            materialGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "ManualLogGridView").FirstOrDefault();

            #endregion

            LogSelect("");
            //读取停止按钮的状态
            FillWaterStop();

            #region 配置文件加载

            var table = FreeSqlUnit.Instance.Select<ManualControlSetting>().Where("1 = 1").ToList();

            SetWaterValue1.MCValue = table.Where(x => x.SettingName == "WaterValue1").LastOrDefault().Value;
            SetWaterValue2.MCValue = table.Where(x => x.SettingName == "WaterValue2").LastOrDefault().Value;
            SetWaterValue3.MCValue = table.Where(x => x.SettingName == "WaterValue3").LastOrDefault().Value;
            SetWaterValue4.MCValue = table.Where(x => x.SettingName == "WaterValue4").LastOrDefault().Value;
            SetSpiralValue1.MCValue = table.Where(x => x.SettingName == "SpiralValue1").LastOrDefault().Value;
            SetSpiralValue2.MCValue = table.Where(x => x.SettingName == "SpiralValue2").LastOrDefault().Value;
            SetSpiralValue3.MCValue = table.Where(x => x.SettingName == "SpiralValue3").LastOrDefault().Value;
            SetSpiralValue4.MCValue = table.Where(x => x.SettingName == "SpiralValue4").LastOrDefault().Value;
            MesnacServiceManager.Instance.LoggingService.Info("配置已加载");
            LjLogControl.ManualLogControl("配置已加载 ");

            #endregion

            #region 变色控制

            Gel1 = GetMCRadioButton("Gel1");
            backColor = Gel1.BackColor;
            Gel1.CheckedChanged += McradionA_CheckedChanged;
            Gel2 = GetMCRadioButton("Gel2");
            Gel2.CheckedChanged += McradionA_CheckedChanged;
            Gel3 = GetMCRadioButton("Gel3");
            Gel3.CheckedChanged += McradionA_CheckedChanged;
            Gel4 = GetMCRadioButton("Gel4");
            Gel4.CheckedChanged += McradionA_CheckedChanged;
            Gel5 = GetMCRadioButton("Gel5");
            Gel5.CheckedChanged += McradionB_CheckedChanged;
            Gel6 = GetMCRadioButton("Gel6");
            Gel6.CheckedChanged += McradionB_CheckedChanged;
            Gel7 = GetMCRadioButton("Gel7");
            Gel7.CheckedChanged += McradionB_CheckedChanged;
            Gel8 = GetMCRadioButton("Gel8");
            Gel8.CheckedChanged += McradionB_CheckedChanged;

            Wet1 = GetMCRadioButton("Wet1");
            Wet1.CheckedChanged += Wet1_CheckedChanged;
            Wet2 = GetMCRadioButton("Wet2");
            Wet2.CheckedChanged += Wet1_CheckedChanged;

            Wet3 = GetMCRadioButton("Wet3");
            Wet3.CheckedChanged += Wet3_CheckedChanged;
            Wet4 = GetMCRadioButton("Wet4");
            Wet4.CheckedChanged += Wet3_CheckedChanged;

            Wet5 = GetMCRadioButton("Wet5");
            Wet5.CheckedChanged += Wet5_CheckedChanged;
            Wet6 = GetMCRadioButton("Wet6");
            Wet6.CheckedChanged += Wet5_CheckedChanged;

            Wet7 = GetMCRadioButton("Wet7");
            Wet7.CheckedChanged += Wet7_CheckedChanged;
            Wet8 = GetMCRadioButton("Wet8");
            Wet8.CheckedChanged += Wet7_CheckedChanged;

            #endregion

            timer = new Timer();
            timer.Interval = 1000;
            timer.Enabled = true;
            timer.Tick += new EventHandler(ReadFromPlc);//添加事件
        }

        //GetAllDbMCControlsByOption(DbOptionTypes.Query);


        private void FillWaterStop()
        {
            var query = GetAllDbMCControlsByOption(DbOptionTypes.Query);

            MCButton WaterStop1 = query.Where(t => t.BaseControl.MCKey != null
            && t.BaseControl.MCKey == "WaterStop1").FirstOrDefault().BaseControl as MCButton;
            var plc = PlcConnect.Instance;
            var waterStopBool1 = plc.ReadBool("DB2119.28.5").Content;
            //如果等于1 文字取反
            if (waterStopBool1)
            {
                WaterStop1.Text = "冷水称A恢复";
            }
            else
            {
                WaterStop1.Text = "冷水称A停止";
            }

            MCButton WaterStop2 = query.Where(t => t.BaseControl.MCKey != null
            && t.BaseControl.MCKey == "WaterStop2").FirstOrDefault().BaseControl as MCButton;


            var waterStopBool2 = plc.ReadBool("DB2119.8.5").Content;
            //如果等于1 文字取反
            if (waterStopBool2)
            {
                WaterStop2.Text = "热水称A恢复";
            }
            else
            {
                WaterStop2.Text = "热水称A停止";
            }


            MCButton WaterStop3 = query.Where(t => t.BaseControl.MCKey != null
            && t.BaseControl.MCKey == "WaterStop3").FirstOrDefault().BaseControl as MCButton;


            var waterStopBool3 = plc.ReadBool("DB2119.38.5").Content;
            //如果等于1 文字取反
            if (waterStopBool3)
            {
                WaterStop3.Text = "冷水称B恢复";
            }
            else
            {
                WaterStop3.Text = "冷水称B停止";
            }

            MCButton WaterStop4 = query.Where(t => t.BaseControl.MCKey != null
            && t.BaseControl.MCKey == "WaterStop4").FirstOrDefault().BaseControl as MCButton;



            var waterStopBool4 = plc.ReadBool("DB2119.18.5").Content;
            //如果等于1 文字取反
            if (waterStopBool4)
            {
                WaterStop3.Text = "热水称B恢复";
            }
            else
            {
                WaterStop3.Text = "热水称B停止";
            }

        }

        #region 单选变色控制

        private void Wet1_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Wet1.BackColor = backColor;
            Wet2.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;
        }

        private void Wet3_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Wet3.BackColor = backColor;
            Wet4.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;
        }

        private void Wet5_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Wet5.BackColor = backColor;
            Wet6.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;
        }

        private void Wet7_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Wet7.BackColor = backColor;
            Wet8.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;
        }

        private MCRadioButton GetMCRadioButton(string name)
        {
            var mcradion = allControl.Where(t => t.Name == name).FirstOrDefault() as MCRadioButton;

            return mcradion;
        }

        private void McradionA_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Gel1.BackColor = backColor;
            Gel2.BackColor = backColor;
            Gel3.BackColor = backColor;
            Gel4.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;


        }

        private void McradionB_CheckedChanged(object sender, EventArgs e)
        {
            MCRadioButton mCRadio = sender as MCRadioButton;
            Gel5.BackColor = backColor;
            Gel6.BackColor = backColor;
            Gel7.BackColor = backColor;
            Gel8.BackColor = backColor;
            mCRadio.BackColor = Color.GreenYellow;
        }


        #endregion

        #region 返回数据读取

        private void Timer1_Tick()
        {

            bool mixok1 = PlcConnect.Instance.ReadBool("DB3000.0.0").Content;
            Time(1, mixok1 ? 1 : 0);

            bool mixok2 = PlcConnect.Instance.ReadBool("DB3000.0.1").Content;
            Time(2, mixok2 ? 1 : 0);

            bool mixok3 = PlcConnect.Instance.ReadBool("DB3000.0.2").Content;
            Time(3, mixok3 ? 1 : 0);

            bool mixok4 = PlcConnect.Instance.ReadBool("DB3000.0.3").Content;
            Time(4, mixok4 ? 1 : 0);

            bool mixok5 = PlcConnect.Instance.ReadBool("DB3000.0.4").Content;
            Time(5, mixok5 ? 1 : 0);

            bool mixok6 = PlcConnect.Instance.ReadBool("DB3000.0.5").Content;
            Time(6, mixok6 ? 1 : 0);

            bool mixok7 = PlcConnect.Instance.ReadBool("DB3000.0.6").Content;

            Trace.WriteLine("7号信号:" + mixok7);

            Time(7, mixok7 ? 1 : 0);

            bool mixok8 = PlcConnect.Instance.ReadBool("DB3000.0.7").Content;
            Trace.WriteLine("8号信号:" + mixok8);
            Time(8, mixok8 ? 1 : 0);

        }

        private void Time(int deviceNo, int statu)
        {

            
            if (WetStatus.ContainsKey(deviceNo) == false)
            {
                WetStatus.Add(deviceNo, statu);
                DonwloadWetState(deviceNo, statu);
            }

            if (WetStatus[deviceNo] != statu)
            {
                WetStatus[deviceNo] = statu;
                DonwloadWetState(deviceNo, statu);
            }
        }

        private void DonwloadWetState(int deviceNo, int statu)
        {
            string userName=  string.IsNullOrWhiteSpace(UserInfo.Instance.UserName) ? "Edit" : UserInfo.Instance.UserName;
            if (userName.Length > 0 && userName != "Edit")
            {
                //即使网络不同 也不会影响上位机的使用
                ThreadPool.QueueUserWorkItem(delegate
                {
                    TankIsDischargedSyncEntity tankIsDischargedSyncEntity = new TankIsDischargedSyncEntity()
                    {
                        reqCode = System.Guid.NewGuid().ToString(),
                        reqTime = DateTime.Now,
                        deviceNo = deviceNo.ToString(),
                        state = statu.ToString(),
                    };
                    HttpResponse httpResponse = new HttpResponse();
                    MesnacServiceManager.Instance.LoggingService.Info($"湿混机{deviceNo}下发请求:{statu}");
                    string returnTest = httpResponse.PostResponse(tankIsDischargedSyncEntity);
                    //  LjManualLog.ManualLogControl($"湿混机{deviceNo}返回数据 " + returnTest);
                    MesnacServiceManager.Instance.LoggingService.Info($"湿混机{deviceNo}返回数据" + returnTest);
                });
            }
        }

        #endregion

        #region Timer刷新方法 Plc读取

        private void ReadFromPlc(object sender, EventArgs e)
        {

            DB2107 = new DB2107Helper();

            DB2119 = new DB2119Helper();

            DB2103 = new DB2103Helper();

            no += 1;
            if (no > 5)
            {
                no = 0;
                Timer1_Tick();
            }

            if (GetAllDbMCControlsByOption(DbOptionTypes.InitData).Count == 0)
            {
                timer.Stop();
                timer.Dispose();
            }

            #region 称量结束日志

            if (DB2119.Coolwater_A.Dos_End)
            {
                if (PlcControl("DB2119.28.3", false))
                {
                    LjLogControl.ManualLogControl("冷水称A称量结束", DB2119.Coolwater_A.Value_Initial, 2, 3, 1);
                    LogSelect("");
                }
            }
            if (DB2119.Hotwater_A.Dos_End)
            {
                if (PlcControl("DB2119.8.3", false))
                {
                    LjLogControl.ManualLogControl("热水称A称量结束", DB2119.Hotwater_A.Value_Initial, 2, 1, 1);
                    LogSelect("");
                }
            }
            if (DB2119.Coolwater_B.Dos_End)
            {
                if (PlcControl("DB2119.38.3", false))
                {
                    LjLogControl.ManualLogControl("冷水称B称量结束", DB2119.Coolwater_B.Value_Initial, 2, 4, 1);
                    LogSelect("");
                }
            }
            if (DB2119.Hotwater_B.Dos_End)
            {
                if (PlcControl("DB2119.18.3", false))
                {
                    LjLogControl.ManualLogControl("热水称B称量结束", DB2119.Hotwater_B.Value_Initial, 2, 2, 1);
                    LogSelect("");
                }
            }
            if (DB2119.Spiral_A.Dos_End)
            {
                if (PlcControl("DB2119.60.3", false))
                {
                    if (DB2119.Spiral_A.Weter_Bin == 1)
                    {
                        LjLogControl.ManualLogControl("湿混机1称量结束", DB2119.Spiral_A.Value_Weight, 4, 1, 2);
                        LogSelect("");
                    }
                    else if (DB2119.Spiral_A.Weter_Bin == 2)
                    {
                        LjLogControl.ManualLogControl("湿混机2称量结束", DB2119.Spiral_A.Value_Weight, 4, 2, 2);
                        LogSelect("");
                    }
                    else
                    {
                        LjLogControl.ManualLogControl("螺旋1称量结束", DB2119.Spiral_A.Value_Weight, 4, 12, 2);
                        LogSelect("");
                    }
                }
            }
            if (DB2119.Spiral_B.Dos_End)
            {
                if (PlcControl("DB2119.82.3", false))
                {
                    if (DB2119.Spiral_B.Weter_Bin == 1)
                    {
                        LjLogControl.ManualLogControl("湿混机3称量结束", DB2119.Spiral_B.Value_Weight, 4, 3, 2);
                        LogSelect("");
                    }
                    else if (DB2119.Spiral_B.Weter_Bin == 2)
                    {
                        LjLogControl.ManualLogControl("湿混机4称量结束", DB2119.Spiral_B.Value_Weight, 4, 4, 2);
                        LogSelect("");
                    }
                    else
                    {
                        LjLogControl.ManualLogControl("螺旋2称量结束", DB2119.Spiral_B.Value_Weight, 4, 34, 2);
                        LogSelect("");
                    }
                }
            }
            if (DB2119.Spiral_C.Dos_End)
            {
                if (PlcControl("DB2119.104.3", false))
                {
                    if (DB2119.Spiral_C.Weter_Bin == 1)
                    {
                        LjLogControl.ManualLogControl("湿混机5称量结束", DB2119.Spiral_C.Value_Weight, 4, 5, 2);
                        LogSelect("");
                    }
                    else if (DB2119.Spiral_C.Weter_Bin == 2)
                    {
                        LjLogControl.ManualLogControl("湿混机6称量结束", DB2119.Spiral_C.Value_Weight, 4, 6, 2);
                        LogSelect("");
                    }
                    else
                    {
                        LjLogControl.ManualLogControl("螺旋1称量结束", DB2119.Spiral_C.Value_Weight, 4, 56, 2);
                        LogSelect("");
                    }
                }
            }

            #endregion

            #region 实际值 称量值指示

            WaterActualValue1.MCValue = DB2107.Weight.WScale_3.ActWeight;

            WaterActualValue2.MCValue = DB2107.Weight.WScale_1.ActWeight;

            WaterActualValue3.MCValue = DB2107.Weight.WScale_4.ActWeight;

            WaterActualValue4.MCValue = DB2107.Weight.WScale_2.ActWeight;

            WaterMetValue1.MCValue = DB2119.Coolwater_A.Value_Initial;

            WaterMetValue2.MCValue = DB2119.Hotwater_A.Value_Initial;

            WaterMetValue3.MCValue = DB2119.Coolwater_B.Value_Initial;

            WaterMetValue4.MCValue = DB2119.Hotwater_B.Value_Initial;

            SpiralActValue1.MCValue = DB2103.DM2ASF01.ACT_Speed;

            SpiralActValue2.MCValue = DB2103.DM2BSF01.ACT_Speed;

            SpiralActValue3.MCValue = DB2103.DM2CSF01.ACT_Speed;

            SpiralActValue4.MCValue = DB2103.DM2DSF01.ACT_Speed;

            SpiralMetValue1.MCValue = DB2119.Spiral_A.Value_Weight;

            SpiralMetValue2.MCValue = DB2119.Spiral_B.Value_Weight;

            SpiralMetValue3.MCValue = DB2119.Spiral_C.Value_Weight;

            #endregion

            #region 水称状态指示

            if (DB2119.Coolwater_A.Dos_Status)
            {
                MetageState1.MCValue = "正在称量";
            }
            else
            {
                MetageState1.MCValue = "停止称量";
            }

            if (DB2119.Coolwater_A.Dis_Status)
            {
                WaterOutState1.MCValue = "正在排水";
            }
            else
            {
                WaterOutState1.MCValue = "停止排水";
            }

            if (DB2119.Hotwater_A.Dos_Status)
            {
                MetageState2.MCValue = "正在称量";
            }
            else
            {
                MetageState2.MCValue = "停止称量";
            }

            if (DB2119.Hotwater_A.Dis_Status)
            {
                WaterOutState2.MCValue = "正在排水";
            }
            else
            {
                WaterOutState2.MCValue = "停止排水";
            }

            if (DB2119.Coolwater_B.Dos_Status)
            {
                MetageState3.MCValue = "正在称量";
            }
            else
            {
                MetageState3.MCValue = "停止称量";
            }

            if (DB2119.Coolwater_B.Dis_Status)
            {
                WaterOutState3.MCValue = "正在排水";
            }
            else
            {
                WaterOutState3.MCValue = "停止排水";
            }

            if (DB2119.Hotwater_B.Dos_Status)
            {
                MetageState4.MCValue = "正在称量";
            }
            else
            {
                MetageState4.MCValue = "停止称量";
            }

            if (DB2119.Hotwater_B.Dis_Status)
            {
                WaterOutState4.MCValue = "正在排水";
            }
            else
            {
                WaterOutState4.MCValue = "停止排水";
            }

            #endregion

            #region 螺旋状态指示

            if (DB2119.Spiral_A.Dos_Status)
            {
                SpiralState1.MCValue = "正在螺旋";
            }
            else
            {
                SpiralState1.MCValue = "停止螺旋";
            }

            if (DB2119.Spiral_B.Dos_Status)
            {
                SpiralState2.MCValue = "正在螺旋";
            }
            else
            {
                SpiralState2.MCValue = "停止螺旋";
            }

            if (DB2119.Spiral_C.Dos_Status)
            {
                SpiralState3.MCValue = "正在螺旋";
            }
            else
            {
                SpiralState3.MCValue = "停止螺旋";
            }

            //Read = PlcConnect.Instance.Read("DB2119..0", 1);

            //content = Read.Content;

            //Byt = content[0];

            //State1 = Byt.GetBit(2);

            //if (State1)
            //{
            //    MetageState4.MCValue = "正在螺旋";
            //}
            //else
            //{
            //    MetageState4.MCValue = "停止螺旋";
            //}

            #endregion

            ReadHslSwithch();

        }

        #endregion

        #region 控件获取帮助

        /// <summary>
        /// InitData控件获取
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private IBaseControl GetBaseControl(string name)
        {
            return McControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == name).FirstOrDefault().BaseControl;
        }

        /// <summary>
        /// Modify控件获取
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private IBaseControl _GetBaseControl(string name)
        {
            return _McControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == name).FirstOrDefault().BaseControl;
        }

        #endregion

        #region 日志控制

        /// <summary>
        /// 日志查询
        /// </summary>
        /// <param name="txt">查询关键字</param>
        private void LogSelect(string txt)
        {
            DataTable table = LjLogControl.ManualLogSelect(txt);

            if (this.materialGridControl != null && this.materialGridControl.BaseControl != null)
            {
                this.materialGridControl.BaseControl.BindDataSource = null;
                this.materialGridControl.BaseControl.BindDataSource = table;
            }
            else
            {
                ICSharpCode.Core.LoggingService<InitAction>.Warn("ManualContrlolAction 手动操作日志信息控件为Null...");
            }
        }

        #endregion

        private bool PlcControl(string address, bool state)
        {
            return PlcConnect.Instance.Write(address, state).IsSuccess;
        }

        private void FillHslSwitch()
        {
            //hslSwitchEntity

            hslSwitchEntity = new HslSwitchEntity();

            var sourceType = hslSwitchEntity.GetType();
            PropertyInfo[] sourcePropertyInfoList = sourceType.GetProperties();
            foreach (PropertyInfo sourceProperty in sourcePropertyInfoList)
            {
                string name = sourceProperty.Name;
                var pro = allControl.FirstOrDefault(x => x.Name == name) as HslSwitch;
                DefaultSwitch(pro);
                pro.OnSwitchChanged += Pro_OnSwitchChanged;
                sourceProperty.SetValue(hslSwitchEntity, pro);

            }

            ReadHslSwithch();

            //DefaultSwitch

        }

        private void ReadHslSwithch()
        {
            var rd = Db3000Helper.ReadModel();
            hslSwitchEntity.HslSwitch1.SwitchStatus = rd[0];
            hslSwitchEntity.HslSwitch2.SwitchStatus = rd[1];
            hslSwitchEntity.HslSwitch3.SwitchStatus = rd[2];
            hslSwitchEntity.HslSwitch4.SwitchStatus = rd[3];
            hslSwitchEntity.HslSwitch5.SwitchStatus = rd[4];
            hslSwitchEntity.HslSwitch6.SwitchStatus = rd[5];
            hslSwitchEntity.HslSwitch7.SwitchStatus = rd[6];
            hslSwitchEntity.HslSwitch8.SwitchStatus = rd[7];

        }

        private void Pro_OnSwitchChanged(object arg1, bool arg2)
        {
            HslSwitch hslSwitch = arg1 as HslSwitch;
            string name = hslSwitch.Name;
            int no = Convert.ToInt32(name.Replace("HslSwitch", ""));
            Db3000Helper.WriteModel(no, arg2);

            DefaultSwitch(hslSwitch);
        }

        private void DefaultSwitch(HslSwitch hslSwitch)
        {

            string name = hslSwitch.Name;
            string status = hslSwitch.SwitchStatus ? "开" : "关";
            string message = "";
            if (name == "HslSwitch1")
            {
                message = "湿混机1:" + status;
            }

            if (name == "HslSwitch2")
            {
                message = "湿混机2:" + status;
            }

            if (name == "HslSwitch3")
            {
                message = "湿混机3:" + status;
            }

            if (name == "HslSwitch4")
            {
                message = "湿混机4:" + status;
            }

            if (name == "HslSwitch5")
            {
                message = "湿混机5:" + status;
            }

            if (name == "HslSwitch6")
            {
                message = "湿混机6:" + status;
            }

            if (name == "HslSwitch7")
            {
                message = "湿混机7:" + status;
            }

            if (name == "HslSwitch8")
            {
                message = "湿混机8:" + status;
            }

            hslSwitch.Text = message;
        }

    }
}