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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Reihenfolge der Variablen im DB festlegen

  1. #1
    Registriert seit
    02.11.2008
    Beiträge
    11
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    in meinem SCL Programm (FB) deklariere ich einen UDT folgendermaßen:

    VAR
    Parameter := UDT10;
    END_VAR

    Weiterhin deklariere ich mehrere Ein- und Ausgangsvariablen.

    Ich möchte gerne, dass der UDT als erstes in den Instanz-Datenbaustein eingefügt wird und dann erst die anderen Variablen folgen.

    Leider werden Ein- und Ausgangsvariablen jedoch vor den statischen Variablen im Instanz-DB angelegt.

    Gibt es eine Möglichkeit diese Reihenfolge zu ändern. Also das die statischen Variablen als erstes im Instanz-DB angelegt werden?

    Oder besteht die Möglichkeit dem UDT eine feste Anfangsaddresse im DB zuzuweisen?

    Hintergrund ist, dass ich einem anderen FB die Anfangsaddresse des UDT in meinem DB übergeben muss.

    Wenn ich jetzt irgendwann mal neue Ein- und Ausgangsvariablen hinzufüge, wird sich die absoulte Anfangsaddresse ja ändern. Das ist nicht so schön.
    Und um Fehler zu vermeiden, hätte ich da gerne eine feste Addresse.

    MFG.

    Frank
    Geändert von Franky08 (14.08.2009 um 10:26 Uhr)
    Zitieren Zitieren Reihenfolge der Variablen im DB festlegen  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    nein die Reihenfolge im IDB ist fix. Bei Änderungen in der Schnittstelle rutscht alles nach. Querzugriffe von anderen Bausteinen auf einen fremden IDB sind unschön!! Leg lieber die bereitgestellten Daten in einer UDT eines globalen DBs ab die du an den FB als IN, OUT oder INOUT (je nach Zugriff) übergibst.

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Stat  

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo Franky08,

    deklariere Deinen UDT im FB als erste IN-Variable und lasse den Parameter beim Bausteinaufruf unbeschaltet.
    Dann liegt der UDT immer am Anfang im IDB und es hat den Vorteil, daß der UDT wenigstens in der offiziellen
    Bausteinschnittstelle als Übergabeparameter veröffentlicht ist.

    Alle IN/OUT/IN_OUT-Parameter können außerhalb des Bausteinaufrufs gelesen und beschrieben werden!
    z.B.:
    Code:
    VAR_INPUT
    Parameter := UDT10;
    ...
    END_VAR
    ...
    
    L "FB_Instanz".Parameter.member1
    T "FB_Instanz".Parameter.member2
    L "FB_Instanz".invar
    T "FB_Instanz".outvar
    Der leider mögliche Zugriff auf STAT-Variablen eines IDB von außerhalb sollte für disziplinierte Programmierer absolut
    tabu sein (Stichworte: Kapselung, private lokale Variablen, Wiederverwendbarkeit, dokumentierte Schnittstelle).

    MfG
    PN/DP
    Geändert von PN/DP (16.08.2009 um 01:51 Uhr) Grund: korrektes Schlüsselwort heißt VAR_INPUT
    Zitieren Zitieren Deklarieren als IN-Variable  

  4. #4
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo N/DP,

    Zitat Zitat von PN/DP Beitrag anzeigen
    ..deklariere Deinen UDT im FB als erste IN-Variable und lasse den Parameter beim Bausteinaufruf unbeschaltet..
    Wie macht man das?


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo Onkel,

    wie macht man was?
    ? als IN-Variable deklarieren? -> siehe Beispielcode VAR_IN...END_VAR
    ? beim Aufruf unbeschaltet lassen?
    Code:
    CALL "FB_Instanz","IDB"
      Parameter :=                //<- hier nichts ranschreiben (geht nur bei FB)
      invar     :=MW20
      ...
      outvar    :=MW40
    MfG
    PN/DP
    Zitieren Zitieren wie macht man das?  

  6. #6
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo PN/DP,

    [code]? beim Aufruf unbeschaltet lassen?[/quote]
    Ist zumindest bei FBs ungewöhnlich. Werd's bei Gelegenheit mal testen.

    Gruß, Onkel

    (Sorry, acht Staeks und zwei Bier )
    Geändert von Onkel Dagobert (16.08.2009 um 09:38 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo Onkel,

    Bausteinparameter bei FB unbeschaltet lassen kommt häufig vor, z.B. beim Regler-Baustein FB41 werden eigentlich nie alle Parameter beschaltet, weil es da für die Reglerparameter das extra-Tool "PID Assistent" (oder so ähnlich) gibt, das die Parameter direkt in den IDB schreibt. Und die sollen ja nicht überschrieben werden.

    In anderen Programmiersprachen wie IEC 1131 geht es manchmal garnicht anders (oder nur über Zwischenvariablen). Da wird oft ein Eingangs-Parameter vor Aufruf des FB beschrieben. Oder ein FB-Ausgangsparameter im nachfolgenden Programm mehrmals direkt abgefragt: L "FB_Instanz".outvar

    Gruß
    PN/DP
    Zitieren Zitieren Bausteinparameter unbeschaltet lassen  

  8. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Wie macht man das?
    wie macht man was?

    ich glaub er meint das so:

    Code:
    *
    TYPE UDT 1
    VERSION : 0.1
    
    
      STRUCT     
       test : BOOL ;    
       test1 : BOOL ;    
      END_STRUCT ;    
    END_TYPE
    
    FUNCTION_BLOCK FB 2
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      test : UDT 1;    
      xIN1 : BOOL ;    
      xIN2 : BOOL ;    
    END_VAR
    VAR_OUTPUT
      xOUT1 : BOOL ;    
      xOUT2 : BOOL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          U     #xIN1; 
          U     #xIN2; 
          =     #test.test1; 
    
          U     #xIN1; 
          O     #xIN2; 
          =     #test.test; 
    
          U     #test.test1; 
          =     #xOUT1; 
          NOT   ; 
          UN    #test.test; 
          =     #xOUT2; 
    
    END_FUNCTION_BLOCK
    
    DATA_BLOCK DB 2
    TITLE =
    VERSION : 0.0
    
     FB 2
    BEGIN
       test.test := FALSE; 
       test.test1 := FALSE; 
       xIN1 := FALSE; 
       xIN2 := FALSE; 
       xOUT1 := FALSE; 
       xOUT2 := FALSE; 
    END_DATA_BLOCK
    
    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1
    
    BEGIN
    NETWORK
    TITLE =
    
          CALL FB     2 , DB     2 (
               xIN1                     := E      0.0,
               xIN2                     := E      0.1,
               xOUT1                    := A      0.0,
               xOUT2                    := A      0.1);
    
    
    END_FUNCTION
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    PN/DP (16.08.2009)

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Danke 4L für den ausführlichen Quelltext. Ja, genau so war mein Vorschlag gemeint.

    In FUP/KOP/AWL-Editor sieht der Aufruf bei AWL so aus
    Code:
    CALL FB 2 , DB 2
      test  :=
      xIN1  := E0.0
      xIN2  := E0.1
      xOUT1 := A0.0
      xOUT2 := A0.1
    Bei FUP und KOP sind an dem Eingang "test" dann 3 Punkte.

    (ich arbeite selten mit Quellen, wußte noch garnicht, daß man die unbeschalteten Parameter
    einfach komplett weglassen kann, obwohl: in 1131 ist es ja auch so)

    Gruß
    PN/DP

  11. #10
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    (ich arbeite selten mit Quellen, wußte noch garnicht, daß man die unbeschalteten Parameter
    einfach komplett weglassen kann, obwohl: in 1131 ist es ja auch so)
    hat mich auch kurz stutzen lassen und ich hab die quelle ein zweites mal generiert ... keine änderung.

    fügt man

    Code:
    *
                 test                        :=,
    ein, zickt der compiler rum -> Anweisung erwartet Operanden
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Datenbereich für FC festlegen...
    Von AndreK im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 29.07.2010, 12:43
  2. Antworten: 14
    Letzter Beitrag: 20.05.2009, 12:38
  3. Antworten: 0
    Letzter Beitrag: 19.05.2009, 09:33
  4. Meldetexte in SCL Quelle festlegen
    Von Shino im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 26.02.2009, 14:52
  5. DB Anfangswert festlegen
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.06.2005, 13:22

Lesezeichen

Berechtigungen

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