using System; using System.Collections.Generic; using System.Linq; using System.Text; using Mesnac.Action.Base; using Mesnac.Action.Feeding.BasicInfo; using Mesnac.Codd.Session; using System.Data; namespace Mesnac.Action.Feeding.FinishBatch { /// /// 设置系统报警 /// public class SetAlarmStatus : FeedingAction , IAction { public const int WordLength = 16; /// /// 胶料秤手动自动 /// private static int RubAutoTag = 2; /// /// 炭黑秤手动自动 /// private static int CalAutoTag = 2; /// /// 油秤手动自动 /// private static int OilAutoTag = 2; /// /// 粉料手动自动 /// private static int FenlAutoTag = 2; /// /// 密炼机手动自动 /// private static int MixAutoTag = 2; private static bool[] _isSaveAlarm1 = new bool[WordLength] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录 private static bool[] _isSaveAlarm2 = new bool[WordLength] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录 private static bool[] _isSaveAlarm3 = new bool[WordLength] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录 private static bool[] _isSaveAlarm4 = new bool[WordLength] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }; //是否保存过报警记录 /// /// 业务入口 /// /// public void Run(RuntimeParameter runtime) { base.RunIni(runtime); this.SaveAlarm(PlcData.Instance.AlarmData1, ref _isSaveAlarm1); this.SaveAlarm(PlcData.Instance.AlarmData2, ref _isSaveAlarm2); this.SaveAlarm(PlcData.Instance.AlarmData3, ref _isSaveAlarm3); this.SaveAlarm(PlcData.Instance.AlarmData4, ref _isSaveAlarm4); //胶秤手动、自动日志 if (PlcData.Instance.PloyAuto.LastValue.ToInt() != SetAlarmStatus.RubAutoTag) { if (SetAlarmStatus.RubAutoTag != 2) { SetAlarmStatus.RubAutoTag = PlcData.Instance.PloyAuto.LastValue.ToInt(); if (SetAlarmStatus.RubAutoTag == 1) { base.DBLog("基本操作", "胶秤手动转自动", ""); } else { base.DBLog("基本操作", "胶秤自动转手动", ""); } } else { SetAlarmStatus.RubAutoTag = PlcData.Instance.PloyAuto.LastValue.ToInt(); } } //炭黑秤手动、自动日志 if (PlcData.Instance.CarbonAuto.LastValue.ToInt() != SetAlarmStatus.CalAutoTag) { if (SetAlarmStatus.CalAutoTag != 2) { SetAlarmStatus.CalAutoTag = PlcData.Instance.CarbonAuto.LastValue.ToInt(); if (SetAlarmStatus.CalAutoTag == 1) { base.DBLog("基本操作", "炭黑秤手动转自动", ""); } else { base.DBLog("基本操作", "炭黑秤自动转手动", ""); } } else { SetAlarmStatus.CalAutoTag = PlcData.Instance.CarbonAuto.LastValue.ToInt(); } } //油秤手动自动日志 if (PlcData.Instance.OilAuto.LastValue.ToInt() != SetAlarmStatus.OilAutoTag) { if (SetAlarmStatus.OilAutoTag != 2) { SetAlarmStatus.OilAutoTag = PlcData.Instance.OilAuto.LastValue.ToInt(); if (SetAlarmStatus.OilAutoTag == 1) { base.DBLog("基本操作", "油秤手动转自动", ""); } else { base.DBLog("基本操作", "油秤自动转手动", ""); } } else { SetAlarmStatus.OilAutoTag = PlcData.Instance.OilAuto.LastValue.ToInt(); } } //粉料手动自动日志 if (PlcData.Instance.FenLiaoAuto.LastValue.ToInt() != SetAlarmStatus.FenlAutoTag) { if (SetAlarmStatus.FenlAutoTag != 2) { SetAlarmStatus.FenlAutoTag = PlcData.Instance.FenLiaoAuto.LastValue.ToInt(); if (SetAlarmStatus.FenlAutoTag == 1) { base.DBLog("基本操作", "粉料秤手动转自动", ""); } else { base.DBLog("基本操作", "粉料秤手动转自动", ""); } } else { SetAlarmStatus.FenlAutoTag = PlcData.Instance.FenLiaoAuto.LastValue.ToInt(); } } //密炼机手动自动日志 if (PlcData.Instance.MixerAuto.LastValue.ToInt() != SetAlarmStatus.MixAutoTag) { if (SetAlarmStatus.MixAutoTag != 2) { SetAlarmStatus.MixAutoTag = PlcData.Instance.MixerAuto.LastValue.ToInt(); if (SetAlarmStatus.MixAutoTag == 1) { base.DBLog("基本操作", "密炼机本控转遥控", ""); } else { base.DBLog("基本操作", "密炼机遥控转本控", ""); } } else { SetAlarmStatus.MixAutoTag = PlcData.Instance.MixerAuto.LastValue.ToInt(); } } } #region 辅助方法 #region 保存系统报警日志 /// /// 保存系统报警日志 /// /// public void SaveAlarm(PlcData.DataKeyValue dataKeyValue , ref bool[] isSaveAlarm) { int[] alarmData = Global.ParseBinaryValue(dataKeyValue.LastValue.ToInt(), WordLength); for (int i = 0; i < WordLength; i++) { if (alarmData[i] == 0) { isSaveAlarm[i] = false; } if (isSaveAlarm[i] == false && alarmData[i] == 1) { //数据保存 this.AlarmStr(dataKeyValue.EquipData.Start, i, true); isSaveAlarm[i] = true; } } } #endregion #region 保存报警信息至数据库表 /// /// 保存报警信息至数据库表 /// /// 报警信息地址 /// 报警信息位 /// 是否记录日志 public void AlarmStr(int alarm_address, int alarm_bit, bool logFlag) { string templotbar = String.Empty; //下一车的架子号 if (!this.IsExistsAlarmInfo(alarm_address,alarm_bit)) { return; } if (RecipeCache.Instance.PlanInfo == null || string.IsNullOrEmpty(RecipeCache.Instance.PlanInfo.PlanID)) { return; } templotbar = RecipeCache.Instance.PlanInfo.PlanID.Trim() + (PlcData.Instance.MixingFinishedCount.LastValue.ToInt() + 1).ToString("D4"); //1、获取下一车的架子号 //templotbar:=sctm(barfirst,false) //2、如果PLC连接正常 //If plccon=1 Then //if tempstr='密炼机超时' then // OvertimeAlarm:=1; // tastr:= SumCheckAlarm(tempstr); // AlarmBatchStr:=tastr; // Frm_main.AlarmList.Items.Add(tempstr+'报警'); // Frm_main.panalarm.Caption:= tempstr+'报警'; if (logFlag) { DbHelper localHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取本地数据连接失败,无法记录系统报警..."); return; } AlarmInfo info = this.GetAlarmInfo(alarm_address, alarm_bit); 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", info.AlarmName); 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 + ":" + info.AlarmName + "/"; 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", info.AlarmName); serverHelper.AddParameter("@opertime", DateTime.Now.ToString()); serverHelper.AddParameter("@EquipCode", base.CurrEquipCode); serverHelper.ExecuteNonQuery(); #endregion } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("保存网络报警日志错误:" + ex.Message, ex); } } } } #endregion #region 判断本地报警信息表中是否存在对应地址位的报警信息 /// /// 判断本地报警信息表中是否存在对应地址位的报警信息 /// /// 报警地址 /// 数据位 /// 如果存在返回true,否则返回false public bool IsExistsAlarmInfo(int alarm_address, int alarm_bit) { DbHelper localHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取本地数据连接失败!"); return false; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); string strSql = "Select count(*) from [Pmt_AlarmInfo] where [Alarm_address] = @Alarm_address and [Alarm_bit] = @Alarm_bit"; localHelper.CommandText = strSql; localHelper.AddParameter("@Alarm_address", alarm_address); localHelper.AddParameter("@Alarm_bit", alarm_bit); object result = localHelper.ToScalar(); if (result == null || result == System.DBNull.Value) { return false; } if (Convert.ToInt32(result) > 0) { return true; } else { return false; } } #endregion #region 根据报警地址和报警位,获取报警信息 /// /// 根据报警地址和报警位,获取报警信息 /// /// 报警地址 /// 报警位 /// 返回报警信息 public AlarmInfo GetAlarmInfo(int alarm_address, int alarm_bit) { DbHelper localHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取本地数据连接失败!"); return null; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); string strSql = "Select [objid],[Alarm_address],[Alarm_bit],[Alarm_Code],[Alarm_Name],[Alarm_Position],[mem_note] From [Pmt_AlarmInfo] where [Alarm_address] = @Alarm_address and [Alarm_bit] = @Alarm_bit"; localHelper.CommandText = strSql; localHelper.AddParameter("@Alarm_address", alarm_address); localHelper.AddParameter("@Alarm_bit", alarm_bit); DataTable table = localHelper.ToDataTable(); AlarmInfo info = null; if (table != null && table.Rows.Count > 0) { info = new AlarmInfo(); info.SerialId = Convert.ToInt32(table.Rows[0]["objid"]); info.AlarmAddress = Convert.ToInt32(table.Rows[0]["Alarm_address"]); info.AlarmBit = Convert.ToInt32(table.Rows[0]["Alarm_bit"]); info.AlarmCode = table.Rows[0]["Alarm_Code"] as string; info.AlarmName = table.Rows[0]["Alarm_Name"] as string; info.AlarmPosition = table.Rows[0]["Alarm_Position"] as string; info.MemNote = table.Rows[0]["mem_note"] as string; } return info; } #endregion #region 获取本机台对应的车间编号 /// /// 获取本机台对应的车间编号 /// /// 返回本机台对应的车间编号,获取失败返回0 public int GetWorkShopCode() { DbHelper serverHelper = base.NewDbHelper(Basic.DataSourceFactory.MCDbType.Server); if (serverHelper == null) { ICSharpCode.Core.LoggingService.Error("获取网络数据连接失败,无法记录系统报警..."); return 0; } serverHelper.CommandType = CommandType.Text; serverHelper.ClearParameter(); string strSql = "select WorkShop_Code from Pmt_equip where Equip_Code = @EquipCode"; serverHelper.CommandText = strSql; serverHelper.AddParameter("@EquipCode", base.CurrEquipCode); object result = serverHelper.ToScalar(); if (result == null && result == System.DBNull.Value) { return 0; } else { return Convert.ToInt32(result); } } #endregion #endregion } #region 报警信息类 /// /// 报警信息类 /// [Serializable] public class AlarmInfo { private int _serialId; private int _alarmAddress; private int _alarmBit; private string _alarmCode; private string _alarmName; private string _alarmPosition; private string _memNote; public int SerialId { get { return _serialId; } set { _serialId = value; } } public int AlarmAddress { get { return _alarmAddress; } set { _alarmAddress = value; } } public int AlarmBit { get { return _alarmBit; } set { _alarmBit = value; } } public string AlarmCode { get { return _alarmCode; } set { _alarmCode = value; } } public string AlarmName { get { return _alarmName; } set { _alarmName = value; } } public string AlarmPosition { get { return _alarmPosition; } set { _alarmPosition = value; } } public string MemNote { get { return _memNote; } set { _memNote = value; } } } #endregion }