//BaseController should use reflection //and not generics as we do not know the types at design time public static MHEControl CreateMHEControlGeneric <T, U>(IControllable assem, ProtocolInfo info) where T : ProtocolInfo where U : MHEControl { MHEControl protocolConfig = null; //generic plc config object try { if (info == null) { var i = (T)Activator.CreateInstance(typeof(T), null); ProtocolInfo protocolInfo = i; //generic plc config object constructor argument type protocolInfo.assem = assem.Name; object[] args = { protocolInfo, assem }; var ctr = (U)Activator.CreateInstance(typeof(U), args); protocolConfig = ctr; } else { object[] args = { info, assem }; var ctr = (U)Activator.CreateInstance(typeof(U), args); info.assem = assem.Name; protocolConfig = ctr; } } catch (Exception e) { Experior.Core.Environment.Log.Write("Can't create control!", Color.Red); Environment.Log.Write(e.Message, Color.Red); } return(protocolConfig); }
public MHEControl CreateMHEControl(IControllable assem, ProtocolInfo info) { sorterElement = assem as SorterElement; MHEControl protocolConfig = null; //generic plc config object if (assem is SorterElement) { protocolConfig = CreateMHEControlGeneric <SorterATCInfo, MHEControl_Sorter>(assem, info); } else if (assem is CommunicationPoint) { protocolConfig = CreateMHEControlGeneric <MHEControl_CommPointInfo, MHEControl_CommPoint>(assem, info); } else { Experior.Core.Environment.Log.Write("Can't create MHE Control, object is not defined in the 'CreateMHEControl' of the controller", Color.Red); return(null); } //......other assemblies should be added here....do this with generics...correction better to do this with reflection...That is BaseController should use reflection //and not generics as we do not know the types at design time and it means that the above always has to be edited when adding a new MHE control object. protocolConfig.ParentAssembly = (Assembly)assem; controls.Add(protocolConfig); return(protocolConfig as MHEControl); }
public MHEControl CreateMHEControl(IControllable assem, ProtocolInfo info) { MHEControl protocolConfig = null; //generic plc config object //ProtocolInfo protocolInfo = null; //generic plc config object constructor argument type Dictionary <string, Type> dt = new Dictionary <string, Type>(); if (assem is CommunicationPoint) { protocolConfig = CreateMHEControlGeneric <CommPointDatcomInfo, MHEControl_CommPoint>(assem, info); } else if (assem is MergeDivertConveyor) { protocolConfig = CreateMHEControlGeneric <MergeDivertDatcomInfo, MHEControl_MergeDivert>(assem, info); } else if (assem is Transfer) { protocolConfig = CreateMHEControlGeneric <TransferDatcomInfo, MHEControl_Transfer>(assem, info); } else if (assem is StraightAccumulationConveyor) { protocolConfig = CreateMHEControlGeneric <ManualPickingDatcomInfo, MHEControl_ManualPicking>(assem, info); } else if (assem is BeltSorterDivert) { protocolConfig = CreateMHEControlGeneric <BeltSorterDivertDatcomInfo, MHEControl_BeltSorterDivert>(assem, info); } else if (assem is AngledDivert) { protocolConfig = CreateMHEControlGeneric <AngledDivertDatcomInfo, MHEControl_AngledDivert>(assem, info); } else if (assem is ThreeWaySwitch) { protocolConfig = CreateMHEControlGeneric <ThreeWaySwitchDatcomInfo, MHEControl_ThreeWaySwitch>(assem, info); } else if (assem is PickDoubleLift) { protocolConfig = CreateMHEControlGeneric <PickDoubleLiftDatcomInfo, MHEControl_PickDoubleLift>(assem, info); } else { Experior.Core.Environment.Log.Write("Can't create MHE Control, object is not defined in the 'CreateMHEControl' of the controller"); return(null); } //......other assemblies should be added here....do this with generics...correction better to do this with reflection...That is BaseController should use reflection //and not generics as we do not know the types at design time and it means that the above always has to be edited when adding a new MHE control object. protocolConfig.ParentAssembly = (Assembly)assem; return(protocolConfig as MHEControl); }
public MHEControl CreateMHEControl(IControllable assem, ProtocolInfo info) { MHEControl protocolConfig = null; //generic plc config object Dictionary <string, Type> dt = new Dictionary <string, Type>(); if (assem is PalletCrane) { protocolConfig = CreateMHEControlGeneric <PalletCraneATCInfo, MHEControl_PalletCrane>(assem, info); } else { Experior.Core.Environment.Log.Write("Can't create MHE Control, object is not defined in the 'CreateMHEControl' of the controller"); return(null); } //......other assemblies should be added here....do this with generics...correction better to do this with reflection...That is BaseController should use reflection //and not generics as we do not know the types at design time and it means that the above always has to be edited when adding a new MHE control object. protocolConfig.ParentAssembly = (Assembly)assem; controls.Add(protocolConfig); return(protocolConfig as MHEControl); }
/// <summary> /// Creates the correct type of object to display to the user. This will depend on type of kit /// The communication point uses this to display the relevent fields to the user. /// Defined in BK10PLC.cs /// </summary> /// <param name="assem"></param> /// <returns></returns> public MHEControl CreateMHEControl(IControllable assem, ProtocolInfo info) { MHEControl protocolConfig = null; //generic plc config object ProtocolInfo protocolInfo = null; //generic plc config object constructor argument type //ProtocolInfo protocolInfo = new ProtocolInfo(); //generic plc config object constructor argument type if (assem is MultiShuttle) { if (info is MultiShuttleSimInfo) // create the defined protocol info { info.assem = assem.Name; protocolConfig = new MHEControl_MultiShuttleSimulation(info as MultiShuttleSimInfo, assem as MultiShuttle); } else //create a new protocol info { protocolInfo = new MultiShuttleSimInfo(); protocolInfo.assem = assem.Name; protocolConfig = new MHEControl_MultiShuttleSimulation(protocolInfo as MultiShuttleSimInfo, assem as MultiShuttle); } } else if (assem is MergeDivertConveyor) { if (info is MergeDivertSimulationInfo) { ((MergeDivertSimulationInfo)info).assem = assem.Name; protocolConfig = new MHEControl_MergeDivert(info as MergeDivertSimulationInfo, assem as MergeDivertConveyor); } else //create a new protocol info { protocolInfo = new MergeDivertSimulationInfo(); protocolInfo.assem = assem.Name; protocolConfig = new MHEControl_MergeDivert(protocolInfo as MergeDivertSimulationInfo, assem as MergeDivertConveyor); } } else if (assem is AngledDivert) { if (info is AngledDivertSimulationInfo) { ((AngledDivertSimulationInfo)info).assem = assem.Name; protocolConfig = new MHEControl_AngledDivert(info as AngledDivertSimulationInfo, assem as AngledDivert); } else //create a new protocol info { protocolInfo = new AngledDivertSimulationInfo(); protocolInfo.assem = assem.Name; protocolConfig = new MHEControl_AngledDivert(protocolInfo as AngledDivertSimulationInfo, assem as AngledDivert); } } else if (assem is Transfer) { if (info is TransferSimulationInfo) { ((TransferSimulationInfo)info).assem = assem.Name; protocolConfig = new MHEControl_Transfer(info as TransferSimulationInfo, assem as Transfer); } else //create a new protocol info { protocolInfo = new TransferSimulationInfo(); protocolInfo.assem = assem.Name; protocolConfig = new MHEControl_Transfer(protocolInfo as TransferSimulationInfo, assem as Transfer); } } else { Experior.Core.Environment.Log.Write("Can't create PLC config object "); return(null); } //......other assemblies should be added here....do this with generics protocolConfig.ParentAssembly = (Assembly)assem; return(protocolConfig as MHEControl); }