TIA C-Skript Präfix von Bildfenster auslesen

bcp

Level-1
Beiträge
23
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich benutze TIA V15.1 Professional und versuche grade mit einem C Skript das innerhalb eines Bildfensters aufgerufen wird den Präfix auszulesen.
Ich kann ein ScreenItem oder den ScreenNamen angeben, den Rest muss das Skript finden.
Leider versuche ich das schon seit Stunden und kriege immer noch nichts gebacken.

In VBA war es ganz einfach (schreibe es hier in ein Textfeld zum testen):
Code:
Dim textFeld
Set textFeld = ScreenItems("txt_prefix")
textFeld.Text = textFeld.Parent.Parent.TagPrefix

In C werden in Foren Funktionen vorgeschlagen die ich garnicht zur verfügung habe (GetParentPictureWindow/GetParentPicture)?
Ich hab es also mit GetParentScreenWindow probiert (und mit diversem anderen), aber ich schaffe nichtmal das:
Code:
#include "GlobalDefinitions.h" 
char* test = NULL;
test = GetParentScreenWindow("popupGraph"); //popupGraph ist das Bild das aufgerufen wird und in dem das Skript ausgeführt wird
printf(test, "\n");

und bekomme folgenden Fehler:
@8 (11) : invalid handle fault..
====================================OnErrorExecute====================================
SystemTime: (ThreadId 19436) 2021-07-22 13:40:32.365
dwErrorCode1: (ThreadId 19436) 1007001
dwErrorCode2: (ThreadId 19436) 4100
szErrorText: (ThreadId 19436) Exception in Action
szErrorTextException: (ThreadId 19436) access violation
szApplicationName: (ThreadId 19436) PDLRuntimeSystem
bCycle: (ThreadId 19436) cycle
szFunctionName: (ThreadId 19436)@8 (11) : invalid handle fault..

Ich habe absolut keine Ahnung von C, ich wäre froh wenn ihr mir helfen könnt.
 
Zuletzt bearbeitet:
Das ist natürlich schlecht in einer Sprache programmieren zu wollen, von der man keine Ahnung hat und auch keine Lust hat sich die einfachsten Grundlagen anzulernen. Warum bleibst du nicht bei VB? Es gibt in WinCC nur wenige Anwendungsfälle in denen C sinvoller ist, und VB ist zudem in vielen Szenarien sogar schneller. Und wenn man C überhaupt nicht kennt, warum dann C?

Zu deinem Fehler:
printf erwartet als ersten Parameter einen Formatstring in dessen Format die folgenden Argumente dargestellt werden. Der Formatstring kann auch in einer Variable stehen, aber das ist es nicht was du hier haben willst. Du willst vermutlich:

printf("%s\n", test);

haben.
An Stelle des "%s" wird der Inhalt von test als String interpretiert und eingebaut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da hast du vollkommen recht, ich dachte aber das wäre die einfachste Lösung.
Ich versuche die PLC-Codeanzeige (GRAPH) in ein Bildfenster zu packen und dann per Prefix von dem Bildfenster den GRAPH-DB zu spezifizieren.
Problem an dem ganzen ist das das Beispiel zum Aufruf vom GRAPH DB von Siemens nur in C verfügbar ist.
Hier ist die Anleitung, ich rede von Seite 22:
https://cache.industry.siemens.com/...4504/v5/109477133_PLC_Code_Viewer_Doku_en.pdf

Nur kann ich leider soweit ich weiss das C-Skript in VBA nicht aufrufen. Deswegen dachte ich in C den Präfix als String bereit stellen wäre die einfachste Lösung.
In VBA das ganze selber machen habe ich noch nicht probiert, da mir nicht klar ist wie ich die Funktion OpenViewerS7GraphByBlock ersetzen soll (ist ja eine Runtime API Funktion die ich nur in C-Skripten aufrufen kann).

Ich danke dir aber schonmal für die Hilfe, immerhin kann ich jetzt besser debuggen.
 
Zuletzt bearbeitet:
Die Lösung war dann doch ganz einfach:

Code:
char* NavigateToValue(char* screenName, char* objectName, char* propertyName)
{
char* parentScreenWindow = NULL;
char* parentScreen = NULL;
char* prefix = NULL;
parentScreen = GetParentScreen(screenName);
parentScreenWindow = GetParentScreenWindow(screenName);
prefix = GetPropChar(parentScreen,parentScreenWindow,"Tagprefix");
}

Vielleicht hilft es ja jemandem :)
 
Zurück
Oben