S7 -> CoDeSys DBs und Pointer

-ASDF-

Level-2
Beiträge
236
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

Ich habe vor mir ein S7-Projekt welches ich in CoDeSys umschreib. Nun bin ich an einem Punkt wo ziemlich viele Daten aus einem DB mittels Pointer verarbeitet werden.
Meine Frage ist wie ich dies am besten oder geschicktesten in CoDeSys realisiere. Dort habe ich ja keine DBs.

Hoffe ihr könnt mir ein paar Anregungen geben :)
 
Ich hab hier gerade ein Codesys-Programm, das ich für eine andere Maschine als Vorlage nutzen soll. Darin wird exzessiv mit Arrays und Array of Struct gearbeitet. Dann kann man natürlich fast wie bei einem Pointer mit den Array-Indizes arbeiten, um sozusagen "indirekt" zu adressieren. Per Adresspointer in Codesys würde ich das jedenfalls nicht lösen. Die Array-Variante hat leider einen großen Nachteil, man hat kaum einen vernünftigen, wenn mehrere Werte, welche in Arrays stehen, ineinander geschachtelt sind. Ehrlich gesagt ist das extrem anstrengend, zumal mein Code nicht eine Kommentarzeile enthält. Aber auch bei der indirekten Adressierung in S7 ist ja keine Symbolik dabei und man muß gut kommentieren.

PS: Statt DB legst du deine Daten als globale Variablen an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Daten werden nur in einem Programm verwendet. Ich belege Sie mit bestimmten Werten vor und dann werden Sie "nur" zur bearbeitung, ich sage mal, Globaler Variablen benutzt.
Also kann ich Sie doch auch einfach Lokal oben in das Programm tun oder ?
Zum Pointer: Unterscheidet sich dieser in CoDeSys und S7 ? (Muss dazu sagen habe ihn noch nie in CoDeSys verwendet)
 
Ja, die Pointer unterscheiden sich, ich würde in Codesys die Pointer nach Möglichkeit vermeiden, da in ST über Array-Indizes eigentlich genau diese Dinge seht gut funktionieren. Daher kann ich auch nicht viel mehr zu Pointern in Codesys sagen, da findest du sicher Informationen im Beckhoff-Information-System. Zumal ich auch noch in den Anfängen diesbezüglich stecke. Fakt ist, in der Vorlage, die ich verwende und die von versierten Codesys-Programmierern stammt, ist keinen einziger Adresspointer verwendet, zumindest in den zugänglichen Bausteinen.
 
Also ich hab da jetzt ein bisschen mit Arrays rum gespielt und ein Problem entdeckt.
Die Variable (Array) die ich an meinen Baustein angelegt habe übernimmt den Wert nicht den der Array in dem Baustein hat.
Wieso ???
Im Baustein sieht das ungefähr so aus: X[Y,1] :=10;
Deklariert ist das so: X:ARRAY[0..10,1..2] OF BYTE;
Im Programm Wird X mit dem gleichen Array belegt also vom Aufbau.
Wenn ich jetzt Online beobachte und Y=0 schreib dann steht zwar Im Baustein bei X[0,1] der Wert 10 jedoch nicht in dem Array den ich an dem FB angelegt habe.

Ja Formulieren ist nicht meine stärke ich Hoffe es kann jemand nachvollziehen :D

Help ?
 
Moin,
Also ich hab das jetzt soweit gut hinbekommen aber wie kann ich jetzt am besten eine Gruppe in eine andere Transferieren, also sagen wir mal:
Array[Start_Grp,0 bis 10]:=Array[Ziel_Grp,0 bis 10];
Wie mach ich das ?
Habe es mit einem Loop gemacht und es geht aber dies scheint mir kein "sauberer" weg zu sein :D

EDIT:
Code:
IF TransIMP THEN
REPEAT
ArrZeit[Ziel_NR,Loop1]:=ArrZeit[Trans_NR,Loop1];
Loop1:=Loop1+1;
LoopB1:=Loop1>=11;
UNTIL LoopB1
END_REPEAT
Loop1:=0;
ELSE
RETURN;
END_IF

...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Array nicht so deklarieren,
Code:
VAR
   ArrZeit:ARRAY[1..2,0..10] OF irgendwas;
END_VAR
sondern so:
Code:
VAR
   ArrZeit:ARRAY[1..2] OF ARRAY[0..10] OF irgendwas;
END_VAR;
Dann kannst Du mit
Code:
ArrZeit[Ziel_NR]:=ArrZeit[Trans_NR];
alle 11 Elemente in einem Rutsch kopieren.
Für den Zugriff auf einzelne Elemente ist die Schreibweise dann allerdings etwas anders.
Statt
Code:
ArrZeit[1,5]:=100;
musst Du schreiben
Code:
ArrZeit[1][5]:=100;
Noch so nebenbei:
In ST gibt es bereits fertige Zählschleifen
Code:
FOR Loop:=0 TO 10 BY 1 DO
   MachWasMit ArrZeit[1,Loop];
END_FOR;
Wobei Du Dir das "BY 1" sparen kannst, wenn die Schrittweite +1 sein soll.
 
Achja zu deiner For-Schleife: Hatte das auch im Handbuch gelesen und dachte halt das dies dann Zyklisch ausgeführt wird also jeden Zyklus +1 was ja für mein Fall nicht Optimal wäre.

Naja trotzdem danke. Passt jetzt wunderbar
 
Zurück
Oben