AxisManager.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.Util;
  3. using PunkHPX8_RT.Devices.AXIS.CANOpen;
  4. using PunkHPX8_RT.Devices.AXIS.Galil;
  5. using PunkHPX8_RT.Devices.AXIS.GalilLipsel;
  6. using PunkHPX8_RT.Devices.AXIS.Kollmorgen;
  7. using PunkHPX8_RT.Devices.AXIS.Yaskawa;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Reflection;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace PunkHPX8_RT.Devices.AXIS
  15. {
  16. public class AxisManager : Singleton<AxisManager>
  17. {
  18. /// <summary>
  19. /// 模块电机字典
  20. /// </summary>
  21. private Dictionary<string, List<JetAxisBase>> _moduleAxisDictionary = new Dictionary<string, List<JetAxisBase>>();
  22. /// <summary>
  23. /// 获取Axis对象
  24. /// </summary>
  25. /// <param name="type"></param>
  26. /// <param name="module"></param>
  27. /// <param name="name"></param>
  28. /// <returns></returns>
  29. public JetAxisBase GetAxisInstance(string type,string module,string name)
  30. {
  31. switch(type)
  32. {
  33. case "Copley":
  34. return new CanOpenAxis(module, name);
  35. case "Yaskawa":
  36. return new YaskawaAxis(module, name);
  37. case "Maxon":
  38. return new MaxonAxis(module, name);
  39. case "Galil":
  40. return new GalilAxis(module, name);
  41. case "Kollmorgen":
  42. return new KollmorgenAxis(module, name);
  43. case "GalilLipsel":
  44. return new GalilLipselAxis(module, name);
  45. case "GalilRotation":
  46. return new GalilRotationAxis(module, name);
  47. default:
  48. return null;
  49. }
  50. }
  51. /// <summary>
  52. /// 将Axis增加至模块字典
  53. /// </summary>
  54. /// <param name="moduleName"></param>
  55. /// <param name="axis"></param>
  56. public void AddModuleAxis(string moduleName, JetAxisBase axis)
  57. {
  58. if (_moduleAxisDictionary.ContainsKey(moduleName))
  59. {
  60. List<JetAxisBase> lst=_moduleAxisDictionary[moduleName];
  61. if(lst.FindIndex(O=>O.Name==axis.Name&&O.Module==moduleName)==-1)
  62. {
  63. lst.Add(axis);
  64. }
  65. }
  66. else
  67. {
  68. List<JetAxisBase> lst = new List<JetAxisBase>();
  69. lst.Add(axis);
  70. _moduleAxisDictionary[moduleName] = lst;
  71. }
  72. }
  73. /// <summary>
  74. /// 获取模块电机集合
  75. /// </summary>
  76. /// <returns></returns>
  77. public List<JetAxisBase> GetModuleAxisList(string moduleName)
  78. {
  79. return _moduleAxisDictionary.ContainsKey(moduleName) ? _moduleAxisDictionary[moduleName]:null;
  80. }
  81. /// <summary>
  82. /// 检验模块电机是否均上电
  83. /// </summary>
  84. /// <returns></returns>
  85. public bool CheckModuleAxisSwitchOn(string module,string name)
  86. {
  87. List<JetAxisBase> axises = AxisManager.Instance.GetModuleAxisList(module);
  88. if (axises != null)
  89. {
  90. foreach (JetAxisBase axis in axises)
  91. {
  92. if (!axis.IsSwitchOn)
  93. {
  94. LOG.WriteLog(eEvent.ERROR_PUF_NOT_SWITCHON, $"{module}", $"{axis.Name} is switch off");
  95. return false;
  96. }
  97. }
  98. }
  99. return true;
  100. }
  101. }
  102. }