Fehler 3150 bei Funktion CONCAT in network.lib

Begonnen von RalfWein, 03. Oktober 2016, 14:09:14

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

RalfWein

Hallo an alle!

Nachdem OSCAT-Biliotheken schon mehrfach erfolgreich eingesetzt habe, und sehr viel Lesen und Lernen in diesem Forum, habe ich ein Problem, dass sich selbst nicht lösen kann:

FW 750-8204 ist (08), CoDeSys von WAGO, Stand 2.3.9.47, codesys_network_135.lib, Probiert mit und ohne 'LREAL als REAL übersetzen'

In der network.lib kommt es in den Funktionen
BASE64_DECODE_STR
BASE64_ENCODE_STR
DNS_DYN
GET_WAN_IP
IP2GEO
MD5_CRAM_AUTH
SYS_LOG
IN_INPUT_MENU_POPUP
WORLD_WEATHER
beim Kompilieren jeweils zum Fehler 3150: Parameter 2 der Funktion 'CONCAT'. Das Ergebnis einer IEC-Funktion kann nicht als STRING-Parameter einer C-Funktion übergeben werden.

Aus Beiträgen im SPS-Forum habe ich herausgelesen, am Besten wartet man nicht auf Reparatur, sondern schreibt die betreffenden Funktionen selbst um.

3 von diesen 9 Funktionen benötige ich zwingend (BASE64_DECODE_STR, BASE64_ENCODE_STR und MD5_CRAM_AUTH). Die nichtbenötigten habe ich ausgeschlossen, dann kompiliert es fehlerfrei.
Nun habe ich die jeweils hinter dem 2. Parameter von CONCAT liegende Funktion herausgezogen und vorab in einen temporären String schreiben lassen. Mein Problem ist: wie gross muss die temporäre Stringvariable angelegt sein damit CONCAT keinen Müll zusammenbaut?

Beispiel, mit BASE64_DECODE_STRING (bereits umgeformt):      
STR3 := BUFFER_TO_STRING(PT:=ADR(buf2), SIZE:=SIZEOF(buf2), START:=0, STOP:=size2 - 1);
STR2 := CONCAT(STR2,STR3);
D.h. Wie gross muss STR3 sein?

Für eure Hilfe wäre ich dankbar.

Gruss Ralf


peewit

die groessten string sollten auf 250 zeichen limitert sein
sieh mal in der oscat basic in den gloablen variablen nach

RalfWein

Hallo Peewit,

Hat funktioniert. Danke für den Hinweis

Macht es nicht Sinn die anderen Funktionen, die das gleiche Problem haben, in der nächsten Version auch umzustellen. Soviel mehr an Laufzeit kann das doch nicht kosten.
Habe gerade auf die CoDeSys-Version 49 upgedated. Nach der Installation erscheint als erstes der Hinweis auf dieses Problem (concat und C-Funktionen). Es wird also bleiben.

Gruss
Ralf

peewit

nach dem ich dein problem nicht nachvollziehen kann wäre es ja nicht unproaktisch wenn du mal schaust welche
bausteine bei deiner version ein problem melden bzw. was muss geändert werden das es bei dir keine probleme mehr macht

RalfWein

Hallo Peewit,

Welche Funktionen in der network.lib betroffen sind hatte ich im ersten Posting geschrieben. Es geht bei allen diesen Fehlern um eine in CONCAT eigebettet C-Funktionsrückgabe. Auch geschrieben, dass ich akut drei von diesen benötige. Umgeschrieben habe ich die Funktionen wie in #1 beschrieben. Die Zweifel an der angepassten Stringlänge habe ich auf deinen Hinweis hin testweise so gelöst, dass ich temporär Variablen mit 250 Zeichen angelegt habe. Das dann ausführlich getestet ... Ergebnis: kompiliert fehlerfrei und funktioniert.

Gruss
Ralf

peewit

da ich die compilerfehler nicht reproduzieren kann und nicht blind etwas ändern möchte wäre es von vorteil wenn du mir mal als beispiel deine angepassten bausteine schicken würdest


RalfWein

Hallo Peewit,

hier hatte jemand das gleiche Problem, und es auch so gelöst:
http://www.sps-forum.de/archive/index.php/t-75951.html (letzter Post)

Ein Beispiel ist ja schon im ersten Post drin. Die beiden anderen habe ich auch so aufgelöst.

Das Problem tritt wohl auch nur bei den PFC200-Controllern auf. Das Projekt lief vorher auf einer 842 und auf einer 880 ohne diesen Compiler-Fehler.
Jetzt, nachdem ich den CONCAT rausgelöst habe, lädt es auf allen Controller.

Ralf