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

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 57

Thema: Datentypen

  1. #21
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von EMZ Beitrag anzeigen
    Um #schieben TRUE zu setzen reicht doch ne einfache IF funktion mit boolschen variablen oder ?
    Um #schieben auf TRUE zu setzen, reicht auch 'ne einfache Zuweisung:
    Code:
    #schieben:= TRUE;
    Bei Deinem obigen Programmauszug hast Du aber gar nichts in der Art dabei.
    Daher wird Dein Code innerhalb der äußersten IF-Schachtel (vermutlich) einfach nicht ausgeführt und kann demzufolge gar nicht funktionieren.

    Welchen Grund hattest Du denn für das IF #schieben?

  2. #22
    Registriert seit
    09.12.2011
    Ort
    Tor zum Harz
    Beiträge
    202
    Danke
    32
    Erhielt 28 Danke für 27 Beiträge

    Standard

    Zitat Zitat von EMZ Beitrag anzeigen
    @RAik
    Ich bin es mittlerweile gewohnt dass es bei jedem Thread einen gibt der seinen noch so sinnlosen d..... Senf dazu geben muss, aber bitte les doch erstmal alle beiträge bevor du überhaupt was schreibst.
    Ich machs dir leichter dann brauchst deine gehirngrütze nicht so anzustrengen:
    Um #schieben TRUE zu setzen reicht doch ne einfache IF funktion mit boolschen variablen oder ?

    LG
    EMZ

  3. #23
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    IF #schieben THEN


    FOR #index := 10 TO 1 BY -1 DO
    #Zaehler [#index]:= #Zaehler [#index - 1];
    END_FOR;

    IF #Zaehler[#Position_1] THEN
    #ausgangszaehler:= #Pausenzeit;

    #Start := #ausgangszaehler > 0;

    IF #Start THEN #ausgangszaehler := #ausgangszaehler -1 ;
    END_IF;

    END_IF;



    END_IF;
    Input
    Takt Bool 0.2 false True
    Pausenzeit# Int 2.0 4 True
    Position_1# Int 4.0 10 True


    Output
    Freigabe_Pos2# Bool 6.0 false True
    Start #Bool 6.1 false True

    Static
    ausgangszaehler# Int 10.0 0 True
    Zaehler #Array [0..10] of Bool 12.0 True

    Temp
    schieben# Bool 0.0 False
    index# Int 2.0 False

    Habe jetzt zwei Fragen.
    Warum steht schieben und index bei temp?
    Warum steht ausgangszaehler bei static ?
    Und sie pausenzeit und und position_1 bei input

    Die nächste frage is beim der for schleife: #Zaehler [#index]:= #Zaehler [#index - 1];
    Warum weist man das so zu ?
    Soll es bedeuten, wenn zaehler index gesetzt wird soll, zaehler index -1 gezählt werden ?
    [] nimmt man die klammern um etwas hervorzuheben?

    LG
    EMZ

  4. #24
    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,
    Zitat Zitat von EMZ Beitrag anzeigen
    Warum steht schieben und index bei temp?
    Warum "schieben" da steht weiß ich auch nicht - "index" hingegen ist eine Variable, die temporär nur innerhalb der Schleife benötigt wird. Man muss sie sich nicht merken und sie muss nach Beendigung des Bausteins auch nicht erhalten bleiben ...

    Zitat Zitat von EMZ Beitrag anzeigen
    Warum steht ausgangszaehler bei static ?
    weil er nach Beendigung des Bausteins erhalten bleiben soll. Statische Daten werden in dem Instanz-DB desd Bausteins abgelegt und bleiben so von Aufruf zu Aufruf erhalten (außer man überschreibt sie wieder)

    Zitat Zitat von EMZ Beitrag anzeigen
    Und sie pausenzeit und und position_1 bei input
    ... weil es Eingangsvariablen in den Baustein sind ...!?

    Zitat Zitat von EMZ Beitrag anzeigen
    Die nächste frage is beim der for schleife: #Zaehler [#index]:= #Zaehler [#index - 1];
    Warum weist man das so zu ?
    Wenn du den Inhalt eines Arrays nach hinten aufschieben willst dann mußt du immer von hinten nach vorne arbeiten. Also erst dem Element 10 das Element 9 zuweisen, dann dem Element 9 das Element 8 usw.
    Würdest du es anders herum machen (Element 1 nach 2, dann Element 2 nach 3 usw.) dann würdest du in jedem Arrayelement den gleichen Inhalt drin stehen haben - nämlich den. den du auf Element 1 draufschreiben willst ...

    Gruß
    Larry

  5. #25
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Warum "schieben" da steht weiß ich auch nicht
    Eigentlich versucht er einen Baustein, den ich ihm vor langer Zeit auch mal haarklein erklärt habe, zu reproduzieren.

    Das Original sah seinerzeit so aus:
    Zitat Zitat von hucki Beitrag anzeigen
    Code:
    FUNCTION_BLOCK "Boolsches_Schieberegister"
    
    VAR_INPUT
        Start1: BOOL;                               // Startbedingung 1
        Start2: BOOL;                               // Startbedingung 2
        Takt: BOOL;                                 // Impuls-Eingang
        Schritte: INT;                              // Impulszahl bis zur Ausgabe
        Laenge: INT;                                // Ausgabelänge des Impulses in Takten
    END_VAR
    
    VAR_OUTPUT
        Ausgabe: BOOL;                              // Impulsausgabe
    END_VAR
    
    VAR
        Takt_Old: BOOL;                             // Flankenmerker für Eingang Takt
        Start: BOOL;                                // Startbedingung erfüllt
        Schieberegister: ARRAY [0..500] OF BOOL;    // statische Variablen
        Ausgangszaehler: INT;                       // Zähler für Ausgabelänge
    END_VAR
    
    VAR_TEMP
        Schieben: BOOL;                             // positive Flanke Eingang Takt
        Index: INT;                                 // Array-Zeiger
    END_VAR
    
    
        // Schrittbegrenzung
        IF Schritte > 500 THEN
            Schritte := 500;
        END_IF;
        
        // Startbedingung erfüllt?
        IF Start1 AND Start2 THEN
            Start := true;
        END_IF;
        
        // Flankenerkennung Eingang Takt
        Schieben := Takt AND NOT Takt_Old;
        Takt_Old := Takt;
        
        
        // Schieberegister
        IF Schieben THEN
            
            // Register weiterschieben
            FOR Index := Schritte TO 1 BY -1 DO
                Schieberegister [Index] := Schieberegister [Index - 1];  
            END_FOR;
            
            // Startbedingung ins Schieberegister übernehmen
            Schieberegister [0] := Start;
            Start := false;
            
            // Ausgang Schieberegister
            IF Schieberegister [Schritte] THEN
                Ausgangszaehler := Laenge;
            END_IF;
            
            // Ausgabe
            Ausgabe := Ausgangszaehler > 0;
            
            // Zähler Ausgabelänge
            IF Ausgabe THEN
                Ausgangszaehler := Ausgangszaehler - 1;
            END_IF;
            
        END_IF;
        
        
    END_FUNCTION_BLOCK
    Und plötzlich wird auch wieder klar, woher #schieben kommt - es ist das Ergebnis einer Flankenauswertung, die EMZ hier wohl fehlt.
    Geändert von hucki (20.12.2014 um 20:52 Uhr) Grund: Link mit Erklärung des Codes nachgereicht

  6. #26
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von EMZ Beitrag anzeigen
    Die nächste frage is beim der for schleife: #Zaehler [#index]:= #Zaehler [#index - 1];
    Warum weist man das so zu ?
    Soll es bedeuten, wenn zaehler index gesetzt wird soll, zaehler index -1 gezählt werden ?
    [] nimmt man die klammern um etwas hervorzuheben?
    Zähler ist ein Array. Das kannst Du Dir in diesem Fall vorstellen, wie eine Schubladenkommode. Die Zahl in den eckigen Klammern gibt die gewünschte Schublade von unten nach oben an.
    Zähler[10]:=Zähler[10-1] bedeutet demzufolge, der Inhalt von Schublade 10 soll dem von Schublade 9 entsprechen. Dann wird der Index um eins reduziert. Damit kommt in Schublade 9 jetzt das, was in Schublade 8 ist. ....

    So entsteht Dein Schieberegister, das Du gewünscht hast und bei dem die Werte von 1 (unten) nach x (oben) durchgeschoben werden.
    Ein Array dafür zu verwenden, bietet dabei gegenüber einzelnen Variablen den Vorteil, das aktuelle Feld über den Index berechnen zu können.

  7. #27
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von hucki Beitrag anzeigen
    Eigentlich versucht er einen Baustein, den ich ihm vor langer Zeit auch mal haarklein erklärt habe, zu reproduzieren.
    @EMZ,

    es wäre also sinnvoll, Dir nochmal Deine eigenen alten Threads, insbesondere den im Zitat verlinkten, anzusehen und durchzuarbeiten.
    Dort wurde Dir u.a. auch schon erklärt, was es mit den Zahlen in den eckigen Klammern auf sich hat.
    Geändert von hucki (20.12.2014 um 20:57 Uhr)

  8. #28
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke euch beiden sehr sehr hilfreich

    Also muss ich den Array vom endwert zum startwert zuweisen, weil wenn ich das andersrum machen würde, die Arrayfelder immer die gleichr Zahl hätte oder ?

    For index:= 10 to 1 by -1 do zaehler [index] = zaehler [index-1]
    Wenn ich von 1 anfangen würde also :

    For index:= 1 to 10 by +1 do zaehler [index] = zaehler [index-1]

    Würde ja dir zahl von schublade 1 in schublade 2 übernehmen und das wäre 1
    Und das von schublade 2 also auch 1 in schhublade 3

    "+1" nach by wird ja sowieso als deklarationsfehler erkannt oder ?

    Warum weist man aber von oben nach unten zu aber die sps rechnet von unten nach oben ?

    LG
    EMZ

  9. #29
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    @hucki
    Ja ich schaue mir auch meine alten threads an
    Danke

    Hast du vllt. noch iwelche Übungsaufgaben für mich ?

    Lg
    EMZ

  10. #30
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von EMZ Beitrag anzeigen
    Hast du vllt. noch iwelche Übungsaufgaben für mich ?
    Nein, da kann ich leider nicht mit dienen.

Ähnliche Themen

  1. Datentypen in Codesys V3
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 05.09.2011, 19:38
  2. Datentypen mit TSEND
    Von Papa_Bene im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.02.2011, 20:11
  3. Profibus DPV1 - Datentypen
    Von hae im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 02.02.2009, 10:38
  4. Datentypen in WinCC 6.0
    Von Elton_500 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 25.04.2008, 09:09
  5. Datentypen in Bildbaustein
    Von Vatter im Forum HMI
    Antworten: 1
    Letzter Beitrag: 28.03.2008, 18:13

Lesezeichen

Berechtigungen

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