| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using GSG.NET;
- using GSG.NET.ObjectBase;
- using GSG.NET.Quartz;
- using OHV.Common.Events;
- using OHV.Common.Model;
- using OHV.Common.Shareds;
- using OHV.SqliteDAL;
- using Prism.Events;
- using Prism.Ioc;
- using Prism.Modularity;
- using VehicleControlSystem.ControlLayer;
- using VehicleControlSystem.ControlLayer.IO;
- using VehicleControlSystem.Managers;
- namespace VehicleControlSystem
- {
- [Module(ModuleName = "VCSystem")]
- public class VCSystem : IModule, IDisposable
- {
- Scheduler scheduler = null;
- IEventAggregator eventAggregator = null;
- IIO IO = null;
- public AutoManager autoManager = null;
- HostManager hostManager = null;
- Vehicle vehicle = null;
- SqliteManager sql = null;
- public VCSystem(IEventAggregator ea, SqliteManager sql)
- {
- this.sql = sql;
- this.eventAggregator = ea;
- this.eventAggregator.GetEvent<ApplicationExitEvent>().Subscribe((o) => Dispose(), true);
- this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Unsubscribe(ReceivedMessageEvent);
- this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Subscribe(this.ReceivedMessageEvent, ThreadOption.BackgroundThread);
- }
- public void Init()
- {
- QuartzUtils.Invoke("HIS_ALARM", QuartzUtils.GetExpnMinute(1), this.CleanHisAlarm);
- //Create IO
- this.IO = new EzIO();
- var mapPath = Path.Combine(System.Environment.CurrentDirectory) + @"\Config\IO.xlsx";
- this.IO.LoadIOMap(mapPath);
- this.IO.RunIOThread();
- var ezIO = this.IO as EzIO;
- ezIO.OnContd += EzIO_OnContd;
- ezIO.OnDiscontd += EzIO_OnDiscontd;
- ezIO.OnChangedIO += EzIO_OnChangedIO;
- this.autoManager = new AutoManager(this.IO, this.eventAggregator, this.sql);
- this.scheduler = new Scheduler(eventAggregator, this.autoManager, this.sql);
- this.vehicle = new Vehicle(this.IO, this.sql, this.eventAggregator, this.autoManager);
- this.vehicle.PropertyChanged += Vehicle_PropertyChanged;
- this.hostManager = new HostManager(this.eventAggregator, this.vehicle, this.sql);
- this.hostManager.Init();
- this.vehicle.Init();
- this.scheduler.Init();
- this.autoManager.Init(this.vehicle);
- }
- private void Vehicle_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
- {
- var arg = new GUIMessageEventArgs();
- arg.Kind = GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange;
- arg.MessageKey = MessageKey.Vehicle;
- arg.ModelPropertyName = e.PropertyName;
- var property = sender.GetType().GetProperty(e.PropertyName);
- var newValue = property.GetValue(sender, null);
- arg.ModelPropertyName = e.PropertyName;
- arg.Args = newValue;
- GUIMessageEventPublish(arg);
- }
- public void CleanHisAlarm()
- {
- sql.HisAlarmDAL.Delete(20);
- }
- #region EzIO Event
- private void EzIO_OnChangedIO(BitBlock bit)
- {
- this.eventAggregator.GetEvent<IOChangedPubSubEvent>().Publish(new IOChangedMessageEventArgs { Args = bit });
- }
- private void EzIO_OnDiscontd(string ID)
- {
- //throw new NotImplementedException();
- }
- private void EzIO_OnContd(string ID)
- {
- //throw new NotImplementedException();
- }
- #endregion
- #region RspMessage Method
- void ReceivedMessageEvent(VCSMessageEventArgs msg)
- {
- switch (msg.Kind)
- {
- case VCSMessageEventArgs.eVCSMessageKind.ReqIOObject:
- ReqIOObjectMessage();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqIOMapList:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqCommandList:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqAutoModeChange:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqManualModeChange:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ModelPropertyChange:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqAlarmReset:
- ReqAlarmReset();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqVehicleModeChange:
- this.ReqVehicleModeChange(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqEStop:
- ReqEStop();
- break;
- default:
- break;
- }
- }
- private void ReqAlarmReset()
- {
- this.autoManager.IsErrorProcessing = false;
- this.vehicle.VehicleStateProperty = eVehicleState.Idle;
- }
- private void ReqEStop()
- {
- this.vehicle.EStop();
- }
- private void ReqVehicleModeChange(VCSMessageEventArgs msg)
- {
- GUIMessageEventArgs reply;
- if (msg.MessageKey.Equals(MessageKey.AutoMode))
- {
- int result = vehicle.InitializationVehicle();
- if (result != 0)
- {
- this.autoManager.ProcessAlarm(result); //Alarm 내용을 UI로 전달 해주니까 Reply 가 필요 없다.
- return;
- }
- this.autoManager.OperationModeProperty = OHV.Common.Shareds.eOperatationMode.AutoMode;
- this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.StartRun;
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Ok(), MessageKey = MessageKey.AutoMode };
- }
- else
- {
- this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.WaitStop;
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Ok(), MessageKey = MessageKey.ManualMode };
- }
- GUIMessageEventPublish(reply);
- }
- void ReqIOObjectMessage()
- {
- var rspMsg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspIOObject, Args = this.IO };
- this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(rspMsg);
- }
- void ReqAutoModeChange(bool isAutoMode)
- {
- GUIMessageEventArgs msg;
- if (isAutoMode)
- {
- int result = vehicle.InitializationVehicle();
- if (result != 0)
- {
- this.autoManager.ProcessAlarm(result); //Alarm 내용을 UI로 전달 해주니까 Reply 가 필요 없다.
- return;
- }
- this.autoManager.OperationModeProperty = OHV.Common.Shareds.eOperatationMode.AutoMode;
- this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.StartRun;
- msg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspAutoModeChange, Result = FluentResults.Results.Ok() };
- }
- else
- {
- this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.WaitStop;
- msg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspManualModeChange, Result = FluentResults.Results.Ok() };
- }
- GUIMessageEventPublish(msg);
- }
- #endregion
- /// <summary>
- /// GUI 로 보내는 Event
- /// </summary>
- /// <param name="args"></param>
- public void GUIMessageEventPublish(GUIMessageEventArgs args)
- {
- this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(args);
- }
- public void Dispose()
- {
- this.scheduler.Dispose();
- this.autoManager.Dispose();
- this.hostManager.Dispose();
- this.vehicle.Dispose();
- (this.IO as IDisposable).Dispose(); //IO 는 마지막에 정리함.
- }
- public void RegisterTypes(IContainerRegistry containerRegistry)
- {
- if (!containerRegistry.IsRegistered<VCSystem>())
- containerRegistry.RegisterSingleton<VCSystem>();
- }
- public void OnInitialized(IContainerProvider containerProvider)
- {
- this.Init();
- }
- }
- }
|