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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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