RnD_Welder 69679864ef feat: 260415 장비 활성화 추가 및 알람매니저에 AutoRunACS 추가
-> 사용안하는 Device의 AxisY1,Y2 주석처리
-> 모터 동작에 영향 x , 스캐너 갈보모터 영향 X 확인
2026-04-15 10:49:19 +09:00

334 lines
14 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.Api.Manager;
using Aurora.View;
using AuroraChiller;
using AuroraIO;
using AuroraLaser;
using AuroraLaserScanner;
using AuroraLight;
using AuroraLight.View;
using AuroraPLC;
using DB;
using Hermes;
using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using VisionCommon;
using WeldingCommon.Alarm;
using WeldingCommon.Recipes;
using WeldingCommon.Sequences;
using WeldingCommon.Settings;
using WeldingCommon.Utils;
using WeldingCommon.Views;
using WeldingCommon.Views.DoorInterlock;
using WeldingCommon.Vision.Factory;
// 추가 - Aurora.Api.Device 명시
using AuroraDevice = Aurora.Api.Device;
namespace WeldingCommon
{
public abstract class CommonEquipmentSetup
{
protected static Logger Log = new Logger("EquipmentSetup");
protected UCRecipe _UCRecipe;
public IAuroraEnvironment AuroraEnv { get; set; }
public virtual void BuildMainStatusView(MainStatusBuilder builder)
{
builder
.AddLanguage("en-US", "ko-KR")
.AddDeviceActiveStatus(CommonDeviceIds.Scanner)
//.AddDeviceActiveStatus(CommonDeviceIds.Laser)
//.AddDeviceActiveStatus(CommonDeviceIds.IODevice)
//.AddDeviceActiveStatus(CommonDeviceIds.PLCDevice)
.AddDeviceActiveStatus(CommonDeviceIds.Light)
.AddDeviceActiveStatus(CommonDeviceIds.ACS)
.AddDeviceActiveStatus(CommonDeviceIds.AxisX2)
.AddDeviceActiveStatus(CommonDeviceIds.AxisZ);
//.AddDeviceActiveStatus(CommonDeviceIds.Light)
//.AddDeviceActiveStatus(CommonDeviceIds.SmcChiller);
}
public bool CanShutDown()
{
return true;
}
public virtual string GetEquipmentName()
{
return "ILSOS";
}
public virtual void OnResetAlarm(List<int> codeList)
{
}
public virtual void OnSetAlarm(int code, bool isHeavy)
{
//if (isHeavy) {
// AlarmManager.StopSequenceByAlarm(code);
//}
}
public virtual void OnShutDown()
{
var devices = AuroraEnv.DeviceManager.GetDevices();
foreach (var device in devices) {
if (device.Deactivate() != E1.OK) {
Log.E($"{device.DeviceId} connect fail.");
}
}
}
private void TestSystemEvents()
{
Observable.Merge(
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_EQUIPMENT_LOADED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MENU_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_ALARM_SET_ALARM),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_ALARM_RESET_ALARM),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_ALARM_RESET_ALL_ALARM),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_ALARM_DESCRIPTIONS_RELOADED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_PERMISSION_CHANGED),
//AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MAIN_PROGRESS),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_SCREEN_INTERLOCK),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MAIN_LOCK),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MAIN_LAMP),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MENU_CHANGE),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MAIN_MENU_ENABLE),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_WINDOW_MODE),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_WINDOW_FULL_SCREEN),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MANUAL_BACKUP_START),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_TOAST_MESSAGE),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_TOAST_MESSAGE_CLEAR),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MAIN_ALARM),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_CHANGE_LANGUAGE),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_CORE_ERROR_OCCURED),
//AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_RELOADED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_EQUIPMENT_LOAD_FAILED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_SHUTDOWN),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_SETTING_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_ACTIVATED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_DEACTIVATED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_IS_COMM_ERROR),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ACTIVATED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ENTRY_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_RELOADED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_RECIPE_ITEM_CHANGED),
//AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_ACTIVATED_RECIPE_MODEL_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_ACTIVATED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_RELOADED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_ITEM_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_NAME_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_MODEL_ENTRY_CHAGNED),
//AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ENTRY_CHAGNED),
//AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_INGREDIENT_ITEM_CHAGNED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_LANGUAGE_CHANGED),
AuroraEnv.EventObservable.AsObservable(AuroraSysEvent.SYS_REQ_MODEL_EDITING_CHANGE)
).ObserveOnDispatcher()
.Subscribe(x => {
Log.V($"{x.Subject} :: Param[{x.Param?.ToString()}] From[{x.From}]");
});
}
public async Task ActivateDevices()
{
await System.Threading.Tasks.Task.Run(() => {
try {
var devices = AuroraEnv.DeviceManager.GetDevices();
foreach (Aurora.Api.Device device in devices) {
if (device.IsAutoActivation()) {
if (device.Activate() != E1.OK) {
Log.E($"{device.DeviceId} connect fail.");
if (device.DeviceId.Equals("Laser")) {
//Laser 연결 실패시 알람 발생
//AuroraEnv.AlarmService.SetAlarm(3);
}
}
OnPostDeviceActivated(device.DeviceId);
}
}
} catch (Exception e) {
Log.E($"An error occurred OnStartUp : {e.Message}");
}
});
}
public virtual async void OnStartUp()
{
int value = 9999;
Log.I($"{ApplicationExt.CurLang}");
Log.I($"{ApplicationExt.IsSimulation}");
Log.I($"value = {value}");
Status.AuroraEnv = AuroraEnv;
AuroraEnv?.EventPublisher?.Publish(new EventMessage("", EquipEvent.BOOT_COMPLETED));
Status.BOOT_COMPLETED = true;
// Test, 발생 Event 확인용
TestSystemEvents();
}
public virtual void OnPostDeviceActivated(string dev)
{
switch (dev) {
case CommonDeviceIds.Laser:
// to do
break;
}
}
//private void ConnectDevices()
//{
// var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
// if (!equipSetting.AutomaticallyConnectDevices) {
// return;
// }
// var devMngr = AuroraEnv.DeviceManager;
// foreach (var device in devMngr.GetDevices()) {
// if (device.IsAutoActivation()) {
// device.Activate();
// OnPostDeviceActivated(device.DeviceId);
// }
// }
//}
//private void StartProcess()
//{
// UpdateSequenceState();
//}
//private void UpdateSequenceState()
//{
// var seqSetting = AuroraEnv.SettingEntry[CommonSettingIds.Sequence] as SequenceSetting;
// SequenceManager.Instance.UpdateSequenceStatus(seqSetting, AuroraEnv.SequenceEntry);
//}
public virtual void RegisterDevices(IDeviceRegistry registry)
{
var equipSetting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
var isSimul = ApplicationExt.IsSimulation;
var setting = AuroraEnv.SettingEntry[AuroraSettings.Equipment] as EquipmentInfo;
var systemParameterILSOS = AuroraEnv.SettingEntry[CommonSettingIds.SystemParameter] as SystemParameter;
var _SequenceSetting = AuroraEnv.SettingEntry[CommonSettingIds.Sequence] as SequenceSetting;
registry.Register(CommonDeviceIds.Scanner, () => new Scanner(CommonDeviceIds.Scanner, isSimul), new ScannerConfig());
//registry.Register(CommonDeviceIds.SmcChiller, () => new SmcChiller(CommonDeviceIds.SmcChiller, 0, isSimul), new SmcChiller.Config(),
// device => new UCSMCChillerDevice() { DataContext = new UCSMCChillerDeviceViewModel(AuroraEnv, CommonDeviceIds.SmcChiller) });
VisionFactory.RegisterDevices(registry);
//registry.Register(CommonDeviceIds.Light, () => new LightDevice(CommonDeviceIds.Light, eLight.ERI, isSimul), new LightConfig(),
// device => new UCLight() { DataContext = new UCLightViewModel(AuroraEnv, CommonDeviceIds.Light, _SequenceSetting.LightValue) });
// TODO: SystemParameterManager.Initialize 할 위치 찾자. 여기는 조금....
SystemParameterManager.Initialize(AuroraEnv);
}
public virtual void RegisterModels(ModelRegister register)
{
VisionFactory.RegisterModel(register);
// Simulation Mode, Equipment Name 등 기본 세팅 load
Status.Init(AuroraEnv);
}
public virtual void RegisterRecipes(RecipeRegister register)
{
//LASA 초기화 작업
GUI.Program.dao = new Dao();
GUI.Program.dao.Initialize();
//register(RecipeIds.Laser, new LaserRecipe());
//register(CommonRecipeIds.LaserScannerTeaching, new LaserScannerTeachingRecipe(),
// (recipe, item) => new LaserScannerTeaching() {
// DataContext = new LaserScannerTeachingViewModel(AuroraEnv, new LaserScannerTeachingToolboxViewModel(AuroraEnv))
// });
// 26.04.13 Gun에 있던 것 Common으로 옮기기
register(CommonRecipeIds.StageAMainRecipe, new MainRecipe(),
(recipe, item) => new UCMainRecipe()
{
DataContext = new UCMainRecipeViewModel(AuroraEnv, recipe, item, CommonRecipeIds.StageAMainRecipe)
});
VisionFactory.RegisterRecipe(register);
}
public virtual void RegisterSequences(SequenceRegister register)
{
#region Gun 시퀸스
#endregion
VisionFactory.RegisterSequences(AuroraEnv, register);
}
public virtual void RegisterServices(IServiceRegistry register)
{
}
public virtual void RegisterSettings(SettingRegister register)
{
register(CommonSettingIds.SystemParameter, new SystemParameter());
register(CommonSettingIds.LaserPowerCalParam, new LaserPowerCalParam());
register(CommonSettingIds.Sequence, new SequenceSetting());
register(CommonSettingIds.DoorInterlock, new DoorInterlockSetting());
register(CommonSettingIds.RmsDatas, new SettingRmsDataList());
//register(CommonSettingIds.UploadDatas, new SettingUploadDataList());
#region 26.04.13 Gun 세팅
var Setting = AuroraEnv.SettingEntry[CommonSettingIds.LaserPowerCalParam] as LaserPowerCalParam;
Setting.Initialize(Setting.PowerCalibrationCenterBeamCSVFile, Setting.PowerCalibrationRingBeamCSVFile);
register(CommonSettingIds.TeachingPos, new WeldingCommon.Settings.TeachingPositionSetting());
register(CommonSettingIds.ManualLaser, new WeldingCommon.Settings.ManualLaserSetting());
#endregion
VisionFactory.RegisterSetting(AuroraEnv, register);
}
public virtual void RegisterViews(IViewManager manager)
{
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary {
Source = new Uri("pack://application:,,,/AuroraUIComponent;component/Style/Generic.xaml")
});
}
public void RegisterIngredients(IngredientsRegister register)
{
VisionFactory.RegisterIngredient(register);
}
public void RegisterLanguageResource(LangResourceRegister register)
{
VisionFactory.RegisterLanguageResource(register);
}
public void RegisterShortcuts(ShortcutRegister register)
{
register(CommonShortcutIds.StartMain, "Start Main Desc", ModifierKeys.Alt, Key.S);
register(CommonShortcutIds.ScreenCapture, "Screen Capture", ModifierKeys.Alt, Key.C);
}
}
}