2026-06-05 13:44:39 +09:00

103 lines
3.8 KiB
C#

using Aurora;
using Aurora.View;
using ILSOS_PrismaticGun.Device;
using System;
using System.Collections.Generic;
using System.Windows;
namespace ILSOS_PrismaticGun.Process
{
// UI에서도 쓸 곳이 많을 것 같긴한데.. 일단 추가
public enum eStage
{
A,
B,
}
public enum ePalletState
{
NotEntered,
// 실물 CELL 있음
LoadingComp,
Welding, // 저장이 필요한 상태는 아니고, 그냥 UI용으로 사용하면 될듯함
WeldingComp,
// 실물 CELL 없음
UnloadingComp,
}
public class PalletInfo : NotifyPropertyChangedBase ,ICloneable
{
public WeldingDataForPrismaticGun weldingData { get => _weldingData; set => SetProperty(ref _weldingData, value); }
private WeldingDataForPrismaticGun _weldingData = new WeldingDataForPrismaticGun();
public eStage WeldingStage { get => _WeldingStage; set => SetProperty(ref _WeldingStage, value); }
private eStage _WeldingStage;
public ePalletState palletState { get => _palletState; set => SetProperty(ref _palletState, value); }
private ePalletState _palletState;
public event EventHandler<ePalletState> PalletStateChanged;
#region PLC Cell Data
#endregion
private PLCControllerPrismaticGun _plc;
public PalletInfo()
{
_plc = Application.Current.AuroraEnv().DeviceManager[DeviceIds.PLCDevice] as PLCControllerPrismaticGun;
WeldingStage = eStage.A;
Clear();
}
public void SetState(ePalletState palletState)
{
if (this.palletState == palletState)
return;
this.palletState = palletState;
PalletStateChanged?.Invoke(this, palletState);
}
public bool PalletInfoLoadToPLC()
{
weldingData.CellId = _plc.CellId(WeldingStage);
weldingData.LotId = _plc.LotId();
weldingData.IsCellExist = _plc.ExistCell(WeldingStage);
weldingData.IsRework = _plc.ReworkCell(WeldingStage);
weldingData.IsAlreadyWelding = _plc.AlreadyWeldingCell(WeldingStage);
weldingData.CellNo = _plc.CellNo(WeldingStage);
weldingData.NgJudge = _plc.CellJudgeNG(WeldingStage);
weldingData.LaserWorkComplete = weldingData.IsCellExist;
_plc.WriteLaserWorkComplete(WeldingStage, weldingData.LaserWorkComplete);
return true;
}
public bool PalletInfoSendToPLC()
{
_plc.WriteCellJudgeNG(WeldingStage, weldingData.NgJudge);
_plc.WriteCellNo(WeldingStage, weldingData.CellNo);
weldingData.LaserWorkComplete = false;
_plc.WriteLaserWorkComplete(WeldingStage, weldingData.LaserWorkComplete);
_plc.UploadReportDatas(weldingData.UploadProcessDatas);
_plc.WriteCellId(WeldingStage, weldingData.CellId);
_plc.WriteLotId(weldingData.LotId);
return true;
}
public void Clear()
{
palletState = ePalletState.NotEntered;
weldingData.Clear();
}
public object Clone()
{
var palletInfo = new PalletInfo();
palletInfo.palletState = palletState;
palletInfo.weldingData = weldingData.Clone() as WeldingDataForPrismaticGun;
palletInfo.WeldingStage = WeldingStage;
return palletInfo;
}
public override string ToString()
{
return $"Pallet State({Enum.GetName(typeof(ePalletState), palletState)}) >> Lot Id({weldingData.LotId}) Cell Id({weldingData.CellId}) >> Cell Exist({weldingData.IsCellExist}) >> NG({weldingData.NgJudge > 0}) : {weldingData.NgReason} ## ";
}
}
}