using System; using System.Collections.Generic; using System.Linq; using System.Text; using Mesnac.Action.Base; using Mesnac.Action.Feeding.Qingquan.BasicInfo; using System.Reflection; using Mesnac.Codd.Session; using System.Data; namespace Mesnac.Action.Feeding.Qingquan.Alarm { /// /// 控件报警业务处理类 /// public class ControlAlarmAction : FeedingAction, IAction { private static Dictionary _dicAlarm = new Dictionary(); public void Run(RuntimeParameter runtime) { base.RunIni(runtime); bool isSaveData = false; //是否保存报警信息,只有新增报警信息的时候才保存,取消报警信息时不保存 if (runtime.Sender != null) { PropertyInfo piName = runtime.Sender.GetType().GetProperty("Name"); //获取控件的名称属性 PropertyInfo[] pis = runtime.Sender.GetType().GetProperties(); //获取控件的所有属性 if (piName != null) { string key = piName.GetValue(runtime.Sender,null) as string; if (!String.IsNullOrEmpty(key)) { //扫描报警控件的报警属性 foreach (PropertyInfo pi in pis) { object[] attrs = pi.GetCustomAttributes(true); bool flag = false; foreach(object attr in attrs) { //如果是报警属性则把标识flag设置为true if (attr.GetType().FullName == "Mesnac.Controls.Base.AlarmAttribute") { flag = true; break; } } if (flag) { lock (_dicAlarm) { string value = pi.GetValue(runtime.Sender, null) as string; if (value == null) value = String.Empty; string dkey = key + "." + pi.Name; if (_dicAlarm.ContainsKey(dkey)) { _dicAlarm[dkey] = value; } else { _dicAlarm.Add(dkey, value); } if (!String.IsNullOrEmpty(value)) { isSaveData = true; } } } } } StringBuilder sb = new StringBuilder(); foreach (string k in _dicAlarm.Keys) { if (!String.IsNullOrEmpty(_dicAlarm[k])) { if (String.IsNullOrEmpty(sb.ToString())) { sb.Append(_dicAlarm[k]); } else { sb.Append(",").Append(_dicAlarm[k]); } } } string alarmInfo = sb.ToString(); PlcData.Instance.PlcVarWriteByDataKey(PlcData.Instance.ContorlAlarmInfo, alarmInfo); //把报警信息写入PLC变量,并不真正下传至PLC string v = PlcData.Instance.ContorlAlarmInfo.LastValue.ToString(); //保存报警信息至数据库 if (isSaveData) { this.SaveAlarmData(alarmInfo); } } } } /// /// 保存报警信息至数据库 /// /// 报警信息 public void SaveAlarmData(string value) { //如果有报警 if (!String.IsNullOrEmpty(value)) { string templotbar = templotbar = RecipeCache.Instance.PlanInfo.PlanID.Trim() + (PlcData.Instance.MixingFinishedCount.LastValue.ToInt() + 1).ToString("D4"); DbHelper localHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取本地数据连接失败,无法记录控件报警..."); return; } try { localHelper.CommandType = System.Data.CommandType.Text; localHelper.ClearParameter(); string strSql = "insert into PmtAlarmCode(acdetail,acbz1,acbz2,Recordtime) values(@acdetail,@acbz1,@acbz2,getdate())"; localHelper.CommandText = strSql; localHelper.AddParameter("@acdetail", templotbar); localHelper.AddParameter("@acbz1", value); localHelper.AddParameter("@acbz2", String.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now)); localHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("保存本地报警日志错误:" + ex.Message, ex); } if (base.FarControlType == 1 || base.NetType == NetTypes.Net) { string netMsg = Global.ProtocalHeader.ReceiveAlarmDataIpNumber + ":" + value + "/"; Mesnac.Communication.TcpService.Instance.NetSendMsg(netMsg); } if (base.NetType == NetTypes.Net) { try { DbHelper serverHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Server); if (serverHelper == null) { ICSharpCode.Core.LoggingService.Error("获取网络数据连接失败,无法记录系统报警..."); return; } serverHelper.CommandType = CommandType.Text; serverHelper.ClearParameter(); #region 玲珑故障保存 //string strSql3 = "insert into EqmMixerFault(FaultCode,FaultName,FaultPosition,AlarmState,FaultDate,FaultType,EquipCode,WorkShopCode) Values(@FaultCode,@FaultName,@FaultPosition,@AlarmState,GetDate(),@FaultType,@EquipCode,@WorkShopCode)"; //serverHelper.CommandText = strSql3; //serverHelper.AddParameter("@FaultCode", info.SerialId); //serverHelper.AddParameter("@FaultName", info.AlarmName); //serverHelper.AddParameter("@FaultPosition", info.SerialId); //serverHelper.AddParameter("@AlarmState", info.MemNote); //serverHelper.AddParameter("@FaultType", info.MemNote); //serverHelper.AddParameter("@EquipCode", base.CurrEquipCode); //serverHelper.AddParameter("@WorkShopCode", this.GetWorkShopCode()); //serverHelper.ExecuteNonQuery(); #endregion #region 清泉故障保存 string strSql3 = "insert into ppt_alarm(barcode,alarmStr,opertime,EquipCode) values (@barcode,@alarmStr,@opertime,@EquipCode)"; serverHelper.CommandText = strSql3; serverHelper.AddParameter("@barcode", templotbar); serverHelper.AddParameter("@alarmStr", value); serverHelper.AddParameter("@opertime", DateTime.Now.ToString()); serverHelper.AddParameter("@EquipCode", base.CurrEquipCode); serverHelper.ExecuteNonQuery(); #endregion } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("保存网络报警日志错误:" + ex.Message, ex); } } } } } }