VehicleStatusViewModel.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using GSG.NET.Extensions;
  2. using OHV.Common.Events;
  3. using OHV.Common.Model;
  4. using OHV.Common.Shareds;
  5. using OHV.SqliteDAL;
  6. using Prism.Events;
  7. using Prism.Mvvm;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using VehicleControlSystem;
  14. using VehicleControlSystem.ControlLayer.IO;
  15. namespace OHV.Module.Status
  16. {
  17. public class VehicleStatusViewModel : BindableBase
  18. {
  19. VCSystem vcSystem;
  20. string _vehicleState;
  21. public string VehicleState
  22. {
  23. get { return vcSystem.autoManager.OperationModeProperty.ToString(); }
  24. set { this.SetProperty( ref this._vehicleState , value ); }
  25. }
  26. IEventAggregator eventAggregator;
  27. string _clampState = string.Empty;
  28. public string ClampState
  29. {
  30. get { return this._clampState; }
  31. set { this.SetProperty( ref this._clampState , value ); }
  32. }
  33. string _cvState = string.Empty;
  34. public string CvState
  35. {
  36. get { return this._cvState; }
  37. set { this.SetProperty( ref this._cvState , value ); }
  38. }
  39. string _cvDir = "IDLE";
  40. public string CvDir
  41. {
  42. get { return this._cvDir; }
  43. set { this.SetProperty( ref this._cvDir , value ); }
  44. }
  45. double _vehicleCurrentPos;
  46. public double VehicleCurrentPos
  47. {
  48. get { return this._vehicleCurrentPos; }
  49. set { this.SetProperty( ref this._vehicleCurrentPos , value ); }
  50. }
  51. string _vehicleCurrentTag;
  52. public string VehicleCurrentTag
  53. {
  54. get { return this._vehicleCurrentTag; }
  55. set { this.SetProperty( ref this._vehicleCurrentTag , value ); }
  56. }
  57. EzIO IO = null;
  58. SqliteManager sqliteManager;
  59. public VehicleStatusViewModel(IEventAggregator _ea, VCSystem _vcSystem , SqliteManager sql)
  60. {
  61. this.eventAggregator = _ea;
  62. this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
  63. this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
  64. this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveUICallBackCommunication );
  65. this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( DriveUICallBackCommunication , ThreadOption.UIThread );
  66. this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.VehicleState } );
  67. this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.SyncState } );
  68. this.vcSystem = _vcSystem;
  69. vcSystem.autoManager.OnOperationModeChanged += ( mode ) => { this.VehicleState = mode.ToString(); };
  70. this.IO = _vcSystem.IO as EzIO;
  71. this.IO.OnChangedIO += IO_OnChangedIO;
  72. if ( IO.IsOn( "OUT_CV_RUN", false ) )
  73. this.CvState = "RUN";
  74. else
  75. this.CvState = "IDLE";
  76. this.sqliteManager = sql;
  77. this.VehicleCurrentTag = sql.VehicleInfoDAL.GetInfo().CurrentTag;
  78. }
  79. private void DriveUICallBackCommunication( DriveControlEventArgs obj )
  80. {
  81. if(obj.EventDir == DriveControlEventArgs.eEventDir.ToFront)
  82. {
  83. switch ( obj.ControlKind )
  84. {
  85. case DriveControlEventArgs.eControlKind.MOVE:
  86. break;
  87. case DriveControlEventArgs.eControlKind.STOP:
  88. break;
  89. case DriveControlEventArgs.eControlKind.Steering:
  90. break;
  91. case DriveControlEventArgs.eControlKind.SteeringState:
  92. break;
  93. case DriveControlEventArgs.eControlKind.ReqCurrentPos:
  94. break;
  95. case DriveControlEventArgs.eControlKind.ReqStopCurrentPos:
  96. break;
  97. case DriveControlEventArgs.eControlKind.FaultReset:
  98. break;
  99. case DriveControlEventArgs.eControlKind.DriveON:
  100. break;
  101. case DriveControlEventArgs.eControlKind.DriveOFF:
  102. break;
  103. case DriveControlEventArgs.eControlKind.JOG:
  104. break;
  105. case DriveControlEventArgs.eControlKind.VehicleState:
  106. var state = CastTo<VehicleInfo>.From<object>( obj.Args );
  107. this.VehicleCurrentPos = state.CurrentPosition;
  108. break;
  109. }
  110. }
  111. }
  112. private void IO_OnChangedIO( BitBlock bit )
  113. {
  114. if ( bit.Tag.Equals( "OUT_CV_RUN" ) )
  115. this.CvState = "RUN";
  116. if ( bit.Tag.Equals( "OUT_CV_CWCCW" ) && bit.Tag.Equals("OUT_CV_RUN"))
  117. this.CvDir = "CW";
  118. else if ( !bit.Tag.Equals( "OUT_CV_CWCCW" ) && bit.Tag.Equals( "OUT_CV_RUN" ) )
  119. this.CvDir = "CCW";
  120. else
  121. this.CvDir = "IDLE";
  122. if ( bit.Tag.Equals( "IN_CV_ERROR" ) )
  123. this.CvState = "ERROR";
  124. else
  125. this.CvState = "IDLE";
  126. }
  127. private void UICallBackCommunication( GUIMessageEventArgs obj )
  128. {
  129. if(obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
  130. {
  131. if(obj.MessageKey.Equals(MessageKey.Vehicle))
  132. {
  133. switch(obj.ModelPropertyName)
  134. {
  135. case "ClampState":
  136. var state = CastTo<eClampState>.From<object>( obj.Args );
  137. this.ChangedClampState( state );
  138. break;
  139. case "Currenttag":
  140. var tag = CastTo<string>.From<object>(obj.Args);
  141. this.VehicleCurrentTag = tag;
  142. break;
  143. }
  144. }
  145. }
  146. }
  147. private void ChangedClampState( eClampState state )
  148. {
  149. switch ( state )
  150. {
  151. case eClampState.NONE:
  152. this.ClampState = eClampState.NONE.ToString();
  153. break;
  154. case eClampState.LOCK:
  155. this.ClampState = eClampState.LOCK.ToString();
  156. break;
  157. case eClampState.UNLOCK:
  158. this.ClampState = eClampState.UNLOCK.ToString();
  159. break;
  160. }
  161. }
  162. public void Init( ) { }
  163. }
  164. }