153 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using AR;
 | |
| namespace Project
 | |
| {
 | |
| 	public partial class FMain
 | |
| 	{
 | |
| 		Dialog.fFinishJob fsum = null;
 | |
| 		void HideSummary()
 | |
| 		{
 | |
| 			if (this.InvokeRequired)
 | |
| 			{
 | |
| 				this.BeginInvoke(new MethodInvoker(HideSummary), null);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				if (fsum != null)
 | |
| 				{
 | |
| 					if (fsum.IsDisposed == false && fsum.Disposing == false)
 | |
| 					{
 | |
| 						fsum.Close();
 | |
| 						fsum.Dispose();
 | |
| 					}
 | |
| 					fsum = null;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		void ShowSummary()
 | |
| 		{
 | |
| 			if (fsum == null || fsum.IsDisposed || fsum.Disposing == true)
 | |
| 			{
 | |
| 				fsum = new Dialog.fFinishJob();
 | |
| 				fsum.FormClosed += (s1, e1) =>
 | |
| 				{
 | |
| 					//해당 폼이 닫힐때 처리한다.
 | |
| 					if (PUB.sm.Step == eSMStep.FINISH)
 | |
| 					{
 | |
| 						//완료상때일때 닫으면
 | |
| 						Run_MotionPositionReset();
 | |
| 					}
 | |
| 				};
 | |
| 				fsum.Show();
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				fsum.Show();
 | |
| 				fsum.Activate();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		void UserStepWait(eWorkPort target)
 | |
| 		{
 | |
| 			if (PUB.flag.get(eVarBool.FG_USERSTEP))
 | |
| 			{
 | |
| 				if (target == eWorkPort.Left)
 | |
| 				{
 | |
| 					if (LockUserL.WaitOne(1))
 | |
| 						LockUserL.Reset();
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					if (LockUserR.WaitOne(1))
 | |
| 						LockUserR.Reset();
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// user step 상황에서 자동으로 멈추게 합니다.
 | |
| 		/// </summary>
 | |
| 		void UserStepRun(eWorkPort target)
 | |
| 		{
 | |
| 			if (PUB.flag.get(eVarBool.FG_USERSTEP))
 | |
| 			{
 | |
| 				if (target == eWorkPort.Right)
 | |
| 				{
 | |
| 					if (LockUserL.WaitOne(1) == false)
 | |
| 						LockUserL.Set();
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					if (LockUserR.WaitOne(1) == false)
 | |
| 						LockUserR.Set();
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 홈작업이 진행 가능한지 하드웨어 상태를 확인한다.
 | |
| 		/// </summary>
 | |
| 		/// <returns></returns>
 | |
| 		bool CheckHomeProcess_HW_Available(Boolean needHomeSet)
 | |
| 		{
 | |
| 			//모션이 초기화되지 않았다면 오류로 한다
 | |
| 			if (PUB.mot.IsInit == false)
 | |
| 			{
 | |
| 				PUB.Result.SetResultMessage(eResult.MOTION, eECode.AZJINIT, eNextStep.NOTHING);
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			//모든 홈이 되어야 가능하다
 | |
| 			if (needHomeSet)
 | |
| 			{
 | |
| 				if (PUB.mot.IsInit && PUB.mot.HasHomeSetOff == true)
 | |
| 				{
 | |
| 					PUB.Result.SetResultMessage(eResult.MOTION, eECode.MOT_HSET, eNextStep.ERROR);
 | |
| 					return false;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			//안전센서가 작동했다면 중지한다.
 | |
| 			if (DIO.isSaftyDoorF(true) == false || DIO.isSaftyDoorR() == false)
 | |
| 			{
 | |
| 				PUB.Result.SetResultMessage(eResult.SAFTY, eECode.DOORSAFTY, eNextStep.ERROR);
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			//모션모델이 반드시 설정되어있어야 한다
 | |
| 			if (PUB.Result.isSetmModel == false)
 | |
| 			{
 | |
| 				PUB.Result.SetResultMessage(eResult.MOTION, eECode.NOMODELM, eNextStep.ERROR);
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			//AIR확인
 | |
| 			if (DIO.GetIOOutput(eDOName.SOL_AIR) == false)
 | |
| 			{
 | |
| 				PUB.Result.SetResultMessage(eResult.SENSOR, eECode.AIRNOOUT, eNextStep.ERROR);
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			// 비상정지 확인
 | |
| 			if (DIO.IsEmergencyOn() == true)
 | |
| 			{
 | |
| 				PUB.Result.SetResultMessage(eResult.SAFTY, eECode.EMERGENCY, eNextStep.ERROR);
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| }
 | 
