using Aurora.Api; using Aurora.Api.Devices; using Aurora.Util.HislogPlus; using AuroraCellTracker; using AuroraChiller; using AuroraIO; using AuroraLaser; using AuroraLaserScanner; using AuroraLBAD; using AuroraLBAD.Services; using AuroraLight; using AuroraOCT; using AuroraPLC; using Hermes; using System; using WeldingCommon.Devices; namespace WeldingCommon.Sequences { public static class SequenceContextEx { public static Scanner GetLaserScanner(this SequenceContext context) => context.Devices[CommonDeviceIds.Scanner] as Scanner; public static T GetRecipe(this SequenceContext context, string subject) => (T)context.Recipes[subject]; public static T GetSetting(this SequenceContext context, string subject) => (T)context.Settings[subject]; public static T GetModel(this SequenceContext context, string modelName, string subject) => (T)context.Models.ModelItem(modelName, subject); public static Laser GetLaser(this SequenceContext context) => context.Devices[CommonDeviceIds.Laser] as Laser; public static OCT GetOCT(this SequenceContext context) => context.Devices[CommonDeviceIds.OCT] as OCT; public static CellTracker GetCellTracker(this SequenceContext context) => context.Devices[CommonDeviceIds.CellTracker] as CellTracker; public static PLCController GetPLC(this SequenceContext context) => context.Devices[CommonDeviceIds.PLCDevice] as PLCController; public static IODevice GetIOUnit(this SequenceContext context) => context.Devices[CommonDeviceIds.IODevice] as IODevice; public static LBAD GetLBAD(this SequenceContext context) => context.Devices[CommonDeviceIds.LBAD] as LBAD; // 정지명 public static StreamLBADClient GetLBADClient(this SequenceContext context) => context.Services[CommonServiceIds.StreamLBADClient] as StreamLBADClient; public static SmcChiller GetChiller(this SequenceContext context) => context.Devices[CommonDeviceIds.SmcChiller] as SmcChiller; public static LightDevice GetLight(this SequenceContext context) => context.Devices[CommonDeviceIds.Light] as LightDevice; public static string AlarmAccured(this SequenceContext context, int AlarmCode) { context.AlarmService.SetAlarm(AlarmCode); return $"Alarm Occured >> {context.AlarmService.GetAlarmDescription(AlarmCode).Description} >>"; } private const int TIMEOUT = 10 * 1000; private const int INTERVAL = 20; public static int RetryUntilFuncResult(this SequenceContext context, Logger log, Func task, int AlarmCode, int timeout = TIMEOUT, int interval = INTERVAL) { var res = context.RetryUntilSuccess(task, TIMEOUT, INTERVAL, false); if (res == E2.TIMEOUT) { log.FuncE($"Alarm Occured >> {context.AlarmService.GetAlarmDescription(AlarmCode).Description}"); context.PutValue("AlarmCode", AlarmCode); return E2.ABORTED; } else if (res == E2.CANCELLED) { log.FuncE("Func Canceled"); context.PutValue("AlarmCode", 0); return E2.ABORTED; } return res; } } }