WinCC Explorer Dynamisierung einer Leitung durch C-Aktion

Redone

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Halloooo:),
ich möchte, dass die Farbe einer Leitung sich ändert wenn ich ein Bit gesetzt ist,
Wenn ich es über Dynamik-Dialog durch bit oder Bool mache funktioniert,aber duch C-Script funktioniert es nicht.
ich denke das meine Simulation ladet nicht mein die Skripte auf.
kann mir jemanden bitte Inputs geben, woran das liegen kann.:ROFLMAO:ROFLMAO:ROFLMAO:
hier mein Code
Code:
#include "apdefap.h"
 long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
if(GetTagBit("TKL NEU/7V2.04 Ansteuerung "))
     return GetTagDWord("CIP");


return Dunkelgrau;
}
 
"return Dunkelgrau;"
müßte beim Übersetzen einen Fehler bringen

probiers mal mit
"return CO_DKGRAY;"
 
Um die Farbcodes für die RBG-Farben zu bekommen kannst du folgende Funktion verwenden:
Code:
int CreateRGBColor(DWORD dwRed, DWORD dwGreen,DWORD dwBlue, DWORD dwTrans)
{
    DWORD dwColor;


    // Calculate the color-value
    dwColor =    pow(2,24)*dwTrans + pow(2,16)*dwBlue + pow(2,8)*dwGreen + pow(2,0)*dwRed;
return dwColor;
}
Einfach als separate Projektfunktion erstellen und dann in deinem Skript als return = CreateRGBColor( 10,20,30,0) aufrufen.

Siehe Beispiel:
https://support.industry.siemens.com/cs/document/11842395?lc=de-WW

An eine Farbe aus der zentralen Farbpalette des Projekts kommst du mit folgender Funktion:
Code:
long GetPaletteColor(int ColorIndex)
{
    if (ColorIndex > 199) ColorIndex = 199;
    return pow(2,31) + ColorIndex;
}
 
Zuletzt bearbeitet:
Achja noch was. Du solltest in C-Skripten die Nomenklatur für die Verwendung von WinCC-Tags einhalten.
Code:
#include "apdefap.h"
 long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
#define TAG_0 "TKL NEU/7V2.04 Ansteuerung"
#define TAG_CIP "CIP"
// WINCC:TAGNAME_SECTION_END
//Bei dem #define kannst du dir einen Namen aussuchen....

if(GetTagBit( TAG_0 ))
     return GetTagDWord(TAG_CIP);
Dann scheint die Verwendung der Variablen auch in den Querverweisen auf. Man hat sonst keine Möglichkeit die Verwendungsstelle von Tags zu finden die z.B.: gelöscht wurden. Und, noch wichtiger, man kann die Funktion "umverdrahten" verwenden.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
und was ist CO_DKGRAY;
hab ich es gerade probiert, leider auch nicht geklappt !

Geht es denn jetzt?

Wenn nicht, wird dein problem in der Variable "CIP" liegen.

Probier erst mal ohne Variable.
z.B.:
if(GetTagBit("TKL NEU/7V2.04 Ansteuerung "))
return CO_GREEN;
return CO_DKGRAY;

Wenn dies geht, dann den Farbcode nach Vorschlag von RONIN zusammensetzen
oder vordefinierter Farbcodes verwenden.
Da gibt es z.B. CO_BLACK, CO_WHITE, CO_RED, CO_GREEN, CO_BLUE, CO_YELLOW und noch etliche.
(Suche benutzen)

Eventuell muss auch das globale Farbschema ausgeschaltet werden.
(Bin mir aber nicht sicher)
 
@hub: Danke, wusste gar nicht dass das mit den Farbcodes so geht.

@Redone: return CO_DKGREY funktioniert bei mir, scheint also, wie von hub vermutet, irgendwo anderst zu hapern.
Ein Tipp am Rande wenn du dir mit dem C am Anfang schwer tust...
Man kann zuerst als Basis eine Dynamik mittels Dynamikdialog erstellen und dann mit Rechtsklick auf den Roten Blitz -> C-Aktion in eine C-Aktion umwandeln.
Das kannst du mal as Basis zum testen verwenden.

z.B. wird folgender Dynamikdialog...
WinCC_DynDialog.png

... in folgendes umgesetzt.
Code:
#include "apdefap.h"
 long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 2
#define TAG_1 "Test"
// WINCC:TAGNAME_SECTION_END


// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END


if ((unsigned long)GetTagDouble (TAG_1))
  return 65280;
else
  return 8421504;
}
Wobei das if ((unsigned long)GetTagDouble (TAG_1)) zur Abfrage eines Bits übertrieben ist, aber da schert sich WinCC nicht drum. GetTagBit würde auch reichen...
 
Zuletzt bearbeitet:
Zurück
Oben