209 lines
9.0 KiB
C#
209 lines
9.0 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
|
|
{
|
|
/// <summary>
|
|
/// 상태표시라벨의 메세지 자동 변경
|
|
/// </summary>
|
|
/// <param name="idx"></param>
|
|
void UpdateStatusMessage()
|
|
{
|
|
arCtl.arLabel lbl = lbMsg;
|
|
|
|
//메세지창이 깜박거려야하는 상황 체크
|
|
if (lbl.Tag != null && lbl.Tag.ToString() == "BLINK")
|
|
{
|
|
var bg1 = lbl.BackColor;
|
|
var bg2 = lbl.BackColor2;
|
|
if(bg2 != null) lbl.BackColor = (Color)bg2;
|
|
lbl.BackColor2 = bg1;
|
|
lbl.Invalidate();
|
|
}
|
|
|
|
if (PUB.sm.Step == eSMStep.INIT)
|
|
{
|
|
SetStatusMessage("초기화 작업 중", Color.White, Color.FromArgb(0x38, 0x4d, 0x9d));
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.IDLE)
|
|
{
|
|
//각종 IO확인하여 에러메세지 표시한다
|
|
|
|
var msg = string.Empty;
|
|
bool errst = true;
|
|
if (PUB.mot.IsInit == false) msg = "모션 카드 준비 안됨";
|
|
else if (PUB.dio.IsInit == false) msg = "I/O 카드 준비 안됨";
|
|
else if (PUB.dio.HasDIOn == false) msg = "전원 확인 필요 (입력포트 감지 안됨)";
|
|
else if (PUB.mot.HasServoAlarm == true) msg = "서보 알람 발생";
|
|
else if (PUB.mot.HasHoming == true) msg = "홈 검색 진행 중";
|
|
else if (PUB.mot.HasServoOff == true) msg = "서보 OFF 발생";
|
|
else if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) msg = "AIR 출력 안됨(전면 청색 AIR버튼을 누르세요)";
|
|
else if (DIO.GetIOInput(eDIName.AIR_DETECT) == false) msg = "AIR 감지 안됨";
|
|
else if (PUB.mot.HasHomeSetOff == true)
|
|
{
|
|
if (DIO.GetIOInput(eDIName.PICKER_SAFE) == false)
|
|
{
|
|
msg = "피커(X)축을 중앙으로 옮겨주세요 (기능-관리화면)";
|
|
}
|
|
else
|
|
{
|
|
msg = "홈 검색이 필요 합니다";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
var limport = new List<string>();
|
|
if (PUB.mot.HasLimitError == true)
|
|
{
|
|
for (short i = 0; i < SETTING.System.MotaxisCount; i++)
|
|
{
|
|
if (PUB.mot.IsUse(i) == false) continue;
|
|
if (PUB.mot.IsLimitN(i))
|
|
{
|
|
var useOrgSensor = PUB.system_mot.GetUseOrigin;
|
|
if (useOrgSensor[i] == true) limport.Add(i.ToString());
|
|
}
|
|
else if (PUB.mot.IsLimitP(i))
|
|
limport.Add(i.ToString());
|
|
else if (PUB.mot.IsLimitSWN(i))
|
|
limport.Add(i.ToString());
|
|
else if (PUB.mot.IsLimitSWP(i))
|
|
limport.Add(i.ToString());
|
|
}
|
|
}
|
|
if (limport.Any())
|
|
{
|
|
msg = "서보 LIMIT 알람 발생(Ax:" + string.Join(",", limport) + ")";
|
|
}
|
|
else
|
|
{
|
|
msg = "작업을 시작 하려면 START를 누르세요";
|
|
errst = false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
if (errst)
|
|
{
|
|
SetStatusMessage(msg, Color.White, Color.Red, Color.IndianRed, Color.DimGray, blank: true);
|
|
}
|
|
else
|
|
{
|
|
Color fColor = Color.FromArgb(200, 200, 200);
|
|
Color bColor1 = Color.DimGray;
|
|
Color bColor2 = Color.DarkGray;
|
|
|
|
SetStatusMessage(msg, Color.Lime, bColor1, bColor2, Color.Black, true);
|
|
}
|
|
|
|
}
|
|
|
|
else if (PUB.sm.Step == eSMStep.WAITSTART)
|
|
{
|
|
SetStatusMessage("[시작 대기] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.ERROR)
|
|
{
|
|
var msglis = PUB.Result.ResultMessage.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
|
SetStatusMessage($"{msglis[0]}", Color.White, Color.Red);
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.PAUSE)
|
|
{
|
|
SetStatusMessage("[일시 정지] ", Color.Gold, Color.FromArgb(50, 50, 50));
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.HOME_FULL)// || Pub.sm.Step == eSMStep.QHOME)
|
|
{
|
|
SetStatusMessage($"전체 모션의 원점을 확인하고 있습니다", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.HOME_DELAY)// || Pub.sm.Step == eSMStep.QHOME)
|
|
{
|
|
SetStatusMessage($"잠시만 기다려 주세요(홈 진행 중)", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.HOME_CONFIRM)// || Pub.sm.Step == eSMStep.QHOME)
|
|
{
|
|
SetStatusMessage($"홈 작업을 완료 하는 중", Color.White, Color.FromArgb(0x98, 0x79, 0xd0), shadow: Color.DimGray);
|
|
}
|
|
else if (PUB.sm.Step == eSMStep.RUN)
|
|
{
|
|
|
|
double cur = PUB.sm.seq.GetTime(PUB.sm.Step).TotalSeconds;
|
|
double max = AR.SETTING.Data.Timeout_StepMaxTime;
|
|
string msg = $"진행 중";
|
|
Color fColor = Color.Gold;
|
|
|
|
if (PUB.flag.get(eVarBool.FG_JOB_END))
|
|
{
|
|
msg = "로더가 비어 있습니다. 잠시 후 작업이 완료 됩니다";
|
|
cur = max = 0;
|
|
fColor = Color.Lime;
|
|
|
|
}
|
|
else if (PUB.flag.get(eVarBool.FG_WAIT_LOADERINFO))
|
|
{
|
|
msg = "사용자 정보 입력을 기다리고 있습니다";
|
|
cur = 100;
|
|
max = 100;
|
|
}
|
|
else //if (PUB.flag.get(eVarBool.RDY_VISION1) == true && PUB.flag.get(eVarBool.RDY_PORT_PC) == true && idx == 9)
|
|
{
|
|
msg = "작업 중";
|
|
if (PUB.flag.get(eVarBool.FG_PRC_VISIONL) && PUB.flag.get(eVarBool.FG_END_VISIONL) == false)
|
|
msg += "(LEFT-QR검증중)";
|
|
if (PUB.flag.get(eVarBool.FG_PRC_VISIONR) && PUB.flag.get(eVarBool.FG_END_VISIONR) == false)
|
|
msg += "(RIGHT-QR검증중)";
|
|
|
|
//컨베이어 사용모드에서 컨베이어 인터락 검사
|
|
if (VAR.BOOL[eVarBool.Use_Conveyor])
|
|
{
|
|
if (DIO.GetIOInput(eDIName.R_CONV1) || DIO.GetIOInput(eDIName.R_CONV4))
|
|
{
|
|
if (PUB.iLockCVR.IsEmpty() == false)
|
|
msg += "(우측컨베이어 인터락 해제 대기)";
|
|
}
|
|
if (DIO.GetIOInput(eDIName.L_CONV1) || DIO.GetIOInput(eDIName.L_CONV4))
|
|
{
|
|
if (PUB.iLockCVL.IsEmpty() == false)
|
|
msg += "(좌측컨베이어 인터락 해제 대기)";
|
|
}
|
|
}
|
|
|
|
cur = VAR.TIME.RUN((int)eVarTime.LIVEVIEW1).TotalSeconds;
|
|
max = AR.SETTING.Data.Timeout_VisionProcessL / 1000.0;
|
|
}
|
|
//else if (PUB.flag.get(eVarBool.RDY_ZL_PICKON))
|
|
//{
|
|
// var ts = DateTime.Now - Pub.GetVarTime(eVarTime.JOB_END);
|
|
// msg = string.Format("UNLOADER PICK ON #{0}", PUB.sm.seq.Get(step));
|
|
// cur = Pub.getRunSteptime(0).TotalSeconds;//ts.TotalSeconds;
|
|
// max = 10;//COMM.SETTING.Data.Timeout_JOBEnd;
|
|
//}
|
|
//else if (PUB.mot.IsMotion((int)eAxis.Y_PICKER])
|
|
//{
|
|
// msg = string.Format("이동 중");
|
|
// cur = 0;// Pub.getRunSteptime(0).TotalSeconds;// ts.TotalSeconds;
|
|
// max = 10;//COMM.SETTING.Data.Timeout_JOBEnd;
|
|
//}
|
|
SetStatusProgress(cur, msg, max, fColor, Color.FromArgb(50, 50, 50));
|
|
}
|
|
else if (PUB.flag.get(eVarBool.FG_MOVE_PICKER))
|
|
{
|
|
SetStatusMessage("X축을 버튼으로 이동 가능 합니다", Color.Black, Color.White);
|
|
}
|
|
else
|
|
{
|
|
SetStatusMessage("[" + PUB.sm.Step.ToString() + "]", Color.Red, Color.White);
|
|
}
|
|
}
|
|
}
|
|
}
|