WinCC C-Quellcode geht nicht... Warum ?

Rengel

Level-1
Beiträge
117
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
So sieht meine und/oder Verknüpfung aus und sie wird auch Fehlerfrei angenommen.

Nur leider Funktioniert sie nicht :(

Code:
if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6") == 1 && (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1)) return ("Spaltk. / Belegt");
 
Mir ist noch nicht so ganz klar, was Du machen willst, aber wenn Du ein Textfeld dynamisieren willst, dann fehlt noch etwas:

if
(GetTagBit("Variable A")==1 &&
(GetTagBit("Variable B")==1 || GetTagBit("Variable C")==1))
return("Ergebnis Ein");
else
return("Ergebnis Aus");

Je nach Verknüpfungsergebnis wird also der Text "Ergebnis Ein" oder der Text "Ergebnis Aus" ausgegeben.

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da hast du recht, das war auch nur ein Auszug aus dem Quellcode. Sind mehrer if-Verknüpfungen die eigentlich alle funzen nur diese und/oder Verknüpfung will wenn sie wahr ist nicht das gewünschte Ergebnis liefern.
 
Hast du die Werte auch kontrolliert d.h. die Bedingungen erfüllt werden?
Zum testen würde ich auf jeden Fall einen else Zweig einbauen um zu sehen ob die generelle Abarbeitung erfolgt.

Welchen Rückgabewert hat deine Funktion?
Ein wenig mehr Beschreibung wäre nicht schlecht.
 
Hallo, danke für die Antworten aber ich habe es jetzt gelöst.

Meine anfänglicher Quelltext ging so:

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

    if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6") == 1) return ("Belegt");

    if (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1) return ("Spaltk. / Nicht belegt");

    if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6") == 1 && (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1)) return ("Spaltk. / Belegt");

    else return ("Nicht belegt3");

    }



Jetzt habe ich ihn so umkopiert und er geht ;) So ist das wenn man sowas gegen Feierabend programmiert *gg*

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

    if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6") == 1 && (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1)) return ("Spaltk. / Belegt");

    if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6") == 1) return ("Belegt");

    if (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1) return ("Spaltk. / Nicht belegt");

    else return ("Nicht belegt3");

    }
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na aber an der Laufzeit kann man noch drehen :wink:
Die erste und die zweite if-Bedingung sind ja gleich.

if (GetTagBit("AKL_RFZ_01_Rfz_Belegt_GS6")
{
if(GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1))
return ("Spaltk. / Belegt");
else
return ("Belegt");
}
if (GetTagBit("AKL_RFZ_01_SpaltkontLi_GS6") == 1 || GetTagBit("AKL_RFZ_01_SpaltkontRe_GS6") == 1) return ("Spaltk. / Nicht belegt");
:oops:
 
@Rengel

Ich glaube, dass Deine Verknüfung immer noch nicht richtig ist. :roll:

Was Du programmiert hast, ist eine verschachtelte if-else-Anweisung. Hier gehört der else-Zweig immer zum letzen if-Zweig, dem noch kein else zugeordnet ist.

if (Bedingung 1)
return (Ergebnis 1)
if (Bedingung 2)
return (Ergebnis 2)
if (Bedingung 3)
return (Ergebnis 3)
else
return (Ergebnis 4)

Richtig wäre aber eine else-if-Kette, mit der man eine Auswahl von mehreren Alternativen programmiert:

if (Bedingung 1)
return (Ergebnis 1)
else if (Bedingung 2)
return (Ergebnis 2)
else if (Bedingung 3)
return (Ergebnis 3)
else
return (Ergebnis 4)

Gruß Kai
 
DAnke, werde ich mal ausprobieren und sagen obs klappt. Meine geht so aber auch, ahabe ich getestet :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast Recht, Deine Verknüpfung funktioniert auch :D

Ich habe gerade meine beiden Versionen ausprobiert:

if (Bedingung 1)
return (Ergebnis 1)
if (Bedingung 2)
return (Ergebnis 2)
if (Bedingung 3)
return (Ergebnis 3)
else
return (Ergebnis 4)

if (Bedingung 1)
return (Ergebnis 1)
else if (Bedingung 2)
return (Ergebnis 2)
else if (Bedingung 3)
return (Ergebnis 3)
else
return (Ergebnis 4)

Es kommt bei beiden das selbe raus, man kann also beide Versionen verwenden :D

Durch die return-Anweisungen hinter den if-Anweisungen handelt es sich bei der ersten Version nämlich um gar keine verschachtelte if-else-Anweisung - böser Denkfehler von mir :evil:. Es muß also bei beiden Versionen das selbe rauskommen.

Gruß Kai
 
Naja, ist doch kein Problem.. Denkfehler hatte ich ja gestern auch :)

Aber schön das du es schon probiert hast, dann kann ich die Zeit anders nutzen *gg*
 
Zurück
Oben