Peak.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using GSG.NET.Concurrent;
  2. using GSG.NET.Extensions;
  3. using GSG.NET.Logging;
  4. using GSG.NET.TCP;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using VehicleControlSystem.ControlLayer.Serial.DataModel;
  13. namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
  14. {
  15. public class Peak
  16. {
  17. static Logger logger = Logger.GetLogger();
  18. protected TsQueue<object> qqW = new TsQueue<object>( 128 );//write
  19. BMUManager manager = null;
  20. object lockObject = new object();
  21. public Peak( BMUManager mrg )
  22. {
  23. this.manager = mrg;
  24. }
  25. internal void Enqueue(object o )
  26. {
  27. this.qqW.Enqueue( o );
  28. }
  29. void TryToConnect()
  30. {
  31. this.qqW.Clear();
  32. //h.Connect( new TcpComm
  33. //{
  34. // Ip = this.manager.Config.IpAddress,
  35. // PortNo = this.manager.Config.Port,
  36. // RollCnt = 1,
  37. //} );
  38. manager._OnConnected();
  39. }
  40. //Todo:Dll 에서 상태 가져오기
  41. bool IsConnected => true;
  42. public void _ThreadPoolingReceiveData()
  43. {
  44. while ( !this.manager.cancel.Canceled )
  45. {
  46. try
  47. {
  48. if ( !IsConnected )
  49. {
  50. this.TryToConnect();
  51. continue;
  52. }
  53. object o = this.qqW.Dequeue();
  54. if ( o is PollingObject ) //Scan 을 주기적 으로 진행.
  55. {
  56. this.PollingBattery();
  57. }
  58. //else if ( o is ISetData ) //하나의 명령을 수행.
  59. //{
  60. // //ExecuteSetData( o as ISetData );
  61. //}
  62. else if ( o is DoInvokeChangedReceivedData ) //Scan 이후 결과를 처리. Manager 에서 처리
  63. {
  64. //this.manager._InvokeChgdReceivedData();
  65. }
  66. }
  67. catch ( ThreadAbortException exception )
  68. {
  69. logger.E( $"eSlnet {this.manager.BMUConfig.ID} - {exception.Message}" );
  70. //h.CloseSocket();
  71. }
  72. catch ( ObjectDisposedException exception )
  73. {
  74. //this.TcpError( exception );
  75. }
  76. catch ( IOException exception )
  77. {
  78. //this.TcpError( exception );
  79. }
  80. catch ( Exception exception )
  81. {
  82. logger.E( $"eSlnet {exception.Message}" );
  83. }
  84. }
  85. }
  86. private void PollingBattery()
  87. {
  88. var ll = this.manager.ReceivedDataDic.Values.ToList();
  89. ll.ForEach( x =>
  90. {
  91. var kind = CastTo<eDataKind>.From<Enum>( x.DataKind );
  92. switch ( kind )
  93. {
  94. case eDataKind.Volte:
  95. break;
  96. case eDataKind.Current:
  97. break;
  98. case eDataKind.BatteryState:
  99. break;
  100. case eDataKind.ChargeCompleteTime:
  101. break;
  102. case eDataKind.DisChargeCompleteTime:
  103. break;
  104. case eDataKind.SOC:
  105. break;
  106. case eDataKind.SOH:
  107. break;
  108. case eDataKind.ResidualCapacity:
  109. break;
  110. case eDataKind.ResidualEnergy:
  111. break;
  112. case eDataKind.Temperature:
  113. break;
  114. default:
  115. break;
  116. }
  117. } );
  118. }
  119. }
  120. }