[File created by SMAC Control Center v1.4B5] MacroNumber 0 SetOutput Digital_output_0,Off // Switch Outputs Off SetOutput Digital_output_1,Off SetOutput Digital_output_2,Off SetOutput Digital_output_3,Off SetVariable Var=General_purpouse_registers-W66(0x422C00),Constant,Const=0 // Set the simulation inputs to 0 If Variable,Var=Motor_type(0x006402),Equal,Const=10,Then_Macro_Call=3,Else_Macro_Continue // If multipole call phase detect. Macro Call,MacroNumber=4 // Adjust control settings Homing Endstop_and_indexpulse,Negative,Acc=,Vendstop=,Force=,Vindex=,Timeout=,Offset=0 // Homing SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W86(0x562C00) // Reg 86 = position Start PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate // Move to Position Start Wait Target_reached Macro Jump,MacroNumber=1 MacroNumber 1 // Calculate margins of in position SetVariable Var=General_purpouse_registers-W20(0x142C00),Subtract,Variable_and_variable,Var1=General_purpouse_registers-W86(0x562C00),Var2=Position_window(0x006067) // W20 = W86 - pos window SetVariable Var=General_purpouse_registers-W22(0x162C00),Subtract,Variable_and_variable,Var1=General_purpouse_registers-W88(0x582C00),Var2=Position_window(0x006067) // W22 = W88 - pos window SetVariable Var=General_purpouse_registers-W24(0x182C00),Subtract,Variable_and_variable,Var1=General_purpouse_registers-W89(0x592C00),Var2=Position_window(0x006067) // W24 = W89 - pos window SetVariable Var=General_purpouse_registers-W26(0x1A2C00),Subtract,Variable_and_variable,Var1=General_purpouse_registers-W87(0x572C00),Var2=Position_window(0x006067) // W26 = W87 - pos window SetVariable Var=General_purpouse_registers-W21(0x152C00),Add,Variable_and_variable,Var1=General_purpouse_registers-W86(0x562C00),Var2=Position_window(0x006067) // W21 = W86 + pos window SetVariable Var=General_purpouse_registers-W23(0x172C00),Add,Variable_and_variable,Var1=General_purpouse_registers-W88(0x582C00),Var2=Position_window(0x006067) // W23 = W88 + pos window SetVariable Var=General_purpouse_registers-W25(0x192C00),Add,Variable_and_variable,Var1=General_purpouse_registers-W89(0x592C00),Var2=Position_window(0x006067) // W25 = W89 + pos window SetVariable Var=General_purpouse_registers-W27(0x1B2C00),Add,Variable_and_variable,Var1=General_purpouse_registers-W87(0x572C00),Var2=Position_window(0x006067) // W27 = W87 + pos window Macro Jump,MacroNumber=2 MacroNumber 2 // move around and check if voltage output changes If Variable,Var=General_purpouse_registers-W85(0x552C00),Equal,Const=0,Then_Macro_Jump=10,Else_Macro_Continue // Pulse If Variable,Var=General_purpouse_registers-W85(0x552C00),Equal,Const=1,Then_Macro_Jump=15,Else_Macro_Continue // Mono Stable If Variable,Var=General_purpouse_registers-W85(0x552C00),Equal,Const=2,Then_Macro_Jump=20,Else_Macro_Continue // Bi Stable If Variable,Var=General_purpouse_registers-W85(0x552C00),Equal,Const=3,Then_Macro_Jump=25,Else_Macro_Continue // 3 Position If Variable,Var=General_purpouse_registers-W85(0x552C00),Equal,Const=4,Then_Macro_Jump=30,Else_Macro_Continue // 4 Position Macro End_program MacroNumber 3 // phase detect in case of multipole PhaseDetect Forced,Time=,Current=,Tolerance= Macro Return MacroNumber 4 // control parameter adjustment If Variable,Var=General_purpouse_registers-W90(0x5A2C00),Higher,Const=0,Then_Macro_Call=5,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W90(0x5A2C00),Lower,Const=0,Then_Macro_Call=6,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W90(0x5A2C00),Equal,Const=0,Then_Macro_Call=7,Else_Macro_Continue Macro Return MacroNumber 5 // control parameter adjustment positive SetVariable Var=General_purpouse_registers-W11(0x0B2C00),Add,Variable_and_constant,Var1=General_purpouse_registers-W90(0x5A2C00),Const=2 SetVariable Var=Position_control_parameter_set-Proportional_constant(0x012500),Multiply,Variable_and_variable,Var1=General_purpouse_registers-W97(0x612C00),Var2=General_purpouse_registers-W11(0x0B2C00) // proportional gain SetVariable Var=Position_control_parameter_set-Proportional_constant(0x012500),Divide,Variable_and_constant,Var1=Position_control_parameter_set-Proportional_constant(0x012500),Const=2 SetVariable Var=Position_control_parameter_set-Integral_constant(0x022500),Multiply,Variable_and_variable,Var1=General_purpouse_registers-W98(0x622C00),Var2=General_purpouse_registers-W11(0x0B2C00) // integral gain SetVariable Var=Position_control_parameter_set-Integral_constant(0x022500),Divide,Variable_and_constant,Var1=Position_control_parameter_set-Integral_constant(0x022500),Const=2 SetVariable Var=Position_control_parameter_set-Derivative_constant(0x032500),Multiply,Variable_and_variable,Var1=General_purpouse_registers-W99(0x632C00),Var2=General_purpouse_registers-W11(0x0B2C00) // derivative gain SetVariable Var=Position_control_parameter_set-Derivative_constant(0x032500),Divide,Variable_and_constant,Var1=Position_control_parameter_set-Derivative_constant(0x032500),Const=2 Macro Return MacroNumber 6 // control parameter adjustment negative SetVariable Var=General_purpouse_registers-W11(0x0B2C00),Absolute,Var1=General_purpouse_registers-W90(0x5A2C00) SetVariable Var=General_purpouse_registers-W11(0x0B2C00),Add,Variable_and_constant,Var1=General_purpouse_registers-W11(0x0B2C00),Const=2 SetVariable Var=Position_control_parameter_set-Proportional_constant(0x012500),Multiply,Variable_and_constant,Var1=General_purpouse_registers-W97(0x612C00),Const=2 SetVariable Var=Position_control_parameter_set-Proportional_constant(0x012500),Divide,Variable_and_variable,Var1=Position_control_parameter_set-Proportional_constant(0x012500),Var2=General_purpouse_registers-W11(0x0B2C00) // proportional gain SetVariable Var=Position_control_parameter_set-Integral_constant(0x022500),Multiply,Variable_and_constant,Var1=General_purpouse_registers-W98(0x622C00),Const=2 SetVariable Var=Position_control_parameter_set-Integral_constant(0x022500),Divide,Variable_and_variable,Var1=Position_control_parameter_set-Integral_constant(0x022500),Var2=General_purpouse_registers-W11(0x0B2C00) // integral gain SetVariable Var=Position_control_parameter_set-Derivative_constant(0x032500),Multiply,Variable_and_constant,Var1=General_purpouse_registers-W99(0x632C00),Const=2 SetVariable Var=Position_control_parameter_set-Derivative_constant(0x032500),Divide,Variable_and_variable,Var1=Position_control_parameter_set-Derivative_constant(0x032500),Var2=General_purpouse_registers-W11(0x0B2C00) // derivative gain Macro Return MacroNumber 7 // control parameter adjustment negative SetVariable Var=Position_control_parameter_set-Proportional_constant(0x012500),Variable,Var1=General_purpouse_registers-W97(0x612C00) SetVariable Var=Position_control_parameter_set-Integral_constant(0x022500),Variable,Var1=General_purpouse_registers-W98(0x622C00) SetVariable Var=Position_control_parameter_set-Derivative_constant(0x032500),Variable,Var1=General_purpouse_registers-W99(0x632C00) Macro Return MacroNumber 10 // Pulse Macro If Digital_input_0,Off,Then_Macro_Call=11,Else_Macro_Continue // when demand position = w87 (End) then return to Start pos If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=0,Then_Macro_Call=11,Else_Macro_Continue // input simulation If Variable,Var=Position_demand_value(0x006062),Equal,Var2=General_purpouse_registers-W87(0x572C00),Then_Macro_Call=40,Else_Macro_Continue // when demand position = w87 (End) then return to Start pos If Variable,Var=Position_demand_value(0x006062),Equal,Var2=General_purpouse_registers-W86(0x562C00),Then_Macro_Call=12,Else_Macro_Continue // when demand position = w86 (Start) then ready for new move Macro Call,MacroNumber=21 // Check for in position Macro Repeat,RepeatCount=0 MacroNumber 11 // If input 0 = off set register 15 SetVariable Var=General_purpouse_registers-W15(0x0F2C00),Constant,Const=1 Macro Return MacroNumber 12 // If input 0 = on, move to end pos If Variable,Var=General_purpouse_registers-W15(0x0F2C00),Equal,Const=0,Then_Macro_Return,Else_Macro_Continue If Digital_input_0,On,Then_Macro_Call=43,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=1,Then_Macro_Call=43,Else_Macro_Continue // input simulation Macro Return MacroNumber 15 // Mono Stable Macro If Digital_input_0,On,Then_Macro_Jump=44,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=1,Then_Macro_Jump=45,Else_Macro_Continue // input simulation Macro Call,MacroNumber=40 Macro Call,MacroNumber=21 // Check for in position Macro Repeat,RepeatCount=0 MacroNumber 20 // Bi Stable Macro If Digital_input_0,On,Then_Macro_Call=40,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=1,Then_Macro_Call=40,Else_Macro_Continue // input simulation If Digital_input_1,On,Then_Macro_Call=43,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=2,Then_Macro_Call=43,Else_Macro_Continue // input simulation Macro Call,MacroNumber=21 // Check for in position Macro Repeat,RepeatCount=0 MacroNumber 21 // Check for in position If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W20(0x142C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W21(0x152C00),Then_Macro_Jump=51,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W26(0x1A2C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W27(0x1B2C00),Then_Macro_Jump=52,Else_Macro_Jump=50 Macro End_program MacroNumber 22 // Check for in position for monostable // to be edited If Digital_input_0,Off,Then_Macro_Jump=15,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W20(0x142C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W21(0x152C00),Then_Macro_Jump=51,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W26(0x1A2C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W27(0x1B2C00),Then_Macro_Jump=52,Else_Macro_Jump=50 // must be return Macro Repeat,RepeatCount=0 MacroNumber 23 // Check for in position for monostable simulation mode // to be edited If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=0,Then_Macro_Jump=15,Else_Macro_Continue // input simulation If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W20(0x142C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W21(0x152C00),Then_Macro_Jump=51,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W26(0x1A2C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W27(0x1B2C00),Then_Macro_Jump=52,Else_Macro_Jump=50 // must be return Macro Repeat,RepeatCount=0 MacroNumber 25 // 3 Position Macro If Digital_input_0,On,Then_Macro_Call=40,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=1,Then_Macro_Call=40,Else_Macro_Continue // input simulation If Digital_input_1,On,Then_Macro_Call=41,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=2,Then_Macro_Call=41,Else_Macro_Continue // input simulation If Digital_input_2,On,Then_Macro_Call=43,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=4,Then_Macro_Call=43,Else_Macro_Continue // input simulation Macro Call,MacroNumber=26 // Check for in position Macro Repeat,RepeatCount=0 MacroNumber 26 // Check for in position If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W20(0x142C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W21(0x152C00),Then_Macro_Jump=51,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W22(0x162C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W23(0x172C00),Then_Macro_Jump=52,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W26(0x1A2C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W27(0x1B2C00),Then_Macro_Jump=53,Else_Macro_Jump=50 Macro End_program MacroNumber 30 // 4 Position Macro If Digital_input_0,On,Then_Macro_Call=40,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=1,Then_Macro_Call=40,Else_Macro_Continue // input simulation If Digital_input_1,On,Then_Macro_Call=41,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=2,Then_Macro_Call=41,Else_Macro_Continue // input simulation If Digital_input_2,On,Then_Macro_Call=42,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=4,Then_Macro_Call=42,Else_Macro_Continue // input simulation If Digital_input_3,On,Then_Macro_Call=43,Else_Macro_Continue If Variable,Var=General_purpouse_registers-W66(0x422C00),Equal,Const=8,Then_Macro_Call=43,Else_Macro_Continue // input simulation Macro Call,MacroNumber=31 // Check for in position Macro Repeat,RepeatCount=0 MacroNumber 31 // Check for in position If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W20(0x142C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W21(0x152C00),Then_Macro_Jump=51,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W22(0x162C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W23(0x172C00),Then_Macro_Jump=52,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W24(0x182C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W25(0x192C00),Then_Macro_Jump=53,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W26(0x1A2C00),Then_Macro_Jump=50,Else_Macro_Continue If Variable,Var=Position_actual_value(0x006064),Lower,Var2=General_purpouse_registers-W27(0x1B2C00),Then_Macro_Jump=54,Else_Macro_Jump=50 Macro End_program MacroNumber 40 // Move to position 0 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W86(0x562C00) // Start Pos = W86 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Return MacroNumber 41 // Move to position 1 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W88(0x582C00) // Pos 1 = W88 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Return MacroNumber 42 // Move to position 2 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W89(0x592C00) // Pos 2 = W89 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Return MacroNumber 43 // Move to End Position SetVariable Var=General_purpouse_registers-W15(0x0F2C00),Constant,Const=0 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W87(0x572C00) // End Pos = W87 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Return MacroNumber 44 // Move to End Position for mono-stable SetVariable Var=General_purpouse_registers-W15(0x0F2C00),Constant,Const=0 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W87(0x572C00) // End Pos = W87 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Call,MacroNumber=22 Macro Jump,MacroNumber=15 MacroNumber 45 // Move to End Position for mono-stable simulation SetVariable Var=General_purpouse_registers-W15(0x0F2C00),Constant,Const=0 SetVariable Var=Profile_velocity(0x006081),Variable,Var1=General_purpouse_registers-W91(0x5B2C00) // Profile speed = W91 SetVariable Var=Target_position(0x00607A),Variable,Var1=General_purpouse_registers-W87(0x572C00) // End Pos = W87 PositionMove Absolute,Target=,Vel=,Acc=,Change_immediate Macro Call,MacroNumber=23 Macro Jump,MacroNumber=15 MacroNumber 50 // All outputs off SetOutput Digital_output_0,Off SetOutput Digital_output_1,Off SetOutput Digital_output_2,Off SetOutput Digital_output_3,Off Macro Return MacroNumber 51 // Start Pos => output 0 = on SetOutput Digital_output_0,On SetOutput Digital_output_1,Off SetOutput Digital_output_2,Off SetOutput Digital_output_3,Off Macro Return MacroNumber 52 // Pos 1 => output 1 = on SetOutput Digital_output_0,Off SetOutput Digital_output_1,On SetOutput Digital_output_2,Off SetOutput Digital_output_3,Off Macro Return MacroNumber 53 // Pos 2 => output 2 = on SetOutput Digital_output_0,Off SetOutput Digital_output_1,Off SetOutput Digital_output_2,On SetOutput Digital_output_3,Off Macro Return MacroNumber 54 // End Pos => output 3 = on SetOutput Digital_output_0,Off SetOutput Digital_output_1,Off SetOutput Digital_output_2,Off SetOutput Digital_output_3,On Macro Return MacroNumber 55 SetVariable Var=General_purpouse_registers-W97(0x612C00),Variable,Var1=Position_control_parameter_set-Proportional_constant(0x012500) // W97 = Position Loop PROPORTIONAL Gain SetVariable Var=General_purpouse_registers-W98(0x622C00),Variable,Var1=Position_control_parameter_set-Integral_constant(0x022500) // W97 = Position Loop INTEGRAL Gain SetVariable Var=General_purpouse_registers-W99(0x632C00),Variable,Var1=Position_control_parameter_set-Derivative_constant(0x032500) // W97 = Position Loop DERIVATIVE Gain Macro End_program