WattsineRfPower.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using MECF.Framework.Common.Utilities;
  2. using MECF.Framework.Simulator.Core.Driver;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Diagnostics;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Timers;
  10. namespace MECF.Framework.Simulator.Core.RFs
  11. {
  12. public class WattsineRfPower: SerialPortDeviceSimulator
  13. {
  14. public bool Failed { get; set; }
  15. public bool IsOn { get; set; }
  16. public bool IsHalo { get; set; }
  17. public bool IsContinueAck { get; set; }
  18. Stopwatch _timer = new Stopwatch();
  19. private System.Timers.Timer _tick;
  20. Random _rd = new Random();
  21. private object _locker = new object();
  22. public string ResultValue { get; set; }
  23. public WattsineRfPower(string port)
  24. : base(port, -1, " ", ' ', false)
  25. {
  26. ResultValue = "";
  27. _tick = new System.Timers.Timer();
  28. _tick.Interval = 200;
  29. _tick.Elapsed += _tick_Elapsed;
  30. _tick.Start();
  31. }
  32. private void _tick_Elapsed(object sender, ElapsedEventArgs e)
  33. {
  34. lock (_locker)
  35. {
  36. if (_timer.IsRunning && _timer.Elapsed > TimeSpan.FromSeconds(10))
  37. {
  38. _timer.Stop();
  39. }
  40. }
  41. }
  42. List<byte> _cached = new List<byte>();
  43. //private int _mode;
  44. //private int _powerSetPoint;
  45. protected override void ProcessUnsplitMessage(byte[] message1)
  46. {
  47. _cached.AddRange(message1);
  48. if (_cached.Count < 3)
  49. return;
  50. byte[] msgIn = _cached.ToArray();
  51. _cached.Clear();
  52. //List<byte> lstAck = new List<byte>();
  53. //lstAck.Add(0x06);
  54. byte[] response = BuildMessage(msgIn[0], msgIn[1],new byte[] { msgIn[4],msgIn[5] },msgIn);
  55. OnWriteMessage(response);
  56. //if (!IsContinueAck)
  57. //{
  58. // OnWriteMessage(lstAck.ToArray());
  59. // OnWriteMessage(response);
  60. //}
  61. //else
  62. //{
  63. // lstAck.AddRange(response);
  64. // OnWriteMessage(lstAck.ToArray());
  65. //}
  66. }
  67. private static byte[] BuildMessage(byte address, byte command,byte[] readLength,byte[] msgIn)
  68. {
  69. List<byte> buffer = new List<byte>();
  70. buffer.Add(address);
  71. buffer.Add(command);
  72. if (command == 0x06)
  73. {
  74. buffer.AddRange(msgIn.Skip(2).Take(4));
  75. }
  76. if (command == 0x03)
  77. {
  78. ushort len = (ushort)((readLength[0] * 256) + readLength[1]);
  79. buffer.Add((byte)len);
  80. for (int i = 0; i < len; i++)
  81. {
  82. buffer.AddRange(new byte[] { 0x00, 0x00 });
  83. }
  84. //buffer.Add(CalcSum(buffer, buffer.Count));
  85. }
  86. var crc = Crc16.Crc16Ccitt(buffer.ToArray());
  87. buffer.Add((byte)(crc >> 8));
  88. buffer.Add((byte)(crc & 0xFF));
  89. return buffer.ToArray();
  90. }
  91. private static byte CalcSum(List<byte> data, int length)
  92. {
  93. byte ret = 0x00;
  94. for (var i = 0; i < length; i++)
  95. {
  96. ret ^= data[i];
  97. }
  98. return ret;
  99. }
  100. }
  101. }