Hallo zusammen,
als Quereinsteiger aus S7, sitze ich aktuell an einem Programmteil
welcher mir SPS-Eingänge auf ein Array of DWORD und
Daten aus einem Array of DWord auf Ausgänge schreiben soll.
Nach einigen Selbstversuchen / Online-Suchvorgängen bin ich beim unten aufgeführten Code angekommen.
Dieser kopiert mir zwar das erste DWord (%ID500) auf das Read_SPS_Array[0], jedoch hapert es
anschließend am Offset für den 2ten Lesevorgang in der Schleife ( %ID 501 auf Array [1].
(Rot markiert)
Variablendeklaration:
VAR
Read_SPS_Loop: INT;
END_VAR
VAR_IN_OUT
Read_SPS_Array: ARRAY[0..25] OF DWORD;
END_VAR
VAR
Read_SPS_Offset: Pointer to DWORD;
END_VAR
VAR_INPUT
Read_SPS_Startadresse: DWORD; <-- anparametriert mit "%ID500"
END_VAR
Programm:
// Lese 16 DWord Eingänge ab Startadresse und übertrage in Array 0-15
Read_SPS_Offset:= ADR (Read_SPS_Startadresse);
FOR Read_SPS_Loop:= 0 TO 15 DO
Read_SPS_Array[Read_SPS_Loop]:= Read_SPS_Offset^;
Read_SPS_Offset:= Read_SPS_Offset + SIZEOF(DWORD);
END_FOR
// Test Ausgangswert schreiben
Write_SPS_Array[0]:= 5;
// Lese Array 0-15 und schreibe 16 DWORD Ausgänge ab Startadresse
Write_SPS_Offset:= ADR (Write_SPS_Startadresse);
FOR Write_SPS_Loop:= 0 TO 15 DO
Write_SPS_Offset^:= Write_SPS_Array[Write_SPS_Loop];
Write_SPS_Offset:= Write_SPS_Offset + SIZEOF(DWORD);
END_FOR
Würde mich freuen, wenn mir hier jemand mit dem Offset weiterhelfen könnte
als Quereinsteiger aus S7, sitze ich aktuell an einem Programmteil
welcher mir SPS-Eingänge auf ein Array of DWORD und
Daten aus einem Array of DWord auf Ausgänge schreiben soll.
Nach einigen Selbstversuchen / Online-Suchvorgängen bin ich beim unten aufgeführten Code angekommen.
Dieser kopiert mir zwar das erste DWord (%ID500) auf das Read_SPS_Array[0], jedoch hapert es
anschließend am Offset für den 2ten Lesevorgang in der Schleife ( %ID 501 auf Array [1].
(Rot markiert)
Variablendeklaration:
VAR
Read_SPS_Loop: INT;
END_VAR
VAR_IN_OUT
Read_SPS_Array: ARRAY[0..25] OF DWORD;
END_VAR
VAR
Read_SPS_Offset: Pointer to DWORD;
END_VAR
VAR_INPUT
Read_SPS_Startadresse: DWORD; <-- anparametriert mit "%ID500"
END_VAR
Programm:
// Lese 16 DWord Eingänge ab Startadresse und übertrage in Array 0-15
Read_SPS_Offset:= ADR (Read_SPS_Startadresse);
FOR Read_SPS_Loop:= 0 TO 15 DO
Read_SPS_Array[Read_SPS_Loop]:= Read_SPS_Offset^;
Read_SPS_Offset:= Read_SPS_Offset + SIZEOF(DWORD);
END_FOR
// Test Ausgangswert schreiben
Write_SPS_Array[0]:= 5;
// Lese Array 0-15 und schreibe 16 DWORD Ausgänge ab Startadresse
Write_SPS_Offset:= ADR (Write_SPS_Startadresse);
FOR Write_SPS_Loop:= 0 TO 15 DO
Write_SPS_Offset^:= Write_SPS_Array[Write_SPS_Loop];
Write_SPS_Offset:= Write_SPS_Offset + SIZEOF(DWORD);
END_FOR
Würde mich freuen, wenn mir hier jemand mit dem Offset weiterhelfen könnte