using Aitex.Core.RT.Log; using Aitex.Core.Util; using CyberX8_RT.Devices.AXIS.CANOpen; using CyberX8_RT.Devices.AXIS.Galil; using CyberX8_RT.Devices.AXIS.GalilLipsel; using CyberX8_RT.Devices.AXIS.Yaskawa; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.AXIS { public class AxisManager : Singleton { /// /// 模块电机字典 /// private Dictionary> _moduleAxisDictionary = new Dictionary>(); /// /// 获取Axis对象 /// /// /// /// /// public JetAxisBase GetAxisInstance(string type,string module,string name) { switch(type) { case "Copley": return new CanOpenAxis(module, name); case "Yaskawa": return new YaskawaAxis(module, name); case "Maxon": return new MaxonAxis(module, name); case "Galil": return new GalilAxis(module, name); case "GalilLipsel": return new GalilLipselAxis(module, name); default: return null; } } /// /// 将Axis增加至模块字典 /// /// /// public void AddModuleAxis(string moduleName, JetAxisBase axis) { if (_moduleAxisDictionary.ContainsKey(moduleName)) { List lst=_moduleAxisDictionary[moduleName]; if(lst.FindIndex(O=>O.Name==axis.Name&&O.Module==moduleName)==-1) { lst.Add(axis); } } else { List lst = new List(); lst.Add(axis); _moduleAxisDictionary[moduleName] = lst; } } /// /// 获取模块电机集合 /// /// public List GetModuleAxisList(string moduleName) { return _moduleAxisDictionary.ContainsKey(moduleName) ? _moduleAxisDictionary[moduleName]:null; } /// /// 检验模块电机是否均上电 /// /// public bool CheckModuleAxisSwitchOn(string module,string name) { List axises = AxisManager.Instance.GetModuleAxisList(module); if (axises != null) { foreach (JetAxisBase axis in axises) { if (!axis.IsSwitchOn) { LOG.WriteLog(eEvent.ERROR_PUF_NOT_SWITCHON, $"{module}", $"{axis.Name} is switch off"); return false; } } } return true; } } }