RANT: Konstrukte bei denen man sich manchmal fragt

Zuviel Werbung?
-> Hier kostenlos registrieren
Auch eine Art von Know-how Schutz...
Könnte man vermuten, dass das so beabsichtigt ist. Also kein Know How Schutz, sondern einfach wenn jemand das Programm haben will kann die Firma sagen: hier hast du es. Aber wie viel länger die Erstellung, Inbetriebnahme und Wartung eines solchen Machwerks benötigt, wurde vermutlich nicht berücksichtigt. Wenn ich eine Anlage so programmieren und inbetriebnehmen müsste, würde ich direkt kündigen.
 
Aber wie viel länger die Erstellung, Inbetriebnahme und Wartung eines solchen Machwerks benötigt, wurde vermutlich nicht berücksichtigt.
Vermutlich nicht länger. Immerhin ist auf Monitor 2 durchgehend die Tabelle offen, womöglich direkt mit den Adressen, da kann man ja schnell Copy'n'Paste verwenden ^^ 😁
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vermutlich nicht länger. Immerhin ist auf Monitor 2 durchgehend die Tabelle offen, womöglich direkt mit den Adressen, da kann man ja schnell Copy'n'Paste verwenden ^^ 😁
Aber: warum? Ich verwende auch Excel-Tabellen um daraus automatisch HMI Variablen und Störmeldung zu generieren, Programmcode habe ich daraus auch schon generiert. Dann ist aber im Programm auch die gleiche Information wie in der Tabelle. Oder andersherum, wenn ich den Aufbau aus dem Programm extern benötige, dann gibt es etliche Möglichkeiten diese automatisiert zu extrahieren, sei es über AWL Quellen, Kommandoschnittstelle oder sonstwas. Aber Programm nur in Excel dokumentieren und im Programm nur mit Absolutadressen arbeiten, ich glaube dafür gibt es keinen triftigen Grund.
 
Immerhin hat er noch ein Symbol vergeben. Die Krönung die ich hatte war ein Programm, bei denen in den Programmdatenbausteinen nur Arrays angelegt wurden, also auch in einem DB in dem die 200 Sollwerte liegen, ist einfach nur ein Array[0..199] of Real. Dann gibt es dazu eine Excel-Tabelle zu diesem Projekt, und in dieser ist dann hinterlegt was an der Adresse für ein Parameter liegt.
Da war jetzt wieder der 3. Vorteil vom TIA, der mir letztens nicht eingefallen ist. Ab V15.1 kannst jedem Arrayelement nen eigenen Kommentar geben ;)
 
Das mit den Excellisten ist so ne Sache...
Wir haben bei verschiedenen Kunden auch so Konstrukte, wo quasi diese Excelliste die Schnittstellendoku zwischen SPS und Leitsystem ist.
Theoretisch kannst zuerst die Liste erstellen und dann kann SPS-Mensch und Visu-Mensch gleichzeitig losarbeiten... vorher krigt der Kunde die noch zur Freigabe der Namen und BMKs...
Die Texte in den DB rüberkopieren kann man natürlich machen ;)
Jedenfalls kommts auf das Gesamtkonzept an, ob das nun Sinn macht... Ich will die Excelliste nicht verteufeln ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da war jetzt wieder der 3. Vorteil vom TIA, der mir letztens nicht eingefallen ist. Ab V15.1 kannst jedem Arrayelement nen eigenen Kommentar geben ;)

Dann sind wir wieder bei absoluten Symbolen mit Kommentaren im Hintergrund. Da kann ich dann gleich wieder symbole mit Absolutadressennamen verwenden.

Es ist doch einfach viel effizienter wenn man den Code intuitiv tippen kann und intellisense das vervollständigen hilft

Tempoel.rIst := Tempoel.rRoh * Tempoe.rKorr;
 
Es ist doch einfach viel effizienter wenn man den Code intuitiv tippen kann und intellisense das vervollständigen hilft

Tempoel.rIst := Tempoel.rRoh * Tempoe.rKorr;
Kommt halt auf das Gesamtkonzept an, wie effizient das ist.
Ich hatte mal nen Kunden, da MUSSTE die Symbolik sich aus AKZ OKZ BMK zusammensetzen. Also =4532ABC+DHZB123-P1234.45.F23.6
Wobei sich F23.6 auch noch ständig ändert, wenn der Pfad im Eplan bei der Revision sich verschiebt... Da schalte ich freiwillig auf absolute Adressierung um und tippe E0.0 ;)
 
Grundsätzlich gilt für Programmierstandards, sie sollten bei jeder Anlage gleich sein, sonsts ists kein Standard.
Wenn ich 100 Anlagen habe, die nach identischem Konzept programmiert sind, ist mir das Konzept eigentlich wurscht.
Nur wenn ich 100 verschiedene Konzepte habe, weil jeder meint immer was "besser" machen zu wollen, dann krieg ich die Krise...

PS: noch besser wirds, wenn ich in einer SPS 10 verschiedene Konzepte habe, weil über 20 Jahre 10 verschiedene Programmierer an der Anlage waren. Sowas hab ich auch...

Also Einheitlichkeit geht vor Schönheit sag ich immer.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal etwas, was mir bei vielen unserer älteren Anlagen begegnet:

Gegeben ist ein Puffer mit zum Beispiel 80 Fächern. Für jede der 80 Fachpositionen wurde je eine Interger-Variable auf eine Register gelegt.
Wenn man dann die position von, sagen wir Fach 6 haben wollte, wurde zuerst die Registeradresse des ersten Faches ermittelt, diese um 1 dekrementiert, und dann anschliessend die Fachnummer addiert. Mit dieser berechneten Adresse wurde dann indirekt auf den Wert zugriffen, der dann temporär in einer Integervariable zur weiteren Verwendung gespeichert wurde.
Code:
riSollPosition := 0;                                                 // Sollposition loeschen
rSollFachNummer := 6;                                                // Sollfachnumer setzen (hier fest auf 6 als Beispiel)
rFachzeiger := regnum(rPuffer01Fach01) + (rSollFachNummer - 1);      // Adresse des Sollfachregisters ermitteln
riSollPosition := @rFachzeiger;                                      // Fachposition in Sollposition zwischenspeichern

Man hätte auch einfach ein Array [1..80] of int anlegen können....
 
Zuletzt bearbeitet:
Seinerzeit versuchte man mit solchen Krücken den nicht-vorhandenen/sehr-sehr-teuren Speicherbedarf etwas zu minimieren.
Rechenzeit kostete nichts, ein paar 100 ms mehr spielten meist keine Rolle, die paar zeitkritischen Sachen wurden dann noch separat entsprechend bearbeitet.
 
Ob ich jetzt 80 einzelne register anlege, oder ein Array benutze, was auch 80 register belegt, macht für mich keinen unterschied.
Ich vermute, dass das noch aus Sympass Zeiten stammt.

PS. Du meinst die Stackgröße oder? Wäre zumindest bei der Jetter Steuerung (glaub war ne 242) wo ich das her hab, zumindest kein Problem mehr gewesen.
 
Zuletzt bearbeitet:
Weil ich das gerade sehe ... wann wird der Unfug, den Typ der Variable voranzustellen endlich verboten.
Hoffentlich nie! Jeder darf sich selbst für oder gegen die Enthaltsamkeit entscheiden bzw. sich an FirmenStandards halten.
Im Rahmen dieses Forums erweist es sich immer wieder als sinnvoll, insbesondere temporär und statisch klar zu unterscheiden.

Die Silbe "Temp" muss auch nicht unbedingt auf eine temporäre Variable hinweisen.
Im hiesigen Beispiel und im Zusammenhang mit Öl könnte es auch die Abkürzung für Temperatur sein?
 
Hoffentlich nie! Jeder darf sich selbst für oder gegen die Enthaltsamkeit entscheiden bzw. sich an FirmenStandards halten.
Im Rahmen dieses Forums erweist es sich immer wieder als sinnvoll, insbesondere temporär und statisch klar zu unterscheiden.

Die Silbe "Temp" muss auch nicht unbedingt auf eine temporäre Variable hinweisen.
Im hiesigen Beispiel und im Zusammenhang mit Öl könnte es auch die Abkürzung für Temperatur sein?
Das Voranstellen des Variablentyps ist weder bei TIA noch bei Codesys notwendig.
Ich habs auch viele Jahre gemacht, aber in der Zwischenzeit habe ich mir es abgewöhnt.
Wenn man Autovervollständigung nutzt, dann ist es praktischer ohne Voranstellen.
Zu Kennzeichnung von Temp-Variablen:
tmp ist sinnvoller als temp. Dann gibts nämlich keinen Ärger mit der Temperatur.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Coole Sache. Da braucht man gar nicht mehr über IN oder Out zu gehen. Alle Variablen im Stat bereich deklarieren und von extern drauf zugreifen. wird ja in der Querverweisliste nachgeführt. :)
Ich mach das so.
Aber die Querverweise zeigen in 1 Richtung auf das innere vom FB. Und in die andere Richtung nicht auf die verwendete idb Variable.
Also bei mir. TIA V16 getest.
 
Heute mal Siemens. Ich wollte mir mal ein Codebeispiel von Siemens anschauen wie man den PN/Mbus Link verwendet.
1680090441830.png
Also mal abgesehen davon dass hier n Haufen Merker im Mischmasch mit Lokalvariablen verwendet werden. in FBs die Bausteine als Einzelinstanzen aufgerufen werden. Ordner? REGION? Kein Begriff für die Siemensianer?
Sprechen Die, welche die Styleguides bei Siemens schreiben, mit denen die Programmbeispiele aufbauen?
Ich mein, man könnte doch gerade bei den Beispielen mit gutem Beispiel für saubere Aufbauten und Konsequenz vorangehen?!
Siemens Beispielprogramm
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Warnungen gibt es es auch gratis dazu
Vor allem so richtig unnötige, mit geringstem Aufwand eliminierbare. Explizite Konvertierungen sind das. int_to_real müsste nur ein DINT_TO_REAL sein. die einzelne das ist ne implizite Konvertierung die man halt ausformulieren müsste.
Also nichts was irgendwie mehrere Stunden Arbeit verursacht hätte wie in nem Panel oder so.
warum sie als Zwischenspeicher überhaupt ein DINT nehmen wenn sie eh mit INTs arbeiten, wissen nur die Götter in Türkis.
 
Heute: wie kopiere ich identische Arrays ineinander?
"DB_AL-WMV".P1.sLD[1] := #BinCodeBel[1];
"DB_AL-WMV".P1.sLD[2] := #BinCodeBel[2];
"DB_AL-WMV".P1.sLD[3] := #BinCodeBel[3];
"DB_AL-WMV".P1.sLD[4] := #BinCodeBel[4];
"DB_AL-WMV".P1.sLD[5] := #BinCodeBel[5];
"DB_AL-WMV".P1.sLD[6] := #BinCodeBel[6];
"DB_AL-WMV".P1.sLD[7] := #BinCodeBel[7];
"DB_AL-WMV".P1.sLD[8] := #BinCodeBel[8];
"DB_AL-WMV".P1.sLD[9] := #BinCodeBel[9];
"DB_AL-WMV".P1.sLD[10] := #BinCodeBel[10];
"DB_AL-WMV".P1.sLD[11] := #BinCodeBel[11];
"DB_AL-WMV".P1.sLD[12] := #BinCodeBel[12];
"DB_AL-WMV".P1.sLD[13] := #BinCodeBel[13];
"DB_AL-WMV".P1.sLD[14] := #BinCodeBel[14];
"DB_AL-WMV".P1.sLD[15] := #BinCodeBel[15];
"DB_AL-WMV".P1.sLD[16] := #BinCodeBel[16];
"DB_AL-WMV".P1.sLD[17] := #BinCodeBel[17];
"DB_AL-WMV".P1.sLD[18] := #BinCodeBel[18];
"DB_AL-WMV".P1.sLD[19] := #BinCodeBel[19];

AAAAaaAAAaAAaAaaaaAAAAAAAAaAAaaaAaAaaAaA..............(╯°□°)╯︵ ┻━┻
 
Zurück
Oben