Die Library hab ich (soweit ich mich erinnern kann) sogar noch in Automation Basic geschrieben, bin erst im Laufe des dann folgenden Projektes nach und nach auf C umgestiegen (weil's für die CNC notwendig war). Ein paar Grundgedanken zum Thema dieser Library kann ich Dir aber gerne geben:
1. Prinzip der Uploadbarkeit von Datenmodulen
Ein generelles Problem bei Datenobjekten ist, dass man diese zwar uploaden kann, ein upgeloadetes Datenobjekt aber nicht mehr verändern kann. Das Uploaden ist aber wünschenswert, um Damit Rezepturdaten usw. zu sichern.
2. Prinzip der doppelten Module (Deklaration / Datenhaltung)
Um dennoch uploaden und nachträglich die Deklaration (speziell die Kommentare) verändern zu können, ist jedes Datenobjekt doppelt am Zielsystem vorhanden. Das offline deklarierte Modul wird zwar aufs Zielsystem geladen, allerdings wird darin keine Datenhaltung vorgenommen. Für die eigentliche Datenhaltung legt die lib online eine Kopie des originalen Datenobjektes an, auf das die eigentlich lese- und schreibzugriffe erfolgen - dieses Objekt kann nun zur Datensicherung hochgeladen werden
3. Funktion der Library
Die Library enthält im wesentlichen 3 Eingangsparameter
- Name des Deklarations-Datenobjektes
- Name des Datenhaltungs-Datenobjektes (welches dann online erzeugt wird)
- Zeiger auf den Speicherbereich, über den dann das Anwenderprogramm zugreift
zusätzlich gibt es noch eine Reihe weitere Parameter zum lesen/schreiben/neu initialisieren/Fehlerauswertung usw.
Beim Hochlauf der CPU läuft im wesentliches folgendes Schema ab:
- Prüfung, ob Deklarations-Datenobjekt vorhanden
- Prüfung, ob Datenhaltungs-Datenobjekt vorhanden (wenn nein: neu erzeugen und Daten aus Deklarations-Datenobjekt in Datenhaltungs-Objekt kopieren)
- alle Daten aus Datenhaltungs-Objekt in den Bereich im RAM kopieren, der über einen Zeiger übergeben wurde (ob dies nun eine Datenstruktur oder ein freier Bereich im DRAM ist obliegt dem Programmierer)
Der Zugriff des Anwenderprogramms erfolgt ganz normal per Datenstruktur oder Zeiger - mit einem boolschen lib-Eingangsparameter wird das Schreiben auf das Datenobjekt angestoßen. Zusätzlich hab ich noch Mechanismen eingebaut, die mir erlauben, nur Teile des Datenbereiches aufs Datenobjekt zu schreiben bzw. Teile vom Datenobjekt wieder nachzuladen.
Noch ein sehr wichtiger Punkt war mir die Möglichkeit, Datenobjekte im nachhinein zu vergrößeren/verkleinern (weil z.B. statt 200 plötzlich 500 Rezepte gebraucht werden). Dies wird ebenfalls beim Hochlauf der CPU überprüft: unterscheiden sich die Längen des Deklarations-Datenobjektes und des Datenhaltungs-Objektes, wird zuerst online eine Sicherung des Datenhaltungs-Objektes angelegt (um nicht allzu kreativ bei der Namensgebung sein zu müssen, kann man den Umstand ausnutzen, dass online Objektnamen eine Länge von 10 Zeichen haben dürfen), anschließend wird das ursprüngliche Datenhaltungs-Objekt gelöscht und mit der neuen Länge wieder angelegt, schlussendlich werden die zuvor gesicherten Daten wieder aufs Datenhaltungs-Objekt kopiert und die Sicherzungskopie gelöscht.
Warum der Aufwand mit dem Sicherungs-Objekt: man stelle sich vor, man kopiere die original-Daten "nur" ins RAM und während dem löschen und neu Anlagen des Datenhaltungs-Objektes fällt die Versorgungsspannung aus....
Auch bei der Variante mit Sicherheitskopie muss man sich überlegen, welche Zustände auftreten können, wenn während dem herumsichern/-kopieren die Versorgungsspannung ausfällt, und was man alles ausprogrammieren muss um dennoch immer konstistente Zustände zu erhalten.
mhm, was hab ich vergessen?
Ach ja, die lib immer in Taskklasse 8 anwenden, und bei der Programmierung darauf acht geben, dass nicht zu viele Aufrufe gleichzeitig laufen (wobei: ich habs mal auf einem APC620 mit AR106 getestet, da gabs bei ca. 35 gleichzeitig beim Hochlauf aktiven Instanzen keinerlei probleme), die größten Datenobjekte die ich damit verwaltet habe sind 96k groß - hier war es allerdings notwendig, für den Zugriff aus dem Anwenderprogramm heraus mit des lib ASMem eigene Speicherblöcke zu allokieren, bevor ich die Datenobjekt-Library anwenden konnte.
mfg Maxl
edit:
Ach ja: Zeitaufwand für die lib ca. 4-5 Tage (3 Tage 2005 fürs Grundkonzept, und nochmals 1-2 Tage letztes Jahr zum Verfeinern)