RANT: Konstrukte bei denen man sich manchmal fragt

Zuviel Werbung?
-> Hier kostenlos registrieren
Heute: wie kopiere ich identische Arrays ineinander?


AAAAaaAAAaAAaAaaaaAAAAAAAAaAAaaaAaAaaAaA..............(╯°□°)╯︵ ┻━┻
Was möchtest du mit deinen Beitrag.
Gehört der hier zum Thread?
Hast du dich im Thema geirrt?
Möchtest du ein neues Thema mit deiner Frage starten?

Können wir dir irgendwie helfen?
 
Sprechen Die, welche die Styleguides bei Siemens schreiben, mit denen die Programmbeispiele aufbauen?
Die Leute die die Stylguides schreiben sind halt Theoretiker, die noch nie an ner Anlage waren.
Die Leute, die die Programmbeispiele schreiben sind Praktikanten, die noch nie überhaupt irgendwas mit SPS gemacht haben...
Ich mein, man könnte doch gerade bei den Beispielen mit gutem Beispiel für saubere Aufbauten und Konsequenz vorangehen?!
ja, mann könnte... aber sind wir hier bei wünschdirwas?

Wo, gibts heute schon noch ordentliche Arbeit? Seeeeehr selten...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Tread hat mich grad an einen weiteren Codeschnippsel erinnert dem ich letztens begegnet bin.

ich habe heute was ganz komisches entdeckt in der CPU. Es schein das die CPU einen falsche Berechnung macht mit real werten !
Siehe Bild !
Das Ergebnis müsste 100.0 sein und nicht 99.999 !! Alle drei REAL Typen ! Ich verstehe das nicht ! Ist das ein BUG ?

Ja ==R kann man benutzen, wenn man die Realwerte als Konstante zuweist und nachher so abfragt. Aber wie man es für eine gute Idee halten kann. Einen Status als Realwert abzulegen, geht mir so richtig nicht auf.
Kleiner Auszug aus dem Code, der übrigens auf einer 1517H läuft. Da ist vermutlich wieder mal Code aus einer S7-400 reaktiviert worden der da schon aus einer S5 migriert wurde.

Code:
//0.0: Geschlossen
      U     #iAbluftklappe_geschlossen
      SPBN  posA1
      L     0.0
      T     #oStatus
posA1: NOP 0

//1.0: Offen
      U     #iAbluftklappe_offen
      SPBN  posA2
      L     1.0
      T     #oStatus
posA2: NOP 0

//2.0: schliesst
      U     #iAbluftklappe_schliesst
      SPBN  posA3
      L     2.0
      T     #oStatus
posA3: NOP 0

//3.0: oeffnet
      U     #iAbluftklappe_oeffnet
      SPBN  posA4
      L     3.0
      T     #oStatus
posA4: NOP 0

//4.0: Revision
      U     #iAbluftklappe_lokal
      O(
      L     #iBetriebsart_cmd
      L     2.0
      ==R
      )
      SPBN  Stat3
      L     4.0
      T     #oStatus
Stat3: NOP 0

//5.0: Nicht verfügbar
      O     #iAbluftklappe_Stoerung
      SPBN  Stat4
      L     5.0
      T     #oStatus
Stat4: NOP 0

Immer schade wenn man kein Geld mehr in Weiterentwicklung stecken will.
 
Entschuldige, ich dachte du beziehst dich auf den Themenstarter....

Ja gut, wenn der von dir gepostete Code auf einer 1500ér H läuft, dann muss man sich schon fragen.....
Im gleichen Programm. Solche Impliziten Konvertierungen trau ich nicht weiter als ich ne Kuh werfen kann.
tBetriebsart ist eine Realzahl
Abgefragt wird aber auf grösser 4, also Integer. Das funktioniert. Aber ich kann mich erinnern dass da nicht zwingend dann der Int nach Real gewandelt wird und nicht die Bitmaske verglichen wird. Ich mag mich da an irgendwelche komischen Sachen erinnern.

Code:
IF #iBrandManuell THEN
    #tBetriebsart := 2.0;
ELSIF #iHauptalarm_Rauch_stat THEN
    #tBetriebsart := 3.0;
ELSIF #iVoralarm_Rauch_bew THEN
    #tBetriebsart := 4.0;
ELSIF #iSpuelprogramm THEN
    #tBetriebsart := 6.0;
ELSIF #iWartung_Klappe THEN
    #tBetriebsart := 7.0;
ELSIF #iST_Max AND NOT #iGegenverkehr THEN
    #tBetriebsart := 8.0;

ELSIF #iGegenverkehr THEN
     #tBetriebsart := 10.0;
ELSIF #iTestprogramm THEN
    #tBetriebsart := 11.0;
ELSE
    #tBetriebsart := 8.0;
END_IF;

IF #tBetriebsart > 4 THEN
    IF #iUeberdruck_2_3_B2 THEN
        #tBetriebsart := 21;
    ELSIF #iUeberdruck_1_3_B3 THEN
        #tBetriebsart := 22;
    ELSIF #iUeberdruck_2_3_B3 THEN
        #tBetriebsart := 23;
    END_IF;
END_IF;
 
Im gleichen Programm. Solche Impliziten Konvertierungen trau ich nicht weiter als ich ne Kuh werfen kann.
tBetriebsart ist eine Realzahl
Abgefragt wird aber auf grösser 4, also Integer. Das funktioniert. Aber ich kann mich erinnern dass da nicht zwingend dann der Int nach Real gewandelt wird und nicht die Bitmaske verglichen wird. Ich mag mich da an irgendwelche komischen Sachen erinnern.

Code:
IF #iBrandManuell THEN
    #tBetriebsart := 2.0;
ELSIF #iHauptalarm_Rauch_stat THEN
    #tBetriebsart := 3.0;
ELSIF #iVoralarm_Rauch_bew THEN
    #tBetriebsart := 4.0;
ELSIF #iSpuelprogramm THEN
    #tBetriebsart := 6.0;
ELSIF #iWartung_Klappe THEN
    #tBetriebsart := 7.0;
ELSIF #iST_Max AND NOT #iGegenverkehr THEN
    #tBetriebsart := 8.0;

ELSIF #iGegenverkehr THEN
     #tBetriebsart := 10.0;
ELSIF #iTestprogramm THEN
    #tBetriebsart := 11.0;
ELSE
    #tBetriebsart := 8.0;
END_IF;

IF #tBetriebsart > 4 THEN
    IF #iUeberdruck_2_3_B2 THEN
        #tBetriebsart := 21;
    ELSIF #iUeberdruck_1_3_B3 THEN
        #tBetriebsart := 22;
    ELSIF #iUeberdruck_2_3_B3 THEN
        #tBetriebsart := 23;
    END_IF;
END_IF;
Das ist alles gleich mehrfacher Mist...

Können ja auch mehrere dieser Zustände gleichzeitig anstehen...

Gott im Himmel... 🙈🙈🙈

If then else Orgien vom Feinsten...
 
Zuletzt bearbeitet:
Das ist alles gleich mehrfacher Mist...

Können ja auch mehrere dieser Zustände gleichzeitig anstehen...
Das ist ja okay. Der höchstwertigste zustand wirkt sich auf die Betriebsart aus und bei wegfall nimm die Betriebsart den wert des nächsprioren zustand her. Allerdings sind da auch abfragen drin, die da so garnix zu suchen haben.
Anyway. Ich bin überzeugt davon dass das mal eine durchdachte funktionierende software war. Höchstwahrscheinlich aus datenbanken generiert. Aber dann hat man vermutlich angefangen das auf neue Anforderungen hinzubiegen, hatte möglicherweise keinen Zugriff mehr auf den Erschaffer und/oder wollte nicht mehr in Weiterentwicklung als das Nötigste investieren. Die Neuen werden dann in so einem unbekannten recht komplexen Programm verbrannt und verrennen sich so darin dass es kaum noch einen Ausweg gibt. Das ist schade um das Potential das so unbedacht vernichtet wird.
 
Das ist doch auch nett :)

Die DBX_900_x sind 5 Zonen die 5. Zone bleibt anstehen. Der Code ist 15 Jahre alt und live.

Code:
R04:  U     "SPS<->BR"._DBX_851_0
      SPBN  R10
      S     "SPS<->BR"._DBX_900_6
      SPA   R11
R10:  R     "SPS<->BR"._DBX_900_6

R11:  U     "SPS<->BR"._DBX_851_1
      SPBN  R12
      S     "SPS<->BR"._DBX_900_7
      SPA   R13
R12:  R     "SPS<->BR"._DBX_900_7

R13:  U     "SPS<->BR"._DBX_851_2
      SPBN  R14
      S     "SPS<->BR"._DBX_901_0
      SPA   R15
R14:  R     "SPS<->BR"._DBX_901_0

R15:  U     "SPS<->BR"._DBX_851_3
      SPBN  R16
      S     "SPS<->BR"._DBX_901_1
      SPA   R17
R16:  R     "SPS<->BR"._DBX_901_1

R17:  U     "SPS<->BR"._DBX_851_4
      SPBN  R18
      S     "SPS<->BR"._DBX_901_2
      SPA   R19
R18:  S     "SPS<->BR"._DBX_901_2
R19:  NOP   0
 
Zurück
Oben