WinCC WinCC "lokale" Funktionen im Script

deathfun

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


Im Moment erledigt ein langes C-Skript (WinCC 7.0.3.5) in einem Button-Klick-Event eines Bildes eine Reihe von Aufgaben (Trends anpassen etc.) – Das klappt alles wunderbar.

Nur ist das Skript inzwischen recht unansehnlichen und enthält viel gleichen Code den man auch bequem in Funktionen packen könnte. Genau hier liegt mein Problem:


Wie erstelle ich im Button Skript Funktionen mit Parameterübergabe? Ich möchte möglichst nichts über Global Scripting machen sondern im Button Skript bleiben, es reicht wenn die Funktionen nur für diesen Button verfügbar sind.

Doch egal wie ich Funktionen anlege, ich kann diese nicht erfolgreich übersetzen.

Code:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
                    int addiere(int a, int b);   //Funktionsprototype
 
                    int i = 0;
                    i = addiere(5,5);
 
                    int addiere(int a, int b)    // Funktion a+b
                    {
                    return a+b;
                    }
}


Egal ob ich den Prototypen und die Funktion in der Klammer lasse (<ident> expected before ‘int‘) oder die Funktion außerhalb der Klammer setze (too much functions in this module) bekomme ich Fehler.

Hat jemand den Zaunpfahl parat?
 
Die Funktion "OnClick" ist fest definiert. Da kannst du nix ändern, die Übergabe der Parameter lpszPictureName und Co. passiert ja durch WinCC.
Selbst wenn du da was einbauen könntest hasst du immer noch keinen Punkt an dem du diese Parameter befüllen könntest.

Wenn du keine Funktionen im GlobalScript definieren willst, könntest du den Button in ein Anwenderobjekt mit diversen Eigenschaften umbauen und auf diese vom Button-Skript zugreifen.
Hängt halt start davon ab welche Parameter du übergeben wilst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Funktion recht einfach ist, könntest du diese auch über den Präprozessor vereinfachen.

Für deine Addierfunktion z.B.
Code:
#define ADDIERE(a,b) (a + b)

int i = 0;
i = ADDIERE(5,5);
Die Möglichkeiten sind aber im Vergleich zu einer Funktion sehr eingeschränkt.
 
Hauptsächlich werden zB. Trendfenster angepasst, also eine Aufgabe mit vielen sich wiederholenden Befehlen. Darf die #define Lösung den über mehrere Zeilen gehen?

Code:
SetPropChar(nameBild,nameObjekt,"TrendAdd",name);                                         
SetPropChar(nameBild,nameObjekt,"TrendRename",name);                                              
SetPropChar(nameBild,nameObjekt,"TrendLabel",name);                                       
SetPropWord(nameBild,nameObjekt,"TrendPointStyle",0);                                                           
SetPropWord(nameBild,nameObjekt,"TrendColor",Farbe[row]);                                
SetPropChar(nameBild,nameObjekt,"TrendTrendWindow","Kurvenfenster 1");      
SetPropChar(nameBild,nameObjekt,"TrendTimeAxis","Zeitachse 1");                     
SetPropChar(nameBild,nameObjekt,"TrendValueAxis",achse);                                                   
//SetPropBOOL(nameBild,nameObjekt,"TrendVisible",1);                                        
SetPropChar(nameBild,nameObjekt,"TrendTagName",variable);

Das würde ich ua. gerne in so einer Funktion während des OnClick Events mehrfach ausführen.
 
Zurück
Oben