版博士V2.0程序
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

118 行
3.7 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO.Ports;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using ProductionControl.Utils;
  9. using static System.Windows.Forms.VisualStyles.VisualStyleElement.Rebar;
  10. namespace ProductionControl.Device
  11. {
  12. internal class SmallAxis
  13. {
  14. public Action<int, string> log;
  15. public Action<bool> stateChange;
  16. /// <summary>
  17. /// 最大倍数总的脉冲数
  18. /// </summary>
  19. public int MaxPPU { get; private set; }
  20. /// <summary>
  21. /// 是否打开设备成功
  22. /// </summary>
  23. public bool IsInit { get; private set; } = false;
  24. private SSerialPort sSerialPort;
  25. public SmallAxis(string comName,int baud)
  26. {
  27. sSerialPort = new SSerialPort(comName, baud);
  28. }
  29. public void start()
  30. {
  31. //最大
  32. //byte[] getMaxPPU = new byte[] { 0x58, 0x4D, 0x0D };
  33. //sSerialPort.send(getMaxPPU, 0, getMaxPPU.Length);
  34. //Thread.Sleep(20);
  35. //byte[] recv = sSerialPort.getMessage();//9 byte
  36. //if (recv == null) recv = new byte[0];
  37. //if (recv.Length > 0)
  38. //{
  39. // byte[] maxPos = subBuff(recv, 2, 5);//5 byte
  40. // string str = "";
  41. // for (int i = 0; i < maxPos.Length; i++)
  42. // str += maxPos[i].ToString("X") + " ";
  43. // //MaxPos= maxPos
  44. //}
  45. //
  46. IsInit = true;
  47. //timer.Elapsed += Timer_Elapsed;
  48. //timer.Interval = 100;
  49. //timer.Enabled = true;
  50. }
  51. public void stop()
  52. {
  53. if (!IsInit) return;
  54. IsInit = false;
  55. sSerialPort.close();
  56. }
  57. public void home()
  58. {
  59. byte[] goHome = new byte[] { 0x58, 0x48, 0x0D };
  60. sSerialPort.send(goHome, 0, goHome.Length);
  61. }
  62. public void gotoPos(int pos)
  63. {
  64. int x = pos;// 100;
  65. string hex = x.ToString("X").PadLeft(6, ' ');
  66. byte[] gotoX = new byte[9];
  67. gotoX[0] = 0x58;
  68. gotoX[1] = 0x47;
  69. for (int i = 0; i < hex.Length; i++)
  70. gotoX[i + 2] = (byte)(hex[i]);
  71. gotoX[8] = 0x0D;
  72. sSerialPort.send(gotoX, 0, gotoX.Length);
  73. }
  74. public bool isFree()
  75. {
  76. byte[] getState = new byte[] { 0x58, 0x5A, 0x0D };
  77. sSerialPort.send(getState, 0, getState.Length);
  78. Thread.Sleep(20);
  79. byte[] recv = sSerialPort.getMessage();
  80. if (recv == null) recv = new byte[0];
  81. if (recv.Length > 0)
  82. return recv[0] == 0x55;
  83. return false;
  84. }
  85. public int getCurrPPU()
  86. {
  87. byte[] getPPU = new byte[] { 0x58, 0x4E, 0x0D };
  88. sSerialPort.send(getPPU, 0, getPPU.Length);
  89. Thread.Sleep(20);
  90. byte[] recv = sSerialPort.getMessage();//9 byte
  91. if (recv == null) recv = new byte[0];
  92. if (recv.Length > 0)
  93. {
  94. byte[] maxPos = subBuff(recv, 2, 5);//5 byte
  95. string str = "";
  96. for (int i = 0; i < maxPos.Length; i++)
  97. str += maxPos[i].ToString("X") + " ";
  98. return 0;
  99. }
  100. return -1;
  101. }
  102. private byte[] subBuff(byte[] buff, int start, int length)
  103. {
  104. byte[] res = new byte[length];
  105. for (int i = start; i < buff.Length && i < start + length; i++)
  106. res[i - start] = buff[i];
  107. return res;
  108. }
  109. }
  110. }