WinCC WinCC 7.3 - Performance C-Script

IoT

Level-1
Beiträge
22
Reaktionspunkte
3
Zuviel Werbung?
-> 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ß

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:
Warum denn Bildzyklus?
Solche Texte ändern sich doch "seeeehr langam", also ich würde da was in der Art von 1 Stunden Zyklus einstellen. Aber egal was für einen Zyklus du einstellst, bei einem Bildwechsel wird normalerweise immer eine aktuelle Anfrage an die SPS abgesetzt, außer Siemens hat an diesem Verhalten bei der V7.3 etwas geändert (bis V7.2 ist es so).
Ich habe noch nicht überprüft was der "Bildzyklus" auf SPS-Seite so treibt da ich diesen selber nie verwende. Evtl. verstopft er durch einen zu kleinen Zyklus die restliche Kommunikation.

Strings aus der SPS lesen sind von der Performance immer recht bescheiden. Gerade bei der voreinsgestellten 254 Byte Stringlänge nehmen da beispielsweise 10 Strings in etwa so viel Bandbreite in Anspruch wie eine komplette mittlere Anlage.
 
Code:
     //Variablennamen zusammenführen und Prozesswert auslesen
      strcat(tagname, BMK);
      strcat(tagname, Struct_Part);
      return [COLOR=#ff8c00][B]GetTagFloat(tagname);[/B][/COLOR]
Sowas ist halt immer ein bisschen ein 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?
In dem Fall nicht. Ich nehme an die Tags die du im dem Script-Teil abfragst werden im Bild sonst nirgens "statisch" verwendet oder?
Somit erfährt WinCC erst in der Laufzeit dass du diesen Tag brauchst und dieser zur Aktualisierung bei der SPS angemeldet werden muss.

Dieses Problem hat mir Thomas hier schon mal ausführlich erklärt.
http://www.sps-forum.de/hmi/68190-w...im-ersten-lesen-von-150-string-variablen.html

Aber ob das bei >10 Float-Werten schon ausreicht um die Sache langsam wirken zu lassen? Klar geht die Sache über lahme CPs, aber...
Du könntest es zumindest leicht testen im dem du die Variablen, welche in den Skripten dynamisch geholt werden, einfach mal in ein paar E/A-Felder einfügst und diese ins Bild legst.
 
Zuletzt bearbeitet:
Zurück
Oben