using System; using System.Collections.Generic; using System.Linq; using System.Text; using Mesnac.Action.Base; using System.Drawing; using Mesnac.Equips; using Mesnac.Action.Feeding.FinishBatch; namespace Mesnac.Action.Feeding.ProducingPlan { /// /// 初始化PLC设备状态 /// public class InitPlcEquipState : FeedingAction, IAction { private static bool _isFirstRun = true; //是否首次执行 private static int count = 0; //计数器 public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("初始化PLC设备状态..."); if (InitPlcEquipState._isFirstRun) { string plcEquipName = base.GetConfigValue("PLC.EquipName", "FeedingPLC"); //获取PLC设备名称 if (Mesnac.Equips.Factory.Instance.AllEquips.ContainsKey(plcEquipName)) { Mesnac.Equips.Factory.Instance.AllEquips[plcEquipName].EquipReadData += ReadData; } InitPlcEquipState._isFirstRun = false; } } private void ReadData(object sender, Mesnac.Equips.ReadEventArgs e) { try { count++; if (count % 5 == 0) //设备读取5次刷新一次 { List buttons = this.GetTControls(); foreach (Mesnac.Controls.Default.MCButton button in buttons) { if (button.MCKey!= null && button.MCKey.Trim().Equals("PLC.EquipState")) { if (button.InvokeRequired) { //button.BackColor = Color.Red; BaseEquip.ReadDataHandler d = new BaseEquip.ReadDataHandler(RefreshPlcEquipState); button.BeginInvoke(d, new object[] { button, e }); return; } //SetButtonBackColor(button); break; } } count = 0; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("刷新PLC设备状态失败:" + ex.Message); } } private void RefreshPlcEquipState(object sender, Mesnac.Equips.ReadEventArgs e) { this.SetButtonBackColor(sender as Mesnac.Controls.Default.MCButton); } private void SetButtonBackColor(Mesnac.Controls.Default.MCButton button) { lock (String.Empty) { try { if (button != null) { string plcEquipName = base.GetConfigValue("PLC.EquipName", "FeedingPLC"); //获取PLC设备名称 if (Mesnac.Equips.Factory.Instance.AllEquips.ContainsKey(plcEquipName)) { //ICSharpCode.Core.LoggingService.Info("PLC设备状态:" + Mesnac.Equips.Factory.Instance.AllEquips[plcEquipName].State); if (Mesnac.Equips.Factory.Instance.AllEquips[plcEquipName].State) { button.BackColor = Color.LightGreen; } else { button.BackColor = Color.Red; } } } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("刷新PLC设备状态(设备背景色)失败:" + ex.Message); } } } } }