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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 50

Thema: Programmierwettbewerb

  1. #11
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.308
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier mal eine Variante der BCD-zu-INT-Wandlung mit Eingangswert-Prüfung ohne CPU-STOP für die FUP/KOP-Freunde.
    Doch ob diese Variante schneller zu verstehen ist als meine AWL-Variante in #10?
    Code:
    FUNCTION "BCD2INTG" : INT
    TITLE =BCD zu INT (FUP/KOP)
    AUTHOR : PN_DP
    FAMILY : SPSforum
    NAME : BCD2INTG
    VERSION : 0.2
    
    VAR_INPUT
      InBCD : WORD ;	
    END_VAR
    VAR_TEMP
      TH_1 : BOOL ;	
      TH_2 : BOOL ;	
      TH_4 : BOOL ;	
      TH_8 : BOOL ;	
      TV_1 : BOOL ;	
      TV_2 : BOOL ;	
      TV_4 : BOOL ;	
      TV_8 : BOOL ;	
      TE_1 : BOOL ;	
      TE_2 : BOOL ;	
      TE_4 : BOOL ;	
      TE_8 : BOOL ;	
      TZ_1 : BOOL ;	
      TZ_2 : BOOL ;	
      TZ_4 : BOOL ;	
      TZ_8 : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =Eingabewert in Testword kopieren
    
          L     #InBCD; 
          T     LW     0; 
          NOP   0; 
    NETWORK
    TITLE =Prüfung und Umwandlung BCD zu INT
    
          U(    ; 
          O     #TE_2; 
          O     #TE_4; 
          )     ; 
          U     #TE_8; 
          O     ; 
          U(    ; 
          O     #TZ_2; 
          O     #TZ_4; 
          )     ; 
          U     #TZ_8; 
          O     ; 
          U(    ; 
          O     #TH_2; 
          O     #TH_4; 
          )     ; 
          U     #TH_8; 
          =     L      2.0; 
          U     L      2.0; 
          SPBNB _001; 
          L     0; 
          T     #RET_VAL; 
    _001: NOP   0; 
          U     L      2.0; 
          NOT   ; 
          =     L      2.1; 
          U     L      2.1; 
          SPBNB _002; 
          L     #InBCD; 
          L     W#16#8FFF; 
          UW    ; 
          T     LW     0; 
    _002: NOP   0; 
          U     L      2.1; 
          SPBNB _003; 
          L     LW     0; 
          BTI   ; 
          T     #RET_VAL; 
    _003: NOP   0; 
    
    END_FUNCTION
    Wenn man für das Testword statt TEMP (LW0) ein Schmier-Merkerword (z.B. MW100) benutzt, dann ist das Programm auch voll symbolisch möglich, weil dann den Testbits UND dem Testword ein symbolischer Name gegeben werden kann.

    Harald
    Angehängte Grafiken Angehängte Grafiken
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #12
    Registriert seit
    17.06.2011
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo alle zusammen!

    Meine Frage ist wie folgt:
    Besteht die Möglichkeit das BCD -> INT in SCL, ohne Wandelfunktion (BCD_TO_INT) ausgeführt werden kann?

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    Hallo,
    diese Frage hat in diesem Thread eigentlich gar nichts zu suchen - da sie nun aber schon einmal da ist ...
    Ich weiß nicht genau, was du bezweckst und kann das aus der Frage auch nicht so recht ableiten ... aber generell kann man jeden komplexeren Befehl (siehe auch die vorhandenen Beispiele) auch selbst nachbilden. Und das geht dann natürlich auch in SCL ...

    Gruß
    Larry

  4. #14
    Registriert seit
    17.06.2011
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    und vielen Dank für so volles und umfangreiches Antworten.
    Es wäre auch erfreulich mit solch einem Wissen, ein Beispiel gezeigt zu bekommen.

  5. #15
    Registriert seit
    14.10.2010
    Ort
    Telgte
    Beiträge
    655
    Danke
    97
    Erhielt 129 Danke für 99 Beiträge

    Standard

    An die Cracks unter euch,

    Ich möchte gerne "mitmachen", aber ich habe ein Problem damit die Quellcodes aus dem Stehgreif zu verstehen.
    Daher wollte ich die geposteten Quellcodes als AWL-Quelle in ein Projekt einfügen und damit den Baustein generieren.
    (Um dann mit PLC-SIM z.B. online zu beobachten)
    Bekomme aber immer beim Übersetzen die Fehlermeldung das die Variablendeklaration oder Eintrag in der Symboltabelle fehlt (*Frust*).
    Habe ich einen Gedankenfehler oder geht das nicht so einfach...

    Dank im voraus,
    Gruß
    Toki
    Zitieren Zitieren Baustein generieren aus AWL-Quelle  

  6. #16
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    673
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Hi,

    einfach in der Symbolik einen Baustein mit dem richtigen Namen definieren.
    Der steht in der ersten Zeile der Quellen.
    Dann kannst du die FC Nummer frei vergeben.

    Alternativ kannst du auch den Namen in der Quelle (inclusive ") durch z.B. FC 1 ersetzen.

    Micha
    "arbeite klug, nicht hart" - deutsches Sprichwort

  7. Folgender Benutzer sagt Danke zu SPSKILLER für den nützlichen Beitrag:

    Toki0604 (18.06.2011)

  8. #17
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    hier meine Version in SCL

    Code:
    FUNCTION BCD2INT : INT
    TITLE = 'BCD nach INT'
    //
    // wandelt BCD Zahl (WORD) in Integer
    //
    VERSION : '1.0'
    AUTHOR  : dalbi
    
    VAR_INPUT
      InBCD : WORD;
    END_VAR
    
    VAR_TEMP
      i : INT;
      tINT : INT;
    END_VAR
      
    BEGIN
    
      FOR i := 0 TO 3 DO 
        // Nibble (4 Bit) aus WORD extrahieren
        tINT := WORD_TO_INT(SHR(IN := InBCD, N := i*4) AND W#16#000F);
    
        // Prüfen auf gültige BCD-Zahl 0..9
        IF tINT > 9 THEN 
          BCD2INT := 0;
          RETURN;
        END_IF;
        
        // BCD-Zahl in Integer wandeln
        CASE i OF
          0 : BCD2INT := tINT;
          1 : BCD2INT := BCD2INT + tINT * 10;
          2 : BCD2INT := BCD2INT + tINT * 100;
          3 : BCD2INT := BCD2INT + tINT * 1000;
        END_CASE;
      END_FOR;
    
    END_FUNCTION
    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #18
    Registriert seit
    17.06.2011
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Dalbi.

  10. #19
    Registriert seit
    23.10.2009
    Beiträge
    399
    Danke
    59
    Erhielt 114 Danke für 88 Beiträge

    Standard

    1. Vorzeichen nicht behandelt
    2. Den Case-Block brauchst Du nicht wenn Du vor der Schleife
    BCD2INT auf Null setzt und dann statt des Case-Block schreibst
    Code:
    BCD2INT:= BCD2INT*10+tINT;
    Gruß
    Erich

  11. #20
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von LargoD Beitrag anzeigen
    2. Den Case-Block brauchst Du nicht wenn Du vor der Schleife
    BCD2INT auf Null setzt und dann statt des Case-Block schreibst
    Code:
    BCD2INT:= BCD2INT*10+tINT;
    Gruß
    Erich
    dacht ich auch erst, aber er multipliziert ja tInt und nicht Bcd2int, d.h. Man muss die schleife auch noch anderstrum durchlaufen...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  12. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    LargoD (18.06.2011)

Ähnliche Themen

  1. Programmierwettbewerb, 2. Aufgabe
    Von LargoD im Forum Stammtisch
    Antworten: 14
    Letzter Beitrag: 02.08.2011, 22:27
  2. Programmierwettbewerb: Diskussion
    Von Kai im Forum Stammtisch
    Antworten: 51
    Letzter Beitrag: 20.06.2011, 10:05
  3. Programmierwettbewerb: Interesse? Regeln!
    Von M-Ott im Forum Stammtisch
    Antworten: 67
    Letzter Beitrag: 18.06.2011, 08:28

Lesezeichen

Berechtigungen

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