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.

401 lines
16 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.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
}
}