FUSIONTank.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #region --------------- Copyright Dresser Wayne Pignone -------------
  2. /*
  3. * $Log: /Wrk/Support/ForecourtControl/Wrk/NfsControl/NfsTank.cs $
  4. *
  5. * 3 07-11-14 20:35 roger.månsson
  6. * Set ParserDomain on messages.
  7. *
  8. * 2 07-03-09 15:42 roger.månsson
  9. * Implemented the RPC function sending
  10. *
  11. * 1 07-02-02 17:13 roger.månsson
  12. * Created
  13. */
  14. #endregion
  15. using System;
  16. using Wayne.Lib;
  17. #if _SINP
  18. using Wayne.ForecourtControl.Nfs;
  19. #endif
  20. namespace Wayne.ForecourtControl.Fusion
  21. {
  22. public class FUSIONTank : ITank
  23. {
  24. #region Fields
  25. FUSIONManager manager;
  26. int id;
  27. ITankGroup tankGroup;
  28. Wayne.Lib.DeviceConnectionState connectionState = Wayne.Lib.DeviceConnectionState.Unknown;
  29. ITankReading latestPhysicalReading;
  30. ITankReadingEx latestPhysicalReadingEx;
  31. bool capPhysicalReading;
  32. #endregion
  33. #region Events
  34. public event EventHandler<ConnectionChangedEventArgs> OnConnectionStateChange;
  35. #endregion
  36. #region Construction
  37. public FUSIONTank(FUSIONManager manager, int id, ITankGroup tankGroup)
  38. {
  39. this.manager = manager;
  40. this.id = id;
  41. this.tankGroup = tankGroup;
  42. }
  43. #endregion
  44. #region Properties
  45. public int Id
  46. {
  47. get
  48. {
  49. if (manager.IdTankShift > 0)
  50. return this.id + manager.IdTankShift;
  51. else
  52. return this.id + manager.IdShift;
  53. }
  54. }
  55. public int realId
  56. {
  57. get
  58. {
  59. return this.id;
  60. }
  61. }
  62. public ITankGroup TankGroup
  63. {
  64. get { return tankGroup; }
  65. }
  66. public Wayne.Lib.DeviceConnectionState ConnectionState
  67. {
  68. get { return connectionState; }
  69. }
  70. public ITankReading LatestPhysicalReading
  71. {
  72. get { return latestPhysicalReading; }
  73. }
  74. public ITankReadingEx LatestPhysicalReadingEx
  75. {
  76. get { return latestPhysicalReadingEx; }
  77. }
  78. public bool CapPhysicalReading
  79. {
  80. get { return capPhysicalReading; }
  81. }
  82. #endregion
  83. /*static public ITank getTankByIndex(int iTankGroupId, int iTankId)
  84. {
  85. foreach (ITankGroup tankgroup in FUSIONFactory.fusionForecourtControl.TankGroups)
  86. {
  87. if (tankgroup.Id == iTankGroupId)
  88. {
  89. foreach (ITank tank in tankgroup.Tanks)
  90. {
  91. if (tank.Id == iTankId)
  92. return tank;
  93. }
  94. }
  95. }
  96. return null;
  97. }*/
  98. #region Methods
  99. public void ReadAsync(EventHandler<Wayne.Lib.AsyncCompletedEventArgs<ITankReading>> readingCompleted, object userToken)
  100. {
  101. throw new NotImplementedException();
  102. //this.manager.ifsfManager.GetTankData(this.realId, this.realId, readingCompleted, userToken, this);
  103. }
  104. public void ReadAsyncEx(EventHandler<Wayne.Lib.AsyncCompletedEventArgs<ITankReadingEx>> readingCompleted, object userToken)
  105. {
  106. //AsyncOperation<UInt16> operation = manager.AsyncManager.RegisterOperation(this, readingCompleted, userToken);
  107. //manager.Send(new Function(Fid.RpcReqTigScan,
  108. // ParserDomain.FillingServer,
  109. // new PrimitiveParameter(Pid.SequenceNumber, PrimitiveType.UInt16, operation.Id),
  110. // new PrimitiveParameter(Pid.TankNumber, PrimitiveType.Byte, this.id + 1)));
  111. this.manager.ifsfManager.GetTankData(this.realId, this.realId, readingCompleted, userToken, this);
  112. //if (readingCompleted != null)
  113. // readingCompleted.Invoke(this, new AsyncCompletedEventArgs<ITankReadingEx>(true, null, userToken));
  114. }
  115. public void RegisterManualTankDippingAsync(decimal tankLevel, EventHandler<Wayne.Lib.AsyncCompletedEventArgs> manualTankDippingRegistered, object userToken)
  116. {
  117. throw new NotImplementedException();
  118. //AsyncOperation<UInt16> operation = manager.AsyncManager.RegisterOperation(this, manualTankDippingRegistered, userToken);
  119. //manager.Send(new Function(Fid.RpcReqTankDipping,
  120. // ParserDomain.FillingServer,
  121. // new PrimitiveParameter(Pid.SequenceNumber, PrimitiveType.UInt16, operation.Id),
  122. // new PrimitiveParameter(Pid.DateTime, PrimitiveType.DateTime, DateTime.Now),
  123. // new PrimitiveParameter(Pid.TankNumber, PrimitiveType.Byte, this.id + 1),
  124. // new PrimitiveParameter(Pid.TankVolume, PrimitiveType.Decimal, tankLevel)));
  125. }
  126. #endregion
  127. #region Internal Writable Properties
  128. internal Wayne.Lib.DeviceConnectionState WritableConnectionState
  129. {
  130. get { return connectionState; }
  131. set
  132. {
  133. if (connectionState != value)
  134. {
  135. connectionState = value;
  136. if (OnConnectionStateChange != null)
  137. OnConnectionStateChange.BeginInvoke(this, new ConnectionChangedEventArgs(connectionState), null, null);
  138. }
  139. }
  140. }
  141. internal ITankReading WritableLatestPhysicalReading
  142. {
  143. get { return latestPhysicalReading; }
  144. set { latestPhysicalReading = value; }
  145. }
  146. internal ITankReadingEx WritableLatestPhysicalReadingEx
  147. {
  148. get { return latestPhysicalReadingEx; }
  149. set { latestPhysicalReadingEx = value; }
  150. }
  151. internal bool WritableCapPhysicalReading
  152. {
  153. get { return capPhysicalReading; }
  154. set { capPhysicalReading = value; }
  155. }
  156. #endregion
  157. }
  158. }