choieigun 5b4a856a2e AutoRun Simulation 추가
- AutoRun은 수정 안함(들여쓰기 변경)
- Timer 기반 시뮬레이션
2026-02-21 02:34:10 +09:00

314 lines
17 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.Api.Devices;
using Aurora.Api.Manager;
using Aurora.View;
using Aurora.View.Alarm;
using Aurora.View.AutoBackup;
using AuroraCellTracker;
using AuroraCellTracker.Views;
using AuroraIO;
using AuroraIO.View;
using AuroraLaser;
using AuroraLaserScanner;
using AuroraLBAD;
using AuroraLBAD.Services;
using AuroraOCT;
using AuroraOCT.Views;
using AuroraPLC;
using AuroraPLC.Views;
using AuroraTriggerBoard.SJT;
using CoreUnit.Scanner.UserControl.ScannerCanvas;
using DB;
using DB.Recipe;
using GUI;
using ILSOS_CCW_H52A.Alarm;
using ILSOS_CCW_H52A.Device;
using ILSOS_CCW_H52A.Models;
using ILSOS_CCW_H52A.Recipes;
using ILSOS_CCW_H52A.Sequences;
using ILSOS_CCW_H52A.Views;
using System.Windows.Controls;
using System.Windows.Media;
using WeldingCommon;
using WeldingCommon.Alarm;
using WeldingCommon.Recipes;
using WeldingCommon.Sequences;
using WeldingCommon.Utils;
using WeldingCommon.Views;
using WeldingCommon.Vision.Factory;
using static WeldingCommon.Vision.Factory.VisionFactory;
namespace ILSOS_CCW_H52A
{
internal class EquipmentSetup : CommonEquipmentSetup, IEquipmentSetup
{
private SequenceBuilder _SeqAutoRunCCWH52A_Builder;
public override void BuildMainStatusView(MainStatusBuilder builder)
{
base.BuildMainStatusView(builder);
builder.AddDeviceActiveStatus(CommonDeviceIds.CellTracker)
.AddDeviceActiveStatus(CommonDeviceIds.Laser)
.AddDeviceActiveStatus(CommonDeviceIds.LBAD);
}
public override string GetEquipmentName()
{
return "ILSOS CCWH52A";
}
public void OnSetAlarm(int code, bool isHeavy)
{
base.OnSetAlarm(code, isHeavy);
if (isHeavy) {
AlarmManager_CCW_H52A.StopSequenceByAlarm(code);
}
}
public override async void OnStartUp()
{
await ActivateDevices();
base.OnStartUp();
AuroraEnv.SequenceEntry[SequenceIds.AlarmMonitoring].Start();
}
// For Selection LaserDevice
public void RegisterLaserDevice(IDeviceRegistry registry, ILaserDevice laserDeviceWithIO)
{
// All
registry.Register(CommonDeviceIds.Laser, () => new LaserDevice(CommonDeviceIds.Laser, laserDeviceWithIO), new LaserConfig(),
device => new UCLaserDevice() { DataContext = new UCLaserDeviceViewModel(AuroraEnv, CommonDeviceIds.Laser) });
// Case: Amplitude_Satsuma_Laser (Modbus)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceSatsumaDisplay(CommonDeviceIds.Laser), LaserSatsumaConfig.GetDefaultConfig());
// Case: Coherent_Arm_Laser (Socket)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceArm(CommonDeviceIds.Laser), LaserArmConfig.GetDefaultConfig());
// Case: Coherent_Compact_Laser (Serial)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceCompact(CommonDeviceIds.Laser), LaserCompactMiniConfig.GetDefaultConfig(),
// device => new UCCoherentCompactDevice() { DataContext = new UCCoherentCompactDeviceViewModel(AuroraEnv, CommonDeviceIds.Laser) });
// Case: Coherent_HyperRapid_Laser (Serial)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceHyperRapid(CommonDeviceIds.Laser, 0), LaserHyperRapidConfig.GetDefaultConfig(),
// device => new UCCoherentHyperRapidLaserDevice() { DataContext = new UCCoherentHyperRapidLaserDeviceViewModel(AuroraEnv, device, null, null) });
// Case: Coherent_RapidLX_Laser (Socket)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceRapidLX(CommonDeviceIds.Laser), LaserRapidLXConfig.GetDefaultConfig());
// Case: Ekspla_NL202_Laser (Serial)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceEkspla(CommonDeviceIds.Laser, eLaserEksplaDeviceType.NL202), LaserEksplaConfig.GetDefaultConfig(eLaserEksplaDeviceType.NL202));
// Case: IPG_YLPN_Laser (Serial)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceYLPN(CommonDeviceIds.Laser), LaserYLPNConfig.GetDefaultConfig());
// Case: IPG_YLS_Laser (Socket)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceYLS(CommonDeviceIds.Laser), LaserYLSConfig.GetDefaultConfig());
// Case: Trumpf_TruDisk_Laser (Socket)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceTruDisk(CommonDeviceIds.Laser), LaserTruDiskConfig.GetDefaultConfig());
// Case: Trumpf_TruPulseNano_Laser (Socket)
//registry.Register(CommonDeviceIds.Laser, () => new LaserDeviceTruPulseNano(CommonDeviceIds.Laser), LaserTruPulseNanoConfig.GetDefaultConfig(),
// device => new UCTruPulseNanoView() { DataContext = new UCTruPulseNanoViewModel(AuroraEnv, CommonDeviceIds.Laser) });
}
public void RegisterViewsLaserDevice(IViewManager manager)
{
// 아래는 진행한 장비에서의 View 화면 목록 임. 구현에 참고.
// 동일 장비가 아니므로, 그대로 사용하는 것은 권장하지 않음.
//var laserDevice = new MainMenu(CommonViewIds.LaserDevice, MenuIcon.GetMenuIcon(eMenuIcon.DEVICE), PermissionLevel.LEVEL3, false);
// Case: Amplitude_Satsuma_Laser (Modbus), For setting or monitoring
//laserDevice.AddSubMenu(CommonViewIds.LaserDevice, new UCLaserController(AuroraEnv, CommonDeviceIds.Laser, string.Empty));
// Case: Coherent_Compact_Laser (Serial), For calibration
//var laserIDList = new List<string>() { CommonDeviceIds.Laser };
//laserDevice.AddSubMenu(CommonViewIds.LaserDevice, new UCLaserCompactCalibration() { DataContext = new UCLaserCompactCalibrationViewModel(AuroraEnv, laserIDList, DeviceIds.PowerMeter) });
// Case: Coherent_HyperRapid_Laser (Serial), For monitoring
//var laser = AuroraEnv.DeviceManager[CommonDeviceIds.Laser] as LaserDeviceHyperRapid;
//laserDevice.AddSubMenu(CommonViewIds.LaserDevice, new UCCoherentHyperRapidResourceMonitoring() { DataContext = new UCCoherentHyperRapidResourceMonitoringViewModel(AuroraEnv, laser) });
//manager.RegisterMainMenu(laserDevice);
}
public override void RegisterDevices(IDeviceRegistry registry)
{
base.RegisterDevices(registry);
var isSimul = ApplicationExt.IsSimulation;
//var _plc = new PLCControllerACWH52A(CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent, PLCMMapFileType.CSV, AuroraEnv);
//registry.Register(CommonDeviceIds.PLCDevice,
// () => _plc, PLCMxComponentConfig.GetDefaultConfig(),
// device => new UCPLCDevice() { DataContext = new UCPLCDeviceViewModel(AuroraEnv, _plc) });
var _plc = new PLCControllerCCWH52A(CommonDeviceIds.PLCDevice, ePLCNetType.MelsecNet, PLCMMapFileType.CSV, AuroraEnv);
registry.Register(CommonDeviceIds.PLCDevice,
() => _plc, PLCMelsecNetConfig.GetDefaultConfig(),
device => new UCPLCDevice() { DataContext = new UCPLCDeviceViewModel(AuroraEnv, _plc) });
registry.Register(CommonDeviceIds.Scanner, () => new ScannerCCWH52A(CommonDeviceIds.Scanner), new ScannerConfig());
var ioController = new IOController_CCW_H52A(AuroraEnv, CommonDeviceIds.IODevice);
registry.Register(CommonDeviceIds.IODevice, () => ioController, new IOUnitConfig());
var laserDeviceWithIO = new LaserCoherentArm_IO(CommonDeviceIds.LaserIO, isSimul, ioController);
RegisterLaserDevice(registry, laserDeviceWithIO);
//registry.Register(CommonDeviceIds.OCT, () => new OCT(CommonDeviceIds.OCT), new OCTConfig(),
// device => new UCOCTDevice() { DataContext = new UCOCTDeviceViewModel(AuroraEnv, CommonDeviceIds.OCT) });
//registry.Register(CommonDeviceIds.LBAD, () => new LBAD(CommonDeviceIds.LBAD), new LBADConfig());
registry.Register(CommonDeviceIds.CellTracker, () => new CellTracker(CommonDeviceIds.CellTracker, eCellTrackerType.Daekhon), new CellTrackerConfig(),
device => new UCCellTrackerDevice() { DataContext = new UCCellTrackerDeviceViewModel(AuroraEnv, CommonDeviceIds.CellTracker) });
registry.Register(DeviceIds.TriggerBoard,
() => new AuroraTriggerBoard.Trigger(DeviceIds.TriggerBoard, AuroraTriggerBoard.Trigger.eTriggerType.SJT), AuroraTriggerBoard.TriggerConfig.GetDefaultConfig(),
device => new UCTriggerBoard() { DataContext = new UCTriggerBoardViewModel(AuroraEnv, DeviceIds.TriggerBoard) });
AlarmManager.SetPlc(AuroraEnv);
RegisterStreamServices(registry);
}
public void RegisterStreamServices(IDeviceRegistry registry)
{
//Stream 사용 시에만 등록하도록 하자
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
if (equipSetting.UseStream) {
//LBAD
registry.Register(CommonServiceIds.StreamLightLBADClient, () =>
new StreamLightClient(CommonStreamServiceNames.LBADClient, CommonStreamLightPort.LBADClientPort), new StreamLightClientConfig());
registry.Register(CommonServiceIds.StreamLightLBADSub, () =>
new StreamLightSub(CommonStreamServiceNames.LBADSub, CommonStreamLightPort.LBADSubPort), new StreamLightSubConfig());
}
}
public override void RegisterRecipes(RecipeRegister register)
{
//register(CommonRecipeIds.ScannerObjectTeaching, new ScannerObjectTeachingRecipe(),
// (id, item) => new UCScannerObjectTeaching(AuroraEnv,
// RecipeEventHelper.ExternalRecipeChangeRequest,
// RecipeEventHelper.ExternalRecipeChangeComplete));
register(CommonRecipeIds.ScannerObjectTeaching, new ScannerObjectTeachingRecipe(),
(id, item) => new UCScannerObjectTeaching2(AuroraEnv,
RecipeEventHelper.ExternalRecipeChangeRequest,
RecipeEventHelper.ExternalRecipeChangeComplete));
base.RegisterRecipes(register);
}
public override void RegisterModels(ModelRegister register)
{
register(CommonModelIds.EquipmentSpecificModel, new EquipmentSpecificModel_CCW_H52A(),
(id, item) => new UCModelEditor(new UCModelEditorViewModel(AuroraEnv), ModelExternalDelegate.ExternalCreateEquipmentSpecificEditor));
base.RegisterModels(register);
}
public override void RegisterSequences(SequenceRegister register)
{
// Common Sequences register
base.RegisterSequences(register);
//AlarmMonitoring.SetExternalDeviceActivatedCheckWithIO(AlarmHelper.ExternalDeviceActivatedCheckWithIO);
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
var seqAutoRunCCWH52A = new SeqAutoRunCCWH52A();
_SeqAutoRunCCWH52A_Builder = seqAutoRunCCWH52A.Builder();
register(SequenceIds.SeqAutoRunCCWH52A, _SeqAutoRunCCWH52A_Builder);
var alarmMonitoring = new Sequences.Monitoring.AlarmMonitoring();
register(SequenceIds.AlarmMonitoring, alarmMonitoring.Builder());
// SequenceManager.RegisterSequence(AuroraEnv, register);
}
public override void RegisterSettings(SettingRegister register)
{
base.RegisterSettings(register);
}
// Views는 장비별로 별도로 등록하자.
public override void RegisterViews(IViewManager manager)
{
base.RegisterViews(manager);
//manager.RegisterTitleComponent(new UCInformationPanelView() { DataContext = new UCInformationPanelViewModel(AuroraEnv, CommonDeviceIds.IODevice) });
_UCRecipe = new UCRecipe();
// Auto Run
var MainAutoRun = new MainMenu(CommonViewIds.AutoRun, MenuIcon.GetMenuIcon(eMenuIcon.HOME), PermissionLevel.LEVEL5, false);
MainAutoRun.AddSubMenu(CommonViewIds.AutoRun, new UCMainAutoRun(new UCMainAutoRunViewModel(AuroraEnv, _UCRecipe, SequenceIds.SeqAutoRunCCWH52A, RecipeEventHelper.ExternalRecipeUpdate)));
manager.RegisterMainMenu(MainAutoRun);
// Recipe
MainMenu recipe = new MainMenu(CommonViewIds.Recipe, MenuIcon.GetMenuIcon(eMenuIcon.RECIPE), PermissionLevel.LEVEL3, true);
recipe.AddSubMenu(CommonViewIds.Recipe, _UCRecipe);
recipe.AddSubMenu(CommonViewIds.ModelEditor, new UCModel());
manager.RegisterMainMenu(recipe);
// Manual
var manual = new MainMenu(CommonViewIds.Manual, (DrawingImage)IconDictionary["Maint"], PermissionLevel.LEVEL3, true);
manual.AddSubMenu(CommonViewIds.ScannerOperation, new UCManualScannerOperation(new UCManualScannerOperationViewModel(AuroraEnv, CommonDeviceIds.Scanner, true)));
//manual.AddSubMenu(CommonViewIds.OCT, new UCOCTManualMotion(AuroraEnv, CommonDeviceIds.OCT));
//manual.AddSubMenu(CommonViewIds.LBAD, new UCLBADDevice(AuroraEnv, CommonDeviceIds.LBAD, CommonDeviceIds.IODevice));
manual.AddSubMenu(CommonViewIds.RCCOperation, new UCManualRCCOperation(new UCManualRCCOperationViewModel(AuroraEnv)));
// Manual - For Test
//manual.AddSubMenu(CommonViewIds.TestDevice, new UCTestDevice(new UCTestDeviceViewModel(AuroraEnv)));
//manual.AddSubMenu(CommonViewIds.TestSequence, new UCTestSequence(new UCTestSequenceViewModel(AuroraEnv)));
manager.RegisterMainMenu(manual);
//Calibration
var calibration = new MainMenu(CommonViewIds.Calibration, MenuIcon.GetMenuIcon(eMenuIcon.SCANNER), PermissionLevel.LEVEL3, true);
calibration.AddSubMenu(CommonViewIds.Scanner, new UCScannerCalibration(new UCScannerCalibrationViewModel(AuroraEnv)));
//calibration.AddSubMenu(CommonViewIds.Power, new UCPowerCalibration(AuroraEnv)); // 불필요
//calibration.AddSubMenu(CommonViewIds.PowerCalProfile, new UCPowerProfile(AuroraEnv, CommonDeviceIds.Laser)); // 불필요
calibration.AddSubMenu(CommonViewIds.PixelResolution, new UCCameraPixelResolution(new UCCameraPixelResolutionViewModel(AuroraEnv)));
manager.RegisterMainMenu(calibration);
// Monitoring
var monitoring = new MainMenu(CommonViewIds.Monitoring, (DrawingImage)IconDictionary["Monitoring"], PermissionLevel.LEVEL3, true);
//manual.AddSubMenu(CommonViewIds.PLCInterfaceView, new UCPLCInterfaceView(AuroraEnv, CommonDeviceIds.PLCDevice));
monitoring.AddSubMenu(CommonViewIds.PLCBitMonitoring, new UCPLCBit() { DataContext = PLCStatic.GetInstanceBitVM(AuroraEnv, CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent) });
monitoring.AddSubMenu(CommonViewIds.PLCWordMonitoring, new UCPLCWord() { DataContext = PLCStatic.GetInstanceWordVM(AuroraEnv, CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent) });
monitoring.AddSubMenu(CommonViewIds.IOInterfaceView, new UCIOInterfaceView(AuroraEnv, CommonDeviceIds.IODevice));
//monitoring.AddSubMenu(CommonViewIds.OCT, new UCOCTManualMotion(AuroraEnv, CommonDeviceIds.OCT));
//monitoring.AddSubMenu(CommonViewIds.LBAD, new UCLBADDevice(AuroraEnv, CommonDeviceIds.LBAD, CommonDeviceIds.IODevice));
manager.RegisterMainMenu(monitoring);
// Device
var device = new MainMenu(CommonViewIds.Device, MenuIcon.GetMenuIcon(eMenuIcon.DEVICE), PermissionLevel.LEVEL3, false);
device.AddSubMenu(CommonViewIds.Device, new DeviceSettingView()); // "CommonViewIds.Setting" 는 EquipDef.cs 에서 정의한 ViewId
manager.RegisterMainMenu(device);
//Setting
var setting = new MainMenu(CommonViewIds.Setting, MenuIcon.GetMenuIcon(eMenuIcon.SETTING), PermissionLevel.LEVEL3, true);
setting.AddSubMenu(CommonViewIds.Setting, new EquipSettingView());
setting.AddSubMenu(CommonViewIds.AutoBackupView, new AutoBackupView2() { DataContext = new AutoBackupViewModel() });
manager.RegisterMainMenu(setting);
// Alarm
MainMenu alarm = new MainMenu(CommonViewIds.Alarm, (DrawingImage)IconDictionary["AlarmBell"], PermissionLevel.LEVEL5, true)
.AddSubMenu(CommonViewIds.History, new AlarmHistoryView())
.AddSubMenu(CommonViewIds.Description, new AlarmDescView());
manager.RegisterMainMenu(alarm);
// For Laser Device View
RegisterViewsLaserDevice(manager);
// Vision (미사용)
//VisionFactory.RegisterViews(manager);
}
}
}