WinCC Problem aus WinCC mittels C-script eine String-Variable an S7-1500 übergeben

schneijo

Active member
Beiträge
33
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Forum-User,

aktuell stehe ich vor einem Problem eine simple String-Variable aus WinCC an eine S7-1500 zu übergeben.
Dies soll mittels C-script bei einem Fensteraufruf einmalig ausgeführt werden.

System: WinCC Professional V7.5 SP2 UD5 (auf Siemens IPC547E)
TIA V16 (auf S7-1500)

In TIA wurde in einem globalen DB mit Namen "DBAllgemein" eine String-Variable Namens "sDeviceName_global" erzeugt.
Im WinCC Tag Management wird die Variable wie folgt interpretiert: "DBAllgemein_sDeviceName_global" als "Text tag 8-bit character set" mit Length=14Stellen

Jetzt soll beim Fensteraufruf diese globale SPS Variable mit einem String beschrieben werden (z.B. interne WinCC Variable als String "sDProidentifier").
Ereignis -> Bild-Objekt -> Sonstige -> Bildanwahl -> "C-script" ausführen

Dafür habe ich folgenden Code im "C-script" reingepackt:
SetTagChar("DBAllgemein_sDeviceName_global", "sDProidentifier");

Der Code lässt sich ohne Fehler und Warnungen übersetzen.
Leider kommt nichts in der SPS an.
Es sieht so aus als wird der String überhaupt nicht geschrieben.
Schreibfehler sind bereits ausgeschlossen worden.

Übergeben werden soll eine Zeichenkette aus Buchstaben und Zahlen, ähnlich einem KFZ-Kennzeichen.
Grundsätzlich bin ich frei in der Wahl des Variablen Typen (z.B. 'String' oder 'Array of Char').
Ich bin mir auch sicher, dass die interne Variable den richtigen Inhalt trägt, diese Variable wird zusätzlich noch anderweitig in WinCC verwendet und im Fenster dynamisch angezeigt.

Ich bin mir nicht sicher ob die Methode SetTagChar("...") eine geeignete Variante ist.

Beste Grüße

schneijo
 

Thomas_v2.1

Well-known member
Beiträge
8.016
Punkte Reaktionen
2.406
Du schreibst die Zeichenkette "sDProidentifier" in die Variable. Da diese länger als 14 Zeichen ist, wird vermutlich nichts geschrieben.
Wenn du den Inhalt der Variable "sDProidentifier" auf die andere übertragen möchtest, dann musst du diesen vorher mit GetTagChar lesen.
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
17.440
Punkte Reaktionen
5.121
Zuviel Werbung?
->Hier kostenlos registrieren
Versuche es mal so:
Code:
char *pszValue;

pszValue = GetTagChar("sDProidentifier");
if(pszValue != NULL)
{
  SetTagChar("DBAllgemein_sDeviceName_global", pszValue);
}

Harald
 
OP
S

schneijo

Active member
Beiträge
33
Punkte Reaktionen
0
Hallo Thomas_v2.1,

vielen Dank für deine Unterstützung.
ich habe meinen Fehler nun gefunden.
Im Fenster ist TAG-Prefix aktiviert.
Den Variablen wird automatisch ein Prefix angehängt bzw. vorangestellt.
Damit passte der Variablen-Name nicht.
Für das TAG-Prefix bei einer einzelnen Variable auszusetzen verwendet man folgende Schreibweise ( @NOTP:: )

char sTagPrefix[150];
char sDProidentifier[80];
long lenth;

strncpy ( sDProidentifier, sTagPrefix, lenth);
strcat ( sDProidentifier, ""); //terminate string


SetTagChar("@NOTP:: DBAllgemein_sDeviceName_global", sDProidentifier);


Der Code funktioniert jetzt für mich.
... Manchmal fallen einem die einfachsten Dinge schwer, auch wenn sie noch so naheliegend sind.

Dein Vorschlag mit GetTagChar wird sicher auch funktionieren.
Die Variablen-Namen müssen halt stimmen ;-)

Grüße schneijo
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
17.440
Punkte Reaktionen
5.121
Zuviel Werbung?
->Hier kostenlos registrieren
Dafür habe ich folgenden Code im "C-script" reingepackt:
SetTagChar("DBAllgemein_sDeviceName_global", "sDProidentifier");
Unabhängig von dem TAG-Prefix: Deine C-Anweisung soll die Zeichenkette "sDProidentifier" an die globale Variable zuweisen, und nicht den Inhalt einer Variable die "sDProidentifier" heißt. Deshalb von Thomas und mir die Hinweise, mit GetTagChar den Inhalt der Variable zu lesen.

Harald
 
Oben