|
|
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
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 设置系统报警
|
|
|
/// </summary>
|
|
|
public class SetAlarmStatus : FeedingAction , IAction
|
|
|
{
|
|
|
public const int WordLength = 16;
|
|
|
/// <summary>
|
|
|
/// 胶料秤手动自动
|
|
|
/// </summary>
|
|
|
private static int RubAutoTag = 2;
|
|
|
/// <summary>
|
|
|
/// 炭黑秤手动自动
|
|
|
/// </summary>
|
|
|
private static int CalAutoTag = 2;
|
|
|
/// <summary>
|
|
|
/// 油秤手动自动
|
|
|
/// </summary>
|
|
|
private static int OilAutoTag = 2;
|
|
|
/// <summary>
|
|
|
/// 粉料手动自动
|
|
|
/// </summary>
|
|
|
private static int FenlAutoTag = 2;
|
|
|
/// <summary>
|
|
|
/// 密炼机手动自动
|
|
|
/// </summary>
|
|
|
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 }; //是否保存过报警记录
|
|
|
|
|
|
/// <summary>
|
|
|
/// 业务入口
|
|
|
/// </summary>
|
|
|
/// <param name="runtime"></param>
|
|
|
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 保存系统报警日志
|
|
|
/// <summary>
|
|
|
/// 保存系统报警日志
|
|
|
/// </summary>
|
|
|
/// <param name="dataKeyValue"></param>
|
|
|
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 保存报警信息至数据库表
|
|
|
/// <summary>
|
|
|
/// 保存报警信息至数据库表
|
|
|
/// </summary>
|
|
|
/// <param name="alarm_address">报警信息地址</param>
|
|
|
/// <param name="alarm_bit">报警信息位</param>
|
|
|
/// <param name="logFlag">是否记录日志</param>
|
|
|
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 判断本地报警信息表中是否存在对应地址位的报警信息
|
|
|
/// <summary>
|
|
|
/// 判断本地报警信息表中是否存在对应地址位的报警信息
|
|
|
/// </summary>
|
|
|
/// <param name="alarm_address">报警地址</param>
|
|
|
/// <param name="alarm_bit">数据位</param>
|
|
|
/// <returns>如果存在返回true,否则返回false</returns>
|
|
|
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 根据报警地址和报警位,获取报警信息
|
|
|
/// <summary>
|
|
|
/// 根据报警地址和报警位,获取报警信息
|
|
|
/// </summary>
|
|
|
/// <param name="alarm_address">报警地址</param>
|
|
|
/// <param name="alarm_bit">报警位</param>
|
|
|
/// <returns>返回报警信息</returns>
|
|
|
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 获取本机台对应的车间编号
|
|
|
/// <summary>
|
|
|
/// 获取本机台对应的车间编号
|
|
|
/// </summary>
|
|
|
/// <returns>返回本机台对应的车间编号,获取失败返回0</returns>
|
|
|
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 报警信息类
|
|
|
/// <summary>
|
|
|
/// 报警信息类
|
|
|
/// </summary>
|
|
|
[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
|
|
|
}
|