-> Hier kostenlos registrieren
Hallo WinCC Experten,
ich habe ein kleines WinCC Performance Problem bei dem ich nicht direkt die Ursache lokalisieren kann. Vielleicht habt Ihr eine Idee?
System: Einplatzsystem WinCC 7.3 Update 8 – nicht S7 integriert und somit kein AS-OS Engineering
Netzwerk: 5 S7-300 unterschiedlichster Art und Alters (angeschlossen über Onboard PN oder CP343) sowie eine S7-1500 (1516).
Grundsätzlich habe ich den SPSen einen Analogwertbaustein mit dem ich eine Struktur füttere. In diesem sind Alarmwerte, Steuerbits usw. sowie als String dass BMK („+47-4A5“), die SPS Adresse („EW345“) sowie eine kurze Beschreibung („Temp. Zone 1“) hinterlegt.
In WinCC habe ich diese Struktur ebenfalls angelegt und die Daten werden korrekt ausgelesen.
Nun habe ich mir in WinCC ein Anwenderobjekt gebaut in dem ich die Beschreibung sowie den Prozesswert anzeigen lasse. Idee war, dem Anwenderobjekt den Namen des BMKs zu geben (+47-4A5) und über zwei kleine Scripte automatisch den Messwert sowie die Beschreibung anzeigen zu lassen. Somit reduziert sich der Projektierungsaufwand auf ein Minimum.
Als Trigger habe ich den „Bildzyklus“ genutzt. Das Ganze Funktioniert auch (keine Meldungen in APDiag)!
Das Problem:
Befinden sich viele Objekte (>10) auf einem Bild dauert das Anzeigen der Beschreibung sowie des Messwerts sehr lange. Gefühlt würde ich sagen, dass dies nur bei den „alten“ 300er SPSen mit CP auftritt. Kann es sein, dass die Script-Engine erst „neue“ Werte aus der Steuerung abfragt? (Die CP Anbindung ist ja definitiv die Langsamste.) Eigentlich sollte dies ja nur bei den „GetTagWait“ Abfragen geschehen?
Unten ist der Code des Anwenderobjektes sowie der Projektfunktion zu finden. Vielleicht habt Ihr noch eine gute Idee?
Vorab schonmal vielen Dank.
Gruß
ich habe ein kleines WinCC Performance Problem bei dem ich nicht direkt die Ursache lokalisieren kann. Vielleicht habt Ihr eine Idee?
System: Einplatzsystem WinCC 7.3 Update 8 – nicht S7 integriert und somit kein AS-OS Engineering
Netzwerk: 5 S7-300 unterschiedlichster Art und Alters (angeschlossen über Onboard PN oder CP343) sowie eine S7-1500 (1516).
Grundsätzlich habe ich den SPSen einen Analogwertbaustein mit dem ich eine Struktur füttere. In diesem sind Alarmwerte, Steuerbits usw. sowie als String dass BMK („+47-4A5“), die SPS Adresse („EW345“) sowie eine kurze Beschreibung („Temp. Zone 1“) hinterlegt.
In WinCC habe ich diese Struktur ebenfalls angelegt und die Daten werden korrekt ausgelesen.
Nun habe ich mir in WinCC ein Anwenderobjekt gebaut in dem ich die Beschreibung sowie den Prozesswert anzeigen lasse. Idee war, dem Anwenderobjekt den Namen des BMKs zu geben (+47-4A5) und über zwei kleine Scripte automatisch den Messwert sowie die Beschreibung anzeigen zu lassen. Somit reduziert sich der Projektierungsaufwand auf ein Minimum.
Als Trigger habe ich den „Bildzyklus“ genutzt. Das Ganze Funktioniert auch (keine Meldungen in APDiag)!
Das Problem:
Befinden sich viele Objekte (>10) auf einem Bild dauert das Anzeigen der Beschreibung sowie des Messwerts sehr lange. Gefühlt würde ich sagen, dass dies nur bei den „alten“ 300er SPSen mit CP auftritt. Kann es sein, dass die Script-Engine erst „neue“ Werte aus der Steuerung abfragt? (Die CP Anbindung ist ja definitiv die Langsamste.) Eigentlich sollte dies ja nur bei den „GetTagWait“ Abfragen geschehen?
Unten ist der Code des Anwenderobjektes sowie der Projektfunktion zu finden. Vielleicht habt Ihr noch eine gute Idee?
Vorab schonmal vielen Dank.
Gruß
Code:
Script an Ausgabewert des Anwenderobjektes:
#include "apdefap.h"
double _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
return BIB_Analog_Faceplate_Wert(lpszPictureName, lpszObjectName, lpszPropertyName);
}
Code:
Globale Projektfunktion:
double BIB_Analog_Faceplate_Wert(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#define Struct_Part "._9_Prozesswert"
char* pszProp= NULL; //Temporäre Variable für die Eigenschaft "ObjectName"
char BMK[100] = '\0'; //Temporäre Variable für das BMK
char tagname[255] = '\0'; //Temporäre Variable für den Variablennamen
//Get the property Text
pszProp = lpszObjectName;
//Check if valid Pointer
if(pszProp != NULL)
{
//BMK Auslesen
strncpy(BMK, pszProp, 100);
//Variablennamen zusammenführen und Prozesswert auslesen
strcat(tagname, BMK);
strcat(tagname, Struct_Part);
return GetTagFloat(tagname);
}
return -1.0;
}
Zuletzt bearbeitet von einem Moderator: