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

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

Thema: Programmierwettbewerb: Diskussion

  1. #41
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    PS: Die Lösung 4 könnte auch die mit dem geringsten MC7-Speicherbedarf werden, wenn LargoD noch etwas optimiert.
    Ich hatte auch so wie LargoD gedacht, etwas kompakter sieht es dann so aus:
    Code:
          L     #BCD
          UW    W#16#888
          SRW   1
          PUSH  
          SRW   1
          OW    
          L     #BCD
          UW    W#16#666
          UW    
          SPP   err
          SET   
          L     #BCD
          BTI   
          SPA   out
    err:  CLR   
          L     0
    out:  T     #RET_VAL
          SAVE

  2. #42
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Völlig andere Lösungswege wird nun wohl niemand mehr präsentieren (oder wollen wir noch auf Thomas_v2.1 warten?).
    Ich habe überlegt ob es was vertracktes gibt, glaube da sieht es aber schlecht aus.
    Mein Gedanke ging in Richtung kgV/ggT oder sowas, wenn alle falschen Bitkombinationen teilerfremd sind. So auf den ersten Blick sieht man allerdings nichts.

  3. #43
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.167
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Ich hatte auch so wie LargoD gedacht, etwas kompakter sieht es dann so aus:
    Sag ich doch: 18 Anweisungen, MC7-Speicherbedarf 56 Byte inklusive BIE-Fehlerstatus.

    Ein völlig anderer Algorithmus fällt mir auch nicht ein. Als ich gestern abend den Wettbewerb sah, da war die Lösung von LargoD schon da. Damit meine Lösung nicht wie abgeschrieben aussieht, blieb mir nur, die Einzelzifferprüfung zu optimieren.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #44
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.167
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ah doch. Eine Variante hatte ich mir noch durchdacht: zu jeder BCD-Ziffer 6 addieren. Wenn das einen Übertrag in die nächste Tetrade ergibt, dann war die Ziffer >9. Allerdings läßt sich das nicht parallel für alle Stellen gleichzeitig machen. Der Aufwand, das für jede Stelle einzeln zu tun und den Übertrag zu erkennen, liegt weit über den hier gezeigten Lösungen. Da kann man auch gleich auf >9 abfragen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #45
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    ... etwas kompakter sieht es dann so aus:
    Code:
          L     #BCD
          UW    W#16#888
          SRW   1
          PUSH  
          SRW   1
          OW    
          L     #BCD
          UW    W#16#666
          UW    
          SPP   err
          SET   
          L     #BCD
          BTI   
          SPA   out
    err:  CLR   
          L     0
    out:  T     #RET_VAL
          SAVE
    noch kompakter sieht es so aus:
    Code:
          L     #BCD
          UW    W#16#888
          SRW   1
          PUSH  
          SRW   1
          OW    
          L     #BCD
          UW    
          SPP   err
          SET   
          L     #BCD
          BTI   
          SPA   out
    err:  CLR   
          L     0
    out:  T     #RET_VAL
          SAVE
    AWL-Spezialisten vor. Wer optimiert weiter?
    Gruß
    Erich

  6. #46
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.167
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von LargoD Beitrag anzeigen
    Wer optimiert weiter?
    Kandidaten wären noch
    * das SET und CLR - doch keine Chance, wenn man das BIE beibehalten will
    * das L 0 - da geht noch eine Kleinigkeit
    Der Rest ist für den Algorithmus unverzichtbar.
    (daß der Vorzeichencheck rausgeflogen ist fällt gar nicht auf)
    Code:
          L     #BCD
          UW    W#16#888
          SRW   1
          PUSH  
          SRW   1
          OW    
          L     #BCD
          UW    
          SPP   err
          SET   
          L     #BCD
          BTI   
          SPA   out
    err:  CLR   
          L     B#16#0
    out:  T     #RET_VAL
          SAVE
    50 Byte MC7

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #47
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Kandidaten wären noch
    * das SET und CLR - doch keine Chance, wenn man das BIE beibehalten will
    * das L 0 - da geht noch eine Kleinigkeit
    Der Rest ist für den Algorithmus unverzichtbar.
    (daß der Vorzeichencheck rausgeflogen ist fällt gar nicht auf)
    Code:
          L     #BCD
          UW    W#16#888
          SRW   1
          PUSH  
          SRW   1
          OW    
          L     #BCD
          UW    
          SPP   err
          SET   
          L     #BCD
          BTI   
          SPA   out
    err:  CLR   
          L     B#16#0
    out:  T     #RET_VAL
          SAVE
    50 Byte MC7

    Harald
    Ich finde so sollte das Programm dann in die Bibliothek, aber mit Kommentaren.

    Un wer bewertet jetzt das Siegerprogramm? Wo bleibt M-Ott?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #48
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.167
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von LargoD Beitrag anzeigen
    Hier mal die Parallelbitprüfung in SCL
    Code:
    FUNCTION BCD2INT2 : INT
    VAR_INPUT
      inBCD : WORD;
    END_VAR
    BEGIN
      IF ((SHR(in:=inBCD AND 16#888,N:=1) OR SHR(in:=inBCD AND 16#888,N:=2)) AND inBCD) = 0 THEN
        BCD2INT2 := BCD_TO_INT(IN:=inBCD);
      ELSE
        BCD2INT2 := 0;
      END_IF;
    END_FUNCTION
    In SCL sehr schön lesbar, der erzeugte AWL-Code sieht allerdings grauenhaft aus.
    Ergebnis: 166 Byte MC7 (generiert vom SCL Übersetzer Version: SCLCOMP K05.03.05.00_01.03.00.01 release)

    Für relativ effizienten Code muß man dem SCL-Compiler etwas unter die Arme greifen.
    Hier eine Compiler-optimierte Version
    Code:
    FUNCTION BCD2INT2 : INT
    VAR_INPUT
      inBCD : WORD;
    END_VAR
    BEGIN
      BCD2INT2 := 0;
      IF (DWORD_TO_WORD(    SHR(IN:=WORD_TO_DWORD(inBCD AND 16#888),N:=1) 
                         OR SHR(IN:=WORD_TO_DWORD(inBCD AND 16#888),N:=2)
                       ) AND inBCD) = 0 THEN 
        BCD2INT2 := BCD_TO_INT(IN:=inBCD);
      END_IF;
    END_FUNCTION
    102 Byte MC7 (generiert vom SCL Übersetzer Version: SCLCOMP K05.03.05.00_01.03.00.01 release)

    Allerdings merkt der SCL-Compiler nicht selbständig, wann der beste Zeitpunkt zum temporären Speichern eines Zwischenergebnisses ist und baut dann TAK's in den Code ein, um in einer bereits angefangenen Zweitrechnung doch noch das vorherige Ergebnis zu speichern. Klammern setzen ändert daran nichts.
    So kann man dem SCL-Compiler aber helfen:
    Code:
    FUNCTION BCD2INT2 : INT
    VAR_INPUT
      inBCD : WORD;
    END_VAR
    VAR_TEMP
        dwTemp : DWORD ;
    END_VAR
    BEGIN
      BCD2INT2 := 0;
      dwTemp := SHR(IN:=WORD_TO_DWORD(inBCD AND 16#888),N:=1);
      IF (DWORD_TO_WORD( dwTemp OR SHR(IN:=WORD_TO_DWORD(inBCD AND 16#888),N:=2)
                       ) AND inBCD) = 0 THEN 
        BCD2INT2 := BCD_TO_INT(IN:=inBCD);
      END_IF;
    END_FUNCTION
    98 Byte MC7 (generiert vom SCL Übersetzer Version: SCLCOMP K05.03.05.00_01.03.00.01 release)

    Es ist übrigens egal, welchen Operanden des OR man vorberechnet. Der Compiler-Optimierer weiß immerhin, daß man OR-Operanden vertauschen kann.

    Die überflüssigen "UD DW#16#FFFF" bei jedem WORD_TO_DWORD kann man dem Compiler leider nicht abgewöhnen.

    Harald
    Geändert von PN/DP (19.06.2011 um 01:53 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #49
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.167
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von dalbi Beitrag anzeigen
    Hi,

    so jetzt will ich auch mal in AWL .
    [...]
    ohne CPU Stop mit Hilfe des SFC36 und SFC37.
    Gute Idee.
    Wenn Du jetzt auch noch das vollmüllen des CPU-Diagnosepuffers abstellen könntest?

    Leider hat man bei dieser Lösung keine Information darüber, daß der Eingangsparameter ein unzulässiges Format hatte. Immerhin wird aber die geforderte 0 als Ersatzwert ausgegeben. (das steht nun allerdings nicht in der Step7 Hilfe, daß BTI eine 0 ausgibt, wenn es keinen CPU-Stop gibt)

    Für weitere Programmieraufgaben würde ich nun als Zusatzregel einführen wollen, daß außer OB121 auch die Fehler-Demaskierungs-SFC nicht zur Verhinderung des CPU-Stops eingesetzt werden dürfen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #50
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Leider hat man bei dieser Lösung keine Information darüber, daß der Eingangsparameter ein unzulässiges Format hatte.

    Harald
    War ja aber auch nicht gefordert!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Programmierwettbewerb, 2. Aufgabe
    Von LargoD im Forum Stammtisch
    Antworten: 14
    Letzter Beitrag: 02.08.2011, 22:27
  2. Programmierwettbewerb
    Von M-Ott im Forum Stammtisch
    Antworten: 49
    Letzter Beitrag: 22.06.2011, 14:00
  3. Programmierwettbewerb: Interesse? Regeln!
    Von M-Ott im Forum Stammtisch
    Antworten: 67
    Letzter Beitrag: 18.06.2011, 08:28
  4. Diskussion: User2008 Wahl
    Von zotos im Forum Stammtisch
    Antworten: 84
    Letzter Beitrag: 21.12.2008, 11:44
  5. Antworten: 20
    Letzter Beitrag: 20.10.2007, 11:08

Lesezeichen

Berechtigungen

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