Kyungshin-Welder/Machines/ILSOS_KS/Recipes/RecipeEventHelper.cs
2026-01-26 14:51:28 +09:00

147 lines
5.5 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.Api.Manager;
using Aurora.Util.HislogPlus;
using Aurora.View;
using CoreUnit.Control.UserControl.Canvas;
using CoreUnit.Scanner.UserControl.ScannerCanvas;
using GUI;
using ILSOS_KS.Device;
using ILSOS_KS.Sequences;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WeldingCommon;
using WeldingCommon.Devices;
using WeldingCommon.Recipes;
using static ILSOS_KS.Device.PLCControllerKS;
namespace ILSOS_KS.Recipes
{
// Recipe 의 상태 변경(EVENT_RECIPE_CHANGE_REQUEST <-> EVENT_AUTO_RUN_START_REQUEST) 등 장비별로 다르게 처리해야 하는 Recipe 관련 Event 처리
// 추가로 SYS_RECIPE_ACTIVATED 에서 처리가 다르게 이루어져야 할 수도 있음. 확장 가능하도록 사용성 열어둠
internal class RecipeEventHelper
{
public static bool RecipeChange = false;
internal static void ExternalRecipeUpdate(Logger Log, IAuroraEnvironment aurora)
{
Log.I("ExternalRecipeUpdate ");
}
internal static bool KS_RecipeChangeRequest(Logger Log, IAuroraEnvironment aurora)
{
var plc = aurora.DeviceManager[CommonDeviceIds.PLCDevice] as PLCController;
short recipeRequestId = (short)plc.ReadDWord((int)eWordInput.PLC_RECIPE_NO).data;
Log.I(string.Format($"[PLCInterface]Get PLC_RECIPE_NO {recipeRequestId}"));
Status.GetProcessingWeldingData().ChangeRequest = recipeRequestId.ToString();
SeqAutoRunKS ks = aurora.SequenceEntry[SequenceIds.SeqAutoRunKS_New] as SeqAutoRunKS;
//Log.I("=================================================================================");
//Log.I("KS_RecipeChangeRequest Start....");
Status.GetProcessingWeldingData().ActRecipe = $"RecipeChange {recipeRequestId} ...";
bool auto = plc.ReadBit((int)eBitInput.PLC_AUTO_STATUS).data;
if (auto)
{
var recipeName = WeldingRecipeManager.SearchRecipeItem(recipeRequestId);
if (recipeName != "")
{
//Status.GetProcessingWeldingData().ActRecipe = recipeName;
//WeldingRecipeManager.OnActiveRecipe(recipeRequestId, recipeName);
//WeldingRecipeManager.OnActiveReloaded();
//Log.I(string.Format($"[PLCInterface]Set ActiveReloaded {recipeRequestId} : {recipeName}"));
//MessageUtil.ShowSuccessToast($"{recipeName} 레시피 변경 하였습니다.");
RecipeChange = true;
}
else
{
//MessageUtil.ShowErrorToast(string.Format("{0}", "Recipe List에 해당 Recipe No.가 없습니다."));
//Log.E($"The requested Recipe No.{recipeRequestId} is not in the Recipe List.");
//Log.I("=================================================================================");
RecipeChange = false;
return false;
}
//Log.I("Complete OnRecipeChangeRequest");
//Log.I("=================================================================================");
return true;
}
return true;
}
internal static void KS_RecipeChangeComplete(Logger Log, IAuroraEnvironment aurora)
{
var plc = aurora.DeviceManager[CommonDeviceIds.PLCDevice] as PLCController;
//if (RecipeChange)
//{
// int activatedRecipeId = aurora.RecipeManager.ActivatedRecipe().Id;
// Log.I(string.Format($"[PLCInterface]Get PLC_RECIPE_NO {activatedRecipeId}"));
// plc.WriteWord((int)eWordOutput.PC_RECIPE_NO, (short)activatedRecipeId);
// Log.I(string.Format($"[PLCInterface]Set PC_RECIPE_NO {activatedRecipeId}"));
// plc.WriteBit((int)eBitOutput.PC_RECIPE_CHANGE_COMPLETE, true);
// Log.I(string.Format($"[PLCInterface]Set PC_RECIPE_CHANGE_COMPLETE True"));
//}
short recipeRequestId = (short)plc.ReadDWord((int)eWordInput.PLC_RECIPE_NO).data;
plc.WriteWord((int)eWordOutput.PC_RECIPE_NO, recipeRequestId);
Thread.Sleep(100);
plc.WriteBit((int)eBitOutput.PC_RECIPE_CHANGE_COMPLETE, true);
TimeSpan spanTime;
DateTime startTime = DateTime.Now;
int timeOut = 10;
while (true)
{
spanTime = DateTime.Now.Subtract(startTime);
//if (!_Plc.GetDIStatus("PLC_RECIPE_CHANGE_REQ"))
if (!plc.ReadBit((int)eBitInput.PLC_RECIPE_CHANGE_REQ).data)
{
Log.I(string.Format($"[PLCInterface]Set PLC_RECIPE_CHANGE_REQ False"));
break;
}
if (spanTime.TotalMilliseconds > (timeOut * 1000))
{
Log.I(string.Format($"[PLCInterface]Set PLC_RECIPE_CHANGE_REQ Time Out"));
break;
}
}
//_Plc.SetDOStatus("PC_RECIPE_CHANGE_COMPLETE", false);
plc.WriteBit((int)eBitOutput.PC_RECIPE_CHANGE_COMPLETE, false);
Log.I(string.Format($"[PLCInterface]Set PC_RECIPE_CHANGE_COMPLETE False"));
}
}
}