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

Ergebnis 1 bis 7 von 7

Thema: Lokierte Variablen über Umweg remanent machen?

  1. #1
    Registriert seit
    24.04.2013
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich arbeite mich zurzeit ein wenig in die Beckhoff-Programmierung ein und stehe nun vor folgendem Problem:

    Ich will Zählerstände von Stromzählern über digitale Eingangsklemmen auf einen BC3150 "zwischenspeichern" und diese Werte dann über Profibus auf eine Siemens CPU schicken.

    Das ich diese Werte in das DP-Slave Modul (BC3150) bekomme, müssen ja die Variablen dazu lokiert sein, also Adressen wie z.B.

    zaehlwert AT%Q*: array[1..64] OF DINT

    deklariert werden, das sie im System-Manager von Twincat sichtbar werden und ich diese dann mit den Modulen des DP-Slaves verknüpfen kann.

    Ich wollte sie als VAR_GLOBAL RETAIN PERSISTENT deklarieren, was ja mit dem lokieren nicht mehr geht (beim Übersetzen Größe der verbrauchten Retain-Daten: 0 Bytes)

    Wie kann ich das nun mit möglichst wenig Aufwand bewerkstelligen?

    Gibts dann auch die Möglichkeit, nach Spannungsausfall des BC3150, dass die Werte erhalten bleiben ohne USV?

    Vielen Dank schon mal für die Hilfe!
    Zitieren Zitieren Lokierte Variablen über Umweg remanent machen?  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Du legst in var global ratain persistent ein Array an, in welches du deine Werte hineinschreibst.
    Um sie an den Koppler zu bringen legst du für diesen die Outputvatiablen an und schreibst im Programm deine perstistenten Daten jeden Zyklus (Oder von mir aus auch über einen Trigger) auf die Outputvariablen (z.Bsp. per Schleife).
    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
    ASDF0815 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2013
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey Ralle,
    erstmal vielen Dank für die schnelle Antwort. Ich mach das also folgendermaßen:

    Unter den Globalen Variablen steht folgendes:

    VAR_GLOBAL RETAIN PERSISTENT
    (*Variablen IN*)


    Skalierung: ARRAY[1..64] OF DWORD;
    Nulldurchgang: ARRAY[1..64]OF DWORD;
    Sollwert: ARRAY[1..64]OF DWORD;

    (*Variablen OUT*)
    Zaehlwert : ARRAY [1..64] OF DINT;

    END_VAR

    also z.B.

    Wie ordne ich dann meine Ausgangsvariablen meinen persistenten Variablen im MAIN-Programm zu? Das Programm über Trigger würde schon laufen, nur komm ich mit der Deklaration der lokalen Variablen ( der Zuordnung zu den persistenten Variablen vom Array) nicht ganz klar, da ich noch Einsteiger bei Beckhoff und der Schreibweise bin.

    Vielen Dank schonmal

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Code:
    FOR I := 1 TO 64 DO
       Q_Skalierung[I] := Skalierung[I];
    END_FOR
    Ich hab im Moment keine Beckhoff im Zugriff, denke aber, man konnte ganze Array auf die Outputklemmen legen, im Notfall die einzelnen Klemmem jeweils mit einem Array-Element verbinden.
    Mein Vorschlag ist, das über den Umweg von 2 Array zu machen, einmal das persistente, dann das Output_Array, da ich aus deiner Beschreibung des Problems entnehme, dass du die persistenten Arrayelemente nicht direkt mit der Klemme verbinden kannst.
    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. #5
    ASDF0815 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2013
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Genau das ist das Problem. Ich hab es nun folgendermaßen gemacht:

    Ich habe als VAR_GlOBAL RETAIN PERSISTENT eine Variable Zaehlwert als Array deklariert.

    Im Main Programm habe ich nochmal eine Variable für den Zählwert als Ausgangsvariable deklariert, auch als Array.

    POGRAM MAIN
    VAR
    iZaehlwert AT %Q* : ARRAY [1..64] OF DINT;END_VAR

    Nun hab ich in meiner Schleife am Ende die beiden Variablen zusammengefügt.

    FOR iSchleife := 1 TO 64 BY 1 DO
    IF Zaehler[iSchleife] AND NOT bFlanke[iSchleife] THEN (*Wenn Zählerpuls High und kein Flankenmerker*)
    bFlanke[iSchleife] := TRUE; (*dann Flankenmerker High setzen und*)
    Zaehlwert[iSchleife] := Zaehlwert[iSchleife] + Skalierung[iSchleife]; (*Zählwert um Skalierungswert erhöhen*)
    iZaehlwert[iSchleife] := Zaehlwert[iSchleife]; (*Persistente Variable auf Ausgangsvariable schreiben*)
    END_IF
    (...)

    Normalerweise müsste doch beispielsweise nach einem Reset der Zählwert erhalten bleiben? Das tut es aber nicht. Hab ich irgendwas übersehen? Muss ich noch was anderes machen?`

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Du mußt nach einem Reset natürlich zuerst wieder die Schleife durchlaufen, um die remenenten Zählwerte auf deine Output-Variable zu schreiben.
    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

  7. #7
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gibt auch so eine Speicherklemme, in welcher 128kByte NOVRAM drin sind. Da würdest du dein Array drunter anlegen, mit den Variablen im Prog verknüpfen (die dann nicht mehr Retain/Persistent sein müssen) und die werden dann zyklisch im NOVRAM abgelegt. Beim Neustart werden dann automatisch die Werte aus dem NOVRAM in die SPS zurückgeschrieben.
    "Always code as if the guy, who ends up maintaining your code, is a violent psychopath who knows, where you live."
    -------------------------------------------------------------------------------------------------------------------------------------------------------
    Youtube-Channel

Ähnliche Themen

  1. BC3150 Retain Variablen nicht remanent
    Von maximb im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 16.07.2009, 13:31
  2. S7-200 Daten remanent Speichern
    Von godi im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 10.09.2008, 16:02
  3. S7 Graph nicht Remanent
    Von magmaa im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 09.11.2007, 08:58
  4. DB`s und Zeitwerte remanent ? (S5)
    Von Industrieservic im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 15.04.2007, 23:56
  5. Im CPU314-C 2DP globalen DB1 remanent machen.
    Von Boernie im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.10.2005, 11:26

Lesezeichen

Berechtigungen

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