MainWindow.xaml.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. using System;
  2. using System.Threading;
  3. using System.Windows;
  4. using System.Windows.Media;
  5. using GSG.NET.Logging;
  6. using GSG.NET.Quartz;
  7. using OHVConnector;
  8. namespace OHVProtocolServer
  9. {
  10. /// <summary>
  11. /// MainWindow.xaml에 대한 상호 작용 논리
  12. /// </summary>
  13. public partial class MainWindow : Window
  14. {
  15. Manager manager;
  16. static Logger logger = Logger.GetLogger("Host");
  17. public MainWindow()
  18. {
  19. InitializeComponent();
  20. }
  21. private void Window_Loaded(object sender, RoutedEventArgs e)
  22. {
  23. QuartzUtils.Init( 10 );
  24. double b = 1;
  25. var s = b.ToString("00.00").Replace(".", "");
  26. string basePath = AppDomain.CurrentDomain.BaseDirectory;
  27. LogUtils.Configure(basePath + "/log4net.xml");
  28. //var om = new OCSMessage();
  29. //om.Id = "V0001";
  30. //om.Kind = OCSMessage.eKind.A;
  31. //om.RevID = "01";
  32. //om.SendID = om.Id;
  33. //om.Tag = "P001";
  34. //om.IsSubCode1 = false;
  35. //om.IsSubCode2 = true;
  36. //om.IsSubCode3 = false;
  37. //var mb = om.Decoding();
  38. //Debug.WriteLine(mb.ToBytes);
  39. manager = new Manager();
  40. manager.Config = new Config { ID = "V0001", Port = 5000 };
  41. manager.OnContd += Con_OnHsmsContd;
  42. manager.OnDiscontd += Con_OnHsmsDiscontd;
  43. manager.OnT3Timeout += Manager_OnT3Timeout;
  44. manager.OnLog += Manager_OnLog;
  45. manager.OnRecd += Manager_OnRecd;
  46. manager.OnSent += Manager_OnSent;
  47. }
  48. private void Manager_OnSent(OCSMessage msg)
  49. {
  50. logger.I("[Sent] : " + msg.LogFormat());
  51. }
  52. private void Manager_OnRecd(OCSMessage msg)
  53. {
  54. logger.I(msg.LogFormat());
  55. switch ( msg.Kind )
  56. {
  57. case OHVConnector.eKind.Unknown:
  58. break;
  59. case OHVConnector.eKind.E://Error 보고 요청.
  60. break;
  61. case OHVConnector.eKind.S://마지막으로 읽은 TagNo
  62. break;
  63. case OHVConnector.eKind.B://battery Report
  64. break;
  65. case OHVConnector.eKind.T://위치 응답
  66. break;
  67. case OHVConnector.eKind.C://제어 요청
  68. break;
  69. case OHVConnector.eKind.P://수동명령보고
  70. break;
  71. case OHVConnector.eKind.I:
  72. break;
  73. case OHVConnector.eKind.O:
  74. break;
  75. case OHVConnector.eKind.A://Alive
  76. break;
  77. case OHVConnector.eKind.L:
  78. break;
  79. case OHVConnector.eKind.U:
  80. break;
  81. case OHVConnector.eKind.F:
  82. break;
  83. case OHVConnector.eKind.M:
  84. ReceiveMCommand( msg );
  85. break;
  86. case OHVConnector.eKind.R:
  87. ReceiveRCommand( msg );
  88. break;
  89. case OHVConnector.eKind.H:
  90. break;
  91. case OHVConnector.eKind.Z:
  92. break;
  93. default:
  94. break;
  95. }
  96. }
  97. void Reply( OCSMessage recieve )
  98. {
  99. var reply = new OCSMessage();
  100. reply.Kind = recieve.Kind;
  101. reply.Tag = recieve.Tag;
  102. reply.SubCode = recieve.SubCode;
  103. this.manager.Reply( reply );
  104. }
  105. private void ReceiveRCommand( OCSMessage msg )
  106. {
  107. this.Reply( msg );
  108. if ( msg.SubCode.Equals( "100" ) )
  109. {
  110. int tag = 1234;
  111. Send_Scmd( tag );
  112. }
  113. if ( msg.SubCode.Equals( "010" ) )
  114. {
  115. Send_Bcmd( 12.34 );
  116. }
  117. }
  118. public void Send_Scmd( int point )
  119. {
  120. var msg = new OCSMessage();
  121. msg.Kind = eKind.S;
  122. msg.Tag = point.ToString( "0000" );
  123. msg.SubCode = "123";
  124. this.manager.Send( msg );
  125. }
  126. private void ReceiveMCommand( OCSMessage msg )
  127. {
  128. this.Reply( msg );
  129. //var info = sql.VehicleInfoDAL.GetInfo();
  130. //if ( info.MachineMode == eMachineMode.LocalMode )
  131. //{
  132. // logger.E( $"[OCS] Cmd - Current Mode Local Mode " );
  133. // return;
  134. //}
  135. //var hasCommand = this.sql.CommandDAL.GetCmd();
  136. //if ( hasCommand != null )
  137. //{
  138. // //Todo: 충전 중에는 어떻게 하지???
  139. // if ( !hasCommand.IsSecondCommanded )
  140. // sql.CommandDAL.Delete( hasCommand );
  141. // else
  142. // {
  143. // logger.E( $"[OCS] Cmd - {msg.Kind} Message Tag [{msg.Tag}] - Already Load/Unload " );
  144. // return;
  145. // }
  146. //}
  147. //var cmd = new Command();
  148. //switch ( msg.SubCode )
  149. //{
  150. // case "000": //Move
  151. // cmd.Type = eCommandType.Move;
  152. // break;
  153. // case "001": //Move and Load
  154. // cmd.Type = eCommandType.MoveNLoad;
  155. // break;
  156. // case "002": //Move and Unload
  157. // cmd.Type = eCommandType.MoveNUnload;
  158. // break;
  159. // case "003": //Move and Charge
  160. // cmd.Type = eCommandType.Charging;
  161. // break;
  162. // default:
  163. // return;
  164. //}
  165. ////Todo: 등록 되어 있는 경로 가 있는 지 확인 필요.
  166. //var route = this.sql.RouteDal.GetRouteFromOCSMatchID( msg.Tag );
  167. //if ( route == null )
  168. //{
  169. // logger.E( $"[OCS] Message Tag [{msg.Tag}] - not found route" );
  170. // return;
  171. //}
  172. //cmd.TargetID = route.Name;
  173. //this.sql.CommandDAL.Add( cmd );
  174. }
  175. private void Manager_OnLog(string id, string log)
  176. {
  177. logger.I(log);
  178. }
  179. private void Manager_OnT3Timeout(OCSMessage msg)
  180. {
  181. logger.E($"[T3TimeOut] - {msg.LogFormat()}");
  182. }
  183. private void Con_OnHsmsDiscontd(string id, Exception e)
  184. {
  185. this.btnConnect.Background = Brushes.Gray;
  186. QuartzUtils.StopSchedule( "BatteryReport" );
  187. }
  188. private void Con_OnHsmsContd(string id)
  189. {
  190. this.btnConnect.Background = Brushes.Green;
  191. QuartzUtils.Invoke( "BatteryReport", QuartzUtils.GetExpnMinute( 1 ), BatteryState_Report );
  192. }
  193. void BatteryState_Report()
  194. {
  195. Send_Bcmd( 55.12 );
  196. }
  197. public void Send_Bcmd( double volt )
  198. {
  199. var msg = new OCSMessage();
  200. msg.Kind = eKind.B;
  201. var bData = volt;
  202. msg.Tag = bData.ToString( "00.00" ).Replace( ".", "" );
  203. msg.SubCode = "000";
  204. this.manager.Send( msg );
  205. }
  206. private void btnConnect_Click(object sender, RoutedEventArgs e)
  207. {
  208. this.manager.Connect(false);
  209. }
  210. private void btnSend_Click(object sender, RoutedEventArgs e)
  211. {
  212. var om = new OCSMessage();
  213. om.Id = "A0";
  214. om.Kind = eKind.A;
  215. om.RevID = "V0001";
  216. om.SendID = om.Id;
  217. om.Tag = DateTime.Now.ToString("mmss");
  218. om.SubCode = DateTime.Now.ToString("fff");
  219. this.manager.Send(om);
  220. }
  221. private void Button_Click(object sender, RoutedEventArgs e)
  222. {
  223. OCSMessage meg = new OCSMessage();
  224. meg.RevID = "V0001";
  225. meg.SendID = "A0";
  226. meg.Kind = (eKind)Enum.ToObject(typeof(eKind), this.comboMessageKind.SelectedItem);
  227. meg.Tag = this.txtTag.Text;
  228. meg.SubCode = this.txtSubCode.Text;
  229. this.manager.Send(meg);
  230. }
  231. }
  232. }