MechanicalControlClass.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using EtherCAT_DLL;
  2. using EtherCAT_DLL_Err;
  3. using LogClass;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Xml;
  10. namespace CCDCount.DLL
  11. {
  12. public class MechanicalControlClass
  13. {
  14. ushort g_uRet = 0;
  15. // 当前选择卡的卡号
  16. ushort g_uESCCardNo = 99;
  17. ushort g_uESCNodeID = 0;
  18. ushort g_uESCSlotID;
  19. // 卡片初始化状态
  20. bool g_bInitialFlag = false;
  21. //全部卡号
  22. ushort[] g_uESCCardNoList = new ushort[32];
  23. List<ushort> LsNodeID = new List<ushort>();
  24. List<short> LsSlotID = new List<short>();
  25. ushort g_nESCExistCards = 0;
  26. bool IsCanInit = false;
  27. public MechanicalControlClass()
  28. {
  29. OpenTaidaCard();
  30. InitControl();
  31. FindSlave();
  32. }
  33. /// <summary>
  34. /// 初始化
  35. /// </summary>
  36. public void InitControl()
  37. {
  38. ushort nSeq = 0, nCardNo = 0;
  39. g_uRet = 0;
  40. for (nSeq = 0; nSeq < 32; nSeq++)
  41. {
  42. // 清空卡号记录
  43. g_uESCCardNoList[nSeq] = 0;
  44. }
  45. g_bInitialFlag = false;
  46. for (nSeq = 0; nSeq < g_nESCExistCards; nSeq++)
  47. {
  48. // 获取卡号
  49. g_uRet = CEtherCAT_DLL.CS_ECAT_Master_Get_CardSeq(nSeq, ref nCardNo);
  50. // 初始化控制卡
  51. g_uRet = CEtherCAT_DLL.CS_ECAT_Master_Initial(nCardNo);
  52. if (g_uRet != CEtherCAT_DLL_Err.ERR_ECAT_NO_ERROR)
  53. {
  54. LOG.error("_ECAT_Master_Initial, ErrorCode = " + g_uRet.ToString());
  55. g_uESCCardNoList[nSeq] = 99;
  56. }
  57. else
  58. {
  59. //记录全部的卡号
  60. g_uESCCardNoList[nSeq] = nCardNo;
  61. //标记卡是否已经初始化
  62. g_bInitialFlag = true;
  63. }
  64. }
  65. g_uESCCardNo = g_uESCCardNoList[0];
  66. }
  67. /// <summary>
  68. /// 释放资源
  69. /// </summary>
  70. public void Dispose()
  71. {
  72. }
  73. /// <summary>
  74. /// 电机旋转
  75. /// </summary>
  76. public void MotorRotation(float Angle)
  77. {
  78. //开启电机
  79. g_uRet = CEtherCAT_DLL.CS_ECAT_Slave_Motion_Set_Svon(g_uESCCardNo, g_uESCNodeID, g_uESCSlotID, 1);
  80. if (g_uRet != CEtherCAT_DLL_Err.ERR_ECAT_NO_ERROR)
  81. {
  82. LOG.error("_ECAT_Slave_Motion_Set_Svon, Error Code = " + g_uRet.ToString());
  83. }
  84. }
  85. /// <summary>
  86. /// 推出气动阀
  87. /// </summary>
  88. public void OpenAirValve(int ChannelNO)
  89. {
  90. Console.WriteLine("{0}气缸阀门关闭", ChannelNO);
  91. }
  92. /// <summary>
  93. /// 收回气动阀
  94. /// </summary>
  95. public void CloseAirValve(int ChannelNO)
  96. {
  97. }
  98. /// <summary>
  99. /// 收回所有气动阀
  100. /// </summary>
  101. public void CloseAllAirValve()
  102. {
  103. Console.WriteLine("所有阀门打开");
  104. }
  105. // <summary>
  106. /// 启动震动盘
  107. /// </summary>
  108. public void OpenShockPlate()
  109. {
  110. }
  111. /// <summary>
  112. /// 修改震动盘速度
  113. /// </summary>
  114. public void ChangeShokSpeed()
  115. {
  116. Console.WriteLine("震盘速度修改");
  117. }
  118. // <summary>
  119. /// 停止震动盘
  120. /// </summary>
  121. public void CloseShockPlate()
  122. {
  123. Console.WriteLine("震盘停止");
  124. }
  125. private void OpenTaidaCard()
  126. {
  127. g_uRet = 0;
  128. g_bInitialFlag = false;
  129. // 获取轴卡数量
  130. g_uRet = CEtherCAT_DLL.CS_ECAT_Master_Open(ref g_nESCExistCards);
  131. if (g_uRet != CEtherCAT_DLL_Err.ERR_ECAT_NO_ERROR)
  132. {
  133. LOG.error("CS_ECAT_Master_Open, rt =" + g_uRet.ToString());
  134. }
  135. else
  136. {
  137. if (g_nESCExistCards == 0)
  138. {
  139. LOG.error("No EtherCat can be found!");
  140. }
  141. else
  142. {
  143. IsCanInit = true;
  144. }
  145. }
  146. }
  147. // 查找全部从站
  148. private void FindSlave()
  149. {
  150. short nSID = 0, Cnt = 0;
  151. ushort uNID = 0, uSlaveNum = 0, uReMapNodeID = 0;
  152. uint uVendorID = 0, uProductCode = 0, uRevisionNo = 0, uSlaveDCTime = 0;
  153. g_uRet = CEtherCAT_DLL.CS_ECAT_Master_Get_SlaveNum(g_uESCCardNo, ref uSlaveNum);
  154. if (g_uRet != CEtherCAT_DLL_Err.ERR_ECAT_NO_ERROR)
  155. {
  156. LOG.error("_ECAT_Master_Get_SlaveNum, ErrorCode = " + g_uRet.ToString());
  157. }
  158. else
  159. {
  160. if (uSlaveNum == 0)
  161. {
  162. LOG.error("Card NO: " + g_uESCCardNo.ToString() + " No slave found!");
  163. }
  164. else
  165. {
  166. for (uNID = 0; uNID < uSlaveNum; uNID++)
  167. {
  168. g_uRet = CEtherCAT_DLL.CS_ECAT_Master_Get_Slave_Info(g_uESCCardNo, uNID, ref uReMapNodeID, ref uVendorID, ref uProductCode, ref uRevisionNo, ref uSlaveDCTime);
  169. if (uVendorID == 0x1DD && uProductCode == 0x10305070) // A2E
  170. {
  171. nSID = 0;
  172. LsNodeID.Add(uNID);
  173. LsSlotID.Add(nSID);
  174. //CmbNode.Items.Add("NodeID:" + uNID + " - SlotID:" + nSID + "-A2E");
  175. Cnt++;
  176. }
  177. else if (uVendorID == 0x539 && uProductCode == 0x2200001) //Yaskawa
  178. {
  179. nSID = 0;
  180. LsNodeID.Add(uNID);
  181. LsSlotID.Add(nSID);
  182. //CmbNode.Items.Add("NodeID:" + uNID + " - SlotID:" + nSID + "-Yaskawa");
  183. Cnt++;
  184. }
  185. else if ((uVendorID == 0x1A05 || uVendorID == 0x1DD) && uProductCode == 0x0624) //Ec4Axis
  186. {
  187. for (nSID = 0; nSID < 4; nSID++)
  188. {
  189. LsNodeID.Add(uNID);
  190. LsSlotID.Add(nSID);
  191. //CmbNode.Items.Add("NodeID:" + uNID + " - SlotID:" + nSID + "-Ec4Axis");
  192. Cnt++;
  193. }
  194. }
  195. else if ((uVendorID == 0x1A05 || uVendorID == 0x1DD) && uProductCode == 0x5621) //EcAxis
  196. {
  197. nSID = 0;
  198. LsNodeID.Add(uNID);
  199. LsSlotID.Add(nSID);
  200. // CmbNode.Items.Add("NodeID:" + uNID + " - SlotID:" + nSID + "EcAxis");
  201. Cnt++;
  202. }
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }