IO Adresse dymanisch zuweisen

wackel_peter

Level-1
Beiträge
54
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
wie lässt sich eine Zuweisung der IO-Adresse zur Laufzeit realisieren (in ST)?
Bei jedem Neustart soll die Adresszuweisung je nach Bedingung neu erfolgen.

Pseudo-Code
GLOBAL_VAR
SensorI01
SensorI02
SensorVoll
SensorVoll
AktorQ01 at %QW1
AktorQ02 at %QW2
VentilVoll
VentilLeer
...
PLC_POWER_ON
IF Bedingung = TRUE THEN
SensorVoll := SensorI01;
SensorVoll := SensorI02;
AktorQ01 := VentilLeer;
AktorQ02 := VentilVoll;
ELSE
SensorVoll := SensorI02;
SensorVoll := SensorI01;
AktorQ02 := VentilLeer;
AktorQ01 := VentilVoll;
END_IF
...
PLC_MAIN

Ist der Ansatz richtig oder muss mit Pointern gearbeitet werden?

Für sinnvolle Tipps und Hilfe wäre ich dankbar,
Peter
 
Hallo Peter!

Vorab: Mit Pointern braucht man zum Glück so gut wie nie arbeiten. Das Leben kann man sich auch anderweitig schwer machen im Bereich des Debugging.

Zu deinem Code:
Was du da programmiert hast, ist ja eine in Abhängigkeit der IF-Bedingung entsprechende Zuweisung auf Ausgänge.
Adressen werden da nicht dynamisch zugewiesen. Wenn es wirklich um Adresszuweisungen geht, muss tatsächlich mit Pointern gearbeitet werden.
In deinem Code-Sniple sehe ich aber keine Veranlassung dazu.
-->Ist also so möglich, wenn es darum geht zur Laufzeit auf die Ausgänge WertA oder WertB zu schreiben.

Generell würde ich aber davon abraten eine Allokation AT%QW zu nutzen. Egal welcher Datentyp dahinter steckt, nutze immer B.
Viele haben beim Umstieg von Tc2 auf Tc3 genau an der Stelle Probleme.
Hintergrund: Tc3 verhält sich beim Speicherhandling nun so, wie man es erwarten würde bezogen auf doppelte Allokation z.B eines INT QB/W2 usw.

Gruß,
mac203
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

das Zuweisen zur Laufzeit funktioniert und reicht für meine Zwecke.
Habs eben mal implemntiert und getestet.

Was die Allokation angeht. Das ist mir neu. Ich werde mal drauf achten.

Grüße,
Peter
 
Zurück
Oben