You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
8.6 KiB
C#

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);
}
}
}
}
}
}