# allgem. C Script Frage mit "define" deklarierten Variablen



## dellamorte-dellamore (12 Februar 2006)

Ich möchte ein C Scipt welches ich bei vielen maschinen brauche so universell wie möglich machen.
Dafür möchte ich die Variablen über "#define" definieren, damit ich bei den anderen Maschinen nur den obigen Teil Define-Abschitt anpassen muss.

Hier mal ein Beispiel meines Vorhabens:


```
#include "apdefap.h"
int gscAction( void )
{
// WINCC:TAGNAME_SECTION_START
#define stoerung_1 "Maschine_1_stoerung_1";
#define stoerung_2 "Maschine_1_stoerung_2";
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
 
//Typendefinition
short int  wert_kurze_dose;
short int  wert_hauptantrieb;
unsigned int satzanwahl;

// Zuweisung
wert_kurze_dose=GetTagWord("stoerung_1");   //hier soll der Wert aus der obig definierten Variablen gelesen werden  
wert_hauptantrieb=GetTagWord("stoerung_2");   //hier soll der Wert aus der obig definierten Variablen gelesen werden  

if (satzanwahl==12)
{
wert_kurze_dose++;
SetTagWord("stoerung_1",wert_kurze_dose); //hier soll der Wert in die obig definierten Variablen geschrieben werden  
}
if (satzanwahl==14)
{
wert_hauptantrieb++;
SetTagWord("stoerung_2",wert_hauptantrieb); //hier soll der Wert in die obig definierten Variablen geschrieben werden  
}
 
return 0; 
}
```
 
Leider funktioniert das so nicht.
Vielleicht kann mir jemand den Fehler zeigen!

Merci!


----------



## sps-concept (12 Februar 2006)

Hallo,

hab zur Zeit kein WinCC auf dem Rechner. Aber du musst in der TAG-Section die Namen deklarieren und die Variablen zuordnen. Dasnn arbeitest du nur noch mit den Namen.

Erstelle einfach mal etwas mit dem Dynamikdialog und öffne es dann als C-Aktion. Dann siehste was ich gemeint hab.

MfG
André Räppel


----------



## Unregistriert (12 Februar 2006)

Danke,

muss ich dann die oben deklarierte Variable auch in "" schreiben
also so:


#define stoerung_1 "Maschine_1_stoerung_1";
.
.
.
wert_kurze_dose=GetTagWord("stoerung_1");     //?????????????
.
.
.


----------



## HeizDuese (12 Februar 2006)

Nein, das scheint auch der Fehler zu sein.  Das #define arbeitet wie ein Makro.  Die Hochkommas sollte meines Erachtens wegbleiben, z.B.:  
	
	



```
wert_hauptantrieb=GetTagWord(stoerung_2);
```
sonst wird stoerung_2 als Variable gedeutet und das ist sie ja nicht.

Der Compiler macht darus:


```
wert_hauptantrieb=GetTagWord("Maschine_1_stoerung_2");
```


----------



## dellamorte-dellamore (12 Februar 2006)

Das probiere ich morgen mal aus!

Danke!


... noch einen schönen Sonntag


----------



## Zottel (12 Februar 2006)

HeizDuese schrieb:
			
		

> Der Compiler macht darus:
> 
> 
> ```
> ...


Er macht daraus:

```
wert_hauptantrieb=GetTagWord("Maschine_1_stoerung_2";);[/code
Am Ende der #define-Zeile sollte kein Semikolon stehen:-D
```


----------



## HeizDuese (12 Februar 2006)

Durch Die Smiles etwas schwer zu lesen, Zottel meint:


```
wert_hauptantrieb=GetTagWord("Maschine_1_stoerung_2[B]";[/B]);
```
 uppss.... gar nicht gesehen. Da hast Du 100% Recht ! Das gehört da auch nicht hin!


----------



## Zottel (12 Februar 2006)

Er macht daraus:

```
wert_hauptantrieb=GetTagWord("Maschine_1_stoerung_2" ; ) ;
```
Am Ende der #define-Zeile sollte kein Semikolon stehen  
Sorry fürs doppelt posten, aber irgendwie kann ich meinen Beitrag nicht korrigieren...


----------



## argv_user (13 Februar 2006)

dellamorte-dellamore schrieb:
			
		

> Ich möchte ein C Scipt welches ich bei vielen maschinen brauche so universell wie möglich machen.
> Dafür möchte ich die Variablen über "#define" definieren, damit ich bei den anderen Maschinen nur den obigen Teil Define-Abschitt anpassen muss.
> 
> Hier mal ein Beispiel meines Vorhabens:
> ...





Ich würde es mal so probieren:

#define stoerung_1 "Maschine_1_stoerung_1"
wert_kurze_dose=GetTagWord(stoerung_1);   //hier soll der Wert aus der obig definierten Variablen gelesen werden


----------



## Unregistriert (13 Februar 2006)

Ihr habt mein Problem gelöst!

Danke!


----------

