Detailinformation zu den Rezepten

Für die Rezepte stehen zwei interne Datenpunkttypen zur Verfügung. Neue Rezepttypen werden als Datenpunkt vom Typ _Rct angelegt. Neue Rezepte werden als Datenpunkt des Datenpunkttyps _Rcp angelegt. Die Bedeutung der Datenpunktelemente entnehmen Sie den zwei folgenden Tabellen:

Datenpunkttyp _Rct

Element Datentyp Bedeutung
recipeType string Name des Rezepttyps
description langString Beschreibung des Rezepttyps
lastActivated time Zeitpunkt der letzten Aktivierung
lastActivatedOfThisType string Letztes Rezept dieses Typs, das aktiviert wurde
lastModified time Zeitpunkt der letzten Bearbeitung
valid bool Status des Rezepttyps
elements dyn_string Die zugehörigen Datenpunktelemente
elementTypes dyn_string Datentypen der DPEs
elementUnits dyn_int Einheit der Datenpunktelemente
elementIndex dyn_int Index der Elemente für Sortierung nach Reihenfolge der Zuordnung
recipes dyn_string Alle Rezepte, die zu einen Typ gehören
lastActivatedUser string Benutzer der das Rezept aktiviert hast

Datenpunkttyp _Rcp

Element Datentyp Bedeutung
recipeType string Name des zugehörigen Rezepttyps
author string Benutzername des Rezepterstellers
description langString Beschreibung des Rezeptes
lastUsage time Zeitpunkt der letzten Aktivierung
lastModified time Zeitpunkt der letzten Bearbeitung
valid bool Status des Rezeptes
elementValues dyn_string Werte, die auf Datenpunktelemente übertragen werden sollen.
user string aktueller Benutzer

CTRL-Funktionen

Die Verwendung der Rezept-Funktionalitäten muss nicht zwingend mit den mitgelieferten Panels erfolgen. Alle wesentlichen Operationen stehen als CTRL-Funktionen zur Verfügung und können auch in selbst gestalteten Panels verwendet werden. Alle CTRL-Funktionen sind in einer Library mit dem Namen rcp.ctc zusammengefasst.

Folgende Tabelle zeigt diese CTRL-Funktionen in der Reihenfolge, wie sie sinnvollerweise eingesetzt werden:

Funktion + Syntax Beschreibung
bool rcpCheckLicence() Prüft die Existenz der Lizenz
void rcp_createRecipeType(string typname, int &err)

Damit wird ein Rezepttyp angelegt

Parameter:

string typname = Name des Datenpunkttyps

int &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

0 OK

-1 Common error

-2 DP exists

-3 illegal characters

-4 Permission NOK

void rcp_changeRecipeType(string typename, dyn_int element_index, dyn_string elements_new, dyn_string comment, string &err)

Speichert alle Rezepttypdaten

Parameter:

string typename = Name des Datenpunkttyps

dyn_int element_index = Index der Datenpunktelemente

dyn_string elements_new = neue Datenpunktelemente

dyn_string comment = Kommentar für den Rezepttyp

string &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

"error_dpe_doesnotexist"

"error_invalid_type"

"error_address_conflict"

"error_mp_"

void rcp_checkRecipeType(string typename, dyn_dyn_string &err)

Prüft den Rezepttyp

string typename = Name des Rezepttyps

dyn_dyn_string &err = Möglicher Fehler, der zurückgegeben wird. Mögliche Fehlercodes:

""error_dpe_doesnotexist"

"error_invalid_type"

"error_address_conflict"

"error_mp_"

void rcp_checkDPE(string dpe, string &errorMsg)

Prüft das Datenpunktelement

string dpe = Das Datenpunktelement

string &errorMsg = Möglicher Fehler, der zurückgegeben wird. Mögliche Fehlercodes:

""error_dpe_doesnotexist"

"error_invalid_type"

"error_address_conflict"

"error_mp_"

void rcp_createRecipe(string recipename, string typename, int &err)

Legt ein Rezept an

string recipename = Der Name des zu erstellenden Rezeptes

string typename = Der Typname des Rezeptes

int &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

0 OK

-1 Could not be created

-2 Type does not exist

-4 Permission NOK

void rcp_checkRecipe(string rcp, string &err)

Prüft das Rezept auf seine Gültigkeit

string rcp = Name des zu prüfenden Rezeptes

string &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

0 OK

-1 rct invalid

-2 Value invalid

-3 Value empty

void rcp_changeRecipe(string rcp, dyn_string comment, dyn_anytype ds_elementValues, string &err)

Speichert alle Rezeptdaten

string rcp = Name des Rezeptes, das geändert werden soll

dyn_string comment = Das neue Kommentar

dyn_anytype ds_elementValues = Neue DPE-Werte

string &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

0 OK

-1 rct invalid

-2 Value invalid

-3 rcp check NOK

-4 Permission NOK

void rcp_activateRecipe(string recipeName, string rtc, string &err)

Überträgt die Sollwerte des Rezeptes auf die DPEs

string recipeName = Name des Rezeptes

string rtc = Rezepttyp

string &err = Möglicher Fehler, der zurückgegeben wird.

Mögliche Fehlercodes:

1 rct invalid

-2 rcp invalid

-3 no of rcp != no of values

-4 Permission NOK

void rcp_readRecipeTypeFromFile(string filenameString, bool overwrite, string &err)

Liest Rezepttypen aus einer ASCII Datei.

Mögliche Fehlercodes:

0 OK

-1 common file error

void rcp_readRecipesFromFile(string filenameString, string &err, bool overwrite)

Zum Einlesen von Rezepten aus einer ASCII Datei in WinCC OA .

Mögliche Fehlercodes:

0 OK

-1 File Error

-2 DP already exists

void rcp_writeRecipeTypeToFile(string recipeType, bool overwrite, bool all, string fileNameString, string &err)

Schreibt Rezepttypen in ASCII Datei.

Mögliche Fehlercodes:

0 OK

-1 File error

-2 File exists

void rcp_writeRecipeToFile(dyn_string recipe, bool overwrite , bool all, string fileNameString, string &err)

Speichert Rezepte eines ausgewählten Rezepttyps in eine ASCII Datei.

Possible error codes:

0 OK

-1 File Error

int rcp_deleteRecipe(string recipename)

Löscht das angegebene Rezept

string recipename = Rezeptname

Mögliche Fehlercodes:

-1 dpNotExists

void rcp_deleteRecipeType(string recipeType)

Löscht den angegebenen Rezepttyp

string recipeType = Rezepttyp.

void rcp_getAllRecipes(string recipeType, dyn_string &recipeNames)

Liefert alle zu einem Typ gehörenden Rezepte in einem dynString zurück. Falls der Typ nicht existiert, wird auch nichts zurückgegeben.

string recipeType = der Rezepttyp

&recipeNames = zurückgelieferte Rezeptnamen.

void rcp_getAllRecipeTypes(dyn_string &recipeTypes)

Liefert alle bestehenden Rezepttypen in einem dynString zurück.

dyn_string &recipeType = zurückgelieferte Rezepttypen.

BEISPIEL

Im Folgenden finden Sie ein Beispiel für die Rezepte-Funktionen. Beachten Sie, dass für das Beispiel der verwendete Datenpunkttyp und Datenpunkt existieren müssen.

main()
{ 
  /* entsprechende DPs wie 'alu' müssen bereits existieren bzw. an richtiger Stelle angelegt werden um für die Rezepte verwendet werden zu können */
  int err; 
  string errMsg; 
  dyn_dyn_string dserrMsg; 
  dyn_int element_index; 
  dyn_string elements_new;
  dyn_string comment;
  dyn_anytype ds_elementValues;
  DebugN("Lizenzprüfung: ",rcpCheckLicence());
  if(!dpExists("Metallverarbeitung_Alu")) 
  {
    rcp_createRecipeType("Metallverarbeitung_Alu",err); 
    DebugN("neuer Rezepttyp 'Metallverarbeitung_Alu' erstellt: ",err); 
  }
  element_index[1] = 1; element_index[2] = 2; 
  element_index[3] = 3;
  elements_new[1] = "alu.soll.state:_original.._value";
  elements_new[2] = "alu.soll.val:_original.._value";
  elements_new[3] = "alu.soll.cmd:_original.._value";
  comment[1] = "Aluverarbeitung";
  rcp_changeRecipeType("Metallverarbeitung_Alu",element_index,elements_new,comment,errMsg); 
  DebugN("Rezepttypdaten 'Metallverarbeitung_Alu' gespeichert: ",errMsg);
  rcp_checkRecipeType("Metallverarbeitung_Alu",dserrMsg);
  DebugN("Rezepttyp 'Metallverarbeitung Alu' geprüft: ",dserrMsg);
  rcp_createRecipe("Alu","Metallverarbeitung_Alu",err); 
  DebugN("Rezept 'Alu' erstellt: ",err);
  ds_elementValues[1] = 222;
  ds_elementValues[2] = 22.222; 
  ds_elementValues[3] = 1;
  rcp_changeRecipe("Alu",makeDynString("Alu"),ds_elementValues,errMsg);
  DebugN("Rezeptdaten gespeichert: ",errMsg);
  rcp_activateRecipe("Alu","Metallverarbeitung_Alu",errMsg);
  DebugN("Rezept aktiviert: ",errMsg); 
  }