|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 控件报警业务处理类
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class ControlAlarmAction : FeedingAction, IAction
|
|
|
|
|
{
|
|
|
|
|
private static Dictionary<string, string> _dicAlarm = new Dictionary<string, string>();
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 保存报警信息至数据库
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="value">报警信息</param>
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|