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.

447 lines
19 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.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
}