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

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 52

Thema: Programmierwettbewerb: Diskussion

  1. #31
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Mmh...ist dann das Bit für das Binärergebnis bei dir richtig angewand worden...?
    Du wertest es bei einen Fehler aus und setzt es auf "0", aber
    was ist den wenn es beim Einsprung des Bausteins schon auf "0" war?
    Deine "SPA" Sprünge und Vergleiche haben doch erstmal keinen Einfluss
    auf das BIE und somit könntest du doch bei einen Fehlerfreien Durchlauf
    den Baustein trotzdem mit "0" am BIE verlassen.
    Ja, es ist richtig angewandt worden. Es ist egal, welchen Zustand das BIE-Bit beim Einsprung in den Baustein hat. Am Bausteinende zeigt es auf jeden Fall richtig Fehler/Fehlerfrei an.
    Siehe den "überflüssigen" Kommentar:
    Code:
          SPA   Ausg;            // hier ist immer VKE=1
    Das VKE wird hier auf 1 gesetzt und für die "fehlerfrei"-Anzeige genutzt:
    Code:
          SPB   Err;             // Einer zu groß
    Das VKE wird IMMER nach der Ergebnisausgabe an RET_VAL ins BIE gespeichert, nicht nur bei Fehlern.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #32
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    sfc20 geht auch noch ... direkt auf ein struct kopiert
    SFC20 mag aber keine Pointer auf INPUT-Parameter

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #33
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    SFC20 mag aber keine Pointer auf INPUT-Parameter

    Harald
    Code:
    *
          L     #wIn
          T     #wTemp
          NOP   0
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    PN/DP (17.06.2011)

  5. #34
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Peinlich ist allerdings meine Verwendung des LW0 zwischen WAND_W und BCD_I.
    Dafür sollte man besser ein ordentlich deklariertes TEMP-Word nehmen ...

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren LW0 im KOP-Beispiel  

  6. #35
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    Code:
    *
          L     #wIn
          T     #wTemp
          NOP   0
    Und wie bekomme jetzt an der Adresse des wTemp meine Einzelbits deklariert?

    [EDIT]Ahh, jetzt fällt der Groschen ... SFC20 soll von wTemp auf die Struktur kopieren ...[/EDIT]

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #36
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    So, nun sieht es sauber aus. Und nicht zu viele Kommentare.
    Allerdings wird es nun wirklich langsam Oversized. Und es nutzt eine externe Funktion, was allerdings auch nicht ausgeschlossen wurde ...
    Code:
    FUNCTION "BCD2INTG" : INT
    TITLE =BCD zu INT (FUP/KOP)
    AUTHOR : PN_DP
    FAMILY : SPSforum
    NAME : BCD2INTG
    VERSION : 0.4
    
    VAR_INPUT
      InBCD : WORD ;	
    END_VAR
    VAR_TEMP
      TS : STRUCT 	
       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_STRUCT ;	
      Temp_Word : WORD ;	
      Temp_Int : INT ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =Eingabewert in Teststruktur kopieren
    //und dabei die Vorzeichenbits 12 bis 14 wegen PLCSIM ausblenden
          U(    ; 
          L     #InBCD; 
          L     W#16#8FFF; 
          UW    ; 
          T     #Temp_Word; 
          SET   ; 
          SAVE  ; 
          CLR   ; 
          U     BIE; 
          )     ; 
          SPBNB _001; 
          CALL "BLKMOV" (
               SRCBLK                   := #Temp_Word,
               RET_VAL                  := #Temp_Int,
               DSTBLK                   := #TS);
    _001: NOP   0; 
    NETWORK
    TITLE =Prüfung und Umwandlung BCD zu INT
    //bei unzulässigem Eingabewert wird 0 ausgegeben
          U(    ; 
          O     #TS.TE_2; 
          O     #TS.TE_4; 
          )     ; 
          U     #TS.TE_8; 
          O     ; 
          U(    ; 
          O     #TS.TZ_2; 
          O     #TS.TZ_4; 
          )     ; 
          U     #TS.TZ_8; 
          O     ; 
          U(    ; 
          O     #TS.TH_2; 
          O     #TS.TH_4; 
          )     ; 
          U     #TS.TH_8; 
          =     L      6.0; 
          U     L      6.0; 
          SPBNB _002; 
          L     0; 
          T     #RET_VAL; 
    _002: NOP   0; 
          U     L      6.0; 
          NOT   ; 
          SPBNB _003; 
          L     #Temp_Word; 
          BTI   ; 
          T     #RET_VAL; 
    _003: NOP   0; 
    END_FUNCTION
    Harald
    Angehängte Grafiken Angehängte Grafiken
    Geändert von PN/DP (17.06.2011 um 16:20 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Code optimiert  

  8. #37
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    @Harald,
    Jetzt helfe mir mal gerade auf die Sprünge, wo kommt das VKE = "1" her?



    // Eingabewert ist im gültigen Format -> in INT wandeln
    L #InBCD;
    UW W#16#8FFF; // Vorzeichen-Bugfix für PLCSIM
    BTI ;
    SPA Ausg; // hier ist immer VKE=1
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  9. #38
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    @Harald,
    Jetzt helfe mir mal gerade auf die Sprünge, wo kommt das VKE = "1" her?
    Code:
    // Einerstelle prüfen, dazu Zehnerstelle entfernen
          SLW   4;               // EEEE_0000_0000_0000
          <D    ; 
          SPB   Err;             // Einer zu groß
    
    // Eingabewert ist im gültigen Format -> in INT wandeln
          L     #InBCD; 
          UW    W#16#8FFF;       // Vorzeichen-Bugfix für PLCSIM
          BTI   ; 
          SPA   Ausg;            // hier ist immer VKE=1
    Wird der Sprung "SPB Err" nicht ausgeführt, dann wird das VKE auf 1 gesetzt.
    (die Step7 Hilfe zu SPB wollte ich nicht zitieren - es gibt ja F1 ).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Standard

    Ja wer bestimmt den nun den Gewinner?

    Ich bin für die Lösung von LargoD, da am kürzesten.
    Doch die Prüfung des Vorzeichen Nibble sollte ganz rausfliegen.

    Das SAVE und RET_VAL nutzen von PN/DP war ja nicht Teil der Aufgabe, wenn der Baustein jedoch dann später in eine Bibliothek soll, sollte das noch rein.

    Den Aufruf von SFC20 in dem Korrigierten Beispiel, nur um Direktaddressierung von Lokaldaten zu vermeiden finde Ich ein wenig Oversized, für eine Baustein in eine Bibliothek wäre mir dieser dann auf jeden Fall zu groß und zu lahm!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Gewinner...  

  11. #40
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ja wer bestimmt den nun den Gewinner?
    Dazu müßte sich wohl zunächst M-Ott als Aufgabensteller äußern, wann er den Wettbewerb für beendet hält. Ein konkreter Termin wurde nicht vorgegeben.

    Völlig andere Lösungswege wird nun wohl niemand mehr präsentieren (oder wollen wir noch auf Thomas_v2.1 warten?).
    Die bekannten Standard-Algorithmen serielle Einzelzifferprüfung und parallel-Bitprüfung wurden in verschiedenen Ausführungen gezeigt.
    Wie sieht eigentlich die Lösung des Aufgabenstellers M-Ott aus?

    Hier mal die meßbaren Fakten der bisher geposteten Lösungen (in Reihenfolge der Beiträge):
    Code:
                                              Anw.   MC7  Anzahl
                      Algorithmus           Zeilen  Byte  Danke  Besonderheiten
    ----------------------------------------------------------------------------------------------------------------
    1  vierlagig      try & catch                6    24    3    führt leider ohne OB121 zum STOP
    2* Larry Laffer   Einzelzifferprüfung       29    98    1    sehr leicht verständlich
    3* Nordischerjung Einzelzifferprüfung       28    98    1    verarbeitet nur positive BCD-Zahlen
    4* LargoD         Parallelbitprüfung 8&4|2  18    64    5    würde auch für BTD nicht mehr Anweisungen benötigen
    5  SPSKILLER      Schleife Zifferprüfung    22    80    3    extra 3 Anw.: Fehlerstatus QERR-Ausgang
    6  PN/DP          Einzelzifferprüfung       19    60    1    extra 3 Anw.: Fehlerstatus BIE, PLCSIM-Fix
    
    7x PN/DP          KOP 8&4|2 mit dirty LW0   42   140    0    Absolute Zugriffe auf LW0! PLCSIM-Fix
    8x PN/DP          KOP 8&4|2 vollsymbolisch  46   226    0    SFC20 für symbolischen Zugriff, PLCSIM-Fix
    * Die Lösungen 2, 3 und 4 klassifizieren bestimmte Eingabewerte als Fehler (wegen Vorzeichen-Format), welche BTI nach Siemens-Definition korrekt verarbeiten würde.
    x Die Lösungen 7 und 8 sind nur Vergleichs-Demonstrationen, wie aufgeblasen Code wird, der unbedingt in FUP/KOP realisiert werden soll.

    Eine Laufzeit-Ermittlung ist bei den Mini-Programmen wohl entbehrlich.

    PS: Die Lösung 4 könnte auch die mit dem geringsten MC7-Speicherbedarf werden, wenn LargoD noch etwas optimiert.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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