Step 7 Radixsort

Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FUNCTION_BLOCK FB 3
TITLE =
VERSION : 0.1


VAR_INPUT
  Wert_1 : INT ;	
  Wert_2 : INT ;	
END_VAR
VAR_OUTPUT
  Ergebnis : INT ;	
  err : BOOL ;	
END_VAR
BEGIN
NETWORK
TITLE =

      CLR   ; 
      =     #err; 


      L     #Wert_1; 
      L     #Wert_2; 
      MOD   ; 
      SPU   err; 
      T     #Ergebnis; 
      BEA   ; 

err:  SET   ; 
      =     #err; 
      L     0; 
      T     #Ergebnis; 


END_FUNCTION_BLOCK

Versuche es so ! ;)
 
... hat aber trotzdem (!) Rest Null obwohl die Teilung verboten ist ...!
Das Ergebnis ist aber nicht "Null = kein Rest bei der Division", sondern "Null = kein Rest, weil Division nicht erlaubt". Dieser kleine Unterschied wird über die Statusbits gemeldet.

Auch bei anderen nicht (mehr) ausführbaren Berechnungen, erhält man trotzdem ein vermeintliches "Ergebnis" im Accu.
Siemens und auch alle anderen müssen wegen solch vorhersehbarer Fehler nicht die CPU anhalten, sondern haben dafür die Statusbits.
Wenn Du die nicht auswertest - Dein Problem.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Ergebnis ist aber nicht "Null = kein Rest bei der Division", sondern "Null = kein Rest, weil Division nicht erlaubt". Dieser kleine Unterschied wird über die Statusbits gemeldet.

Auch bei anderen nicht (mehr) ausführbaren Berechnungen, erhält man trotzdem ein vermeintliches "Ergebnis" im Accu.
Siemens und auch alle anderen müssen wegen solch vorhersehbarer Fehler nicht die CPU anhalten, sondern haben dafür die Statusbits.
Wenn Du die nicht auswertest - Dein Problem.

Es ist nicht so das ich nicht auswerte !
In diesem besondern Fall soll man sie nicht auswerten !

VORTEIL daraus ? :
- Es ist hier un ... anderswo auch... kein Problem wenn der "Instandhalter" ... mal eine Null eingibt... funktioniert GARANTIERT trotzdem !

:ROFLMAO:

Das (eigentliche) Problem ist die VKE nach dem Fehler , der Vergleich Boolwert ... nach einem FEHLER!!!.
 
Zuletzt bearbeitet:
Das (eigentliche) Problem ist die VKE nach dem Fehler , der Vergleich Boolwert ... nach einem FEHLER!!!.
Was Thomas_v2.1 Dir schon gefühlte 10 Beiträge versucht klar zu machen: Die MOD-Berechnung und der daraus resultierende Fehler haben überhaupt nichts mit dem VKE zu tun. Du vergleichst Da einfach Akku1 (mit dem "Null = kein Rest, weil Division nicht erlaubt") und Akku2 und bekommst natürlich auch ein entsprechendes Ergebnis.

Und stell' Dir vor, es ist gewollt, das die CPU wegen solcher nicht durchführbaren Berechnungen nicht anhält!
Das ist keine revolutionäre Erkenntnis!
;)
 
Was Thomas_v2.1 Dir schon gefühlte 10 Beiträge versucht klar zu machen: Die MOD-Berechnung und der daraus resultierende Fehler haben überhaupt nichts mit dem VKE zu tun. Du vergleichst Da einfach Akku1 (mit dem "Null = kein Rest, weil Division nicht erlaubt") und Akku2 und bekommst natürlich auch ein entsprechendes Ergebnis.

Und stell' Dir vor, es ist gewollt, das die CPU wegen solcher nicht durchführbaren Berechnungen nicht anhält!
Das ist keine revolutionäre Erkenntnis!
;)

Diese Vergleich an sich tut nicht zur Sache solange nicht nach solch einem gravierenden Fehler kommt wie die ... Division durch Null (=verboten)... ein CPU Stop hier wäre nötig weil diese Irrtum hier nicht korrigiert das Bool-logisch gleiche tut wie wenn es der CPU stopt ( n/0).
...ein Fehlerstack der ausgewertet werden kann ist der OV (OS) ... passiert aber nichts ;) ... VKE kommt als wäre nichts :p
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist kein gravierender Fehler!

Das ist einfach eine nicht durchführbare Berechnung, die x-mal täglich vorkommt!

Wenn Du das nicht über die Statusbits auswertest, wie es bei vielen (wenn nicht sogar allen) CPUen vorgesehen ist, ist das Dein Problem. Und die VKE-Abfrage eines nachfolgenden Vergleiches der Akkuinhalte ist keine Fehlerauswertung des vorangegangenen MODs!

Das haben weder ich mir noch sonst einer der Vorposter sich so ausgedacht, sondern wurde von Siemens & Co. so festgelegt.
 
Das ist kein gravierender Fehler!

Das ist einfach eine nicht durchführbare Berechnung, die x-mal täglich vorkommt!

Wenn Du das nicht über die Statusbits auswertest, wie es bei vielen (wenn nicht sogar allen) CPUen vorgesehen ist, ist das Dein Problem. Und die VKE-Abfrage eines nachfolgenden Vergleiches der Akkuinhalte ist keine Fehlerauswertung des vorangegangenen MODs!

Das haben weder ich mir noch sonst einer der Vorposter sich so ausgedacht, sondern wurde von Siemens & Co. so festgelegt.

Nach eine DIVISION duch NULL ...kann man noch ... VKE-Abfragen machen ?:D
 
Ja!

Neue Anweisung (Vergleich), neues Ergebnis (VKE).
MOD = kein Einfluss auf VKE.

Da spricht doch nichts dagegen. Der Vergleich findet doch alles, was er braucht. Ein Wert im Akku1, einer im Akku2, alles klar. Ob der Wert im Akku 1 auch das Erwartete ist, hat der Programmierer anhand der Statusbits zu überprüfen.
Das ist z.B. bei 'ner Addition, wo ein Überlauf zu befürchten ist, doch genauso.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja!

Neue Anweisung (Vergleich), neues Ergebnis (VKE).
MOD = kein Einfluss auf VKE.

Da spricht doch nichts dagegen. Der Vergleich findet doch alles, was er braucht. Ein Wert im Akku1, einer im Akku2, alles klar. Ob der Wert im Akku 1 auch das Erwartete ist, hat der Programmierer anhand der Statusbits zu überprüfen.
Das ist z.B. bei 'ner Addition, wo ein Überlauf zu befürchten ist, doch genauso.


Code:
   U(    
      L     #ein
      L     0
      /I    
      L     0
      ==I   
      )     
      SPU   o
      =     A      1.0
      BE    
o:    =     A      1.1
Probier mal das ! Funktioniert der SPU/SPS ?:ROFLMAO:
 
Probier mal das ! Funktioniert der SPU/SPS ?:ROFLMAO:

Sie wird genau so funktionieren wie angedacht. Ueberspringen von A1.0 und irgendwas machen mit A1.1.

Mit einem SET vor A1.1 und einem SET NOT vor A1.1 vor dem Sprung hättest du sogar eine echte Fehlerauswertung programmiert.
Geht natürlich einfacher indem du den Handbuchweg gehst und direkt das entsprechenden Statusbit auswähertest

mfg René
 
Sie wird genau so funktionieren wie angedacht. Ueberspringen von A1.0 und irgendwas machen mit A1.1.

Mit einem SET vor A1.1 und einem SET NOT vor A1.1 vor dem Sprung hättest du sogar eine echte Fehlerauswertung programmiert.
Geht natürlich einfacher indem du den Handbuchweg gehst und direkt das entsprechenden Statusbit auswähertest

mfg René
SPU wäre da sinnlos ! ...die A0 A1(=Statusbits) werden längst verlöschen sein wenn es zu der SPU Abfrage kommt !
SPS dagegen ... hätte immer noch den OS ;)

(Ergänzung)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
   U(    
      L     #ein
      L     0
      /I    
      L     0
      ==I   
      )     
      SPU   o
      =     A      1.0
      BE    
o:    =     A      1.1
Probier mal das ! Funktioniert der SPU/SPS ?:ROFLMAO:

SPU wäre da sinnlos ! ...die A0 A1(=Statusbits) werden längst verlöschen sein wenn es zu der SPU Abfrage kommt !
SPS dagegen ... hätte immer noch den OS ;)

(Ergänzung)

Zuallererst müsstest du erst einmal beschreiben was du mit deinen Code abfangen möchtest.
Wenn du eine Division durch '0' auswerten möchtest ist der 'SPU' Befehl an der falschen stelle
gesetzt.
 
Netter Versuch !
Was passiert aber bei Stromausfall , und nicht nur !
Was passiert wenn die Temporärspeicherplätze der FB von der nächste FB überschrieben werden ?
 
Hi Sioan,

hast du den Thread gelesen? Hast du ihn verstanden? Hast du gemerkt an welcher Stelle der Thread unterbrochen ist und warum?
Der TE ist gesperrt und das wohl nicht ohne Grund. Willst du das Thema wirklich wieder aufgreifen?
Wenn du sinnlos die Menge deiner Beiträge erhöhen willst, dann mach das mit schönen Beiträgen in Fun_zum_Feierabend und
nicht in 00Alex Beiträgen...

Toki
 
Zurück
Oben