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

Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte
Ergebnis 51 bis 60 von 65

Thema: RANT: Konstrukte bei denen man sich manchmal fragt

  1. #51
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vollmi Beitrag anzeigen
    ....dass etwa die hälfte dieser S/Rs eh zu 100% in der hälfte des Bausteins unbedingt in einen Zustand versetzt werden?
    .. das 50% eh zu 100% in der "Hälfte" des .... "Viertel nach Dreiviertel vor Um = Halb" ..... außer das man die Startsprungmarke AK2 nicht sieht ist das für mich noch lange keine Orgie ....
    Grüße Frank

  2. #52
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von IBFS Beitrag anzeigen
    .. das 50% eh zu 100% in der "Hälfte" des .... "Viertel nach Dreiviertel vor Um = Halb" ..... außer das man die Startsprungmarke AK2 nicht sieht ist das für mich noch lange keine Orgie ....
    Das meinte ich auch nicht als Orgie, sondern eher das was im Baustein abgeht wo die Referenzliste drauf verweist. Da wird 12 mal in einem Baustein auf die Instanz eines völlig anderen Bausteins geschrieben.

    mfG René

  3. #53
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Da wird 12 mal in einem Baustein auf die Instanz eines völlig anderen Bausteins geschrieben.
    Ohren abreißen für sowas

  4. #54
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Wiedermal geiles Schmankerl.

    Code:
    (*Auf nächste ganze Zahl aufrunden*)
    IF (nSV*10) - TRUNC(nSV)*10 <> 0.0 AND nSV > 0 THEN
        Res := TRUNC(nSV) +1;
    END_IF;
    IF (nSV*10) + TRUNC(nSV)*10 <> 0.0 AND nSV < 0 THEN
        Res := TRUNC(nSV) -1;
    END_IF;
    IF nSV = 0 OR Einschaltsperre = 1 THEN
        Res := 0;
    END_IF;
    nSV und Res sind übrigens vom Typ REAL, Einschaltsperre ist BOOL.

    Der Programmschnippsel funktioniert sogar (bis Siemens mal restriktiver mit dem Compiler wird, vermutlich)
    Man könnt auch meinen Klammern kosten Geld oder bin ich der einzige der Vergleichsoperationen einklammert bevor die Resultate Bitweise verknüpft werden?

    mfG René
    Geändert von vollmi (29.09.2014 um 12:21 Uhr)

  5. #55
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen

    nSV und Res sind übrigens vom Typ REAL

    mfG René
    Verstehe ich es richtig, daß hier eine Variable auf 0 überprüft wird, die definitionsgemäß überhaupt nicht null werden kann ??

  6. #56
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Draco Malfoy Beitrag anzeigen
    Verstehe ich es richtig, daß hier eine Variable auf 0 überprüft wird, die definitionsgemäß überhaupt nicht null werden kann ??
    Eine Zahl vom Datentyp Real kann auch Null sein, wieso denn nicht.
    Problematisch kann es nur sein wenn man nach verschiedenen Gleitpunkt-Operationen hofft wieder bei Null zu landen, und dann aufgrund der Ungenauigkeiten im Real-Format eben nicht 0,0 sondern 0,000001 herauskommt.

    Von den Datentypen her ist das prinzipiell Ok, es nutzt eben die automatische Typwandlung bei SCL aus. Es ist nur umständlich und nicht gerade optimal im Benzug auf Geschwindigkeit programmiert.

  7. #57
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Zitat Zitat von Draco Malfoy Beitrag anzeigen
    Verstehe ich es richtig, daß hier eine Variable auf 0 überprüft wird, die definitionsgemäß überhaupt nicht null werden kann ??
    Nach der ersten Rechenoperation / Umwandlung ist generell empfehlenswert REAL nur noch auf größer, kleiner oder eben einen bestimmten Bereich zu vergleichen.

    Gruß
    Dieter

  8. #58
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Hm. Ich meine mich aber erinnern zu können, daß eine Float-Zahl grundsätzlich nicht null werden kann, wegen der Spezifik der Mantisse / Exponent Darstellung, denn wenn ich einfach überall Nullen setze, wäre das ja null hoch null und folglich =1. Oder wurde diese Definitionslüke in S7 geschlossen, indem man einfach eine Abfolge von Nullen in als NULL definiert hat ?

  9. #59
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Eine Zahl vom Datentyp Real kann auch Null sein, wieso denn nicht.
    Problematisch kann es nur sein wenn man nach verschiedenen Gleitpunkt-Operationen hofft wieder bei Null zu landen, und dann aufgrund der Ungenauigkeiten im Real-Format eben nicht 0,0 sondern 0,000001 herauskommt.
    Sobald da irgendein Messwert in den Wert reinspielt ist es extrem unwahrscheindlich dass da wieder irgendwo eine gerade Zahl wie ne Null rauskommt. Auch =10.0 oder =22.5 abzufragen ist bei Realzahlen mehr oder weniger sinnlos (IMHO).

    Von den Datentypen her ist das prinzipiell Ok, es nutzt eben die automatische Typwandlung bei SCL aus. Es ist nur umständlich und nicht gerade optimal im Bezug auf Geschwindigkeit programmiert.
    Was mich am meisten stört ist das hin und her gespringe mit der Typwandlung. Entweder man macht die Abfragen in Real (dann gehören IMHO auch die Konstanten in Real reingetippt. Klar geht 10 aber 10.0 Ist imho leserlicher).

    Und eben es wäre rein von der Lesbarkeit her sinnvoll Vergleichsoperationen und die Arithmetik in Klammern zu verpacken bevor man sie logisch verknüpft. Arithmetik, Vergleichsoperationen und Logische Verknüpfungen ganz ohne etwas einzugruppieren finde ich extrem unleserlich.
    Vor allem da Klammern offenbar bekannt waren. Aber warum man eine Multiplikation in Klammern setzt die doch sowieso höher Priorisiert ist als eine Addition. Aber den gesamten Arithmetik nicht in Klammern setzt um die Lesbarkeit zu erhöhen erschliesst sich mir nicht.

    Geschwindigkeit ist bei den heutigen Maschinen ja eher Nebensache. Aber Leserlich und verständlich sollte das Zeug werden.

    Und da helfen auseinander gerissene IF Konstrukte auch nicht so wirklich.

    mfg René
    Geändert von vollmi (29.09.2014 um 22:01 Uhr)

  10. #60
    Avatar von vollmi
    vollmi ist gerade online Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hätte es so gemacht.
    Ein bisschen Kommentar und Klammerung und man sieht viel schneller was zusammen gehört.


    Code:
    (*Auf nächste ganze Zahl aufrunden*)
    IF ((nSV - TRUNC(nSV)) <> 0.0) AND (nSV > 0.0) THEN  // nSV Positiv aufrunden auf nächstgrössere ganze Zahl
        Betrieb_Soll := TRUNC(nSV) + 1;
    ELSIF ((nSV + TRUNC(nSV)) <> 0.0) AND (nSV < 0.0) THEN // nSV Negativ, abrunden auf nächstkleinere ganze Zahl
        Betrieb_Soll := TRUNC(nSV) - 1;
    ELSE // nSV genau 0.0
        Betrieb_Soll := 0;
    END_IF;
    Da Betrieb_Soll im Programm nachher nur noch auf > oder < 0 abgefragt wird, hätte ich diesen gleich als INT definiert.
    Unglücklich bin ich trotzdem damit, da eine echte 0 nie erreicht wird und somit immer als Betrieb_Soll zwischen -1 und +1 schwankt. Da wäre eine Hysterese sinnvoll gewesen.

    mfG René

Ähnliche Themen

  1. Strukturen Vergleichen in denen Arrays vorkommen
    Von SteffenD im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 31.07.2013, 09:18
  2. WCf 2008 SP2 HF3 hängt sich manchmal auf
    Von Günni1977 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 26.11.2010, 09:14
  3. CX hängt sich manchmal auf bei "Route hinzufügen"
    Von karlheinzsps im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 03.03.2010, 13:15
  4. blutender Anfänger fragt .....
    Von Martha72 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 16.07.2009, 11:46
  5. Warum man sich OPC sparen sollte...
    Von seeba im Forum Stammtisch
    Antworten: 8
    Letzter Beitrag: 19.06.2006, 10:58

Lesezeichen

Berechtigungen

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