Program.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using Edge.Core.Processor.Communicator;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO.Ports;
  5. using System.Linq;
  6. using System.Threading;
  7. namespace TestComPortServer
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. //var list0 = new List<int>() { };
  14. //var list1 = new List<int>() { 1, 2, 3, 4, 5 };
  15. //var except = list0.Except(list1).Union(list1.Except(list0));
  16. //Console.WriteLine("except are:" +
  17. // (except.Any() ? (except.Select(s => s.ToString()).Aggregate((acc, n) => acc + ", " + n)) : ""));
  18. //Console.ReadKey();
  19. int totalTestMsgCount = int.Parse(args[0]);
  20. int reportInterval = int.Parse(args[1]);
  21. Console.WriteLine("Start ComToTcpTest...");
  22. ComToTcpTest(reportInterval, totalTestMsgCount, "192.168.0.7", 20001, "COM5", () =>
  23. {
  24. Thread.Sleep(5000);
  25. Console.WriteLine("Start TcpToComTest...");
  26. TcpToComTest(reportInterval, totalTestMsgCount, "192.168.0.7", 20001, "COM5", () =>
  27. {
  28. Thread.Sleep(5000);
  29. Console.WriteLine("Start ComToTcpTest...");
  30. ComToTcpTest(reportInterval, totalTestMsgCount, "192.168.0.7", 20001, "COM5", null);
  31. });
  32. });
  33. while (true)
  34. Console.ReadLine();
  35. }
  36. static void TcpToComTest(int progress, int totalTestMsgCount, string tcpServerIp, int tcpServerPort, string comPortName, Action callback)
  37. {
  38. TcpClientCommunicator<Message> communicator = new TcpClientCommunicator<Message>(
  39. new MessageCutter(),
  40. new MessageParser(), tcpServerIp, tcpServerPort, null, null);
  41. communicator.OnConnected += (_, __) =>
  42. {
  43. SerialPort serialPort = new SerialPort(comPortName,
  44. 9600, Parity.Odd, 8, StopBits.One);
  45. List<byte> comPortReceived = new List<byte>();
  46. serialPort.DataReceived += (s, sa) =>
  47. {
  48. while (serialPort.BytesToRead > 0)
  49. {
  50. comPortReceived.Add((byte)serialPort.ReadByte());
  51. }
  52. };
  53. serialPort.Open();
  54. var parser = new MessageParser();
  55. // counters
  56. var delayTimes = new List<Tuple<int, int>>()
  57. {
  58. new Tuple<int, int>(10,0),
  59. new Tuple<int, int>(30,0),
  60. new Tuple<int, int>(50,0),
  61. new Tuple<int, int>(100,0),
  62. new Tuple<int, int>(150,0),
  63. new Tuple<int, int>(200,0),
  64. new Tuple<int, int>(300,0),
  65. new Tuple<int, int>(500,0),
  66. new Tuple<int, int>(800,0),
  67. new Tuple<int, int>(1000,0),
  68. new Tuple<int, int>(2000,0),
  69. };
  70. for (int i = 0; i < totalTestMsgCount; i++)
  71. {
  72. if (i % progress == 0)
  73. {
  74. Console.WriteLine("(TcpToCom)sending at " + (i + 1) + " message");
  75. }
  76. var msg = new Message() { Id = i, Description = "abcde" };
  77. var tcpSend = parser.Serialize(msg);
  78. communicator.Write(msg);
  79. int hitTime = 0;
  80. for (int d = 0; d < delayTimes.Count; d++)
  81. {
  82. Thread.Sleep(delayTimes[d].Item1);
  83. if (!comPortReceived.Any()
  84. || comPortReceived.Count != tcpSend.Length
  85. || comPortReceived.Except(tcpSend).Union(tcpSend.Except(comPortReceived)).Any()
  86. )
  87. {
  88. continue;
  89. }
  90. hitTime = d;
  91. break;
  92. }
  93. var reportItem = delayTimes[hitTime];
  94. delayTimes.RemoveAt(hitTime);
  95. delayTimes.Insert(hitTime, new Tuple<int, int>(reportItem.Item1, reportItem.Item2 + 1));
  96. comPortReceived.Clear();
  97. }
  98. communicator.Dispose();
  99. serialPort.Close();
  100. Console.WriteLine("Tcp to Comport Report(total send msg: " + totalTestMsgCount + "):\r\n " + delayTimes.Select(b => b.Item1 + "ms : " + b.Item2 + " times").Aggregate((acc, n) => acc + "\r\n" + n));
  101. callback?.Invoke();
  102. };
  103. communicator.Start();
  104. }
  105. static void ComToTcpTest(int progress, int totalTestMsgCount, string tcpServerIp, int tcpServerPort, string comPortName, Action callback)
  106. {
  107. TcpClientCommunicator<Message> communicator = new TcpClientCommunicator<Message>(
  108. new MessageCutter(),
  109. new MessageParser(), tcpServerIp, tcpServerPort, null, null);
  110. List<byte> tcpReceived = new List<byte>();
  111. communicator.OnDataReceived += (a, b) =>
  112. {
  113. tcpReceived = b.Data.ToList();
  114. };
  115. communicator.OnConnected += (_, __) =>
  116. {
  117. SerialPort serialPort = new SerialPort(comPortName, 9600, Parity.Odd, 8, StopBits.One);
  118. serialPort.Open();
  119. var parser = new MessageParser();
  120. var delayTimes = new List<Tuple<int, int>>()
  121. {
  122. new Tuple<int, int>(10,0),
  123. new Tuple<int, int>(30,0),
  124. new Tuple<int, int>(50,0),
  125. new Tuple<int, int>(100,0),
  126. new Tuple<int, int>(150,0),
  127. new Tuple<int, int>(200,0),
  128. new Tuple<int, int>(300,0),
  129. new Tuple<int, int>(500,0),
  130. new Tuple<int, int>(800,0),
  131. new Tuple<int, int>(1000,0),
  132. new Tuple<int, int>(2000,0),
  133. };
  134. for (int i = 0; i < totalTestMsgCount; i++)
  135. {
  136. if (i % progress == 0)
  137. {
  138. Console.WriteLine("(ComToTcp)sending at " + (i + 1) + " message");
  139. }
  140. var msg = new Message() { Id = i, Description = "abcde" };
  141. var comSend = parser.Serialize(msg);
  142. serialPort.Write(comSend, 0, comSend.Length);
  143. //serialPort.BaseStream.Flush();
  144. int hitTime = 0;
  145. for (int d = 0; d < delayTimes.Count; d++)
  146. {
  147. Thread.Sleep(delayTimes[d].Item1);
  148. if (!tcpReceived.Any()
  149. || tcpReceived.Count != comSend.Length
  150. || tcpReceived.Except(comSend).Union(comSend.Except(tcpReceived)).Any()
  151. )
  152. {
  153. continue;
  154. }
  155. hitTime = d;
  156. break;
  157. }
  158. var reportItem = delayTimes[hitTime];
  159. delayTimes.RemoveAt(hitTime);
  160. delayTimes.Insert(hitTime, new Tuple<int, int>(reportItem.Item1, reportItem.Item2 + 1));
  161. tcpReceived.Clear();
  162. }
  163. communicator.Dispose();
  164. serialPort.Close();
  165. Console.WriteLine("Com to Tcp Report(total send msg: " + totalTestMsgCount + "):\r\n " + delayTimes.Select(b => b.Item1 + "ms : " + b.Item2 + " times").Aggregate((acc, n) => acc + "\r\n" + n));
  166. callback?.Invoke();
  167. };
  168. communicator.Start();
  169. }
  170. }
  171. }