| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845 |
- #define TEST
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Security.Cryptography.X509Certificates;
- using System.Threading;
- using FluentResults;
- using GSG.NET.Concurrent;
- using GSG.NET.Excel;
- using GSG.NET.Extensions;
- using GSG.NET.Logging;
- using GSG.NET.Quartz;
- using GSG.NET.Utils;
- 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.Drive;
- using VehicleControlSystem.ControlLayer.IO;
- using VehicleControlSystem.ControlLayer.MQ;
- using VehicleControlSystem.ControlLayer.Serial.BatteryTabos;
- using VehicleControlSystem.Managers;
- namespace VehicleControlSystem
- {
- [Module(ModuleName = "VCSystem")]
- public class VCSystem : IModule, IDisposable
- {
- Logger logger = Logger.GetLogger();
- Scheduler scheduler = null;
- public AutoManager autoManager = null;
- HostManager hostManager = null;
- SqliteManager sql = null;
- IEventAggregator eventAggregator = null;
- public IIO IO = null;
- public ZmqManager ZmqManager { get; set; }
- BMUManager bMUManager = null;
- Conveyor conveyor = null;
- Steering steering = null;
- GSIDrive drive = null;
- Clamp clamp = null;
- public Vehicle vehicle = null;
- public RouteManager RouteManager { get; set; }
- public List<Alarm> Alarms { get; set; }
- 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()
- {
- GSG.NET.Utils.MidnightNotifier.DayChanged += MidnightNotifier_DayChanged;
- QuartzUtils.Invoke("HIS_ALARM", QuartzUtils.GetExpnHour(5), this.CleanHisAlarm);
- this.Alarms = new ExcelMapper(Path.Combine(System.Environment.CurrentDirectory) + @"\Config\AlarmDefind.xlsx").Fetch<Alarm>().ToList();
- this.RouteManager = RouteManager.Instance;
- RouteManager.Instance.Init(this.sql);
- //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;
- ezIO.OnFirstColtd += EzIO_OnFirstColtd;
- //Battery
- this.bMUManager = new BMUManager();
- this.bMUManager.BMUConfig = new ControlLayer.Serial.BatteryTabos.Config() { ID = "0" };
- var setV = Convert.ToInt32(sql.ConfigDal.GetById(ConstString.BatteryCanType).Value);
- var canType = CastTo<BMUManager.eCANSelect>.From<int>(setV);
- this.bMUManager.Connect(canType);
- //Conveyor
- this.conveyor = new Conveyor(this.IO as EzIO);
- //Clamp
- this.clamp = new Clamp(this.sql, this.eventAggregator);
- this.clamp.Init();
- //Steering
- this.steering = new Steering();
- //ZeroMQ
- this.ZmqManager = new ZmqManager();
- this.ZmqManager.AssignRefObject(this.bMUManager, this.steering, this.IO);
- this.ZmqManager.Init();
- this.steering.AssignRefObject(this.IO, this.sql, this.eventAggregator, this.ZmqManager);
- //Drive
- this.drive = new GSIDrive(this.sql, this.steering, this.ZmqManager, this.Alarms);
- this.drive.Init();
- //Process
- this.autoManager = new AutoManager(this.IO, this.eventAggregator, this.sql, this.Alarms);
- this.scheduler = new Scheduler(eventAggregator, this.autoManager, this.sql, this.bMUManager);
- this.vehicle = new Vehicle(this.eventAggregator);
- this.hostManager = new HostManager(this.eventAggregator, this.vehicle, this.sql, this.autoManager, this.scheduler, this.IO);
- var refObject = new VehicleRefObjects();
- refObject.IO = this.IO as EzIO;
- refObject.BMUManager = this.bMUManager;
- refObject.Drive = this.drive;
- refObject.Conveyor = this.conveyor;
- refObject.Clamp = this.clamp;
- refObject.Steering = this.steering;
- refObject.ZmqManager = this.ZmqManager;
- refObject.Alarms = this.Alarms;
- refObject.Sqlite = this.sql;
- refObject.AutoManager = this.autoManager;
- refObject.HostManager = this.hostManager;
- this.vehicle.DependencyInjection(refObject);
- this.vehicle.PropertyChanged += Vehicle_PropertyChanged;
- this.hostManager.Init();
- this.vehicle.Init();
- this.scheduler.Init();
- this.autoManager.Init(this.vehicle);
- this.sql.CommandDAL.Clean();
- this.sql.SubCmdDAL.Clean();
- }
- private void MidnightNotifier_DayChanged(object sender, EventArgs e)
- {
- try
- {
- var info = this.sql.VehicleInfoDAL.GetAll().FirstOrDefault();
- var iDist = Convert.ToInt32(info.CumulativeDistance);
- this.hostManager.Send_TotalDistacne(iDist);
- }
- catch (Exception ex)
- {
- logger.E(ex);
- }
- }
- void UIRenderingComplete()
- {
- }
- 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()
- {
- var backup = DateTime.Now.AddDays(-15);
- sql.HisAlarmDAL.Delete(x => x.OccurTime < backup);
- }
- #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)
- {
- //IO 연결 시 할일 들을 여기서 하자.
- this.IO.OutputOn("OUT_TEACH_MODE");
- this.autoManager.LampStateProperty = eLampState.Alarm;
- //throw new NotImplementedException();
- }
- private void EzIO_OnFirstColtd(string ID)
- {
- if (this.IO.IsOff("IN_MC_ON"))
- {
- this.vehicle.OccurVehicleAlarm(29);
- }
- this.steering.RequestControl(eSteeringState.Left);//초기에 직선 주행 상태로 핸들 조정.
- }
- #endregion
- #region ReqMessage 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;
- case VCSMessageEventArgs.eVCSMessageKind.ReqBuzzerStop:
- ReqBuzzerStop();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqMachineModeChg:
- ReqMachineModeChg(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqAddCommand:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqTest:
- #if TEST
- ReqTest();
- #endif
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorMove:
- ReqConveyorMove(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad:
- ReqConveyorLoad(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload:
- ReqConveyorUnload();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg:
- ReqObsticlePatternChange(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo:
- ReqObsticlePatternNo();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor:
- this.ReqPIOConveyor(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryCharge:
- this.ReqPIOBattery(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqBatteryState:
- this.ReqBatteryState();
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryChargeStop:
- this.ReqBatteryChargeStop(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqRouteManager:
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed:
- this.ReqSetDriveSpeed(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqSpeedProfile:
- this.ReqSetSpeedProfile(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqJogSpeed:
- this.ReqSetJogSpeed(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqParamsSave:
- this.ReqParamsSave(msg);
- break;
- case VCSMessageEventArgs.eVCSMessageKind.ReqVehicleOnRailStateChg:
- this.ReqVehicleOnRailStateChg(msg);
- break;
- default:
- break;
- }
- }
- private void ReqVehicleOnRailStateChg(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs();
- reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleOnRailStateChg;
- var mode = CastTo<eVehicleOnRailState>.From<object>(msg.Arg);
- if (mode == eVehicleOnRailState.Install)
- {
- this.vehicle.VehicleOnRailState = eVehicleOnRailState.Install;
- reply.Args = eVehicleOnRailState.Install;
- reply.Result = FluentResults.Results.Ok<eVehicleOnRailState>(eVehicleOnRailState.Install);
- }
- else
- {
- this.vehicle.VehicleOnRailState = eVehicleOnRailState.Removed;
- reply.Args = eVehicleOnRailState.Removed;
- reply.Result = FluentResults.Results.Ok<eVehicleOnRailState>(eVehicleOnRailState.Removed);
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqParamsSave(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspParamsSave,
- Result = FluentResults.Results.Fail("Fail ReqParamsSave"),
- };
- var result = this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]);
- if (!result)
- {
- GUIMessageEventPublish(reply);
- return;
- }
- result = this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString());
- if (!result)
- {
- logger.E($"Set DriveSPeed Error");
- return;
- }
- result = this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
- msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString());
- if (!result)
- {
- logger.E($"Set SpeedProfile Error");
- return;
- }
- //Save Parameter.
- int ret = this.ZmqManager.SetDriveControl(eDriveControl.ParameterSave);
- if (ret != ConstInt.EXECUTE_SUCCESS)
- {
- GUIMessageEventPublish(reply);
- return;
- }
- reply.Result = FluentResults.Results.Ok();
- GUIMessageEventPublish(reply);
- //refresh Parameter.
- this.ZmqManager.SynchronizedParmeter();
- }
- private void ReqSetJogSpeed(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspJogSpeed,
- Result = FluentResults.Results.Fail("Fail SetJogSpeed"),
- };
- if (msg.Args.ContainsKey("JogSpeed"))
- {
- if (this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]))
- {
- reply.Result = FluentResults.Results.Ok();
- }
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqSetSpeedProfile(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspSpeedProfile,
- Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
- };
- if (msg.Args.ContainsKey("Accel") && msg.Args.ContainsKey("Decel") && msg.Args.ContainsKey("Creep") && msg.Args.ContainsKey("CreepDistance"))
- {
- if (this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
- msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString()))
- {
- reply.Result = FluentResults.Results.Ok();
- }
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqSetDriveSpeed(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspDirveSpeed,
- Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
- };
- if (msg.Args.ContainsKey("Linear") && msg.Args.ContainsKey("Curve"))
- {
- if (this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString()))
- {
- reply.Result = FluentResults.Results.Ok();
- }
- }
- GUIMessageEventPublish(reply);
- }
- void ReqBatteryState()
- {
- BatteryInfo battery = new BatteryInfo();
- battery.Voltage = vehicle.BatteryVoltage;
- battery.Current = vehicle.BatteryCurrent;
- battery.ChargeTime = vehicle.BatteryChargeTime;
- battery.DisChargeTime = vehicle.BatteryDisChargeTime;
- battery.Capacity = vehicle.BatteryCapacity;
- battery.Energy = vehicle.BatteryEnergy;
- battery.SOC = vehicle.BatteryStateOfCharge;
- battery.SOH = vehicle.BatteryStateOfHealth;
- battery.State = vehicle.BatteryState;
- battery.IsConnect = vehicle.BatteryIsConnect;
- battery.Temperature = vehicle.BatteryTemperature;
- var reply = new GUIMessageEventArgs()
- {
- Args = battery,
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspBatteryState
- };
- GUIMessageEventPublish(reply);
- }
- private void ReqConveyorMove(VCSMessageEventArgs msg)
- {
- this.vehicle.ReqConveyorMove(msg.MessageText);
- }
- private void ReqObsticlePatternNo()
- {
- var reply = new GUIMessageEventArgs();
- reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo;
- reply.MessageText = this.vehicle.GetObstacleDetectPattern().ToString();
- GUIMessageEventPublish(reply);
- }
- private void ReqObsticlePatternChange(VCSMessageEventArgs msg)
- {
- var patternNo = Convert.ToInt32(msg.MessageText);
- this.vehicle.ChgObstacleDetectPattern(patternNo);
- var reply = new GUIMessageEventArgs();
- reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternChg;
- reply.Result = FluentResults.Results.Ok();
- GUIMessageEventPublish(reply);
- }
- private void ReqConveyorUnload()
- {
- int result = 0;
- result = this.vehicle.ConveyorUnload();
- result = this.vehicle.ConveyorLoad();
- var reply = new GUIMessageEventArgs()
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspConveyorLoad,
- Result = FluentResults.Results.Ok()
- };
- if (result != 0)
- {
- reply.Result = FluentResults.Results.Fail("Conveyor Load FAIL");
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqConveyorLoad(VCSMessageEventArgs msg)
- {
- int result = 0;
- result = this.vehicle.ConveyorLoad();
- var reply = new GUIMessageEventArgs()
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspConveyorLoad,
- Result = FluentResults.Results.Ok()
- };
- if (result != 0)
- {
- reply.Result = FluentResults.Results.Fail("Conveyor Load FAIL");
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqPIOConveyor(VCSMessageEventArgs msg)
- {
- int result = 0;
- var reply = new GUIMessageEventArgs()
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspPIOConveyor,
- MessageText = msg.MessageText,
- };
- /*PIO Load// Unload*/
- if (msg.MessageText.Equals("PL"))
- result = this.vehicle.ManualPIOAndLoad();
- else
- result = this.vehicle.ManualPIOAndUnlaod();
- //실행 결과 확인
- if (result == ConstInt.EXECUTE_SUCCESS)
- reply.Result = FluentResults.Results.Ok();
- else
- {
- string alarmText = string.Empty;
- var alarm = this.Alarms.Where(a => a.AlarmId == result).FirstOrDefault();
- if (alarm == null)
- alarmText = "Not Define";
- else
- alarmText = alarm.Text;
- reply.Result = FluentResults.Results.Fail(alarmText);
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqPIOBattery(VCSMessageEventArgs msg)
- {
- int result = 1;
- var reply = new GUIMessageEventArgs()
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RspPIOBatteryCharge,
- MessageText = msg.MessageText,
- };
- result = this.vehicle.StartBatteryCharge();
- if (result == ConstInt.EXECUTE_SUCCESS)
- reply.Result = FluentResults.Results.Ok();
- else
- {
- string alarmText = string.Empty;
- var alarm = this.Alarms.Where(a => a.AlarmId == result).FirstOrDefault();
- if (alarm == null)
- alarmText = "Not Define";
- else
- alarmText = alarm.Text;
- reply.Result = FluentResults.Results.Fail(alarmText);
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqBatteryChargeStop(VCSMessageEventArgs msg)
- {
- int result = 1;
- var reply = new GUIMessageEventArgs()
- {
- Kind = GUIMessageEventArgs.eGUIMessageKind.RsqPIOBatteryChargeStop,
- MessageText = msg.MessageText,
- };
- result = this.vehicle.StopBatteryCharge();
- if (result <= 0)
- reply.Result = FluentResults.Results.Ok();
- else
- reply.Result = FluentResults.Results.Fail("Battery Charge Stop Fail");
- GUIMessageEventPublish(reply);
- }
- private void ReqTest()
- {
- var isS = QuartzUtils.StopSchedule("SteerTest");
- LockUtils.Wait(1000);
- QuartzUtils.Invoke("SteerTest", QuartzUtils.GetExpnSecond(30), StartSteerTest);
- }
- bool isSteerLeft = true;
- void StartSteerTest()
- {
- var sT = SwUtils.CurrentTimeMillis;
- if (isSteerLeft)
- {
- this.steering.RequestControl(eSteeringState.Right);
- isSteerLeft = false;
- }
- else
- {
- this.steering.RequestControl(eSteeringState.Left);
- isSteerLeft = true;
- }
- }
- private void ReqMachineModeChg(VCSMessageEventArgs msg)
- {
- var reply = new GUIMessageEventArgs();
- reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspMachineModeChg;
- var mode = CastTo<eMachineMode>.From<object>(msg.Arg);
- if (mode == eMachineMode.HostMode)
- {
- if (this.autoManager.OperationModeProperty != eOperatationMode.AutoMode)
- reply.Result = FluentResults.Results.Fail("Vehicle Not Start");
- else
- {
- if (vehicle.VehicleOnRailState != eVehicleOnRailState.Install)
- reply.Result = Results.Fail("Vehicle is not On Rail");
- else
- {
- this.vehicle.MachineMode = eMachineMode.HostMode;
- reply.Result = FluentResults.Results.Ok();
- reply.Args = eMachineMode.HostMode;
- }
- }
- }
- else
- {
- this.vehicle.MachineMode = eMachineMode.LocalMode;
- reply.Result = FluentResults.Results.Ok<eMachineMode>(eMachineMode.LocalMode);
- reply.Args = eMachineMode.LocalMode;
- }
- GUIMessageEventPublish(reply);
- }
- private void ReqBuzzerStop()
- {
- this.IO.OutputOff("OUT_BUZZER_00");
- this.IO.OutputOff("OUT_BUZZER_01");
- this.IO.OutputOff("OUT_BUZZER_02");
- }
- private void ReqAlarmReset()
- {
- //this.autoManager.IsErrorProcessing = false;
- //this.vehicle.VehicleStateProperty = eVehicleState.Idle;
- if (!this.IO.IsOn("IN_MC_ON"))
- {
- this.IO.WriteOutputIO("OUT_SAFETY_RESET", true);
- Thread.Sleep(2000);
- this.IO.WriteOutputIO("OUT_SAFETY_RESET", false);
- Thread.Sleep(1000);
- }
- if (this.conveyor.IsInverterError())
- {
- this.conveyor.OnOffConveyor(false);
- }
- this.ZmqManager.SetDriveControl(eDriveControl.ResetFault);
- this.autoManager.IsErrorProcessing = false;
- this.vehicle.VehicleStateProperty = eVehicleState.Idle;
- this.vehicle.PIOClear();
- }
- private void ReqEStop()
- {
- this.vehicle.EStop();
- autoManager.ProcessAlarm(23);
- }
- private void ReqVehicleModeChange(VCSMessageEventArgs msg)
- {
- GUIMessageEventArgs reply;
- if (msg.MessageKey.Equals(MessageKey.AutoMode))
- {
- #if TEST
- if (!QuartzUtils.StopSchedule("SteerTest"))
- return;
- #endif
- if (!this.ZmqManager.IsReqConnected)
- {
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error("Drive P/G not Connected")), MessageKey = MessageKey.ManualMode };
- GUIMessageEventPublish(reply);
- return;
- }
- if (!this.ZmqManager.IsCanStanbyLocation)
- {
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error("NotOnRoute")), MessageKey = MessageKey.ManualMode };
- GUIMessageEventPublish(reply);
- return;
- }
- int result = vehicle.InitializationVehicle();
- if (result != ConstInt.EXECUTE_SUCCESS)
- {
- var al = this.Alarms.FirstOrDefault(a => a.AlarmId == result);
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error(al.Text)), MessageKey = MessageKey.ManualMode };
- GUIMessageEventPublish(reply);
- return;
- }
- //ToDo: 주행 측 준비 되면 활성.
- result = drive.DriveInit();
- if (result != ConstInt.EXECUTE_SUCCESS)
- {
- var al = this.Alarms.FirstOrDefault(a => a.AlarmId == result);
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error(al.Text)), MessageKey = MessageKey.ManualMode };
- GUIMessageEventPublish(reply);
- return;
- }
- if (!ZmqManager.SetOperationState(eOperatationMode.AutoMode))
- {
- var al = this.Alarms.Where(x => x.AlarmId == 38).FirstOrDefault();
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error(al.Text)), MessageKey = MessageKey.ManualMode };
- GUIMessageEventPublish(reply);
- return;
- }
- //2020.08.13. Kang. Break 는 자동 상태 일때 주행에서 Control.
- this.IO.OutputOff("OUT_DRIVE_BRAKE_OFF");
- this.autoManager.AutoModeStateProperty = eAutoModeState.StartRun;
- this.autoManager.OperationModeProperty = eOperatationMode.AutoMode;
- reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Ok(), MessageKey = MessageKey.AutoMode };
- GUIMessageEventPublish(reply);
- }
- else
- {
- //2020.07.29. Kang. Vehicle Stop 시 LocalMode 변경.
- this.vehicle.MachineMode = eMachineMode.LocalMode;
- //2020.08.04. Kang Manual Mode 변경은 조그 사용 화면 DirveView 를 사용 시에만 전환.
- //if (!ZmqManager.SetOperationState(eOperatationMode.ManualMode))
- //{
- // var al = this.Alarms.Where(x => x.AlarmId == 38).FirstOrDefault();
- // reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error(al.Text)), MessageKey = MessageKey.ManualMode };
- // GUIMessageEventPublish(reply);
- // return;
- //}
- //2020.08.04. Kang. 가지고 있던 명령을 전체 삭제.
- this.sql.SubCmdDAL.Clean();
- this.sql.CommandDAL.Clean();
- 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 ReqDriveDistanceReset()
- {
- var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
- info.TripDistance = 0d;
- info.TripResetTime = DateTime.Now;
- sql.VehicleInfoDAL.Update(info);
- }
- #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.hostManager.Dispose();
- this.vehicle.Dispose();
- this.autoManager.Dispose();
- this.bMUManager.Disconnect();
- this.drive.Dispose();
- this.steering.Dispose();
- this.ZmqManager.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();
- }
- }
- }
|