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.

162 lines
6.5 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;
using Mesnac.Action.Feeding.FeedingPlc;
using Mesnac.Basic;
namespace Mesnac.Action.Feeding.FinishBatch
{
/// <summary>
/// 自动执行下一个计划
/// </summary>
public class AutuExecuteNextPlan
{
private bool hasWeightType(List<RecipeData.RecipeWeightInfo> weightList, RecipeData.WeightType weightType)
{
foreach (RecipeData.RecipeWeightInfo w in weightList)
{
if (w.WeightType == (int)weightType)
{
return true;
}
}
return false;
}
/// <summary>
/// 自动下传下一个计划的称量信息
/// </summary>
public void Run()
{
//判断是否连续执行
if (Mesnac.Basic.RunSchema.Instance.GetConfigValue("PlanExecuteType", "0").Trim() == "0")
{
return;
}
RecipeData recipe = new RecipeData();
//当前计划设定数量
int allche = PlcData.Instance.RecipeSetNumber.LastValue.ToInt();
//当前计划称量信息
List<RecipeData.RecipeWeightInfo> weightList = recipe.GetCurrentRecipeWeightInfo();
if (PlcData.Instance.MixingFinishedCount.NowValue.ToInt() >= allche)
{
return;
}
if (PlcData.Instance.PloyFinishedCount.NowValue.ToInt() < allche
&& hasWeightType(weightList, RecipeData.WeightType.))
{
return;
}
if (PlcData.Instance.CarbonFinishedCount.NowValue.ToInt() < allche
&& hasWeightType(weightList, RecipeData.WeightType.))
{
return;
}
if (PlcData.Instance.OilFinishedCount.NowValue.ToInt() < allche
&& hasWeightType(weightList, RecipeData.WeightType.))
{
return;
}
string planid = recipe.GetNextPlanID();
if (string.IsNullOrWhiteSpace(planid))
{
return;
}
if (new BaseAction().NetType == BaseAction.NetTypes.Net)
{
new NetRecipe().GetRecipeByPlanID(planid);
}
string recipeid = recipe.GetRecipeID(planid);
#region 下传称量信息
try
{
//1、获取配方称量信息
DataTable dt = recipe.GetRecipeWeigthData(recipeid);
dt.TableName = planid;
RecipeToDatabase recipeToDatabase = new RecipeToDatabase();
//2、清空PLCData表数据防止多下传信息
//recipeToDatabase.TruncatePlcData(); //现在不用PLCData表了
//2、
List<string> errorList = null;
RecipeData recipeData = new RecipeData();
List<RecipeData.RecipeWeightInfo> nextWeightList = recipeData.FillRecipeWeightInfo(dt);
if (!recipeToDatabase.ValidateJarSerial(nextWeightList, out errorList))
{
return;
}
//3、把配方称量信息写入PLCData表
if (recipeToDatabase.DownloadRecipeWeightInfo(dt, true) == 1)
{
//4、把称量设定数写入PLCData表
//if (!PlcData.Instance.DataWrite(PlcData.Instance.WeightSetNumber, new object[] { new BasicInfo.RecipeData().GetPlanLotCount(planid) }))
//{
// ICSharpCode.Core.LoggingService.Warn("下传称量信息把称量设定数写入PLCData表失败!");
// return;
//}
//4、改为把称量设定数直接写入PLC设备
if (!PlcData.Instance.PlcWriteByDataKey(PlcData.Instance.WeightSetNumber, new object[] { new BasicInfo.RecipeData().GetPlanLotCount(planid) }))
{
ICSharpCode.Core.LoggingService.Warn("下传称量信息把称量信息下传至PLC失败!");
return;
}
//5、把PLCData表中的数据写入PLC现不存PLCData表直接写入PLC设备
//if (!new BasicInfo.DatabaseToPlc().Run())
//{
// ICSharpCode.Core.LoggingService.Warn("下传称量信息把称量信息下传至PLC失败!");
// return;
//}
//6、把开始称量信息下传至PLC
if (!new StartWeightToPlc().DownLoadStartWeight())
{
ICSharpCode.Core.LoggingService.Warn("下传称量信息把开始称量信号下传至PLC失败!");
return;
}
//7、缓存称量信息
this.CacheRecipeWeigh(recipe);
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Warn("执行下一个计划提前下传称量信息失败:" + ex.Message);
}
#endregion
}
/// <summary>
/// 缓存配方称量信息 并保存提前称量缓存信息至SysKeyValue表
/// </summary>
/// <param name="recipeData">配方数据对象</param>
public void CacheRecipeWeigh(RecipeData recipeData)
{
try
{
RecipeWeighCache.Instance.CacheFlag = true;
RecipeWeighCache.Instance.CacheAllWeightInfo(recipeData.GetCurrentRecipeWeightInfo());
FeedingAction action = new FeedingAction();
string xmlRecipeWeightCache = SerializeHandler.SerializeObject<List<RecipeData.RecipeWeightInfo>>(RecipeWeighCache.Instance.AllWeightInfo);
action.UpdateSysValue("RecipeWeightCache", xmlRecipeWeightCache);
action.UpdateSysValue("RecipeWeightCache_CacheFlag", RecipeWeighCache.Instance.CacheFlag.ToString());
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("保存提前称量缓存信息至SysKeyValue表失败" + ex.Message, ex);
}
}
}
}