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

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

Thema: In: Array ???

  1. #1
    Registriert seit
    08.09.2008
    Beiträge
    57
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    kann mir mal jemand verraten was ich da bei // IN : ARRAY schreiben soll!
    Zur Vorgeschichte:

    - Ich hatten kleinen FB geschrieben, die mir die Funktion von einen Wire Break macht. D.h. falls ein Wire Break kommt, soll mir die MSG anzeigen und mit einem RESET soll ich es CHECKEN(Bestätigen).
    Ich habe diesen FB so geschrieben, dass ich per Eingabe die Anzahl bestimme.
    Diesen Baustein habe ich in diesen FB1 eingefügt und jetzt weiss ich leider nicht mehr weiter!!!!!!



    FUNCTION_BLOCK FB1

    // Bausteinparameter
    VAR_INPUT
    RESET
    {S7_m_c := 'true'; S7_param := 'false'} : BOOL := FALSE;

    TEMP1_WB
    {S7_m_c := 'true'; S7_param := 'false'} : BOOL := FALSE;
    TEMP2_WB
    {S7_m_c := 'true'; S7_param := 'false'} : BOOL := FALSE;
    TEMP3_WB
    {S7_m_c := 'true'; S7_param := 'false'} : BOOL := FALSE;
    END_VAR

    VAR_OUTPUT
    TEMP1_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;
    TEMP2_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;
    TEMP3_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;

    RES_CHK_TEMP1_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;
    RES_CHK_TEMP2_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;
    RES_CHK_TEMP3_WB_MSG
    {S7_m_c := 'true'} : BOOL := FALSE;
    END_VAR

    VAR_TEMP
    RESET_MERKER : BOOL;

    END_VAR
    VAR
    RESET_FLANKEN_MERKER : BOOL := TRUE;

    TEST1 : FB900;

    WBn : ARRAY[0..2] OF BOOL;
    WBn_MSG : ARRAY[0..2] OF BOOL;
    RESn : ARRAY[0..2] OF BOOL;
    END_VAR

    WBn[0] := TEMP1_WB;
    WBn[1] := TEMP2_WB;
    WBn[2] := TEMP3_WB;

    WBn_MSG[0] := TEMP1_WB_MSG;
    WBn_MSG[1] := TEMP2_WB_MSG;
    WBn_MSG[2] := TEMP3_WB_MSG;

    RESn[0] := RES_CHK_TEMP1_WB_MSG;
    RESn[1] := RES_CHK_TEMP2_WB_MSG;
    RESn[2] := RES_CHK_TEMP3_WB_MSG;

    IF RESET = true AND RESET_FLANKEN_MERKER = false THEN
    RESET_MERKER := TRUE;
    END_IF;
    RESET_FLANKEN_MERKER := RESET;
    IF RESET_MERKER = true THEN
    RESET_MERKER := FALSE;
    END_IF;

    TEST1(RESET := RESET // IN: BOOL,
    n_WB := 2 // IN: INT
    ,TEMPn_WB := // IN: ARRAY
    );
    := TEST1.TEMPn_WB_MSG; // OUT: ARRAY
    := TEST1.RES_CHK_TEMPn_WB_MSG; // OUT: ARRAY


    END_FUNCTION_BLOCK
    Zitieren Zitieren In: Array ???  

  2. #2
    Registriert seit
    01.01.2008
    Beiträge
    104
    Danke
    43
    Erhielt 21 Danke für 19 Beiträge

    Standard

    Hallo!

    Du legst einen DB an, in dem du jeweils 3 Arrays [0..2] of Bool erstellst. Diese gibst du dann beim Aufruf deinens FB´s an. (STRG + J und danach den DB mit den jeweiligen Array auswählen).
    Gruß
    Da_Basco


    Ich kann über das Wasser laufen,
    weil ich weiß wo die Steine sind... (Rainald Grebe)
    Zitieren Zitieren Db  

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    aus deiner Frage und dem beiliegenden Code entnehme ich, dass du aus dem FB1 heraus den FB900 mit Daten versorgen willst.

    Wenn du ein ARRAY (oder STRING oder UDT) an einen anderen Baustein übergeben willst, so geht das intern nur als Pointer - nicht als direkte Wert-Übergabe. Du mußt also im FB1 ein ARRAY mit exakt der gleichen Struktur wie der IN-Parameter des FB900 hinterlegt haben und du kannst dieses dann direkt symbolisch übergeben - SCL kümmert sich dann schon um den Rest. Gleiches gilt für die OUT-Parameter. Der Daten-Bereich, in den der FB900 hineinschreiben soll, muß im FB1 als Variable vorhanden sein.

    Dein Code für den FB900 könnte dann also in etwa so aussehen :
    Code:
    TEST1 (RESET := RESET , 
           n_WB := 2  ,   
         TEMPn_WB :=  WBn ) ; 
    
    WBn_MSG := TEST1.TEMPn_WB_MSG ; 
    RESn := TEST1.RES_CHK_TEMPn_WB_MSG ;
    Ich weiß jetzt allerdings nicht, ob ich die richtigen Array's an der richtigen Stelle plaziert habe

    Gruß
    LL

  4. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    husox81 (13.12.2008)

  5. #4
    Registriert seit
    08.09.2008
    Beiträge
    57
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für deine Hilfe!

    die ARRAYS hast du richtig vergeben aber das hatte ich auch versucht
    und der Compiler sieht das als Fehler!!! (siehe BILD)
    Angehängte Grafiken Angehängte Grafiken
    Geändert von husox81 (13.12.2008 um 18:49 Uhr)

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... du mußt also im FB1 ein ARRAY mit exakt der gleichen Struktur wie der IN-Parameter des FB900 hinterlegt haben
    Hallo,
    ich vermutet hier den Fehler im Moment bei der Benutzung des FB900.
    Kannst du den Baustein vielleicht auch mal hier einstellen ?

    Gruß
    LL

  7. #6
    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 Larry Laffer Beitrag anzeigen
    Hallo,
    ich vermutet hier den Fehler im Moment bei der Benutzung des FB900.
    Kannst du den Baustein vielleicht auch mal hier einstellen ?

    Gruß
    LL
    ioch teile diese vermutung und bitte darum, beim einstellen die code-tags zu verwenden, denn die einrückungsstruktur, die du siehst, macht es uns auch einfacher.

    (OT: in AWL/KOP/FUP kann ich ein ARRAY absolut adressieren, UDT geht nicht ... bei struct bin ich mir grad nicht sicher - zu selten als übergabe verwendet)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #7
    Registriert seit
    08.09.2008
    Beiträge
    57
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das ist der FB 900

    Da ich mehrere Temperatur Sensoren mit dem Wire Break programmieren soll, habe ich mir dabei gedacht, dass ich einen FB 900 schreibe, den ich als fertiger Baustein verwenden kann. Mit der Option, das ich die anzahl der Sensoren Manuel eingeben kann.


    Code:
    FUNCTION_BLOCK FB900
    
    
    TITLE = 'Wire Break'
    
    // KNOW_HOW_PROTECT
    
    // Ermittlung der Wire Break
    //
    VERSION : '1.0'
    AUTHOR  : AGH
    NAME    : WB
    FAMILY  : SECURE
    
    VAR_INPUT
        RESET
        {S7_m_c := 'true'; S7_param := 'false'} :BOOL := FALSE;
        
        // Anzahl der Wire Break
        n_WB
        {S7_m_c := 'true'; S7_param := 'false'} : INT;
        
        // Eingänge der Wire Breaks
        TEMPn_WB : ARRAY[0..199] OF BOOL;
    END_VAR
    
    VAR_OUTPUT
        // Wire Break MSG
        TEMPn_WB_MSG : ARRAY[0..199] OF BOOL := FALSE;
    
        // RESET CHECK MSG
        RES_CHK_TEMPn_WB_MSG : ARRAY[0..199] OF BOOL := FALSE;
    END_VAR
    
    VAR_TEMP
        RESET_MERKER : BOOL;
    END_VAR
    
    VAR
        RESET_FLANKEN_MERKER : BOOL := TRUE;
        I_FOR : INT := 0;
    END_VAR
        
        // RESET********************************************************************************************   
        IF RESET = true AND RESET_FLANKEN_MERKER = false THEN
            RESET_MERKER := TRUE;
        END_IF;
        
        RESET_FLANKEN_MERKER := RESET;
        IF RESET_MERKER = true THEN
            RESET_MERKER := FALSE;
            
            // ERROR to FALSE
            FOR I_FOR := 0 TO n_WB BY 1 DO
                IF TEMPn_WB[I_FOR] = false THEN
                    TEMPn_WB_MSG[I_FOR] := FALSE;
                END_IF;
            END_FOR;
            
            // RESET CHECK to TRUE
            FOR I_FOR := 0 TO n_WB BY 1 DO
                IF TEMPn_WB_MSG[I_FOR] = true THEN
                    RES_CHK_TEMPn_WB_MSG[I_FOR] := TRUE;
                END_IF;
            END_FOR;
            
        END_IF;
        //***************************************************************************************************
        
        // Wire Break MSG to TRUE ***************************************************************************
        FOR I_FOR := 0 TO n_WB BY 1 DO    
            IF TEMPn_WB[I_FOR] = true THEN
                IF TEMPn_WB_MSG[I_FOR] = false THEN
                    TEMPn_WB_MSG[I_FOR] := TRUE;
                    RES_CHK_TEMPn_WB_MSG[I_FOR] := FALSE;
                END_IF;
            END_IF;
        END_FOR;
        //***************************************************************************************************
    END_FUNCTION_BLOCK

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    ... na , hier haben wir doch schon den Fehler ...
    Du übergibst ein ARRAY[0..2] und fragst aber ein ARRAY[0..199] ab. Das geht nicht. Du müßtest hier dann auch ein ARRAY[0..199] übergeben - was aber m.E. nicht problematisch wäre ...

    Gruß
    LL

  10. #9
    Registriert seit
    08.09.2008
    Beiträge
    57
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe es soweit geändert und ich kriege keine Fehlermeldung mehr.

    Durch den n_WB im FB1 will ich damit erreichen, das im FB900 die FOR-Schleife nur bis 0..2 wiederholt.

    Ist das so OK?

    LG

    EINEN GROßEN DANK an alle die sich hier die Mühe geben, um andere Menschen zu HELFEN!


    Larry Laffer ich hätte gerne eine Rufnummer von dir, da ich denke, dass ich dieses Problem mit der per Tele besprechen kann.

  11. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... das mit dem n_WB als Bereichs-Vorgabe ist OK - ich mache das auch schon mal so. Es sollte auch so funktionieren, wie du es gemacht hast.

    Die Sache mit der Telefon-Nummer gefällt mir nicht so gut - nicht das ich nicht bereit bin, dir auch weiterhin zu helfen - ich denke nur, dass auch andere vielleicht von dieser Sache partizipieren können / wollen.

    Gruß
    LL

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Array in Nov Ram
    Von COOLT im Forum CODESYS und IEC61131
    Antworten: 41
    Letzter Beitrag: 22.09.2009, 20:19
  3. Array
    Von rainer-step5 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 31.10.2006, 19:46
  4. Array?????
    Von Adenauer im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 20.04.2006, 10:32
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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