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);
}