Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: WinCC Explorer Dynamisierung einer Leitung durch C-Aktion

  1. #1
    Registriert seit
    04.08.2014
    Ort
    Rödermark
    Beiträge
    20
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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.
    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;
    }
    Zitieren Zitieren WinCC Explorer Dynamisierung einer Leitung durch C-Aktion  

  2. #2
    Registriert seit
    20.01.2009
    Beiträge
    190
    Danke
    32
    Erhielt 15 Danke für 14 Beiträge

    Standard

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

    probiers mal mit
    "return CO_DKGRAY;"

  3. Folgender Benutzer sagt Danke zu hub für den nützlichen Beitrag:

    Redone (14.04.2015)

  4. #3
    Avatar von Redone
    Redone ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2014
    Ort
    Rödermark
    Beiträge
    20
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    und was ist CO_DKGRAY;
    hab ich es gerade probiert, leider auch nicht geklappt !

  5. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.337
    Danke
    448
    Erhielt 688 Danke für 513 Beiträge

    Standard

    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...42395?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;
    }
    Geändert von RONIN (14.04.2015 um 18:56 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  6. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Redone (14.04.2015)

  7. #5
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.337
    Danke
    448
    Erhielt 688 Danke für 513 Beiträge

    Standard

    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.
    Geändert von RONIN (14.04.2015 um 18:57 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  8. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Redone (14.04.2015)

  9. #6
    Registriert seit
    20.01.2009
    Beiträge
    190
    Danke
    32
    Erhielt 15 Danke für 14 Beiträge

    Standard

    Zitat Zitat von Redone Beitrag anzeigen
    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)

  10. Folgender Benutzer sagt Danke zu hub für den nützlichen Beitrag:

    RONIN (15.04.2015)

  11. #7
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.337
    Danke
    448
    Erhielt 688 Danke für 513 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @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...
    Geändert von RONIN (15.04.2015 um 07:35 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

Ähnliche Themen

  1. Step7 Projekt durch Explorer kopieren defekt
    Von rheumakay im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.09.2012, 18:15
  2. verschiedene Spannungen in einer Leitung
    Von mitchih im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 34
    Letzter Beitrag: 18.11.2011, 09:54
  3. Globale Variable in einer Aktion?
    Von Phase8421 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.06.2008, 15:00
  4. Antworten: 3
    Letzter Beitrag: 11.09.2005, 09:48
  5. Antworten: 1
    Letzter Beitrag: 01.06.2005, 14:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •