AxisManager.cs 3.4 KB

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