-> Hier kostenlos registrieren
Hi,
versucht euch mal folgendes Scenario vorzustellen, wie würdet ihr das vereinfachen/verbessern?!
Wir haben hier ein Altprojekt, welches ich als Referenz für ein Musterprojekt nehmen soll.
Es handelt sich um eine Anlage mit dutzenden und identischen Anlagenkomponenten (sagen wir mal Fahrzeuge dazu), deren Daten in je einem DB abgelegt sind (ca. 1Kbyte mit Status, Fehler, Aufträge, Fahrroute, Fahrziele, etc...)
Es gibt zudem dutzende FCs und FBs mit Teilfunktionen (Strategien, Auswertungen, Arithmetik, Schnittstellen/Kommunikation, etc..) die sequentiell
aufgerufen werden.
Je nach Eingangsparameter (FC:IN FahrzeugNr as INT), wird folgendermaßen gearbeitet.
Um das Ganze etwas übersichtlicher zu gestalten, hat sich ein ehemaliger Kollege die Mühe gemacht, TeilStrukturen der Fahrzeug-DBs im temporären Stack der jeweiligen FCs nachzubilden, damit er:
wenigstens mit sinnvollen Bezeichnungen der temporären Variablen arbeiten kann, anstatt mit DBX, DBW, DBB und DBD.
Allerdings, über den Querverweis findet man nichts, erst recht nicht, wenn man Doppelwortweise über den Temp.Datenstack hin-und herrangiert hat.
Mit einer symbolischen Adressierung kann man es leider in diesem Fall vergessen.
Ich habe lange überlegt und nachgeforscht, ob es eine Alternativmethode existiert, mit dem man diese Aufgabenstellung meistern und sich die Flexibilität beibehalten kann. Ich kenne nur zwei, welche mir aber auch nicht so richtig gefallen.
versucht euch mal folgendes Scenario vorzustellen, wie würdet ihr das vereinfachen/verbessern?!
Wir haben hier ein Altprojekt, welches ich als Referenz für ein Musterprojekt nehmen soll.
Es handelt sich um eine Anlage mit dutzenden und identischen Anlagenkomponenten (sagen wir mal Fahrzeuge dazu), deren Daten in je einem DB abgelegt sind (ca. 1Kbyte mit Status, Fehler, Aufträge, Fahrroute, Fahrziele, etc...)
Es gibt zudem dutzende FCs und FBs mit Teilfunktionen (Strategien, Auswertungen, Arithmetik, Schnittstellen/Kommunikation, etc..) die sequentiell
aufgerufen werden.
Je nach Eingangsparameter (FC:IN FahrzeugNr as INT), wird folgendermaßen gearbeitet.
Code:
L #Fahrzeug_Nr //Das ist der Eingansparameter
+ 100 //Die FahrzeugDBs liegen im Bereich 101-199
T #FZG_DB
AUF DB [#FZG_DB]
L DBX....
L DBW....
...
..
Code:
//Rangieren der Nutzdaten in den temp. Stack
// Ziel_Soll
L DBD 300
T LD 20
// Ziel_Routing
L DBD 304
T LD 24
...Hier kommt das eigentliche Programm...
//ZurückRangieren des temp. Stack in das entsprechende DB
// Ziel_Soll
L LD 20
T DBD 300
// Ziel_Routing
L LD 24
T DBD 304
Allerdings, über den Querverweis findet man nichts, erst recht nicht, wenn man Doppelwortweise über den Temp.Datenstack hin-und herrangiert hat.
Mit einer symbolischen Adressierung kann man es leider in diesem Fall vergessen.
Ich habe lange überlegt und nachgeforscht, ob es eine Alternativmethode existiert, mit dem man diese Aufgabenstellung meistern und sich die Flexibilität beibehalten kann. Ich kenne nur zwei, welche mir aber auch nicht so richtig gefallen.
- -Den Umweg über ein Schmier-DB. Sprich, am Anfang des jeweiligen Funktion ein Blockmove von NutzDB auf SchmierDB. Dann wird im Programm symbolisch mit den Adressen des SchmierDBs gearbeitet, um dann am Schluss wieder ein Blockmov von SchmierDB auf NutzDB zu machen.
Vorteil: Querverweis funktioniert, übersichtlicher
Nachteil: Zykluszeit und not very fashion
Die UC/CC Methode, bei der die untergeordneten FBs immer die Instansdaten des übergeordneten FBs mitbenutzen.
FB_Fahrzeug1
UC FB_FunktionA
UC FB_FunktionB
FB_Fahrzeug2
UC FB_FunktionA
UC FB_FunktionB
Vorteil: Gibt es einen?
Nachteil: Querverweis funktioniert genausowenig