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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Abfangen von falscher Eingabe

  1. #11
    Registriert seit
    05.03.2007
    Ort
    Lindlar
    Beiträge
    112
    Danke
    19
    Erhielt 20 Danke für 18 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hmm.... Muss auch mal überlegen...
    IF Time < '09:00:00' THEN
    SELECT finger from right hand where ID=3
    END IF

  2. #12
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Ich habe zuerst über den Zweierlogarithmus nachgedacht, und dabei kommt, wenn ein Bit gesetzt ist, immer eine ganze Zahl raus.
    Um zu überprüfen ob hinter dem Komma eine null steht bin ich dann darauf gekommen, dass beim Real-Format ja der Exponent die Basis 2 hat, und man somit nur die letzten Bits abfragen muss.

    Mit der Lösung lassen sich aber nur 23 Bits überprüfen, weil ab dann der Rundungsfehler auftritt.
    Z.B. haben 16777216 (2^24) und 16777217 ((2^24) + 1) beide 23 Nullbits in der Mantisse.

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Ralle (14.09.2009)

  4. #13
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.327
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard

    Hier mal eine Variante ohne Umweg über Gleitpunktzahl:
    Code:
          L     #IN_WORD
          PUSH
          +     -1
          UW
          U     <>0
          =     #Fehler   //true wenn mehr als 1 Bit gesetzt ist
    ... die auch für 32 Bit DWORD funktioniert:
    Code:
          L     #IN_DWORD
          PUSH
          +     L#-1
          UD
          U     <>0
          =     #Fehler   //true wenn mehr als 1 Bit gesetzt ist
    ... und wenn man auf "genau 1 Bit gesetzt" abfragen will:
    Code:
          L     #IN_DWORD
          PUSH
          UD
          U     ==0
          SPB   MNOT
          +     L#-1
          UD
          U     <>0
    MNOT: NOT
          =     #Genau1   //true wenn genau 1 Bit gesetzt ist
    Die Varianten beruhen zugegebenerweise auf einem schönen uralten Algorithmus, den nicht ich erfunden habe.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #14
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Das geht noch kürzer
    Code:
          L     #IN_WORD
          DTR   
          UD    DW#16#7FFFFF
          U     <>0
          =     #Fehler
    Und bei solch extremen Konstrukten bitte nen eindeutigen Kommentar dazu schreiben, dein Nachfolger wird's dir danken...

  6. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.327
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard

    Zitat Zitat von Chefmech Beitrag anzeigen
    Und bei solch extremen Konstrukten bitte nen eindeutigen Kommentar dazu schreiben
    Hmm, ausgerechnet bei DEM Beispiel wird ein einfacher Zeilenkommentar wohl nicht reichen - siehe #10.
    Sowas packt man am besten in einen Baustein, betrachtet es als Black Box und vertraut darauf, daß es funktioniert.
    Sicherheitshalber noch KNOW_HOW_PROTECT wie bei den Siemens-Bausteinen, dann glaubt das auch (fast) jeder.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #16
    Registriert seit
    03.04.2008
    Beiträge
    6.206
    Danke
    237
    Erhielt 818 Danke für 692 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Hmm, ausgerechnet bei DEM Beispiel wird ein einfacher Zeilenkommentar wohl nicht reichen - siehe #10.
    Sowas packt man am besten in einen Baustein, betrachtet es als Black Box und vertraut darauf, daß es funktioniert.
    Sicherheitshalber noch KNOW_HOW_PROTECT wie bei den Siemens-Bausteinen, dann glaubt das auch (fast) jeder.

    Harald
    Wobei es doch einer gewissen künstlerischen Kreativität bedarf, sich solch eine Lösung auszudenken.


    bike

  8. #17
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    Was sind das für Eingaben?
    Warum ein Fehlerbit erzeugen?
    Kannst Du bei der Eingabe nicht den Fehler vermeiden -> Tip: Umschalter!

    Entweder über klassische SETZ / RÜCKSETZ-Bedingung oder über ein Wort. Jede Taste erhällt einen Wert, der einer 2'er Potenz entspricht:

    Bei drücken der
    Taste 1 = 2 hoch 0 = Bit 0 = Wert 1
    Taste 2 = 2 hoch 1 = Bit 1 = Wert 2
    Taste 3 = 2 hoch 3 = Bit 2 = Wert 4
    ...
    (Nur Achtung Bit 0-7 sind bei einem Wort im 2. Byte, Bit 8-15 im 1.)

    Jetzt können niemels 2 Werte aktiv sein und Du könntest mit dem angewählten Bit im Wort weiterarbeiten. Kleiner check des Wortes auf Wert 0 und Du weißt, ob überhaupt eine Taste angewählt wurde.

    Diese Variante kann auch sehr gut in WinCCflex genutzt werden!
    Geändert von MCerv (20.08.2011 um 11:05 Uhr)
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  9. #18
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.739
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von MCerv Beitrag anzeigen
    Was sind das für Eingaben?
    Warum ein Fehlerbit erzeugen?
    Kannst Du bei der Eingabe nicht den Fehler vermeiden -> Tip: Umschalter!
    ...
    Hi MCerv,
    eventuell ist Dir entgangen, daß die Treaderöffnung vor 2 Jahren war. Ich glaub' nicht, daß der TE noch nach 'ner Lösung sucht.

    PN/DP hat heut' Nacht nur für Suchende mal eine andere Lösungsvariante mit ebensowenig notwendigem Code wie bei der Realzahlvariante hinzugefügt.

  10. #19
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    Oh da hast Du recht hucki. Hab ich wohl überlesen, dennoch wäre das mal eine Alternative.
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  11. #20
    Registriert seit
    27.08.2008
    Ort
    im gelobten Land Bayern
    Beiträge
    213
    Danke
    35
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Das geht noch kürzer
    Code:
          L     #IN_WORD
          DTR   
          UD    DW#16#7FFFFF
          U     <>0
          =     #Fehler
    Funktioniert einwandfrei warum auch immer, Danke
    Das größte Problem eines PC ist der, der davor sitzt!

Ähnliche Themen

  1. Mobotix-Kamera-Stream abfangen
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 24.09.2011, 20:29
  2. Gebersprung abfangen
    Von tisler im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 13.07.2010, 12:49
  3. Analog In Baugruppe Fehler abfangen
    Von LukeSkywalker im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.07.2009, 07:38
  4. Negative Zahlen abfangen in Step 5
    Von Idlav im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 25.04.2008, 09:51
  5. Profibus DP - SPS - Anlauf und Busausfall abfangen
    Von CrazyCat im Forum Feldbusse
    Antworten: 7
    Letzter Beitrag: 12.07.2006, 10:58

Lesezeichen

Berechtigungen

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