Global Script C - Aktion funktioniert nicht

tillmanott

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

Ich versuche gerade mich ein wenig in die C-Programmierung in WinCC (Version 7.0.3, ausschließlich mit internen Variablen) einzuarbeiten. Leider klappt das, was ich mir vorgestellt habe, nicht im Ansatz und ich habe mittlerweile keine Ahnung mehr, wo mein(e) Fehler stecken könnte. Vielleicht kann mir hier ja jemand weiterhelfen ;)

Mein Plan:

HMI.jpg
Ich möchte, dass sich der Kran in Abhängigkeit zu zwei Variablen bewegt. Die Bewegung der Laufkatze in X-Richtung funktioniert problemlos, allerdings währe es ja schön, wenn der Haken der Katze mit dem im Bild zu sehenden Versatz folgt. Benutze ich für den Haken die selbe Variable wie für die Katze, würde dieser sich nicht an der richtigen Position befinden, sondern unmittelbar unter dem Glas, an der linken Kante. Dieses Problem möchte ich gerne durch eine, in ANSI-C geschriebene Aktion lösen. der Code, den ich dafür geschrieben habe, sieht folgendermaßen aus:

Code:
#include "apdefap.h"

int gscAction( void )
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END


// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
WORD alt;
WORD neu;
BOOL a;



alt=GetTagWord("KranpositionX_1");    //Return-Type: WORD 
neu=alt+60;
a=SetTagWord("HakenpositionX_1",neu);    //Return-Type: BOOL 


return 0; 
}

Es soll der aktuelle X-Wert abgefragt und anschließend mit 50 addiert werden. Dann soll der Wert in eine neue Variable gespeichert werden, die im Anschluss für die Animation des Hakens genutzt werden kann. Also alles eigentlich ganz einfach, klappt aber nicht... :|

Die Aktion wird zyklisch im 250ms-Takt aufgerufen. An der Variable, die beschreiben werden soll, ändert sich nichts.

Muss der Code als globale oder lokale Aktion angelegt werden? (Ich habe beides probiert, allerdings hat das Programm wohl noch zusätzliche Fehler, weshalb keine der Möglichkeiten funktionierte)

Muss im auskommentierten Teil (Cross Reference) ein #define stehen oder ist dieser Teil optional?


Das Projekt dient nur zum einarbeiten in die Software, ein Workaround, wie das Problem auf eine andere Art und Weise gelöst werden könnte hilft mir deshalb nicht weiter.



Gruß

Tillman

Edit:
Lösung: Nach einem Neustart von WinCC funktioniert alles problemlos... Danke Siemens :?
 
Zuletzt bearbeitet:
Hallo,

in Gedanken ohne WinCC vor mir:
ich würde die C-Aktion am Haken, an der Eigenschaft X-Position anbringen.
Hier könnte man auch den dynamik Dialog verwenden. Einfach 'Variable_für_X + 50' reinschreiben, Trigger auf die Variable.

Eigentlich sollte dein C-Skript auch funktionieren.
Hast du mal geschaut ob in den Anlaufeinstellungen der Haken bei "Global-Skript-Runtime" (oder wie das heißt) gesetzt ist?
Ohne diesen Haken laufen keine globalen Skripte...

Grüße
 
Zurück
Oben