Mit Arrays arbeiten (Werte Speichern etc.) - und "Toggle"-Schalter

bAsKeT

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich hätte da mal ein - zwei Verständnissfragen zur Programmierung mit Codesys.

1. Versuche ich gerade mit Arrays zu arbeiten und habe versucht die Folgendermaßen zu definieren:


(*Zuweisung Array BYTE*)
fluegel_var_byte: ARRAY [1..2,1..2] OF BYTE;
(*Fluegel 1*)
fluegel_var_byte[1,1] :BYTE:= 12;
fluegel_var_byte[1,2] :BYTE:= 16;
(*Fluegel 2*)
fluegel_var_byte[2,1] :BYTE:= AT %IB1;
fluegel_var_byte[2,2] :BYTE:= AT %IB6;

Das geht so aber scheinbar nicht. Wie ich anfangswerte initialisieren kann ist mir prinzipiell schon klar, aber wie stelle ich das an wenn ich einen Wert nachträglich in den Array schreiben will?

Wie kann ich ein Byte aus einem Eingang, wie in obigem Beispiel in den Array schreiben?

Und zweitens würde ich gerne den Array von [1..i,1..5] definieren. Dabei habe ich i: int:=5; definiert, funktioniert allerdings leider auch nicht :(...




Zuletzt noch eine andere Sache: Und zwar würde ich gerne 3 Schalter einbauen um zwischen 3 verschiedenen Betriebsarten umzustellen. Wenn ich Modus 1= true aktiviere, sollen die anderen beiden auf False zurückspringen, bei Modus 2= true dementsprechend Modus 1 und 3 auf False. Da ich Anfänger bin und Momentan mit FUP programmiere, hab ich das nur mit einer Ellenlangen Schaltung gelöst bekommen. Gibts da eine einfachere Lösung?

Zu diesem Thema auch gleich noch eine Frage wegen der Visualisierung: Ist es möglich ein Feld so zu belegen, dass es bei Modus 1=true den Text "Modus 1" ausgibt, bei Modus 2= true den Text "Modus 2" ausgibt und bei Modus 3= true den Text "Modus 3" ausgibt?



Jeder fängt mal klein an, vielen Dank schonmal für die Mühe!

Vincent
 
Zuletzt bearbeitet:
Das geht so aber scheinbar nicht. Wie ich anfangswerte initialisieren kann ist mir prinzipiell schon klar, aber wie stelle ich das an wenn ich einen Wert nachträglich in den Array schreiben will?
Also direkte Speicher zuweisen darfst du meines Wissens nicht, das macht Codesys schon für dich :)

Code:
fluegel_var_byte[1,1] := Deine Variable vom Typ BYTE;
So kannst du jederzeit Daten in ein Feld deines Arrays schreiben (und auch lesen)

Und zweitens würde ich gerne den Array von [1..i,1..5] definieren. Dabei habe ich i: int:=5; definiert, funktioniert allerdings leider auch nicht :(...

CoDeSys kann den Speicher nicht dynamisch ändern. d.h. du kannst die Grösse des Arrays nur durch erneutes kompilieren+einloggen ändern! (Nicht zur Laufzeit)
Du kannst aber die INT-Variable der Array-Grösse als VAR_CONSTANT definieren und so beispielsweise mehrere Arrays gleichzeitig verändern...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort!

Hab jetzt mal ein bischen mit ST rumgespielt und das klappt eigentlich so weit auch ganz gut.

Allerdings hab ich immernoch ein Probelm mit den "dynamischen" Ausgängen.

Kann ich irgendwie Adressen in einem Array Speichern?

Ich würde gerne den Ausgang[i=1,1] bis Ausgang [i=5,2] mit Adressen für Ausgänge belegen, die dann für ein bestimmtes i automatisch "belegt" werden. Wie funktioniert denn sowas?
 
Wenn du für jede Adresse eine Variable deklarierst und diese dann, je nachdem wo du sie haben möchtest, ins Array legst?
 
Zurück
Oben