Input
Reset Bool false Nicht remanent True True True False
HomingSpeed UDInt 0 Nicht remanent True True True False
Homing_Acc UDInt 0 Nicht remanent True True True False
SollPosition "X_Y DINT" Nicht remanent True True True False
X DInt 0 Nicht remanent True True True False
Y DInt 0 Nicht remanent True True True False
Velo "X_Y UDINT" Nicht remanent True True True False
X UDInt 0 Nicht remanent True True True False
Y UDInt 0 Nicht remanent True True True False
Acc "X_Y UDINT" Nicht remanent True True True False
Output
SW_1 Word 16#0 Nicht remanent True True True False
SW_2 Word 16#0 Nicht remanent True True True False
PosActualValue "X_Y DINT" Nicht remanent True True True False
VeloActualValue "X_Y DINT" Nicht remanent True True True False
Mode_of_operationdisplay "X_Y_SINT" Nicht remanent True True True False
InOut
Nr Int 0 Nicht remanent False False False False
CW1 Word 16#0 Nicht remanent True True True False
CW2 Word 16#0 Nicht remanent True True True False
Static
StepNr Int 0 Nicht remanent True True True False
StepNr_Next Int 3 Nicht remanent True True True False
hm Array[0..199] of Bool Nicht remanent True True True False
READ_OK Bool false Nicht remanent False False False False
WRITE_OK Bool false Nicht remanent False False False False
READ_ERROR Bool false Nicht remanent True True True False
WRITE_ERROR Bool false Nicht remanent True True True False
Temp
i Int
Temp_Word_1 Word
Temp_Word_2 Word
Temp_DWord_1 DWord
Temp_DWord_2 DWord
Constant
//NW2 // Reset Steps
IF #Reset AND NOT #hm[0] THEN
#StepNr := 0;
#StepNr_Next := 4;
END_IF;
#hm[0] := #Reset;
// NW3 Modbus TCP
CASE #StepNr OF
0: //init
#StepNr := 1;
#StepNr_Next := 4;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := #hm[5] := #hm[6] := FALSE;
1: //Read Status Word X
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[1] THEN
"SDO_READ1"(SDO_OBJECT := 16#6041,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_1);
IF #READ_OK THEN
#SW_1 := #Temp_DWord_1;
#hm[1] := TRUE;
END_IF;
END_IF;
//Read Status Word Y
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[2] THEN
"SDO_READ2"(SDO_OBJECT := 16#6041,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_2);
IF #READ_OK THEN
#SW_2 := #Temp_DWord_2;
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#StepNr := 3;
#hm[1] := #hm[2] := FALSE;
END_IF;
3: // Nach read/Write ablauf
IF "DB_Igus"."TCON-1-2-3-OK" THEN
IF #Nr <> 0 THEN // Nr = InOut wrde in Ablauf programm beschrieben und wenn auftrag in diese FB abgelaufen ist auf 0 gesetzt.
#StepNr := #Nr;
ELSIF #StepNr_Next < 4 THEN
#StepNr_Next := 4;
ELSE
#StepNr := #StepNr_Next;
END_IF;
END_IF;
4://X SDO READ Position Actual Value h6064
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[1] THEN
"SDO_READ1"(SDO_OBJECT := 16#6064,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_1);
IF #READ_OK THEN
#PosActualValue.X := #Temp_DWord_1;
#hm[1] := TRUE;
#StepNr_Next := 6;
END_IF;
END_IF;
//Y SDO READ Position Actual Value h6064
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[2] THEN
"SDO_READ2"(SDO_OBJECT := 16#6064,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_2);
IF #READ_OK THEN
#PosActualValue.Y := #Temp_DWord_2;
#hm[2] := TRUE;
#StepNr_Next := 6;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
6://X SDO READ Velocity Actual Value h606C
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[1] THEN
"SDO_READ1"(SDO_OBJECT := 16#606C,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_1);
IF #READ_OK THEN
#VeloActualValue.X := #Temp_DWord_1;
#hm[1] := TRUE;
#StepNr_Next := 4;
END_IF;
END_IF;
//Y SDO READ Velocity Actual Value h606C
IF "DB_Igus"."TCON-1-2-3-OK" AND NOT #hm[2] THEN
"SDO_READ2"(SDO_OBJECT := 16#606C,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => #Temp_DWord_2);
IF #READ_OK THEN
#VeloActualValue.Y := #Temp_DWord_2;
#hm[2] := TRUE;
// #StepNr := 1;
#StepNr_Next := 4;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
10://X Reset Fehler
IF NOT #hm[1] THEN
#CW1 := 16#00_80;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
// Y Reset Fehler
IF NOT #hm[1] THEN
#CW2 := 16#00_80;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
20://X SDO SwitchOnDisabled
IF NOT #hm[1] THEN
#CW1 := 16#00_01;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//Y SDO SwitchOnDisabled
IF NOT #hm[2] THEN
#CW2 := 16#00_01;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
30://X SDO ReadyToSwitchOn
IF NOT #hm[1] THEN
#CW1 := 16#00_06;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//Y SDO ReadyToSwitchOn
IF NOT #hm[2] THEN
#CW2 := 16#00_06;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
40://SDO SwitchedOn
IF NOT #hm[1] THEN
#CW1 := 16#00_07;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO SwitchedOn
IF NOT #hm[2] THEN
#CW2 := 16#00_07;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
50://SDO OperationEnabled
IF NOT #hm[1] THEN
#CW1 := 16#00_0F;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
// 51://SDO OperationEnabled
IF NOT #hm[2] THEN
#CW2 := 16#00_0F;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 2,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
60:// SDO 6092h: Feed constant Sub 1 Feed (z.B 70mm = 7.000 = 1B58)
IF NOT #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6092,
SDO_INDEX := 1,
SDO_BYTANZ := 4,
SDO_DATA_1 := "DB_MBDATA-1"."Feed constant Sub 1 Feed SDO 6092h",
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
// SDO 6092h: Feed constant Sub 1 Feed (z.B 70mm = 7.000 = 1B58)
IF NOT #hm[2] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6092,
SDO_INDEX := 1,
SDO_BYTANZ := 4,
SDO_DATA_1 := "DB_MBDATA-2"."Feed constant Sub 1 Feed SDO 6092h",
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
// #Nr := #Nr;
// #StepNr := 62;
END_IF;
END_IF;
//SDO 6092h: Feed constant Sub 2 Shaft Revolutions (Wert = 1)
IF #hm[1] AND NOT #hm[3] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6092,
SDO_INDEX := 2,
SDO_BYTANZ := 4,
SDO_DATA_1 := 1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[3] := TRUE;
// #Nr := #Nr;
// #StepNr := 63;
END_IF;
END_IF;
//SDO 6092h: Feed constant Sub 2 Shaft Revolutions (Wert = 1)
IF #hm[2] AND NOT #hm[4] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6092,
SDO_INDEX := 2,
SDO_BYTANZ := 4,
SDO_DATA_1 := 1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[4] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] AND #hm[3] AND #hm[4] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := FALSE;
END_IF;
70://SDO 6099sub1: Homing_speeds_Speed_during_search_for_switch (z.B. HEX1000 = 4096DEZ = 40,96mm/s bei 70mm Vorschub)
IF NOT #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6099,
SDO_INDEX := 1,
SDO_BYTANZ := 4,
SDO_DATA_1 := #HomingSpeed,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".VELO.X := #HomingSpeed;
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO 609Ah: Homing acceleration (z.B HEXFF00 = 65280DEZ = 652,80mm/s² bei 70mm Vorschub)
IF #hm[1] AND NOT #hm[2] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#609A,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Homing_Acc,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".ACC.X := #Homing_Acc;
#hm[2] := TRUE;
END_IF;
END_IF;
//SDO 6099sub1: Homing_speeds_Speed_during_search_for_switch (z.B. HEX1000 = 4096DEZ = 40,96mm/s bei 70mm Vorschub)
IF NOT #hm[3] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6099,
SDO_INDEX := 1,
SDO_BYTANZ := 4,
SDO_DATA_1 := #HomingSpeed,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".VELO.Y := #HomingSpeed;
#hm[3] := TRUE;
END_IF;
END_IF;
//SDO 609Ah: Homing acceleration (z.B HEXFF00 = 65280DEZ = 652,80mm/s² bei 70mm Vorschub)
IF #hm[3] AND NOT #hm[4] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#609A,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Homing_Acc,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".ACC.Y := #Homing_Acc;
#hm[4] := TRUE;
// #Nr := 0;
// #StepNr := 1;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] AND #hm[3] AND #hm[4] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := FALSE;
END_IF;
80://SDO 6060h: Modes of operation / 6=Homing
IF NOT #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6060,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := 6,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
// 81://SDO 6060h: Modes of operation / 6=Homing
IF #hm[1] AND NOT #hm[2] THEN
"SDO_READ1"(SDO_OBJECT := 16#6061,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => "DB_MBDATA-1".Mode_of_operationdisplay);
IF #READ_OK THEN
IF "DB_MBDATA-1".#Mode_of_operationdisplay <> 6 THEN
#hm[1] := FALSE;
ELSE
#hm[2] := TRUE;
END_IF;
END_IF;
END_IF;
//SDO 6060h: Modes of operation / 6=Homing
IF NOT #hm[3] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6060,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := 6,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[3] := TRUE;
// #Nr := #Nr;
// #StepNr := 83;
END_IF;
END_IF;
//SDO 6060h: Modes of operation / 6=Homing
IF #hm[3] AND NOT #hm[4] THEN
"SDO_READ2"(SDO_OBJECT := 16#6061,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => "DB_MBDATA-2".Mode_of_operationdisplay);
IF #READ_OK THEN
IF "DB_MBDATA-2".#Mode_of_operationdisplay <> 6 THEN
#hm[3] := FALSE;
ELSE
#hm[4] := TRUE;
END_IF;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] AND #hm[3] AND #hm[4] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := FALSE;
END_IF;
90://SDO Start Movement (Homing)
IF NOT #hm[1] THEN
#CW1 := 16#00_1F;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO Start Movement (Homing)
IF NOT #hm[2] THEN
#CW2 := 16#00_1F;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
100:// SDO Reset Movement (Homing)
IF NOT #hm[1] THEN
#CW1 := 16#1100 AND #CW1;
#CW1 := 16#000F OR #CW1;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
// SDO #Reset Movement (Homing)
IF #hm[1] AND NOT #hm[2] THEN
#CW2 := 16#1100 AND #CW2;
#CW2 := 16#000F OR #CW2;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
110://SDO 6060h: Modes of operation / 1=PPM ProfilePositionMode
IF NOT #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6060,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := 1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO 6060h: Modes of operation / 1=PPM ProfilePositionMode
IF #hm[1] AND NOT #hm[2] THEN
"SDO_READ1"(SDO_OBJECT := 16#6061,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => "DB_MBDATA-1".Mode_of_operationdisplay);
IF #READ_OK THEN
IF "DB_MBDATA-1".#Mode_of_operationdisplay <> 1 THEN
#hm[1] := FALSE;
ELSE
#hm[2] := TRUE;
END_IF;
END_IF;
END_IF;
//SDO 6060h: Modes of operation / 1=PPM ProfilePositionMode
IF NOT #hm[3] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6060,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := 1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[3] := TRUE;
END_IF;
END_IF;
//SDO 6060h: Modes of operation / 1=PPM ProfilePositionMode
IF #hm[3] AND NOT #hm[4] THEN
"SDO_READ2"(SDO_OBJECT := 16#6061,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_READ_OK => #READ_OK,
SDO_READ_ERROR => #READ_ERROR,
SDO_DATA_1 => "DB_MBDATA-2".Mode_of_operationdisplay);
IF #READ_OK THEN
IF "DB_MBDATA-2".#Mode_of_operationdisplay <> 1 THEN
#hm[3] := FALSE;
ELSE
#hm[4] := TRUE;
END_IF;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] AND #hm[3] AND #hm[4] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := FALSE;
END_IF;
120://SDO New Position 1 & ACC & VEL / position
IF NOT #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#607A,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #SollPosition.X,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO New Position 1 & ACC & VEL / Velo
IF NOT #hm[2] AND #hm[1] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6081,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Velo.X,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".VELO.X := #Velo.X;
#hm[2] := TRUE;
END_IF;
END_IF;
//SDO New Position 1 & ACC & VEL / Acc
IF NOT #hm[3] AND #hm[1] AND #hm[2] THEN
"SDO_WRITE1"(SDO_OBJECT := 16#6083,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Acc.X,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".ACC.X := #Acc.X;
#hm[3] := TRUE;
END_IF;
END_IF;
//SDO New Position 2 & ACC & VEL / position
IF NOT #hm[4] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#607A,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #SollPosition.Y,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[4] := TRUE;
END_IF;
END_IF;
// 124://SDO New Position 2 & ACC & VEL / Velo
IF NOT #hm[5] AND #hm[4] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6081,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Velo.Y,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".VELO.Y := #Velo.Y;
#hm[5] := TRUE;
END_IF;
END_IF;
// 125://SDO New Position 2 & ACC & VEL / Acc
IF NOT #hm[6] AND #hm[4] AND #hm[5] THEN
"SDO_WRITE2"(SDO_OBJECT := 16#6083,
SDO_INDEX := 0,
SDO_BYTANZ := 4,
SDO_DATA_1 := #Acc.Y,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
"DB_Panel".ACC.Y := #Acc.Y;
#hm[6] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] AND #hm[3] AND #hm[4] AND #hm[5] AND #hm[6] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := #hm[3] := #hm[4] := #hm[5] := #hm[6] := FALSE;
END_IF;
130://DO Start Signal setzen / Bewegung 1 (New Set Point)
IF NOT #hm[1] THEN
#CW1 := 16#00_1F;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//DO Start Signal setzen / Bewegung 1 (New Set Point)
IF NOT #hm[2] THEN
#CW2 := 16#00_1F;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
140://SDO Start Signal übnernommen / Reset Startsignal Bewegung 1 (Reset "New Set Point")
IF NOT #hm[1] THEN
#CW1 := 16#1100 AND #CW1;
#CW1 := 16#000F OR #CW1;
"SDO_WRITE1"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW1,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[1] := TRUE;
END_IF;
END_IF;
//SDO Start Signal übnernommen / Reset Startsignal Bewegung 1 (Reset "New Set Point")
IF NOT #hm[2] THEN
#CW2 := 16#1100 AND #CW2;
#CW2 := 16#000F OR #CW2;
"SDO_WRITE2"(SDO_OBJECT := 16#6040,
SDO_INDEX := 0,
SDO_BYTANZ := 1,
SDO_DATA_1 := #CW2,
SDO_WRITE_OK => #WRITE_OK,
SDO_WRITE_ERROR => #WRITE_ERROR);
IF #WRITE_OK THEN
#hm[2] := TRUE;
END_IF;
END_IF;
IF #hm[1] AND #hm[2] THEN
#Nr := 0;
#StepNr := 1;
#hm[1] := #hm[2] := FALSE;
END_IF;
ELSE // False StepNr
#StepNr := 0;
"DB_READ_WRITE".test_Joop[39] := #Nr;
END_CASE;
//NW 4
#Mode_of_operationdisplay.X := "DB_MBDATA-1".Mode_of_operationdisplay;
#Mode_of_operationdisplay.Y := "DB_MBDATA-2".#Mode_of_operationdisplay;