(Banale) WinCC C-Aktions Frage

Rengel

Level-1
Beiträge
117
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute!

Ich habe da eine kleine Frage zu einer C-Aktion in WinCC habe aber leider null Ahnung von der Sprache. (Sollte ich dringend mal dran arbeiten ;) )

Auf jeden FAll möchte ich ein Symbol nur anzeigen, wenn zwei bits gesetzt sind. Also eine simple AND Funktion.

Habe aber leider keine Ahnung wie ich das in WinCC realisieren kann :(

Danke für etwas Code 8) :lol:

MfG

Rengel
 
Ich hab leider schon lange nicht mehr mit WinCC gearbeitet aber so wie ich mich erinnerkann kannst Du die Variablen im Aktionfeld verknüpfen... also bei Sichtbarkeit Var1 AND Var2 eintippen...... sollte gehen ;-)

Viel Erfolg

Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich versucht, klappt leider nicht! So einfach scheints nicht zu sein ;)

DAnn kommt es zu Fehlermeldungen wie

"Undefined Identifier" für die Variablen und zu <ident> expected before <eof>

Und leider habe ich ja überhaupt keine Ahnung was er mir damit sagen will ;) Ein Schelm wer dabei schlechtes denkt *fg*
 
Also, ich habe mich jetzt mal mit dem Visu Rechner eingeloggt ;)

Also, das ganze sieht im Moment so aus:

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

DE_30_1_ZF_0801__Start_Beladen_GS3 && DE_30_2_ZF_0801__Ende_Beladen_GS3


// 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

}

Wieso denn eine if/then Aktion? Obiges ist sicherlich völlig Falsch denke ich ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bzw. nach einer kleinen Eingebung, die aber auch nicht funktioniert...

Das then wird nicht blau hinterlegt also wohl gar nicht als Befehl erkannt...

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

if (DE_30_1_ZF_0801__Start_Beladen_GS3 && DE_30_2_ZF_0801__Ende_Beladen_GS3)

then GetVisible("Visible",lpszObjectName);	//Return-Type: BOOL 

}
 
In C brauchst du kein then.

Ich glaube, dass du eine Set Visible Anweisung brauchst, habe leider derzeit keinen WinCC Rechner, wenn du noch Hilfe brauchst, kann ich dir am Nachmittag nachsehen.

Statt "Visible" gehört außerdem eine boolscher Wert, also 0 oder 1 und statt lpszObjectName der Name deines Objektes. Füge den Befehl aus der Bibliothek ein, dann hast du ein Auswahlmenu zur Verfügung.

Wenn DE_30_1_ZF_0801__Start_Beladen_GS3 Variablen aus deiner Steuerung sind, was ich vermute, musst du sie ausserdem mit dem Befehl GetTagBit laden, da es ja keine Variablen in deinem C Script sind.

[/code]
#include "apdefap.h"
BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

if (GetTagBit(DE_30_1_ZF_0801__Start_Beladen_GS3) && GetTagBit(DE_30_2_ZF_0801__Ende_Beladen_GS3))
{
SetVisible(1, Objektname);
}
 
Also bei den Variablen handelt es sich um welche aus der Steurung, da hast du recht.

Allerdings klappt es so wie von dir geschrieben leider auch nicht.

Die Fkt. hate ich schon aus den Vorlagen nur irgendwie hat er die Gruppe nicht übernommen. So schauts jetzt bei mir aus:

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
if (GetTagBit(DE_30_1_ZF_0801__Start_Beladen_GS3) && GetTagBit(DE_30_2_ZF_0801__Ende_Beladen_GS3)) 

GetVisible(1, Gruppe10); 

}

Es wäre super Nett von dir wenn du die Zeit und Lust finden würdest das heute mittag mal an einem WinCC Rechner zu probieren :eek:)

Danke und Grüße

Rengel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, Befehl für SetVisible war falsch.

Zusätzlich gehört die Variablennamen unter ""

So müssts jetzt eigentlich gehen

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
if (GetTagBit("DE_30_1_ZF_0801__Start_Beladen_GS3") && GetTagBit("DE_30_2_ZF_0801__Ende_Beladen_GS3"))
SetVisible("Bild.pdl","Objekt",1);
}
 
Super, DAnke dein Code ist Fehlerfrei :eek:)

Jetzt bekomme ich nur noch ein Meldung zu Zeile 2

BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

und zwar: error (0086): function 'main' does not Return a value
 
Ahh, du hast die Funktion bei der Eigenschaft visible hinterlegt, d.h. du musst die Eigenschaft direkt zurückgeben. Das vereinfacht natürlich das ganze noch:

#include "apdefap.h"
BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
if (GetTagBit("DE_30_1_ZF_0801__Start_Beladen_GS3") && GetTagBit("DE_30_2_ZF_0801__Ende_Beladen_GS3")) return (1);
else return(0);
}
 
Was mir just noch einfällt, WinCC warnt mich jetzt ja bzgl. einer hohen Systembelastung des Systems durch zyklische Bearbeitung. Ist das gravierend oder bei einem aktuellen PC vernachässigbar?
 
Bei einer Siemens Software ist natürlich alles gravierend *g*

Nein, im ernst. Ich habe schon größere Projekte gemacht, in dem ich zB ein Programm, das mir x Variablen in ein *csv file schreibt, jede Sekunde einmal aufgerufen habe. Dabei habe ich erst bei ca. 120 Variablen Probleme mit der Systemlaufzeit bekommen, also kann man diese Warnung eher vernachlässigen.

Bernhard
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwie tut sich hier just das nächste Problem auf ;o) Köönen die von Siemens das nicht mal bessre ausdokumentieren...

Also, jetzt möchte ich in einem statischen Textfeld den Text ändern wenn eine Variable einen bestimmten Wert hat. Quelle für den Text ist eine weitere Variable oder ein statischer Text.

Code:
#include "apdefap.h"
 char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

if (GetTagBit("Scanneranwahl") == "1") return (test)


}

Scanneranwahl ist ein Vorzeichenloser 8 bit Wert, Bool geht da nicht da ich ca. 10 verschiedene Mögliche Inhalte für das Textfeld habe.
 
Servus, wenn du nur verschiedene statische Texte abhängig von deiner Variablen anzeigen möchtest würde ich es nicht über eine C-Aktion sondern über den Dynamik-Dialog realisieren. Dort kannst du für jeden Wert deiner Variablen einen Text eingeben.
Gruß Ralf
 
@ Mars

Das geht bei statischen Texten, so habe ich es auch bei einigen schon gemacht.

Nur habe ich unter anderem auch ständig wechselnde Daten (Scannerdatensätze) die ich aus der SPS auslesen muss, da diese halt immer wieder wechseln.

Das ganze sieht so aus, das ich in einer Übersicht das Transportsystem mit verschiedenen Scannern darstelle. Klickt der Bediener jetzt auf einen der Scanner, so wird in einem Textfeld der aktuelle Scannerdatensatz angezeit. Und dieser wechselt ja immer wieder.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Script

return("text"), da ja text ein Character ist, dann müssts gehen, wobei du glaube ich beim 1 kein Appostroph brauchst, also -->
Code:
#include "apdefap.h"
 char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

if (GetTagBit("Scanneranwahl") == 1) return ("test");


}


Bernhard
 
Ja so geht's ohne Fehlermeldung :) Da war ich ja schon verdammt nahe dran ;) Danke und auf ein neues... bestimmt bald

Grüße

Rengel
 
Ja da bin ich schon wieder, früher als erwartet doch später als befürchtet ;)

Das mit deinem Code oben klappt ja wunderbar mit einem festen Test wobei man das ja ggf. Resourcensoparender mit einem Dynamik Dialog machen kann.

Was mir jetzt wieder kleine Probleme bereitet ist es, in das Textfeld den Inhalt eines Datenwortes (Doppelwort) zu bekommen. Ich habes mit folgenden Befehlen versucht ;o)

if (GetTagBit("Scanneranwahl") == 1) return SetTagDWord("Daten_SC_0103_1_GS1");

if (GetTagBit("Scanneranwahl") == 1) return GetTagDWord("Daten_SC_0103_1_GS1");

Bzw. das ganze noch komplizierter ;)

Abfrage einer Textfolge in einer Textvariablen und dann den Inhalt des Textfeldes aus dem DWord

if (GetTagChar("Scanneranwahl") == "SC 0103.1 bei STF 0102") return SetTagDWord("Daten_SC_0103_1_GS1");

Hoffe ich nerve micht :)
 
Zurück
Oben