Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: S7 -> CoDeSys DBs und Pointer

  1. #1
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard


    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
    Wer Rechtschreibfehler findet, darf sie behalten!
    Zitieren Zitieren S7 -> CoDeSys DBs und Pointer  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard

    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)
    Wer Rechtschreibfehler findet, darf sie behalten!

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    -ASDF- (16.11.2011)

  6. #5
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard

    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

    Help ?
    Wer Rechtschreibfehler findet, darf sie behalten!

  7. #6
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Hier mal ein Screen der Online Ansicht:

    asdad.png
    Wer Rechtschreibfehler findet, darf sie behalten!

  8. #7
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard

    No Comment
    Man sollte das ding halt schon als IN_Out deklarieren >.<

    sry
    Wer Rechtschreibfehler findet, darf sie behalten!

  9. #8
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard

    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

    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
    ...
    Geändert von -ASDF- (17.11.2011 um 09:17 Uhr)
    Wer Rechtschreibfehler findet, darf sie behalten!

  10. #9
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    756
    Danke
    27
    Erhielt 166 Danke für 144 Beiträge

    Standard

    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.

  11. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    -ASDF- (17.11.2011)

  12. #10
    -ASDF- ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    227
    Danke
    44
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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
    Wer Rechtschreibfehler findet, darf sie behalten!

Ähnliche Themen

  1. Pointer
    Von Mathias im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.06.2009, 17:02
  2. Pointer und Co
    Von mkd im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 31.07.2008, 14:30
  3. SCL: Pointer
    Von dinner4one im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.07.2008, 18:07
  4. Pointer in SCL ?
    Von AndreK im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.04.2008, 21:24
  5. [?] Codesys Pointer durchreichen
    Von Kurt im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 10.01.2007, 14:29

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •