363 lines
18 KiB
C#
363 lines
18 KiB
C#
|
|
using Aurora;
|
|
using Aurora.Api;
|
|
using Aurora.Api.Manager;
|
|
using Aurora.Api.Services;
|
|
using Aurora.View;
|
|
using Aurora.View.Alarm;
|
|
using Aurora.View.AutoBackup;
|
|
using AuroraCellTracker;
|
|
using AuroraCellTracker.Views;
|
|
using AuroraIO;
|
|
using AuroraIO.View;
|
|
using AuroraLaser;
|
|
using AuroraLaser.Trupulse;
|
|
using AuroraLaser.Trupulse.Views;
|
|
using AuroraLBAD;
|
|
using AuroraLBAD.Services;
|
|
using AuroraOCT;
|
|
using AuroraOCT.Views;
|
|
using AuroraPLC;
|
|
using AuroraPLC.Views;
|
|
using CoreUnit.Scanner.UserControl.ScannerCanvas;
|
|
using DB;
|
|
using DB.Recipe;
|
|
using GUI;
|
|
using ILSOS_PrismaticScanner.Alarm;
|
|
using ILSOS_PrismaticScanner.Device;
|
|
using ILSOS_PrismaticScanner.Device.IO;
|
|
using ILSOS_PrismaticScanner.Models;
|
|
using ILSOS_PrismaticScanner.Recipes;
|
|
using ILSOS_PrismaticScanner.Sequences;
|
|
using ILSOS_PrismaticScanner.Settings;
|
|
using ILSOS_PrismaticScanner.Views;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Threading;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Interop;
|
|
using WeldingCommon;
|
|
using WeldingCommon.Alarm;
|
|
using WeldingCommon.Recipes;
|
|
using WeldingCommon.Sequences;
|
|
using WeldingCommon.Settings;
|
|
using WeldingCommon.Utils;
|
|
using WeldingCommon.Views;
|
|
using WeldingCommon.Views.Manual;
|
|
using WeldingCommon.Views.Recipes.History;
|
|
using WeldingCommon.Vision.Factory;
|
|
using static WeldingCommon.Vision.Factory.VisionFactory;
|
|
|
|
namespace ILSOS_PrismaticScanner
|
|
{
|
|
internal class EquipmentSetup : CommonEquipmentSetup, IEquipmentSetup
|
|
{
|
|
private SequenceBuilder _SeqAutoRunPrismaticScanner_Builder;
|
|
private SequenceBuilder _SeqAutoRunComponentWeld_Builder;
|
|
private SequenceBuilder _SeqAlarmMonitor_Builder;
|
|
|
|
|
|
public override void BuildMainStatusView(MainStatusBuilder builder)
|
|
{
|
|
base.BuildMainStatusView(builder);
|
|
|
|
builder.AddDeviceActiveStatus(CommonDeviceIds.CellTracker)
|
|
.AddDeviceActiveStatus(CommonDeviceIds.OCT);
|
|
}
|
|
|
|
public override string GetEquipmentName()
|
|
{
|
|
return "ILSOS PrismaticScanner";
|
|
}
|
|
|
|
public override void OnResetAlarm(List<int> codeList)
|
|
{
|
|
base.OnResetAlarm(codeList);
|
|
|
|
// Laser Reset 추가
|
|
|
|
var laser = AuroraEnv.DeviceManager[DeviceIds.Laser] as Laser;
|
|
var core = laser.getCore() as TruPulse;
|
|
if(core?.AlarmReasons.Count > 0) {
|
|
core?.AlarmReset();
|
|
}
|
|
}
|
|
|
|
public override void OnSetAlarm(int code, bool isHeavy)
|
|
{
|
|
base.OnSetAlarm(code, isHeavy);
|
|
|
|
if (isHeavy) {
|
|
AlarmManager_PrismaticScanner.StopSequenceByAlarm(code);
|
|
}
|
|
}
|
|
|
|
public override async void OnStartUp()
|
|
{
|
|
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
|
|
if (equipSetting.AutomaticallyConnectDevices) {
|
|
await ActivateDevices();
|
|
}
|
|
|
|
AuroraEx.RegisterRmsHandler<RMSHandlerForScanner>();
|
|
AuroraEnv.RecipeManager.RmsHandler().RegistryDeviceHandler(AuroraEnv);
|
|
AuroraEnv.RecipeManager.RmsHandler().Start();
|
|
|
|
// [Singleton Instance] Recipe Change History
|
|
AuroraEnv.RecipeManager.RchHandler().RegistryDeviceHandler(AuroraEnv);
|
|
|
|
//AlarmMonitroing Seq Start
|
|
AuroraEnv.SequenceEntry[SequenceIds.SeqAlarmMonitor].Start();
|
|
AuroraEnv.SequenceEntry[SequenceIds.SeqStatusMonitor].Start();
|
|
AuroraEnv.SequenceEntry[CommonSequenceIds.PLCMonitor].Start();
|
|
|
|
|
|
base.OnStartUp();
|
|
}
|
|
public override void OnShutDown()
|
|
{
|
|
var io = AuroraEnv.DeviceManager[CommonDeviceIds.IODevice] as PAIX_PrismaticCleaner;
|
|
io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.PilotLaserEnable, false);
|
|
io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.LaserEnable, false);
|
|
|
|
// 모니터링 시퀀스 먼저 종료
|
|
AuroraEnv.SequenceEntry[SequenceIds.SeqAlarmMonitor].Stop();
|
|
AuroraEnv.SequenceEntry[SequenceIds.SeqStatusMonitor].Stop();
|
|
AuroraEnv.SequenceEntry[CommonSequenceIds.PLCMonitor].Stop();
|
|
Thread.Sleep(200);
|
|
|
|
base.OnShutDown();
|
|
}
|
|
|
|
public override void OnPostDeviceActivated(string dev)
|
|
{
|
|
base.OnPostDeviceActivated(dev);
|
|
|
|
switch (dev) {
|
|
case DeviceIds.IODevice:
|
|
var io = AuroraEnv.DeviceManager[dev] as PAIX_PrismaticCleaner;
|
|
io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.AirKnife, true);
|
|
io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.PilotLaserEnable, false);
|
|
io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.LaserEnable, false);
|
|
break;
|
|
case DeviceIds.PLCDevice:
|
|
var plc = AuroraEnv.DeviceManager[dev] as PLCControllerPrismaticScanner;
|
|
plc.WriteBit(PLCControllerPrismaticScanner.eBitOutput.PC_AUTO_STATUS, false);
|
|
break;
|
|
case DeviceIds.Laser:
|
|
var laser = AuroraEnv.DeviceManager[dev] as Laser;
|
|
var core = laser.getCore() as TruPulse;
|
|
var truPulseConf = laser.Config as TruPulseConfig;
|
|
core.SetInterfaceMode(4);
|
|
Thread.Sleep(100);
|
|
core.SetPulseBurstLength(truPulseConf.BurstLength);
|
|
Thread.Sleep(100);
|
|
core.SetAnalogueSetPoint(1, (ushort)truPulseConf.Simmer);
|
|
|
|
|
|
break;
|
|
}
|
|
}
|
|
public override void RegisterDevices(IDeviceRegistry registry)
|
|
{
|
|
base.RegisterDevices(registry);
|
|
|
|
var isSimul = ApplicationExt.IsSimulation;
|
|
|
|
//registry.Register(CommonDeviceIds.OCT, () => new OCT(CommonDeviceIds.OCT, isSimul), new OCTConfig(),
|
|
// device => new UCOCTDevice() { DataContext = new UCOCTDeviceViewModel(AuroraEnv, CommonDeviceIds.OCT) });
|
|
//registry.Register(CommonDeviceIds.LBAD, () => new LBAD(CommonDeviceIds.LBAD, isSimul), new LBADConfig());
|
|
//registry.Register(CommonDeviceIds.CellTracker, () => new CellTracker(CommonDeviceIds.CellTracker, eCellTrackerType.Daekhon, isSimul), new CellTrackerConfig(),
|
|
// device => new UCCellTrackerDevice() { DataContext = new UCCellTrackerDeviceViewModel(AuroraEnv, CommonDeviceIds.CellTracker) });
|
|
|
|
var io = new PAIX_PrismaticCleaner(AuroraEnv, CommonDeviceIds.IODevice, isSimul);
|
|
registry.Register(CommonDeviceIds.IODevice, () => io, new IOUnitConfig());
|
|
|
|
var laser = new Laser(CommonDeviceIds.Laser, isSimul);
|
|
laser.ExtLaserEnable = (on) => io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.LaserEnable, on);
|
|
laser.ExtLaserDisable = (on) => io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.LaserDisable, on);
|
|
laser.ExtPilotOnOff = (on) => io.WriteDoBit(PAIX_PrismaticCleaner.ePrismaticDOAddress.PilotLaserEnable, on);
|
|
registry.Register(CommonDeviceIds.Laser, () => laser, new TruPulseConfig(), device => new UCTruPulseManual(AuroraEnv, CommonDeviceIds.Laser));
|
|
|
|
var _plc = new PLCControllerPrismaticScanner(CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent, ApplicationExt.IsSimulation, PLCMMapFileType.CSV, AuroraEnv);
|
|
registry.Register(CommonDeviceIds.PLCDevice,
|
|
() => _plc, PLCMxComponentConfig.GetDefaultConfig(),
|
|
device => new UCPLCDevice() { DataContext = new UCPLCDeviceViewModel(AuroraEnv, _plc) });
|
|
|
|
AlarmManager.Init(AuroraEnv);
|
|
|
|
}
|
|
|
|
public override void RegisterRecipes(RecipeRegister register)
|
|
{
|
|
register(CommonRecipeIds.ScannerObjectTeaching, new ScannerObjectTeachingRecipe(),
|
|
(id, item) => new UCScannerObjectTeaching(AuroraEnv));
|
|
|
|
base.RegisterRecipes(register);
|
|
}
|
|
|
|
public override void RegisterModels(ModelRegister register)
|
|
{
|
|
register(CommonModelIds.EquipmentSpecificModel, new EquipmentSpecificModel_PrismaticScanner(),
|
|
(id, item) => new UCModelEditor(new UCModelEditorViewModel(AuroraEnv), ModelExternalDelegate.ExternalCreateEquipmentSpecificEditor));
|
|
|
|
base.RegisterModels(register);
|
|
}
|
|
|
|
public override void RegisterSequences(SequenceRegister register)
|
|
{
|
|
// Common Sequences register
|
|
SequenceManager.RegisterSequence(AuroraEnv, register);
|
|
base.RegisterSequences(register);
|
|
|
|
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
|
|
register(SequenceIds.SeqStreamTest, SeqStreamTest.Builder());
|
|
|
|
// Event Q Test 추가
|
|
var seqEventQTest = new SeqEventQTest();
|
|
register(SequenceIds.SeqEventQTest, seqEventQTest.Builder());
|
|
|
|
var seqAutoRunPrismaticScanner = new SeqAutoRunPrismaticScanner();
|
|
var seqAutoRunComponentWeld = new SeqAutoRunComponentWeld();
|
|
var seqAlarmMonitor = new SeqAlarmMonitor();
|
|
|
|
_SeqAutoRunPrismaticScanner_Builder = seqAutoRunPrismaticScanner.Builder();
|
|
_SeqAutoRunComponentWeld_Builder = seqAutoRunComponentWeld.Builder();
|
|
_SeqAlarmMonitor_Builder = seqAlarmMonitor.Builder();
|
|
|
|
register(SequenceIds.SeqAutoRun, _SeqAutoRunPrismaticScanner_Builder);
|
|
register(SequenceIds.SeqAutoRunComponentWeld, _SeqAutoRunComponentWeld_Builder);
|
|
register(SequenceIds.SeqAlarmMonitor, _SeqAlarmMonitor_Builder);
|
|
register(SequenceIds.SeqStatusMonitor, SeqStatusMonitor.Builder());
|
|
|
|
// SequenceManager.RegisterSequence(AuroraEnv, register);
|
|
}
|
|
|
|
public override void RegisterSettings(SettingRegister register) {
|
|
base.RegisterSettings(register);
|
|
|
|
register(CommonSettingIds.UploadDatas, new SettingUploadDataListForScanner());
|
|
}
|
|
|
|
public override void RegisterServices(IServiceRegistry register)
|
|
{
|
|
//Stream 사용 시에만 등록하도록 하자
|
|
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
|
|
|
|
if (equipSetting.UseStream) {
|
|
//LBAD
|
|
register.Register(CommonServiceIds.StreamLBADClient, () => new StreamLBADClient(CommonStreamServiceNames.LBADRPC), new StreamClientConfig());
|
|
|
|
#region StreamTest
|
|
//PubSub
|
|
register.Register(CommonServiceIds.StreamPubTest, () => new StreamPub(CommonStreamServiceNames.PubSubTest), new StreamPubConfig());
|
|
register.Register(CommonServiceIds.StreamSubTest, () => new StreamSub(CommonStreamServiceNames.PubSubTest), new StreamSubConfig());
|
|
|
|
//RPC
|
|
register.Register(CommonServiceIds.StreamServerTest, () => new StreamServer(CommonStreamServiceNames.LBADRPC), new StreamServerConfig());
|
|
register.Register(CommonServiceIds.StreamClientTest, () => new StreamClient(CommonStreamServiceNames.LBADRPC), new StreamClientConfig());
|
|
|
|
//MessageBroadcasting
|
|
register.Register(CommonServiceIds.StreamBroadcastPub, () => new StreamBroadcastPub(), new StreamBroadcastPubConfig());
|
|
register.Register(CommonServiceIds.StreamBroadcastSub, () => new StreamBroadcastSub(), new StreamBroadcastSubConfig());
|
|
#endregion
|
|
}
|
|
}
|
|
|
|
// Views는 장비별로 별도로 등록하자.
|
|
public override void RegisterViews(IViewManager manager)
|
|
{
|
|
base.RegisterViews(manager);
|
|
|
|
// Auto Run
|
|
var MainAutoRun = new MainMenu(CommonViewIds.AutoRun, MenuIcon.GetMenuIcon(eMenuIcon.HOME), PermissionLevel.NONE, false);
|
|
MainAutoRun.AddSubMenu(CommonViewIds.AutoRun, new UCMainAutoRun(new UCMainAutoRunViewModel(AuroraEnv, SequenceIds.SeqAutoRun)));
|
|
manager.RegisterMainMenu(MainAutoRun);
|
|
|
|
// Recipe
|
|
MainMenu recipe = new MainMenu(CommonViewIds.Recipe, MenuIcon.GetMenuIcon(eMenuIcon.RECIPE), PermissionLevel.NONE, true);
|
|
recipe.AddSubMenu(CommonViewIds.Recipe, new UCRecipe());
|
|
recipe.AddSubMenu(CommonViewIds.RecipeChangeHistory, new UCRecipeChangeHistory() { DataContext = new UCRecipeChangeHistoryViewModel(AuroraEnv) });
|
|
recipe.AddSubMenu(CommonViewIds.ModelEditor, new UCModel());
|
|
manager.RegisterMainMenu(recipe);
|
|
|
|
AuroraEnv.EventObservable.AsObservable(CommonEventIds.EVENT_EQUIPMENT_STATUS_CHANGE)
|
|
.Select(msg => (eEqpStatus)msg.Param)
|
|
.ObserveOnDispatcher()
|
|
.Subscribe(status => {
|
|
if (status == eEqpStatus.Auto) {
|
|
AuroraEnv.ViewManager.ChangeMenu(CommonViewIds.AutoRun);
|
|
AuroraEnv.ViewManager.MainMenuEnable(false, CommonViewIds.Recipe);
|
|
RecipeHelper.OnActiveReloaded();
|
|
} else{
|
|
AuroraEnv.ViewManager.MainMenuAllEnable(true);
|
|
//RecipeHelper.RollbackRecipe();
|
|
}
|
|
|
|
//recipe.SubViews.Where(view => view.SubName == CommonViewIds.Recipe).First().View.IsEnabled = !isAuto;
|
|
});
|
|
|
|
// Manual
|
|
//var manual = new MainMenu(CommonViewIds.Manual, MenuIcon.GetMenuIcon(eMenuIcon.DEVICE), PermissionLevel.LEVEL4, true); // Level4 가 맞으나, 개발때는 None 으로 뒀다가 완료되면 풀자.
|
|
var manual = new MainMenu(CommonViewIds.Manual, MenuIcon.GetMenuIcon(eMenuIcon.CAMERA), PermissionLevel.NONE, true);
|
|
manual.AddSubMenu(CommonViewIds.ScannerOperation, new UCManualScannerOperation(new UCManualScannerOperationViewModel(AuroraEnv, CommonDeviceIds.Scanner, false)));
|
|
//manual.AddSubMenu(CommonViewIds.OCT, new UCOCTManualMotion(AuroraEnv, CommonDeviceIds.OCT));
|
|
//manual.AddSubMenu(CommonViewIds.LBAD, new UCLBADDevice(AuroraEnv, CommonDeviceIds.LBAD, CommonDeviceIds.IODevice));
|
|
//manual.AddSubMenu(CommonViewIds.ConvEdgeObject, new UCConvEdgeObject(AuroraEnv));
|
|
manual.AddSubMenu(CommonViewIds.ModelFinder, new UCManualModelFinder(new UCManualModelFinderViewModel(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, MenuIcon.GetMenuIcon(eMenuIcon.MONITORING), PermissionLevel.NONE, true);
|
|
//manual.AddSubMenu(CommonViewIds.PLCInterfaceView, new UCPLCInterfaceView(AuroraEnv, CommonDeviceIds.PLCDevice));
|
|
monitoring.AddSubMenu(CommonViewIds.PLCBitMonitoring, new UCPLCBit() { DataContext = PLCStatic.GetInstanceBitVM(AuroraEnv, CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent, PLCBase.ePLCDevice.M) });
|
|
monitoring.AddSubMenu(CommonViewIds.PLCWordMonitoring, new UCPLCWord() { DataContext = PLCStatic.GetInstanceWordVM(AuroraEnv, CommonDeviceIds.PLCDevice, ePLCNetType.MXComponent, PLCBase.ePLCDevice.D) });
|
|
monitoring.AddSubMenu(CommonViewIds.IOInterfaceView, new UCIOInterfaceView(AuroraEnv, CommonDeviceIds.IODevice));
|
|
manager.RegisterMainMenu(monitoring);
|
|
|
|
// Device
|
|
var device = new MainMenu(CommonViewIds.Device, MenuIcon.GetMenuIcon(eMenuIcon.GEAR), 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.LEVEL1, true);
|
|
setting.AddSubMenu(CommonViewIds.Setting, new EquipSettingView());
|
|
setting.AddSubMenu(CommonViewIds.LogSetting, new LogSettingView());
|
|
setting.AddSubMenu(CommonViewIds.AutoBackupView, new AutoBackupView2() { DataContext = new AutoBackupViewModel() });
|
|
manager.RegisterMainMenu(setting);
|
|
|
|
// Alarm
|
|
MainMenu alarm = new MainMenu(CommonViewIds.Alarm, MenuIcon.GetMenuIcon(eMenuIcon.BARCODE), PermissionLevel.NONE, true)
|
|
.AddSubMenu(CommonViewIds.History, new AlarmHistoryView())
|
|
.AddSubMenu(CommonViewIds.Description, new AlarmDescView());
|
|
manager.RegisterMainMenu(alarm);
|
|
|
|
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
|
|
if (equipSetting.UseStream) {
|
|
MainMenu service = new MainMenu(CommonViewIds.StreamDevice, MenuIcon.GetMenuIcon(eMenuIcon.DEVICE))
|
|
.AddSubMenu(CommonViewIds.StreamDevice, new UCServiceSettingView());
|
|
manager.RegisterMainMenu(service);
|
|
}
|
|
|
|
// Vision (미사용)
|
|
//VisionFactory.RegisterViews(manager);
|
|
}
|
|
}
|
|
}
|