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

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

Thema: Richtungswahl in SCL

  1. #1
    Registriert seit
    12.02.2016
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich soll eine Richtungswahl für ein Ziffernrad (0-9) in SCL programmieren. Ich soll das Ziffernrad vom jeweiligen IST Wert auf dem schnellsten Weg zum Sollwert drehen. Dazu gibt es ein altes Programm in AWL als Vorlage, welches auf einer S7 300 lief. Ich habe jetzt eine S7 1214C, die kein AWL kann, und habe keinen Plan wie ich diesen Teil des Programms umsetzen soll.
    Code:
     L     #setpoint
          L     #actual_value
          <I    
          SPBB  m001
          -I                                //check if more or less as 5 positions
          L     5
          >I    
          SPBB  m006                        //if more than 5 positions > direction -
          SPA   m003                        //if less than 5 positions > direction +
    m001: NOP   0
          L     #setpoint
          L     #actual_value
          -I    
          L     5
          >I    
          SPBB  m003
    //If the result is a negative number and direction must be +
          L     #setpoint
          L     #actual_value
          -I    
          L     L#65532
          <I    
          SPBB  m003
    m006: NOP   0
          S     #backwards                  //direction -
          SPA   m002
    m003: NOP   0
          R     #backwards                  //no direction -
    m002: NOP   0
          UN    #home                       //if wheel is not homeposition
          SPBB  m010                        //jump to end
          L     0
          T     #actual_value
    m010: NOP   0
    Kann mir da jemand weiterhelfen?
    Zitieren Zitieren Richtungswahl in SCL  

  2. #2
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    386
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Hallo Ben,

    Hängt es am SCL selber ?

    Ich würde es als erste versuchen es um zu setzen nach ein mathematische Formel.
    Dann ist es umsetzen nach SCL leichter.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  3. #3
    ben90 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.02.2016
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich hatte versucht den AWL Code genau so in SCL umzusetzen. Ich habs mit Case of und If Verknüpfungen versucht aber am Ende wenn ich IST und SOLL Werte zum testen eingegeben habe, hat es bei manchen Werten funktioniert und bei anderen nicht.


    Gesendet von iPhone mit Tapatalk

  4. #4
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    386
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Dann poste doch mal dein jetzige SCL code.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  5. #5
    ben90 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.02.2016
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der ist auf meinem Rechner in der Firma. Ich kann ihn den nachher mal in Codesys eintippen und dann Posten


    Gesendet von iPhone mit Tapatalk

  6. #6
    Registriert seit
    19.01.2012
    Beiträge
    43
    Danke
    6
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ich würde spontan so vorgehen:

    Istposition (2) - sollpositon (9) = -7

    Quadrieren und die Wurzel ziehen um das Vorzeichen zu eliminieren ->
    Vergleichen mit größer 5 -> rechtslauf, wenn kleiner/gleich linkslauf

    Ich hoffe ich habe jetzt keinen Denkfehler, aber ich denke es sollte so funktionieren.

  7. #7
    ben90 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.02.2016
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Quadrieren und die Wurzel ziehen kann man sich sparen wenn man den Betrag mit der funktion ABS (Absolutwert) bildet.

  8. #8
    Registriert seit
    19.01.2012
    Beiträge
    43
    Danke
    6
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Stimmt. Wie gesagt spontan, samstags morgens. Funktionieren sollte es trotzdem

  9. #9
    ben90 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.02.2016
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe eben mal mein SCL in Codesys eingetippt. TIA habe ich nicht da.

    Code:
    VAR
        soll:            INT;
        ist:            INT;
        richtungswahl:    INT;
        rueckwaerts:    BOOL;
    END_VAR
    
    IF
        soll < ist
    THEN
        richtungswahl := 1;
    ELSIF
        (soll - ist) > 5
    THEN
        richtungswahl := 6;
    ELSE
        richtungswahl := 3;
    END_IF;
    
    
    CASE richtungswahl OF
        1:
            IF
                (soll - ist) > 5
            THEN
                richtungswahl := 3;
            ELSIF
                (soll - ist) < 65532
            THEN
                richtungswahl := 3;
            ELSE
                richtungswahl := 6;
            END_IF;
        3:
            rueckwaerts := FALSE;
        6:
            rueckwaerts := TRUE;
    END_CASE;
    Ich denke irgendwie so müsste man das zum laufen bekommen. Nur so wie es da steht hatte ich es auf der 1214C laufen und habe über die Beobachtungstabelle die Were vorgegeben. Die Richtung über die Variable 'rueckwaerts' beobachtet und bei manchen Kombinationen hat es funktioniert und bei anderen wieder nicht.

    Ich gehe auch mal stark davon aus, dass es für mein abgekupfertes AWL Programm auch ne saubere Lösung in SCL gibt aber ich komme irgendwie nicht drauf.

  10. #10
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von chains Beitrag anzeigen
    Stimmt. Wie gesagt spontan, samstags morgens. Funktionieren sollte es trotzdem
    Erfüllt aber nicht die Anforderung -> kürzester Weg.

    Ich würde es so lösen:
    den Absolutwert der Diff. von Soll und ist nehmen.
    Code:
     Ergebnis=ABS(Soll-Ist)
    Als zweites die Ist und Soll Pos zu 10 / 0
    Code:
    If Ist => 5 then X =10 Else X=0
    If Soll => 5 then Y=10 Else Y=0
    Ergebnis1= ABS(X-ist) + ABS(Y-Soll)
    Im Vergleich von Ergebnis und Ergebnis1 weist du jetzt, ob du von Ist nach Soll direkt wählen musst oder über Null
    Wenn Direkt dann
    Code:
    Soll > Ist -> rechts, Soll < Ist -> links.
    Wenn über Null
    Code:
     Ist < Soll -> links, Ist > Soll -> rechts.
    Nachtrag:
    Als aller erstes prüfen ob Soll = Ist
    Holger
    Geändert von holgermaik (13.02.2016 um 15:15 Uhr) Grund: Über Null falsch

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  2. SCL: FB Aufruf unter SCL mit Variablen DB
    Von ThorstenK im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 10.02.2011, 19:15
  3. Antworten: 4
    Letzter Beitrag: 07.10.2006, 00:34
  4. Automatische Richtungswahl
    Von Jim Knopf im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 21.02.2006, 09:06
  5. Brauche Hilfe bei SCL.SFC Aufrufen in SCL
    Von Gerold im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.10.2005, 10:47

Lesezeichen

Berechtigungen

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