VCSystem.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading;
  7. using GSG.NET.Concurrent;
  8. using GSG.NET.Excel;
  9. using GSG.NET.Extensions;
  10. using GSG.NET.Logging;
  11. using GSG.NET.Quartz;
  12. using GSG.NET.Utils;
  13. using OHV.Common.Events;
  14. using OHV.Common.Model;
  15. using OHV.Common.Shareds;
  16. using OHV.SqliteDAL;
  17. using Prism.Events;
  18. using Prism.Ioc;
  19. using Prism.Modularity;
  20. using VehicleControlSystem.ControlLayer;
  21. using VehicleControlSystem.ControlLayer.Drive;
  22. using VehicleControlSystem.ControlLayer.IO;
  23. using VehicleControlSystem.ControlLayer.MQ;
  24. using VehicleControlSystem.ControlLayer.Serial.BatteryTabos;
  25. using VehicleControlSystem.Managers;
  26. namespace VehicleControlSystem
  27. {
  28. [Module(ModuleName = "VCSystem")]
  29. public class VCSystem : IModule, IDisposable
  30. {
  31. Logger logger = Logger.GetLogger();
  32. Scheduler scheduler = null;
  33. public AutoManager autoManager = null;
  34. HostManager hostManager = null;
  35. SqliteManager sql = null;
  36. IEventAggregator eventAggregator = null;
  37. public IIO IO = null;
  38. public ZmqManager ZmqManager { get; set; }
  39. BMUManager bMUManager = null;
  40. Conveyor conveyor = null;
  41. Steering steering = null;
  42. GSIDrive drive = null;
  43. Clamp clamp = null;
  44. Vehicle vehicle = null;
  45. public RouteManager RouteManager { get; set; }
  46. public List<Alarm> Alarms { get; set; }
  47. public VCSystem(IEventAggregator ea, SqliteManager sql)
  48. {
  49. this.sql = sql;
  50. this.eventAggregator = ea;
  51. this.eventAggregator.GetEvent<ApplicationExitEvent>().Subscribe((o) => Dispose(), true);
  52. this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Unsubscribe(ReceivedMessageEvent);
  53. this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Subscribe(this.ReceivedMessageEvent, ThreadOption.BackgroundThread);
  54. }
  55. public void Init()
  56. {
  57. //string warningList = "4094/0xff/0x00/0x00/0x01";
  58. //var v = warningList.Split( '/' );
  59. //var mb = new MemoryBuffer();
  60. //for ( int i = 1; i < v.Length; i++ )
  61. //{
  62. // var _2b = v[i].Replace( "0x", "" );
  63. // mb.Append( HexaUtils.StringToByte( _2b ) );
  64. //}
  65. //var bs = mb.ToBytes;
  66. //var bitA = new BitArray( bs );
  67. QuartzUtils.Invoke("HIS_ALARM", QuartzUtils.GetExpnHour(5), this.CleanHisAlarm);
  68. this.Alarms = new ExcelMapper(Path.Combine(System.Environment.CurrentDirectory) + @"\Config\AlarmDefind.xlsx").Fetch<Alarm>().ToList();
  69. this.RouteManager = RouteManager.Instance;
  70. RouteManager.Instance.Init(this.sql);
  71. //Create IO
  72. this.IO = new EzIO();
  73. var mapPath = Path.Combine(System.Environment.CurrentDirectory) + @"\Config\IO.xlsx";
  74. this.IO.LoadIOMap(mapPath);
  75. this.IO.RunIOThread();
  76. var ezIO = this.IO as EzIO;
  77. ezIO.OnContd += EzIO_OnContd;
  78. ezIO.OnDiscontd += EzIO_OnDiscontd;
  79. ezIO.OnChangedIO += EzIO_OnChangedIO;
  80. ezIO.OnFirstColtd += EzIO_OnFirstColtd;
  81. //Battery
  82. this.bMUManager = new BMUManager();
  83. this.bMUManager.BMUConfig = new ControlLayer.Serial.BatteryTabos.Config() { ID = "0" };
  84. var setV = Convert.ToInt32(sql.ConfigDal.GetById(ConstString.BatteryCanType).Value);
  85. var canType = CastTo<BMUManager.eCANSelect>.From<int>(setV);
  86. this.bMUManager.Connect(canType);
  87. //Conveyor
  88. this.conveyor = new Conveyor(this.IO as EzIO);
  89. //Clamp
  90. this.clamp = new Clamp(this.sql, this.eventAggregator);
  91. this.clamp.Init();
  92. //Steering
  93. this.steering = new Steering(this.IO, this.sql, this.eventAggregator);
  94. //ZeroMQ
  95. this.ZmqManager = new ZmqManager(this.bMUManager, this.steering, this.IO);
  96. this.ZmqManager.Init();
  97. //Drive
  98. this.drive = new GSIDrive(this.sql, this.steering, this.ZmqManager);
  99. this.drive.Init();
  100. //Process
  101. this.autoManager = new AutoManager(this.IO, this.eventAggregator, this.sql, this.Alarms);
  102. this.scheduler = new Scheduler(eventAggregator, this.autoManager, this.sql, this.bMUManager);
  103. this.vehicle = new Vehicle(this.eventAggregator);
  104. this.hostManager = new HostManager(this.eventAggregator, this.vehicle, this.sql, this.autoManager, this.scheduler);
  105. var refObject = new VehicleRefObjects();
  106. refObject.IO = this.IO as EzIO;
  107. refObject.BMUManager = this.bMUManager;
  108. refObject.Drive = this.drive;
  109. refObject.Conveyor = this.conveyor;
  110. refObject.Clamp = this.clamp;
  111. refObject.Steering = this.steering;
  112. refObject.ZmqManager = this.ZmqManager;
  113. refObject.Alarms = this.Alarms;
  114. refObject.Sqlite = this.sql;
  115. refObject.AutoManager = this.autoManager;
  116. refObject.HostManager = this.hostManager;
  117. this.vehicle.DependencyInjection(refObject);
  118. this.vehicle.PropertyChanged += Vehicle_PropertyChanged;
  119. this.hostManager.Init();
  120. this.vehicle.Init();
  121. this.scheduler.Init();
  122. this.autoManager.Init(this.vehicle);
  123. }
  124. private void Vehicle_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  125. {
  126. var arg = new GUIMessageEventArgs();
  127. arg.Kind = GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange;
  128. arg.MessageKey = MessageKey.Vehicle;
  129. arg.ModelPropertyName = e.PropertyName;
  130. var property = sender.GetType().GetProperty(e.PropertyName);
  131. var newValue = property.GetValue(sender, null);
  132. arg.ModelPropertyName = e.PropertyName;
  133. arg.Args = newValue;
  134. GUIMessageEventPublish(arg);
  135. }
  136. public void CleanHisAlarm()
  137. {
  138. var backup = DateTime.Now.AddDays(-15);
  139. sql.HisAlarmDAL.Delete(x => x.OccurTime < backup);
  140. }
  141. #region EzIO Event
  142. private void EzIO_OnChangedIO(BitBlock bit)
  143. {
  144. this.eventAggregator.GetEvent<IOChangedPubSubEvent>().Publish(new IOChangedMessageEventArgs { Args = bit });
  145. }
  146. private void EzIO_OnDiscontd(string ID)
  147. {
  148. //throw new NotImplementedException();
  149. }
  150. private void EzIO_OnContd(string ID)
  151. {
  152. //IO 연결 시 할일 들을 여기서 하자.
  153. this.IO.OutputOn("OUT_TEACH_MODE");
  154. this.autoManager.LampStateProperty = eLampState.Alarm;
  155. //throw new NotImplementedException();
  156. }
  157. private void EzIO_OnFirstColtd(string ID)
  158. {
  159. if (this.IO.IsOff("IN_MC_ON"))
  160. {
  161. this.vehicle.OccurVehicleAlarm(29);
  162. }
  163. this.steering.ControlSteering(true);//초기에 직선 주행 상태로 핸들 조정.
  164. }
  165. #endregion
  166. #region ReqMessage Method
  167. void ReceivedMessageEvent(VCSMessageEventArgs msg)
  168. {
  169. switch (msg.Kind)
  170. {
  171. case VCSMessageEventArgs.eVCSMessageKind.ReqIOObject:
  172. ReqIOObjectMessage();
  173. break;
  174. case VCSMessageEventArgs.eVCSMessageKind.ReqIOMapList:
  175. break;
  176. case VCSMessageEventArgs.eVCSMessageKind.ReqCommandList:
  177. break;
  178. case VCSMessageEventArgs.eVCSMessageKind.ReqAutoModeChange:
  179. break;
  180. case VCSMessageEventArgs.eVCSMessageKind.ReqManualModeChange:
  181. break;
  182. case VCSMessageEventArgs.eVCSMessageKind.ModelPropertyChange:
  183. break;
  184. case VCSMessageEventArgs.eVCSMessageKind.ReqAlarmReset:
  185. ReqAlarmReset();
  186. break;
  187. case VCSMessageEventArgs.eVCSMessageKind.ReqVehicleModeChange:
  188. this.ReqVehicleModeChange(msg);
  189. break;
  190. case VCSMessageEventArgs.eVCSMessageKind.ReqEStop:
  191. ReqEStop();
  192. break;
  193. case VCSMessageEventArgs.eVCSMessageKind.ReqBuzzerStop:
  194. ReqBuzzerStop();
  195. break;
  196. case VCSMessageEventArgs.eVCSMessageKind.ReqMachineModeChg:
  197. ReqMachineModeChg(msg);
  198. break;
  199. case VCSMessageEventArgs.eVCSMessageKind.ReqAddCommand:
  200. break;
  201. case VCSMessageEventArgs.eVCSMessageKind.ReqTest:
  202. ReqTest();
  203. break;
  204. case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorMove:
  205. ReqConveyorMove(msg);
  206. break;
  207. case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad:
  208. ReqConveyorLoad(msg);
  209. break;
  210. case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload:
  211. ReqConveyorUnload();
  212. break;
  213. case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg:
  214. ReqObsticlePatternChange(msg);
  215. break;
  216. case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo:
  217. ReqObsticlePatternNo();
  218. break;
  219. case VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor:
  220. this.ReqPIOConveyor(msg);
  221. break;
  222. case VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryCharge:
  223. this.ReqPIOBattery(msg);
  224. break;
  225. case VCSMessageEventArgs.eVCSMessageKind.ReqBatteryState:
  226. this.ReqBatteryState();
  227. break;
  228. case VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryChargeStop:
  229. this.ReqBatteryChargeStop(msg);
  230. break;
  231. case VCSMessageEventArgs.eVCSMessageKind.ReqRouteManager:
  232. break;
  233. case VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed:
  234. this.ReqSetDriveSpeed(msg);
  235. break;
  236. case VCSMessageEventArgs.eVCSMessageKind.ReqSpeedProfile:
  237. this.ReqSetSpeedProfile(msg);
  238. break;
  239. case VCSMessageEventArgs.eVCSMessageKind.ReqJogSpeed:
  240. this.ReqSetJogSpeed(msg);
  241. break;
  242. case VCSMessageEventArgs.eVCSMessageKind.ReqParamsSave:
  243. this.ReqParamsSave(msg);
  244. break;
  245. default:
  246. break;
  247. }
  248. }
  249. private void ReqParamsSave(VCSMessageEventArgs msg)
  250. {
  251. var reply = new GUIMessageEventArgs
  252. {
  253. Kind = GUIMessageEventArgs.eGUIMessageKind.RspParamsSave,
  254. Result = FluentResults.Results.Fail("Fail ReqParamsSave"),
  255. };
  256. var result = this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]);
  257. if (!result)
  258. {
  259. GUIMessageEventPublish(reply);
  260. return;
  261. }
  262. result = this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString());
  263. if (!result)
  264. {
  265. logger.E($"Set DriveSPeed Error");
  266. return;
  267. }
  268. result = this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
  269. msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString());
  270. if (!result)
  271. {
  272. logger.E($"Set SpeedProfile Error");
  273. return;
  274. }
  275. reply.Result = FluentResults.Results.Ok();
  276. GUIMessageEventPublish(reply);
  277. }
  278. private void ReqSetJogSpeed(VCSMessageEventArgs msg)
  279. {
  280. var reply = new GUIMessageEventArgs
  281. {
  282. Kind = GUIMessageEventArgs.eGUIMessageKind.RspJogSpeed,
  283. Result = FluentResults.Results.Fail("Fail SetJogSpeed"),
  284. };
  285. if (msg.Args.ContainsKey("JogSpeed"))
  286. {
  287. if (this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]))
  288. {
  289. reply.Result = FluentResults.Results.Ok();
  290. }
  291. }
  292. GUIMessageEventPublish(reply);
  293. }
  294. private void ReqSetSpeedProfile(VCSMessageEventArgs msg)
  295. {
  296. var reply = new GUIMessageEventArgs
  297. {
  298. Kind = GUIMessageEventArgs.eGUIMessageKind.RspSpeedProfile,
  299. Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
  300. };
  301. if (msg.Args.ContainsKey("Accel") && msg.Args.ContainsKey("Decel") && msg.Args.ContainsKey("Creep") && msg.Args.ContainsKey("CreepDistance"))
  302. {
  303. if (this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
  304. msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString()))
  305. {
  306. reply.Result = FluentResults.Results.Ok();
  307. }
  308. }
  309. GUIMessageEventPublish(reply);
  310. }
  311. private void ReqSetDriveSpeed(VCSMessageEventArgs msg)
  312. {
  313. var reply = new GUIMessageEventArgs
  314. {
  315. Kind = GUIMessageEventArgs.eGUIMessageKind.RspDirveSpeed,
  316. Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
  317. };
  318. if (msg.Args.ContainsKey("Linear") && msg.Args.ContainsKey("Curve"))
  319. {
  320. if (this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString()))
  321. {
  322. reply.Result = FluentResults.Results.Ok();
  323. }
  324. }
  325. GUIMessageEventPublish(reply);
  326. }
  327. void ReqBatteryState()
  328. {
  329. BatteryInfo battery = new BatteryInfo();
  330. battery.Voltage = vehicle.BatteryVoltage;
  331. battery.Current = vehicle.BatteryCurrent;
  332. battery.ChargeTime = vehicle.BatteryChargeTime;
  333. battery.DisChargeTime = vehicle.BatteryDisChargeTime;
  334. battery.Capacity = vehicle.BatteryCapacity;
  335. battery.Energy = vehicle.BatteryEnergy;
  336. battery.SOC = vehicle.BatteryStateOfCharge;
  337. battery.SOH = vehicle.BatteryStateOfHealth;
  338. battery.State = vehicle.BatteryState;
  339. battery.IsConnect = vehicle.BatteryIsConnect;
  340. battery.Temperature = vehicle.BatteryTemperature;
  341. var reply = new GUIMessageEventArgs()
  342. {
  343. Args = battery,
  344. Kind = GUIMessageEventArgs.eGUIMessageKind.RspBatteryState
  345. };
  346. GUIMessageEventPublish(reply);
  347. }
  348. private void ReqConveyorMove(VCSMessageEventArgs msg)
  349. {
  350. this.vehicle.ReqConveyorMove(msg.MessageText);
  351. }
  352. private void ReqObsticlePatternNo()
  353. {
  354. var reply = new GUIMessageEventArgs();
  355. reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo;
  356. reply.MessageText = this.vehicle.GetObstacleDetectPattern().ToString();
  357. GUIMessageEventPublish(reply);
  358. }
  359. private void ReqObsticlePatternChange(VCSMessageEventArgs msg)
  360. {
  361. var patternNo = Convert.ToInt32(msg.MessageText);
  362. this.vehicle.ChgObstacleDetectPattern(patternNo);
  363. var reply = new GUIMessageEventArgs();
  364. reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternChg;
  365. reply.Result = FluentResults.Results.Ok();
  366. GUIMessageEventPublish(reply);
  367. }
  368. private void ReqConveyorUnload()
  369. {
  370. int result = 0;
  371. result = this.vehicle.ConveyorUnload();
  372. }
  373. private void ReqConveyorLoad(VCSMessageEventArgs msg)
  374. {
  375. int result = 0;
  376. result = this.vehicle.ConveyorLoad();
  377. }
  378. private void ReqPIOConveyor(VCSMessageEventArgs msg)
  379. {
  380. int result = 0;
  381. var reply = new GUIMessageEventArgs()
  382. {
  383. Kind = GUIMessageEventArgs.eGUIMessageKind.RspPIOConveyor,
  384. MessageText = msg.MessageText,
  385. };
  386. /*PIO Load// Unload*/
  387. if (msg.MessageText.Equals("PL"))
  388. result = this.vehicle.PIOAndLoad("");
  389. else
  390. result = this.vehicle.PIOAndUnload("");
  391. //실행 결과 확인
  392. if (result <= 0)
  393. reply.Result = FluentResults.Results.Ok();
  394. else
  395. reply.Result = FluentResults.Results.Fail("PIO Fail");
  396. GUIMessageEventPublish(reply);
  397. }
  398. private void ReqPIOBattery(VCSMessageEventArgs msg)
  399. {
  400. int result = 1;
  401. var reply = new GUIMessageEventArgs()
  402. {
  403. Kind = GUIMessageEventArgs.eGUIMessageKind.RspPIOBatteryCharge,
  404. MessageText = msg.MessageText,
  405. };
  406. result = this.vehicle.StartBatteryCharge();
  407. if (result <= 0)
  408. reply.Result = FluentResults.Results.Ok();
  409. else
  410. reply.Result = FluentResults.Results.Fail("Battery Charge Start Fail");
  411. GUIMessageEventPublish(reply);
  412. }
  413. private void ReqBatteryChargeStop(VCSMessageEventArgs msg)
  414. {
  415. int result = 1;
  416. var reply = new GUIMessageEventArgs()
  417. {
  418. Kind = GUIMessageEventArgs.eGUIMessageKind.RsqPIOBatteryChargeStop,
  419. MessageText = msg.MessageText,
  420. };
  421. result = this.vehicle.StopBatteryCharge();
  422. if (result <= 0)
  423. reply.Result = FluentResults.Results.Ok();
  424. else
  425. reply.Result = FluentResults.Results.Fail("Battery Charge Stop Fail");
  426. GUIMessageEventPublish(reply);
  427. }
  428. private void ReqTest()
  429. {
  430. //logger.D( "Test Request" );
  431. //if ( this.IO.WaitChangeInputIO( true, 30000, "IN_CV_DETECT_00" ) )
  432. // logger.D( "Test - Time in" );
  433. //else
  434. // logger.D( "Test - Time out" );
  435. }
  436. private void ReqMachineModeChg(VCSMessageEventArgs msg)
  437. {
  438. var reply = new GUIMessageEventArgs();
  439. reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspMachineModeChg;
  440. var mode = CastTo<eMachineMode>.From<object>(msg.Arg);
  441. if (mode == eMachineMode.HostMode)
  442. {
  443. if (this.autoManager.OperationModeProperty != eOperatationMode.AutoMode)
  444. reply.Result = FluentResults.Results.Fail("Vehicle Not Start");
  445. else
  446. {
  447. this.vehicle.MachineMode = eMachineMode.HostMode;
  448. reply.Result = FluentResults.Results.Ok();
  449. reply.Args = eMachineMode.HostMode;
  450. }
  451. }
  452. else
  453. {
  454. this.vehicle.MachineMode = eMachineMode.LocalMode;
  455. reply.Result = FluentResults.Results.Ok<eMachineMode>(eMachineMode.LocalMode);
  456. reply.Args = eMachineMode.LocalMode;
  457. }
  458. GUIMessageEventPublish(reply);
  459. }
  460. private void ReqBuzzerStop()
  461. {
  462. this.IO.OutputOff("OUT_BUZZER_00");
  463. this.IO.OutputOff("OUT_BUZZER_01");
  464. this.IO.OutputOff("OUT_BUZZER_02");
  465. }
  466. private void ReqAlarmReset()
  467. {
  468. //this.autoManager.IsErrorProcessing = false;
  469. //this.vehicle.VehicleStateProperty = eVehicleState.Idle;
  470. if (!this.IO.IsOn("IN_MC_ON"))
  471. {
  472. this.IO.WriteOutputIO("OUT_SAFETY_RESET", true);
  473. Thread.Sleep(2000);
  474. this.IO.WriteOutputIO("OUT_SAFETY_RESET", false);
  475. Thread.Sleep(1000);
  476. }
  477. this.autoManager.IsErrorProcessing = false;
  478. this.vehicle.VehicleStateProperty = eVehicleState.Idle;
  479. }
  480. private void ReqEStop()
  481. {
  482. this.scheduler.IsCreateDryRunCommand = !this.scheduler.IsCreateDryRunCommand;
  483. //this.vehicle.EStop();
  484. }
  485. private void ReqVehicleModeChange(VCSMessageEventArgs msg)
  486. {
  487. GUIMessageEventArgs reply;
  488. if (msg.MessageKey.Equals(MessageKey.AutoMode))
  489. {
  490. int result = vehicle.InitializationVehicle();
  491. if (result != 0)
  492. {
  493. this.autoManager.ProcessAlarm(result);
  494. return;
  495. }
  496. if (!ZmqManager.SetOperationState(eOperatationMode.AutoMode))
  497. {
  498. this.autoManager.ProcessAlarm(38);
  499. return;
  500. }
  501. this.autoManager.AutoModeStateProperty = eAutoModeState.StartRun;
  502. this.autoManager.OperationModeProperty = eOperatationMode.AutoMode;
  503. reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Ok(), MessageKey = MessageKey.AutoMode };
  504. }
  505. else
  506. {
  507. if (!ZmqManager.SetOperationState(eOperatationMode.ManualMode))
  508. {
  509. this.autoManager.ProcessAlarm(38);
  510. return;
  511. }
  512. this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.WaitStop;
  513. reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Ok(), MessageKey = MessageKey.ManualMode };
  514. }
  515. GUIMessageEventPublish(reply);
  516. }
  517. void ReqIOObjectMessage()
  518. {
  519. var rspMsg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspIOObject, Args = this.IO };
  520. this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(rspMsg);
  521. }
  522. #endregion
  523. /// <summary>
  524. /// GUI 로 보내는 Event
  525. /// </summary>
  526. /// <param name="args"></param>
  527. public void GUIMessageEventPublish(GUIMessageEventArgs args)
  528. {
  529. this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(args);
  530. }
  531. public void Dispose()
  532. {
  533. this.scheduler.Dispose();
  534. this.hostManager.Dispose();
  535. this.vehicle.Dispose();
  536. this.autoManager.Dispose();
  537. this.bMUManager.Disconnect();
  538. this.drive.Dispose();
  539. this.ZmqManager.Dispose();
  540. (this.IO as IDisposable).Dispose(); //IO 는 마지막에 정리함.
  541. }
  542. public void RegisterTypes(IContainerRegistry containerRegistry)
  543. {
  544. if (!containerRegistry.IsRegistered<VCSystem>())
  545. containerRegistry.RegisterSingleton<VCSystem>();
  546. }
  547. public void OnInitialized(IContainerProvider containerProvider)
  548. {
  549. this.Init();
  550. }
  551. }
  552. }