Persistente Daten

In diesem Abschnitt wird beschrieben, wie man Daten über mehrere Skriptdurchläufe persistent abspeichert.

Um persistente Daten zu speichern gibt es in Kalibriware drei Möglichkeiten, welche alle über eine gemeinsame Basisklasse abgebildet werden:

Diese hat eine Schnittstelle wie folgt:

interface PersistentStorageEngine {
  async get(key: string, namespace = "script.ini"): Promise<string | number | boolean>;
  async set(key: string, value: string | number | boolean, namespace = "script.ini"): Promise<void>;
}

Über die Funktion set kann ein Wert überschrieben werden, dabei kann ein namespace zur Gruppierung und Organisation von Werten benutzt werden. Standardmäßig ist namespace auf script.ini gesetzt, um Kompatibilität zur alten Script-Engine zu gewährleisten.

Über die Funktion get kann ein Wert abgefragt werden, namespace gilt ebenso wie bei set.

Hinweis: beide Funktionen sind asynchron, müssen also mit await benutzt werden.

Datenspeicherung

Es gibt innerhalb von Kalibriware drei sog. Scopes:

  • Messplatz, dieser wird implizit für den Messplatz verfügbar gemacht
  • Standard, dieser ist innerhalb eines Standard-Treibers verfügbar und kann nur dort benutzt werden
  • Skript, dieser ist innerhalb von Kalibrierskripten verfügbar und ist potentiell über mehrere Messplätze teilbar.

Die Daten werden in der Backend-Datenbank gespeichert und von dort wieder abgerufen.

Benutzung

Die drei Scopes werden über verschiedene Klassen innerhalb der Dependency Injection abgebildet:

  • Messplatz: WorkplaceStorage
  • Standard: CalibratorStorage
  • Skript: ScriptStorage

Ein Beispiel könnte so aussehen:

@Injectable()
export class ScriptStorageExample extends Script {

  // ScriptStorage anfordern
  constructor(private storage: ScriptStorage, private steps: StepsService) {

  }

  public Run() {
    this.steps.Add("Speicher-Parameter", async () => {
      const parameter = await this.storage.get('parameter') as number;  
      parameter += 1;
      await this.storage.set('parameter', parameter);
    })
  }
}