RorzeRobot751Simulator.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using MECF.Framework.Simulator.Core.Driver;
  3. using Aitex.Core.Util;
  4. using System.Collections.Generic;
  5. using System.Text.RegularExpressions;
  6. using System.Threading;
  7. namespace athosSimulator.Robot
  8. {
  9. public class RorzeRobot751Simulator : SocketDeviceSimulator
  10. {
  11. public enum STAT_s1
  12. {
  13. OperationMode,
  14. OriginSearchCompletion,
  15. CommandProcessing,
  16. OperationStatus,
  17. OperationSpeed
  18. }
  19. public enum STAT_s2
  20. {
  21. IdentificationCode,
  22. ErrorCode
  23. }
  24. private string _motionCmd = "HOME,EXTD,LOAD,UNLD,TRNS,EXCH,CLMP,UCLM,WMAP,UTRN,MGET,MPUT,MGT1,MGT2,MPT1,MPT2,WCHK,ALEX,ALLD,ALUL,ALGT,ALEA,ALMV,STEP,GCHK";
  25. private const string RORZECMD = "^oTRB1";
  26. private readonly char[] delimiters = { ':', '.', '(', ',' ,')' };
  27. /// <summary>
  28. /// STAT s1 / s2
  29. /// </summary>
  30. private char[] s1 = new char[5] { '0', '0' ,'0', '0', '0' };
  31. private char[] s2 = new char[4] { '0', '0', '0', '0' };
  32. public RorzeRobot751Simulator(int port) : base(port, -1, "\r", ' ')
  33. {
  34. }
  35. /// <summary>
  36. /// Message处理
  37. /// </summary>
  38. /// <param name="str"></param>
  39. protected override void ProcessUnsplitMessage(string str)
  40. {
  41. // 处理Message
  42. OnProcessMessage(str);
  43. }
  44. private void OnProcessMessage(string str)
  45. {
  46. if (!Regex.IsMatch(str, RORZECMD)) return;
  47. // 发送ACK 表示收到
  48. string[] cmdStrs = str.Split(delimiters);
  49. string ack = "";
  50. if(cmdStrs.Length < 2) return;
  51. string cmd = cmdStrs[1];
  52. if (_motionCmd.Contains(cmdStrs[1])) cmd = "MOTIONCMD";
  53. switch (cmd)
  54. {
  55. case "STAT":
  56. ack = "aTRB1." + $"{cmdStrs[1]}" + $":{GetSTATStr()}";
  57. break;
  58. case "INIT":
  59. OnWriteMessage($"aTRB1.{cmdStrs[1]}:");
  60. Thread.Sleep((ushort)500);
  61. SetState("s1", (int)STAT_s1.OperationMode, '1');//OperationMode: Remote
  62. SetState("s1", (int)STAT_s1.OriginSearchCompletion, '1');//OriginSearchCompletion: Completed
  63. ack = "eTRB1." + $"STAT" + $":{GetSTATStr()}";
  64. Thread.Sleep((ushort)3000);
  65. break;
  66. case "ORGN":
  67. OnWriteMessage($"aTRB1.{cmdStrs[1]}:");
  68. Thread.Sleep((ushort)500);
  69. SetState("s1", (int)STAT_s1.OriginSearchCompletion, '1');//OriginSearchCompletion: Completed
  70. SetState("s1", (int)STAT_s1.OperationStatus, '0');//OperationStatus: Stop
  71. ack = "eTRB1." + $"STAT" + $":{GetSTATStr()}";
  72. Thread.Sleep((ushort)3000);
  73. break;
  74. case "MOTIONCMD":
  75. OnWriteMessage($"aTRB1.{cmdStrs[1]}:");
  76. Thread.Sleep((ushort)500);
  77. SetState("s1", (int)STAT_s1.OriginSearchCompletion, '1');//OriginSearchCompletion: Completed
  78. SetState("s1", (int)STAT_s1.OperationStatus, '0');//OperationStatus: Stop
  79. ack = "eTRB1." + $"STAT" + $":{GetSTATStr()}";
  80. Thread.Sleep((ushort)3000);
  81. break;
  82. case "EXST":
  83. ack = "aTRB1." + $"{cmdStrs[1]}" + $":0";
  84. break;
  85. default:
  86. ack = "aTRB1." + $"{cmdStrs[1]}" + ":";
  87. break;
  88. }
  89. OnWriteMessage(ack);
  90. }
  91. /// <summary>
  92. /// 设置STAT数据状态
  93. /// </summary>
  94. /// <param name="module"></param>
  95. /// <param name="bitNum"></param>
  96. /// <param name="value"></param>
  97. private void SetState(string module, int bitNum, char value)
  98. {
  99. switch (module)
  100. {
  101. case "s1":
  102. s1[bitNum] = value;
  103. break;
  104. case "s2":
  105. s2[bitNum] = value;
  106. break;
  107. default:
  108. break;
  109. }
  110. }
  111. /// <summary>
  112. /// Get STAT String (s1 / s2)
  113. /// </summary>
  114. /// <returns></returns>
  115. private string GetSTATStr()
  116. {
  117. string s1Str = (s1[0] + "" + s1[1] + s1[2] + s1[3] + s1[4]);
  118. string s2Str = (s2[0] + "" + s2[1] + s1[2] + s2[3]);
  119. return $"{s1Str}/{s2Str}";
  120. }
  121. }
  122. }