Files
ENIG/Cs_HMI/Project/StateMachine/_DIO.cs
2025-04-24 11:51:55 +09:00

197 lines
9.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using AR;
using arDev;
using COMM;
namespace Project
{
public partial class fMain
{
private void PLC_DioChanged(object sender, arDev.FakePLC.IOValueEventArgs e)
{
if (e.Direction == arDev.Arduino.IODirection.Input)
{
var diName = (arDev.FakePLC.DIName)e.ArrIDX;
Console.WriteLine(string.Format("[DI:{1}]{0}=>{2}", diName, e.ArrIDX, e.NewValue));
if (diName == arDev.FakePLC.DIName.PINI_BTN_1) //reset
{
if (e.NewValue == true)
{
PUB.log.Add($"버튼({diName}) 눌림(AGV_RESET)");
PUB.AGV.AGVErrorReset();
//241203
if(PUB.AGV.system1.agv_run || PUB.AGV.system1.agv_run_manual)
{
PUB.AGV.AGVMoveStop("button1");
}
//PUB.XBE.NewMsgEvent('0', '1');
}
}
else if (diName == arDev.FakePLC.DIName.PINI_BTN_2) //auto -> QC //230424
{
if (e.NewValue == true)
{
PUB.log.Add($"버튼({diName}) 눌림");
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == true)
{
if (PUB.sm.RunStep == StateMachine.ERunStep.GOUP)
{
//zup을 자동으로 해준다
if (VAR.BOOL[eVarBool.WAIT_COVER_UP])
{
PUB.log.Add($"버튼({diName}) 눌림");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.UP);
PUB.Result.NextPos = ePosition.QC;
}
else PUB.Speak(Lang.);
}
else if (PUB.sm.RunStep == StateMachine.ERunStep.GODOWN)
{
//이미 하차진행중에 누른 경우이다
PUB.Result.NextPos = ePosition.QC;
PUB.Result.TargetPos = ePosition.QC;
}
else
{
PUB.log.Add(Lang.QC이동버튼은상하차에서만사용가능합니다);
PUB.Speak(Lang.);
}
}
else PUB.Speak(Lang.);
//if (VAR.BOOL[eVarBool.FLAG_AUTORUN]==false)
//{
// PUB.sm.ClearRunStep();
// PUB.sm.SetNewRunStep(StateMachine.ERunStep.READY);
// PUB.sm.SetNewStep(StateMachine.eSMStep.RUN);
// PUB.Speak("자동 상태로 전환 합니다");
//}
//else
//{
// PUB.Speak("현재 자동 상태 입니다");
//}
}
}
else if (diName == arDev.FakePLC.DIName.PINI_BTN_3) //z-down -> QA //230424
{
if (e.NewValue == true)
{
//Z-dn기능으로 업데이트 230119
PUB.log.Add($"버튼({diName}) 눌림");
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == true)
{
if (PUB.sm.RunStep == StateMachine.ERunStep.GOUP)
{
//zup.을 자동으로 해준다
if (VAR.BOOL[eVarBool.WAIT_COVER_UP])
{
PUB.log.Add($"버튼({diName}) 눌림");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.UP);
PUB.Result.NextPos = ePosition.QA;
}
else PUB.Speak(Lang.);
}
else if (PUB.sm.RunStep == StateMachine.ERunStep.GODOWN)
{
//이미 하차진행중에 누른 경우이다
PUB.Result.NextPos = ePosition.QA;
PUB.Result.TargetPos = ePosition.QA;
}
else
{
PUB.log.Add($"QA이동 버튼은 상/하차에서만 사용 가능합니다");
PUB.Speak(Lang.);
}
}
else PUB.Speak(Lang.);
//PUB.PLC.ZMot(FakePLC.ZMotDirection.Down);
}
}
else if (diName == arDev.FakePLC.DIName.PINI_BTN_4) //z-up
{
if (e.NewValue == true)
{
//Z-up기능으로 업데이트 230119
PUB.log.Add($"버튼({diName}) 눌림");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.UP);
}
}
else if (diName == arDev.FakePLC.DIName.PINI_EMG)
{
if (e.NewValue == true)
{
PUB.log.Add($"버튼({diName}) 눌림");
PUB.Speak(Lang.);
}
//else Pub.Speak("비상 정지 해제");
}
else if (diName == arDev.FakePLC.DIName.PINI_OVERLOADL)
{
if (e.NewValue == true)
{
PUB.log.Add($"버튼({diName}) 눌림");
PUB.Speak(Lang.);
}
VAR.BOOL[eVarBool.OVERLOADL] = e.NewValue;
}
else if (diName == arDev.FakePLC.DIName.PINI_OVERLOADR)
{
if (e.NewValue == true)
{
PUB.log.Add($"버튼({diName}) 눌림");
PUB.Speak(Lang.);
}
VAR.BOOL[eVarBool.OVERLOADR] = e.NewValue;
}
//else if (diName == FakePLC.DIName.PINI_LIMIT_LU)
//{
// PUB.flag.set(EFlag.FLAG_LIMITHIGHL, e.NewValue);
//}
//else if (diName == FakePLC.DIName.PINI_LIMIT_RU)
//{
// PUB.flag.set(EFlag.FLAG_LIMITHIGHR, e.NewValue);
//}
//else if (diName == FakePLC.DIName.PINI_LIMIT_LD)
//{
// PUB.flag.set(EFlag.FLAG_LIMITLOWL, e.NewValue);
//}
//else if (diName == FakePLC.DIName.PINI_LIMIT_RD)
//{
// PUB.flag.set(EFlag.FLAG_LIMITLOWR, e.NewValue);
//}
//else
//{
// //처리하지 않음
//}
//PUB.flag.set(EFlag.FLAG_LIMITHIGH, (PUB.flag.get(EFlag.FLAG_LIMITHIGHL) && PUB.flag.get(EFlag.FLAG_LIMITHIGHR)));
//PUB.flag.set(EFlag.FLAG_LIMITLOW, (PUB.flag.get(EFlag.FLAG_LIMITLOWL) && PUB.flag.get(EFlag.FLAG_LIMITLOWR)));
VAR.BOOL[eVarBool.FLAG_LIMITHIGH] = false;// PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_LU) || PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_RU);
VAR.BOOL[eVarBool.FLAG_LIMITLOW] = false;//PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_LD) || PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_RD);
VAR.BOOL[eVarBool.OVERLOAD] = (VAR.BOOL[eVarBool.OVERLOADL] || VAR.BOOL[eVarBool.OVERLOADR]);
}
else
{
//출력포트값 변경
var doName = (arDev.FakePLC.DOName)e.ArrIDX;
PUB.logplc.Add($"출력({doName}) {(e.NewValue ? "O" : "X")}");
}
}
//string oldflagmessage = string.Empty;
string lastplclogmessage = "";
DateTime lastplclogtime = DateTime.Now;
string logmessage = "";
bool logerror = false;
}
}