Files
ATV_STDLabelAttach/Handler/Project/Device/TowerLamp.cs
2025-07-17 16:11:46 +09:00

154 lines
3.6 KiB
C#

//#define OLD
using Project;
using Project.Device;
using System;
#if OLD
using static Project.StateMachine;
#endif
/// <summary>
/// 타워램프조작
/// </summary>
public static class TowerLamp
{
static bool enable = true;
#if OLD
static arDev.AzinAxt.DIO DIO = null;
#else
static arDev.DIO.IDIO DIO = null;
#endif
static int R = -1;
static int G = -1;
static int Y = -1;
static DateTime updatetime = DateTime.Now;
/// <summary>
/// 타워램프 사용여부 false 가 입력되면 모든 램프가 꺼집니다
/// </summary>
public static Boolean Enable
{
get { return enable; }
set
{
enable = value;
if (enable == false)
{
RED = false;
YEL = false;
GRN = false;
}
}
}
/// <summary>
/// 갱신주기 250ms 기본설정
/// </summary>
public static int UpdateInterval = 250;
#if OLD
public static void Init(arDev.AzinAxt.DIO dio_, int R_, int G_, int Y_)
#else
public static void Init(arDev.DIO.IDIO dio_, int R_, int G_, int Y_)
#endif
{
DIO = dio_;
R = R_;
G = G_;
Y = Y_;
}
public static void Update(eSMStep Step)
{
if (Enable == false) return;
if (DIO == null) return; ;// throw new Exception("DIO가 설정되지 않았습니다. Init 함수를 호출 하세요");
var ts = DateTime.Now - updatetime;
if (ts.TotalMilliseconds < UpdateInterval) return;
if (Step == eSMStep.RUN) //동작중에는 녹색을 점등
{
if (GRN == false) GRN = true;
if (RED == true) RED = false;
if (YEL == true) YEL = false;
}
else if (Step < eSMStep.IDLE || Step.ToString().StartsWith("HOME")) //초기화관련
{
GRN = false;
var cur = YEL;
RED = !cur;
YEL = !cur;
}
else if (Step == eSMStep.FINISH) //작업종료
{
var cur = GRN;
GRN = !cur;
YEL = !cur;
RED = false;
}
else if (Step == eSMStep.WAITSTART) //사용자대기
{
var cur = YEL;
YEL = !cur;
GRN = false;
RED = false;
}
else if (Step == eSMStep.ERROR || Step == eSMStep.EMERGENCY)
{
RED = !RED;
YEL = false;
GRN = false;
}
else if (Step == eSMStep.PAUSE)
{
if (RED == false) RED = true;
if (YEL == true) YEL = false;
if (GRN == true) GRN = false;
}
else
{
//나머지 모든 상황은 대기로 한다
if (YEL == false) YEL = true;
if (GRN == true) GRN = false;
if (RED == true) RED = false;
}
}
static void SetLamp(int port, bool value)
{
if (DIO == null || !DIO.IsInit || port < 0) return;
DIO.SetOutput(port, value);
}
static bool GetLamp(int port)
{
if (DIO == null || !DIO.IsInit || port < 0) return false;
#if OLD
return DIO.OUTPUT(port);
#else
return DIO.GetDOValue(port);
#endif
}
public static Boolean GRN
{
get { return GetLamp(G); }
set { SetLamp(G, value); }
}
public static Boolean YEL
{
get { return GetLamp(Y); }
set { SetLamp(Y, value); }
}
public static Boolean RED
{
get { return GetLamp(R); }
set { SetLamp(R, value); }
}
}
//230619 chi PAUSE 상태추가 => RED ON
// 전처리추가