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

Seite 5 von 6 ErsteErste ... 3456 LetzteLetzte
Ergebnis 41 bis 50 von 57

Thema: Datentypen

  1. #41
    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
    Fangen wir erst mal mit dem Einfachen an.


    Dein Programm gehört nicht in die Zitat-Tags [QUOTE]...[/QUOTE], sondern in die Code-Tags [CODE]...[/CODE]. Dafür gibt es auch einen Button mit dem Zeichen # ganz rechts in der 2. Icon-Reihe.

    Wenn Du endlich mal diese einfache Aufgabe gebacken bekommst, nachdem ich das (wie alles andere m.M.n. eigentlich auch) ja nun ausreichend oft erklärt habe, widme ich mich auch dem nächst schwierigeren Problem.




    PS: Solch' einfache Syntaxaufgaben sind übrigens die Grundlage jeglicher Programmierung.

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

    Standard

    So sorry, hab den Button vergessen

    und warum krieg ich das nicht zum laufen ?

    Code:
    Input    
    Start1    Bool
    Start2    Bool
    Position_1    Int   10
    Laenge_1    Int    4
    stopp    Int
    takt    Bool
    Output    
    Ausgang_1    Bool
    InOut    
        
    Static    
    Ausgabe_1    Array [0..10] of Bool
    takt_1    Bool
    ausgangszaehler    Int
    start    Bool
    Temp    
    Index    Int
    schieben    Bool
    
    
    
        #schieben := #takt AND NOT #takt_1;
        #takt_1 := #takt;
    IF #Start1 AND #Start2 THEN
            #start := true;
        END_IF;
    
    
    #schieben := true;
    
    IF #schieben THEN
    
     FOR #Index := 10 TO 1 BY -1 DO #Ausgabe_1 [#Index]
      := #Ausgabe_1 [#Index];
    END_FOR;
    
            #Ausgabe_1[0] := #start;
            #start := false;
    
    
    IF #Ausgabe_1[#Position_1]
    THEN #ausgangszaehler := #Laenge_1;
    END_IF;
    
    #Ausgang_1 := #ausgangszaehler > 0;
    
    
    IF #Ausgang_1 THEN #ausgangszaehler := #ausgangszaehler -1;
    END_IF ;
    END_IF;

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

    Standard

    Das nächste sind die optischen Probleme, die Du Dir selber bereitest.
    Z.B.:
    Zitat Zitat von EMZ Beitrag anzeigen
    Code:
    ...
     FOR #Index := 10 TO 1 BY -1 DO #Ausgabe_1 [#Index]
      := #Ausgabe_1 [#Index];
    END_FOR;
    ...
    Wie willst Du da Deinen Code vernünftig analysieren?
    Code:
    ...
    FOR #Index := 10 TO 1 BY -1 DO 
         #Ausgabe_1 [#Index] := #Ausgabe_1 [#Index];
    END_FOR;
    ...
    Sind so die einzelnen Code-Aufgaben nicht besser lesbar?

    Was willst Du mit der farblich gekennzeichneten Zeile denn erreichen? Wieviel Sinn macht sie so, wie sie ist?
    (Schau' Dir die Variable vor und hinter der Zuweisung an. Was stellst Du da fest?)

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

    Standard

    hi hucki,

    habe den Fehler gefunden

    Habe beim Schieberegister irgendwie bei der Zuweisung "-1" in den [#Index ] vergessen. Vermutlich vertippt oder vergessen.
    und Habe auch die 10 durch meine Deklaration " Position_1" ersetzt.

    Jetzt ne Frage zu dem Index noch:

    Passt das was ich so bisher verstanden habe?
    Ich habe leider nicht viel Zeit mich damit zu befassen, da ich beruflich auch leider nicht tagtäglich mit S7 sondern eher mit LOGO zutun habe,
    kann ich mich mit der Materie auch ´dementsprechend begrenzt beschäftigen.
    Aber ich denke wenn du mir meine Antwort mit ja oder richtig bestätigst dann denke ich dass ich ein Schritt vorangekommen bin.


    Also der Index ruft nur das Element des Arrarys auf, z.B. Schublade [3]
    Der Wert des Arrays wäre ja dann z.B. in unserem Fall 10
    #Zaehler [#index] stellt wie du sagst ein selbiges Element dar, also wenn wir dann den Wert von Schublade [3] haben
    z.B. Wert 3 stellt er es mit #Zaehler [#index -1] nochmals dar und rechnet dann den Wert -1.
    Mit End_For springen wir ja wieder zum Anfang der Schleife, das bedeutet dann, dass wir jetzt nicht mehr in Schublade
    [3], sondern in Schublade [2] reinschauen, da der Index um eins reduziert wurde.
    Dann wird wieder in die Schublade 2 reingeschaut der wert von schublade 2 ausgelesen bzw. bis Index = 0 bzw. Endwert
    von der forschleife.


    Code:
    #Ausgabe_1[0] := #start;
            #start := false;
    Diese Zeile bedeutet doch, dass wenn Ausgabe_1 = 0 dann Start ...Warum schreibt man dann Start := false ??

    Code:
      #schieben := #takt AND NOT #takt_1;
        #takt_1 := #takt;
    Warum weißt man takt_1 zu takt zu?



    LG EMZ

    und nen fetten Dankeschön für deine bisher geleistete HILFE @hucki

  5. #45
    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
    Diese Zeile bedeutet doch, dass wenn Ausgabe_1 = 0 dann Start ...Warum schreibt man dann Start := false ??
    Start wird hier ganz am Anfang von einer bedingten Zuweisung auf TRUE gesetzt. Um sicher zu gehen, das der Ausgangszustand immer FALSE ist, wird Start am Ende wieder auf FALSE zurück gesetzt. Ideal ist dieses Vorgehen aber auch nicht gerade. Mit meinem heutigen Wissen würde ich eine eindeutige statt einer bedingten Zuweisung bevorzugen.
    Also statt:
    Code:
    IF #Start1 AND #Start2 THEN
            #start := true;
    END_IF;
    
    ...
    
    #start := false;
    besser nur (ohne das ganze IF-THEN-Gedöns:
    Code:
    #start := #Start1 AND #Start2



    Zitat Zitat von EMZ Beitrag anzeigen
    Code:
    #schieben := #takt AND NOT #takt_1;
        #takt_1 := #takt;
    Warum weißt man takt_1 zu takt zu?
    takt wird als INPUT des Bausteins in jedem Zyklus neu beschrieben. Indem man diesen Zustand auf takt1 überträgt, speichert man sich diesen Zustand für den nächsten Zyklus. (Deswegen muss takt1 auch unbedingt ein statischer und kein temporärer Speicher sein). Wenn man den Zustand des aktuellen mit dem des letzten Zyklus vergleicht, kann man feststellen, ob:
    - dieser gleich geblieben ist (#takt = #takt_1),
    - er sich von 0 auf 1 (#takt AND NOT #takt_1) oder
    - er sich von 1 auf 0 (NOT #takt AND #takt_1) geändert hat.
    Die letzten beiden nennt man auch Flankenerkennung.

    Was für mich aber hier die viel interessantere Frage ist - Warum machst Du eine Flankenerkennung, dessen Ergebnis in #schieben landet, wenn Du dann anschließend diese Variable #schieben generell auf TRUE setzt, ohne sie zwischendurch zu benutzen:
    Zitat Zitat von EMZ Beitrag anzeigen
    Code:
    #schieben := #takt AND NOT #takt_1;
    #takt_1 := #takt;
    
    IF #Start1 AND #Start2 THEN
            #start := true;
    END_IF;
    
    #schieben := true;

  6. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    EMZ (12.01.2015)

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

    Standard

    Also wäre diese Zeile eine bessere Lösung

    Code:
    #start := #Start1 AND #Start2
    ?

    dieser gleich geblieben ist (#takt = #takt_1)
    also ob sich der Zustand von der Startbedienung geändert hat oder nicht ??



    und wie richtig oder falsch ist meine derzeitige Erklärung der Forschleife ??

    Also der Index ruft nur das Element des Arrarys auf, z.B. Schublade [3]

    Der Wert des Arrays wäre ja dann z.B. in unserem Fall 10

    #Zaehler [#index] stellt wie du sagst ein selbiges Element dar, also wenn wir dann den Wert von Schublade [3] haben

    z.B. Wert 3 stellt er es mit #Zaehler [#index -1] nochmals dar und rechnet dann den Wert -1.

    Mit End_For springen wir ja wieder zum Anfang der Schleife, das bedeutet dann, dass wir jetzt nicht mehr in Schublade

    [3], sondern in Schublade [2] reinschauen, da der Index um eins reduziert wurde.

    Dann wird wieder in die Schublade 2 reingeschaut der wert von schublade 2 ausgelesen bzw. bis Index = 0 bzw. Endwert

    von der forschleife.
    sorry, ich habe "schieben := true entfernt und durch
    Code:
    schieben := takt and not takt_1
    ersetzt.

    Was für mich aber hier die viel interessantere Frage ist - Warum machst
    Du eine Flankenerkennung, dessen Ergebnis in #schieben landet, wenn Du
    dann anschließend diese Variable #schieben generell auf TRUE setzt, ohne
    sie zwischendurch zu benutzen:

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

    Standard

    Ich scheue mich, von "Wert des Arrays" zu sprechen, weil das in meinen Augen etwas anderes impliziert.

    Das Array hat eine Anzahl von Elementen, die sogenannte Feldgröße. Der Wert des Arrays wäre für mich der gemeinsame Inhalt aller dieser Elemente.


    Zu der FOR-Schleife schreibe ich noch mal was, wenn ich wieder am Laptop bin.

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

    EMZ (12.01.2015)

  10. #48
    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
    Zu der FOR-Schleife schreibe ich noch mal was, wenn ich wieder am Laptop bin.
    Eigentlich soll ja die Zeile innerhalb der FOR-Schleife nichts weiter bewirken, als den Inhalt der einzelnen Elemente jeweils um ein Element zu verschieben. Dazu könnte man jeden Befehl einzeln schreiben:
    Code:
    #Ausgabe_1 [10] := #Ausgabe_1 [9];
    #Ausgabe_1 [9]  := #Ausgabe_1 [8];
    #Ausgabe_1 [8]  := #Ausgabe_1 [7];
    #Ausgabe_1 [7]  := #Ausgabe_1 [6];
    #Ausgabe_1 [6]  := #Ausgabe_1 [5];
    #Ausgabe_1 [5]  := #Ausgabe_1 [4];
    #Ausgabe_1 [4]  := #Ausgabe_1 [3];
    #Ausgabe_1 [3]  := #Ausgabe_1 [2];
    #Ausgabe_1 [2]  := #Ausgabe_1 [1];
    #Ausgabe_1 [1]  := #Ausgabe_1 [0];
    
    #Ausgabe_1 [0]  := #start;
    Wie Du siehst, ist das bei nur 11 Elementen schon eine ganz schöne Schreibarbeit (mal davon abgesehen, dass es auch noch unflexibel ist). Ursprünglich hattest Du 100 Schritte!
    Also erstellt man sich einfach eine zusätzliche Variable, die man von der FOR-Schleife einen gewünschten Wertebereich durchlaufen läßt, um so die eigentliche Aufgabezeile nur einmal schreiben zu müssen. Und genau da liegt der Vorteil des Arrays. Die Variablen unterscheiden sich nur durch den Index, der eine separate Variable darstellt. Hättest Du 11 einzelne Variablen statt des Arrays, müsstest Du jede Zeile einzeln schreiben, das sie alle unterschiedliche Namen haben.

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

    EMZ (12.01.2015)

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

    Standard

    Ich scheue mich, von "Wert des Arrays" zu sprechen, weil das in meinen Augen etwas anderes impliziert
    Was dann?


    Also mit dem Array erstelle ich einen Wertebereich z.B. 0-10
    Und mit den Index kann ich dann die einzelnen Arrayfelder abfragen bzw.
    anzeigen.
    Also brauche ich zu jedem Array einen Index, sonst muesste ich das alles in eine
    Einzelne Zeile Schreiben.
    Also is index nichts anderes als ein Zeiger mit dem ich die Werte bzw Zahlen Anzeigen lassen kann?
    Danke dieser Code ist sehr hilfreich gewesen, damit kann ich es mir jetzt besser Vorstellen.



    Lg
    EMZ

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich glaube jetzt habe ich es besser verstanden.

    Also mal nur bisschen mehr verständlicher hingestellt.

    So wären ja die einzelnen Schritte des Schieberegisters:
    Der erste Code soll den Ausgangscode darstellen


    Code:
    For Index := 10 TO 1 BY -1 DO 
    Schieberegister [Index] := Schieberegister [Index -1]
    END_FOR
    
    For Index [10]:= Endwert to startwert by Laufvar. do 
    Array [10] := Array [10 -1]
    END_FOR
    
    For Index [9] := Endwert to startwert by Laufvar. do 
    Array [9] := Array [9 -1]
    END_FOR
    
    For Index [8] := Endwert to startwert by Laufvar. do 
    Array [8] := Array [8 -1]
    END_FOR
    
    For Index [7] := Endwert to startwert by Laufvar. do 
    Array [7] := Array [7 -1]
    END_FOR
    
    usw...

    Also den Index brauche ich ja sogesehen nur, um der Forschleife sagen zu können, dass wenn wir z.B. von 10 -1 runter zu rechnen, dass er dann beim nächsten Schleifendurchlauf nicht
    mit 10 sondern mit [10-1] also mit 9 die Schleife durchlaufen soll.... usw.
    ??
    Mir fehlen die Fachbegriffe um es ordentlich zu erklären,
    aber wenn es so wie ich es mit dem Code und dem Text unter dem Code richtig ist, dann habe ich es glaub von a-z gecheckt.

    Dann würde ich gerne diesen Thread vorerstmal stilllegen und mich zum nächsten Schritt bewegen, aber diesmal mit Buch und Stift
    Nachdem ich die Schleifen ohne Forumhilfe geschafft habe, möchte ich mal Analogwerte bearbeiten, z.B. eine Spannungs oder Stromüberwachung mit Hyterese...
    Denke aber, dass dies einbisschen einfacher sein wird, sobald ich weiß wo ich die Variablen zuordne temp.static .... und welche Datentypen ich nehme,
    denke aber dass es bisdahin noch bisschen dauert.

    LG
    EMZ

    Ich bedanke mich rechtherzlich für deine Hilfe,
    hast es echt drauf, für dass dass du im alltag nicht programmierst.
    Geändert von EMZ (12.01.2015 um 20:52 Uhr)

Ä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
  •