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 McControllist; // InitData控件 List _McControllist; // Modify控件 List allControl; HslSwitchEntity hslSwitchEntity; DbMCControl materialGridControl; Timer timer; int no = 0; Color backColor; Dictionary WetStatus = new Dictionary(); #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().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 控件获取帮助 /// /// InitData控件获取 /// /// /// private IBaseControl GetBaseControl(string name) { return McControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == name).FirstOrDefault().BaseControl; } /// /// Modify控件获取 /// /// /// private IBaseControl _GetBaseControl(string name) { return _McControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == name).FirstOrDefault().BaseControl; } #endregion #region 日志控制 /// /// 日志查询 /// /// 查询关键字 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.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; } } }