WINCC 7.0 Eigenschaft eines E/A-Feldes mit C dynamisieren

sailor

Level-1
Beiträge
641
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie kann man mit einen C-Script die Eigenschaft "Hintergrundfarbe" eines E/A-Feldes dynamisieren?

Aktueller Stand:

#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetBackColor(lpszPictureName,lpszObjectName,CO_RED); //Return-Type: BOOL
return 0;
}


Leider blitzt der Hintergrung nur regelmäßig in der Farbe.

Ich habe als Trigger den Bildzyklus eingestellt.
Bei Standartzyklus kommt die Warnung für die Zyklusbelastung.
Warum ist standartmäßig kein "return 0" angelegt?
Was bedeutet eigentlich die Variable _main im Header?
Was mache ich falsch?

Es grüßt

Sailor
 
Woran hast du dein C-Skript denn angekoppelt?

Wenn es an der Eigenschaft "Hintergrundfarbe" des EA Feldes hängt, muss der Rückgabewert der Funktion der Farbwert als RGB sein.
Am einfachsten ist es für den Anfang, eine Basis-Animation über den Dynamik-Dialog anzulegen, und dann die Dynamik auf C-Aktion zu ändern. Der Dynamik-Dialog wird dann mehr oder weniger in ein C-Skript konvertiert. Zumindest hat man dann schonmal die Farbwerte, und der Variablentrigger wird auch passend gesetzt.

Damit die Animation funktioniert muss in der Darstellung das globale Farbschema deaktiviert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
soweit wäre ich jetzt:

#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

#define TAG_1 ".Messwert"
#define maxmax ".Alarm_maxmax"
#define max ".Alarm_max"
#define min ".Alarm_min"

static double limitValue[3] = {maxmax,max,min};
static long value[4] = {14342874,65280,230,14342874};
return value[Check_LimitsD (GetTagDouble (TAG_1),4, &limitValue[0])];
}

Ich arbeite mit einen Bildfenster mit TagPrefix. Ich bekomme beim Syntaxcheck die Warnung "different levels of indirection"

Ich will also in Abhänigkeit von Variablen (Alarmgrenzen) verschiedene Hintergrundfarben haben. Vergleich ist ".Messwert"

Kanns erst morgen testen. Ist das trotzdem ok? Was bedeutet die Warnung?


Gruß
Sailor
 
Nein, das ist nicht ganz richtig. Du musst ja erstmal die Variablenwerte anhand des Tagnamens mit der passenden GetTag... Funktion einlesen.

Prinzipiell so in der Art
Code:
// WINCC:TAGNAME_SECTION_START
// next TagID : 2
#define TAG_wert ".Messwert"
#define TAG_maxmax ".Alarm_maxmax"
#define TAG_max ".Alarm_max"
#define TAG_min ".Alarm_min"
// WINCC:TAGNAME_SECTION_END

DWORD farbwert = 0;  // hier default Wert einsetzen, 0 wäre schwarz
float wert, maxmax, max, min;

// Variablenwerte einlesen
wert = GetTagFloat(TAG_wert);
maxmax = GetTagFloat(TAG_maxmax);
max = GetTagFloat(TAG_max);
min = GetTagFloat(TAG_min);


if (wert > maxmax) {
  farbwert = der wert für maxmax;
} else if (wert > max) {
.
.
.


return farbwert;

Musst dir nur die passenden Farbwerte heraussuchen.
 
Zurück
Oben