154 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| //              전처리추가                 | 
