|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Net.NetworkInformation;
|
|
|
using System.Text;
|
|
|
using System.Linq;
|
|
|
using System.Data;
|
|
|
using System.Threading;
|
|
|
using Mesnac.Action.Base;
|
|
|
using Mesnac.Controls.Base;
|
|
|
using System.Windows.Forms;
|
|
|
using Mesnac.Codd.Session;
|
|
|
using System.IO;
|
|
|
using Mesnac.Action.Feeding.BasicInfo;
|
|
|
|
|
|
namespace Mesnac.Action.Feeding.FeedingPlc
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 更新设备运行状态
|
|
|
/// </summary>
|
|
|
public class UpdateEquipState : FeedingAction, IAction
|
|
|
{
|
|
|
public void Run(RuntimeParameter runtime)
|
|
|
{
|
|
|
EquipStateInfo.Instance.EquipCode = base.CurrEquipCode;
|
|
|
EquipStateInfo.Instance.dbHelper = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Server);
|
|
|
EquipStateInfo.Instance.EquipInfo(
|
|
|
PlcData.Instance.CurrentMixingTime.NowValue.ToInt(),
|
|
|
PlcData.Instance.CurrentMixingSpeedRotor.LastValue.ToInt(),
|
|
|
PlcData.Instance.CurrentMixerCurrent.LastValue.ToDouble());
|
|
|
}
|
|
|
|
|
|
#region 设备状态类(简化业务:每5秒更新一次设备运行状态)
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备状态类
|
|
|
/// </summary>
|
|
|
private class EquipStateInfo
|
|
|
{
|
|
|
#region 单例模式
|
|
|
private static EquipStateInfo _this;
|
|
|
public static EquipStateInfo Instance
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (null == _this)
|
|
|
_this = new EquipStateInfo();
|
|
|
return _this;
|
|
|
}
|
|
|
}
|
|
|
private EquipStateInfo()
|
|
|
{
|
|
|
this.dbHelper = null;
|
|
|
this.RunfreeCurrent = 50;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
public string EquipCode { get; set; }
|
|
|
private DbHelper _dbHelper;
|
|
|
public DbHelper dbHelper
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this._dbHelper;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
if (this._dbHelper != null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
this._dbHelper = value;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//private DateTime _lastRunfreeTime;
|
|
|
private DateTime _lastEquipStopTime;
|
|
|
private int _currentTime; //当前密炼时间
|
|
|
private int _speedRotor; //当前转速
|
|
|
private double _mixerCurrent; //当前电流
|
|
|
private DateTime _lastEquipStateChanageTime = DateTime.Now.AddDays(-1); //最后一次更新设备状态的时间
|
|
|
private int _equipState = 0; //设备状态
|
|
|
/// <summary>
|
|
|
/// 最小电流
|
|
|
/// </summary>
|
|
|
public int RunfreeCurrent { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备状态属性
|
|
|
/// </summary>
|
|
|
public int EquipState
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return _equipState;
|
|
|
}
|
|
|
private set
|
|
|
{
|
|
|
this.EquipStateChanage(value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更新数据库中的设备状态
|
|
|
/// </summary>
|
|
|
/// <param name="state"></param>
|
|
|
private void EquipStateChanage(int state)
|
|
|
{
|
|
|
if ((DateTime.Now - this._lastEquipStateChanageTime).TotalSeconds >= 10)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
//if (!PlanCommon.IsCanConnectServer())
|
|
|
//{
|
|
|
// return;
|
|
|
//}
|
|
|
this._dbHelper.CommandType = CommandType.Text;
|
|
|
this._dbHelper.CommandText = "SELECT State,dianliu FROM dbo.Ppt_EquipState WHERE Equip_Code=@EquipCode";
|
|
|
this._dbHelper.AddParameter("@EquipCode", this.EquipCode);
|
|
|
DataTable table = this._dbHelper.ToDataTable();
|
|
|
if (table != null && table.Rows.Count > 0)
|
|
|
{
|
|
|
this._equipState = Mesnac.Basic.DataProcessor.RowValue(table.Rows[0], "State", 0);
|
|
|
this.RunfreeCurrent = Mesnac.Basic.DataProcessor.RowValue(table.Rows[0], "dianliu", 50);
|
|
|
}
|
|
|
|
|
|
if (this._equipState == state)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this._equipState = state;
|
|
|
|
|
|
string sqlstr = "UPDATE Ppt_EquipState SET State=" + state.ToString() + ",Update_Time=getdate() WHERE Equip_Code=@EquipCode";
|
|
|
this._dbHelper.CommandType = CommandType.Text;
|
|
|
this._dbHelper.ClearParameter();
|
|
|
this._dbHelper.CommandText = sqlstr;
|
|
|
this._dbHelper.AddParameter("@EquipCode", this.EquipCode);
|
|
|
this._dbHelper.ExecuteNonQuery();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error("更新设备状态失败:" + ex.Message, ex);
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
this._lastEquipStateChanageTime = DateTime.Now;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void EquipInfo(int currentTime, int speedRotor, double mixerCurrent)
|
|
|
{
|
|
|
this._currentTime = currentTime;
|
|
|
this._speedRotor = speedRotor;
|
|
|
this._mixerCurrent = mixerCurrent;
|
|
|
//自动密炼且当前炼胶时间大于0
|
|
|
if (this._currentTime > 0 && this._speedRotor > 0)
|
|
|
{
|
|
|
this.EquipState = 1;
|
|
|
return;
|
|
|
}
|
|
|
//转速,电流小于等于0,为停机
|
|
|
if (this._mixerCurrent <= 0 && this._speedRotor <= 0)
|
|
|
{
|
|
|
this.EquipState = 0;
|
|
|
return;
|
|
|
}
|
|
|
//电流大于空转电流
|
|
|
if (this._mixerCurrent > this.RunfreeCurrent)
|
|
|
{
|
|
|
this.EquipState = 1;
|
|
|
return;
|
|
|
}
|
|
|
//密炼机空转
|
|
|
this.EquipState = 2;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 设备状态类(旧业务注释)
|
|
|
/// <summary>
|
|
|
/// 设备状态类
|
|
|
/// </summary>
|
|
|
// private class EquipStateInfo
|
|
|
// {
|
|
|
// #region 单例模式
|
|
|
// private static EquipStateInfo _this;
|
|
|
// public static EquipStateInfo Instance
|
|
|
// {
|
|
|
// get
|
|
|
// {
|
|
|
// if (null == _this)
|
|
|
// _this = new EquipStateInfo();
|
|
|
// return _this;
|
|
|
// }
|
|
|
// }
|
|
|
// private EquipStateInfo()
|
|
|
// {
|
|
|
// this.dbHelper = null;
|
|
|
// this.RunfreeCurrent = 50;
|
|
|
// }
|
|
|
// #endregion
|
|
|
|
|
|
|
|
|
// public string EquipCode { get; set; }
|
|
|
// private DbHelper _dbHelper;
|
|
|
// public DbHelper dbHelper
|
|
|
// {
|
|
|
// get
|
|
|
// {
|
|
|
// return this._dbHelper;
|
|
|
// }
|
|
|
// set
|
|
|
// {
|
|
|
// if (this._dbHelper != null)
|
|
|
// {
|
|
|
// return;
|
|
|
// }
|
|
|
// this._dbHelper = value;
|
|
|
// if (value == null)
|
|
|
// {
|
|
|
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = "SELECT dianliu FROM dbo.Ppt_EquipState WHERE Equip_Code='" + this.EquipCode + "'";
|
|
|
// object dianliu = this._dbHelper.ToScalar();
|
|
|
// if (dianliu != null && dianliu != DBNull.Value)
|
|
|
// {
|
|
|
// int d = 50;
|
|
|
// if (int.TryParse(dianliu.ToString(), out d))
|
|
|
// {
|
|
|
// this.RunfreeCurrent = d;
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// private DateTime _lastRunfreeTime;
|
|
|
// private DateTime _lastEquipStopTime;
|
|
|
// private int _currentTime; //当前密炼时间
|
|
|
// private int _speedRotor; //当前转速
|
|
|
// private double _mixerCurrent; //当前电流
|
|
|
|
|
|
// private DateTime _lastEquipStateChanageTime = DateTime.Now.AddDays(-1);
|
|
|
// private int _equipState = 0;
|
|
|
// private void EquipStateChanage(int state)
|
|
|
// {
|
|
|
// if (this._equipState == state)
|
|
|
// {
|
|
|
// return;
|
|
|
// }
|
|
|
// this._equipState = state;
|
|
|
// if ((DateTime.Now - this._lastEquipStateChanageTime).TotalSeconds > 5)
|
|
|
// {
|
|
|
// string sqlstr = "UPDATE Ppt_EquipState SET State=" + state.ToString() + ",Update_Time=getdate() WHERE Equip_Code='" + this.EquipCode + "'";
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = sqlstr;
|
|
|
// this._dbHelper.ExecuteNonQuery();
|
|
|
// }
|
|
|
// this._lastEquipStateChanageTime = DateTime.Now;
|
|
|
|
|
|
// }
|
|
|
// private void RecodeEquipStop()
|
|
|
// {
|
|
|
// string sqlstr = "delete from Ppt_pmdownrecord where Mp_startdate<>@Mp_startdate and equip_Code=@equip_Code and isstop=1 and ISNULL(Mp_enddate,'')=''";
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = sqlstr;
|
|
|
// this._dbHelper.ClearParameter();
|
|
|
// this._dbHelper.AddParameter("@Mp_startdate", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@equip_Code", this.EquipCode);
|
|
|
// this._dbHelper.ExecuteNonQuery();
|
|
|
// sqlstr = "select * from Ppt_pmdownrecord where Mp_startdate=@Mp_startdate and equip_Code=@equip_Code";
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = sqlstr;
|
|
|
// this._dbHelper.ClearParameter();
|
|
|
// this._dbHelper.AddParameter("@Mp_startdate", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@equip_Code", this.EquipCode);
|
|
|
// DataTable dt = this._dbHelper.ToDataTable();
|
|
|
// if (dt.Rows.Count == 0)
|
|
|
// {
|
|
|
// sqlstr = @"SELECT a.ShiftID,a.ShiftClassID,b.ClassName FROM dbo.PptShiftTime a
|
|
|
// LEFT JOIN dbo.PptClass b ON a.ShiftClassID=b.ObjID AND ProcedureID=1
|
|
|
// WHERE a.ShiftStart>@begintime AND a.ShiftEnd<@endtime";
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = sqlstr;
|
|
|
// this._dbHelper.ClearParameter();
|
|
|
// this._dbHelper.AddParameter("@begintime", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@endtime", this._lastEquipStopTime);
|
|
|
// dt = this._dbHelper.ToDataTable();
|
|
|
// DataRow dr = dt.Rows[0];
|
|
|
|
|
|
// sqlstr = @"INSERT INTO Ppt_pmdownrecord(Equip_code,Shift_id,Mp_startdate,Mp_enddate,Mp_ComCode,Handle_flag,shift_Class,From_Source,Soure_Flag)
|
|
|
// VALUES (@Equip_code,@Shift_id,@Mp_startdate,@Mp_enddate,@Mp_ComCode,@Handle_flag,@shift_Class,@From_Source,@Soure_Flag)";
|
|
|
// this._dbHelper.CommandType = CommandType.Text;
|
|
|
// this._dbHelper.CommandText = sqlstr;
|
|
|
// this._dbHelper.ClearParameter();
|
|
|
// this._dbHelper.AddParameter("@Equip_code", this.EquipCode);
|
|
|
// this._dbHelper.AddParameter("@Shift_id", dr["ShiftID"]);
|
|
|
// this._dbHelper.AddParameter("@Mp_startdate", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@Mp_enddate", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@Mp_ComCode", "");
|
|
|
// this._dbHelper.AddParameter("@Handle_flag", "0");
|
|
|
// this._dbHelper.AddParameter("@shift_Class", dr["ShiftClassID"]);
|
|
|
// this._dbHelper.AddParameter("@From_Source", this._lastEquipStopTime);
|
|
|
// this._dbHelper.AddParameter("@Soure_Flag", "1");
|
|
|
// this._dbHelper.ExecuteNonQuery();
|
|
|
// }
|
|
|
// }
|
|
|
// public int EquipState
|
|
|
// {
|
|
|
// get
|
|
|
// {
|
|
|
// return _equipState;
|
|
|
// }
|
|
|
// private set
|
|
|
// {
|
|
|
// switch (value)
|
|
|
// {
|
|
|
// case 0: //密炼机停机
|
|
|
// {
|
|
|
// this._lastRunfreeTime = DateTime.Now.AddDays(1);
|
|
|
// if (this._lastEquipStopTime > DateTime.Now)
|
|
|
// {
|
|
|
// this._lastEquipStopTime = DateTime.Now;
|
|
|
// }
|
|
|
// if ((DateTime.Now - this._lastEquipStopTime).TotalSeconds >= 30)
|
|
|
// {
|
|
|
// EquipStateChanage(value);
|
|
|
// //RecodeEquipStop();
|
|
|
// }
|
|
|
// break;
|
|
|
// }
|
|
|
// case 1: //密炼机正常运行
|
|
|
// {
|
|
|
// this._lastRunfreeTime = DateTime.Now.AddDays(1);
|
|
|
// this._lastEquipStopTime = DateTime.Now.AddDays(1);
|
|
|
// EquipStateChanage(value);
|
|
|
// break;
|
|
|
// }
|
|
|
// case 2: //密炼机空转
|
|
|
// {
|
|
|
// this._lastEquipStopTime = DateTime.Now.AddDays(1);
|
|
|
// if (this._lastRunfreeTime > DateTime.Now)
|
|
|
// {
|
|
|
// this._lastRunfreeTime = DateTime.Now;
|
|
|
// }
|
|
|
// if ((DateTime.Now - this._lastRunfreeTime).TotalSeconds >= 30)
|
|
|
// {
|
|
|
// EquipStateChanage(value);
|
|
|
// }
|
|
|
// break;
|
|
|
// }
|
|
|
// default:
|
|
|
// {
|
|
|
// break;
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// public int RunfreeCurrent { get; set; }
|
|
|
// public void EquipInfo(int currentTime, int speedRotor, double mixerCurrent)
|
|
|
// {
|
|
|
// this._currentTime = currentTime;
|
|
|
// this._speedRotor = speedRotor;
|
|
|
// this._mixerCurrent = mixerCurrent;
|
|
|
// //自动密炼且当前炼胶时间大于0
|
|
|
// if (this._currentTime > 0 && this._speedRotor > 0)
|
|
|
// {
|
|
|
// this.EquipState = 1;
|
|
|
// return;
|
|
|
// }
|
|
|
// //转速,电流小于等于0,为停机
|
|
|
// if (this._mixerCurrent <= 0 && this._speedRotor <= 0)
|
|
|
// {
|
|
|
// this.EquipState = 0;
|
|
|
// return;
|
|
|
// }
|
|
|
// //电流大于空转电流
|
|
|
// if (this._mixerCurrent > this.RunfreeCurrent)
|
|
|
// {
|
|
|
// this.EquipState = 1;
|
|
|
// return;
|
|
|
// }
|
|
|
// //密炼机空转
|
|
|
// this.EquipState = 2;
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
}
|