Fehler: String-Fehler! Ausgangsstring ist zu kurz

Djpredator69

Level-1
Beiträge
69
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo , ich hatte ein funktionierendes programm das auf einer ilc171 lief, nach dem update auf die neue PC WORX 6.30.2972.

bekomme ich jetzt immer beim starten der sps diesen fehler, ausgangsstring zu kurz , was hat sich in der neuen version geändert .

wie lange darf der string , in der neuen version sein.

habe schon den teil im programm gefunden der den fehler erzeugt.



Code:
CASE iState OF

    0:

        IF Start_logging_R_T = TRUE THEN

            arrLogging[0] := 'Datum Zeit';

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte P');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte Q');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte S');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte P');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte Q');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte S');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte P');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte Q');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte S');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte P');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte Q');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            arrLogging[0] :=CONCAT(arrLogging[0], 'spalte S');

            arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

            iState    := 10;

        END_IF;

    10:   

          

        IF logging_now_F_T = TRUE THEN

        iState    := 20;

        END_IF;

    20:


        (*Datum und zeit*)

        arrLogging[0] := INT_TO_STRING(RTC_DAY, '%ld');

        arrLogging[0] :=CONCAT(arrLogging[0],'/');

        arrLogging[0] :=CONCAT(arrLogging[0],INT_TO_STRING(RTC_MONTH, '%ld'));

        arrLogging[0] :=CONCAT(arrLogging[0],'/');

        arrLogging[0] :=CONCAT(arrLogging[0],INT_TO_STRING(RTC_YEAR, '%ld'));

        arrLogging[0] :=CONCAT(arrLogging[0],'/');

        arrLogging[0] :=CONCAT(arrLogging[0],INT_TO_STRING(RTC_HOURS, '%ld'));

        arrLogging[0] :=CONCAT(arrLogging[0],':');

        arrLogging[0] :=CONCAT(arrLogging[0],INT_TO_STRING(RTC_MINUTES, '%ld'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


        (*Daten von zahler 1*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(P1,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(Q1,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(S1,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


        (*Daten von zahler 2*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(P2,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(Q2,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(S2,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


        (*Daten von zahler 3*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(P3,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(Q3,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(S3,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)


        (*Daten von zahler 4*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(P4,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(Q4,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)

        arrLogging[0] :=CONCAT(arrLogging[0],REAL_TO_STRING(S4,'%f'));

        arrLogging[0] :=CONCAT(arrLogging[0],';'); (*excel trenner*)



        IF Start_logging_F_T = TRUE THEN

            iState    := 0;

        ELSE

            iState    := 20;

        END_IF;

      

  

END_CASE;


(*wenn modul neu gestartet wird der header angelergt*)

R_TRIG_1(CLK:=Start_logging);

Start_logging_R_T:=R_TRIG_1.Q;


F_TRIG_2(CLK:=Start_logging);

Start_logging_F_T:=F_TRIG_2.Q;


F_TRIG_1(CLK:=logging_now);

logging_now_F_T:=F_TRIG_1.Q;







logging_now2 := logging_now_BP OR logging_now;








SLO_SimpleLogger_2_1(

xActivate:=Start_logging,

strFileName:='clientDATAonPLC.csv',

xReq:=logging_now2,

xLogOnChange:=FALSE,

xLogEveryCycle:=FALSE,

arrLogging:=arrLogging);



xActive:=SLO_SimpleLogger_2_1.xActive;

xError:=SLO_SimpleLogger_2_1.xError;

xBufferFull:=SLO_SimpleLogger_2_1.xBufferFull;

udtDiag:=SLO_SimpleLogger_2_1.udtDiag;



(*visu*)

logging:= logging_now2;



IF  save_ftp_response = TRUE THEN

    FTP_LastResponseSource_vi    := FTP_LastResponseSource;

    FTP_LastResponseDestination_vi    := FTP_LastResponseDestination;

END_IF;



kann mir da einer einen tip geben was ich ändern oder anpassen soll.

danke
 
Zuletzt bearbeitet:
Der erste Tipp ist, verwende bitte die Code-Tags, dann wird das ganze lesbarer.
Dann verwendest Du in Deinem Code immer Element 0 des String Arrays, beim Loggerbaustein aber das ganze Array, vielleicht mag der "neue" Baustein keine Leerstrings. Hast Du es statt mit arrLogging mal mit arrLogging[0] probiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sorry wegen der fehlenden formatierung.

also beim loggerbaustein muss ich das ganze array versenden ,nur den arrLogging[0] geht leider nicht.

leider müssen auch alle daten sich im arrLogging[0] befinden sonst sieht die csv datei falsch aus.

ich habe noch einen pc mit der vorgänger version von PCworx und auch das programm in der gleichen version, ich werde das noch mal kompilieren und damit nochmal testen, aber das lief.

wie lange darf ein string sein ? hat sich da was geändert?
 
Ich kann jetzt nur für Codesys basierte Steuerungen sprechen. Strings können da fast beliebig lang sein, aber die Standard-Stringfunktionen unterstützen maximal 255 Zeichen. Aber bei Dir kommt doch die Meldung String zu kurz und nicht zu lang.
 
Fehler: String-Fehler! Ausgangsstring ist zu kurz

Fehler: String-Fehler! Ausgangsstring ist zu kurz​

Eine Zeichenfolge-Operation kann nicht ausgeführt werden, da die Ziel-Zeichenfolge zu kurz ist. Beispiel: Die Verkettung zweier Zeichenfolgen, die jeweils 50 Zeichen enthalten, soll in einer Zeichenfolge mit einer maximalen Länge von 80 Zeichen gespeichert werden.


das habe ich unter hilfe gefunden hilft mir aber nicht weiter
 
Strings können da fast beliebig lang sein, aber die Standard-Stringfunktionen unterstützen maximal 255 Zeichen.
Wenn man aber keine Stringlänge definiert werden standardmäßig 80 verwendet. Und der Header ist da drüber. Ist es eigentlich Absicht, dass die drei Spalten(P,Q,S) jeweils vier mal im Header vorkommen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja es ist absicht , denn ich lese 4 zähler aus und soll alle 15 min in eine csv loggen.(wirk, Blind und Scheinleistung)

wenn du mir jetzt noch sagen kannst wo ich in pcworx die stringlänge ändern kann, wäre super.
 
ja es ist absicht , denn ich lese 4 zähler aus und soll alle 15 min in eine csv loggen.(wirk, Blind und Scheinleistung)

wenn du mir jetzt noch sagen kannst wo ich in pcworx die stringlänge ändern kann, wäre super.
Na bei der Deklaration der Variable. Statt da nur String einzugeben musst Du auch die Größe angeben, sonst wird die Vorgabe von 80 Zeichen genommen.
 
das ist die eingangs variable vom SLO_SimpleLogger_2_1 modul.
das format wird vom modul vorgegeben SLO_data_array_String.

sorry aber ich verstehe nicht genau was du von mir willst.

wir sprechen hier von phoenix contact PCWORX, wo soll ich da was änder
 
Könnte auch so komisch gemeint sein, daß für das Ergebnis ein String > 255 gebraucht wird, aber nur 255 Zeichen unterstützt wird.

Bei welcher Zeile kommt denn die Meldung?
Problem tritt auf wenn die sps gestartet wird , beim kompilieren und rüber senden ist alles ok. wenn ich die sps auf run setze tritt der fehler auf.
 
v.png
hier ist die variable von mir angelegt der type kommt vom modul slo_simplelogger. ich versuche die variable in der bibliothek vom modul zu finden und wie sieh da deklariert ist .
 
ich habe das in der bibliothek gefunden

Code:
TYPE
    (* Array for logging *)
    SLO_ARR_BUFFER : ARRAY [0..8499] OF BYTE;

    (* Two switching arrays for no data loss *)   
    SLO_ARR_ARR_BUFFER : ARRAY [0..1] OF SLO_ARR_BUFFER;

    (* Help array to copy the string *)
    SLO_ARR_STRING_BUFFER : ARRAY [0..724] OF BYTE;
    
    (* Internal information *)
    SLO_UDT_LOGGING_BUFFER : STRUCT
        iCount : INT;
        iNumStrings : INT;
    END_STRUCT;
    
    (* Array for user logging values *)
    SLO_ARR_LOGGING_STRING : ARRAY[0..8] OF STRING;

    (*Diagnostic information *)
    SLO_UDT_DIAG : STRUCT
        iState : INT;
        wDiagCode : WORD;
        wAddDiagCode : WORD;
    END_STRUCT;
    
END_TYPE

die bibliothek ist schreibgeschützt da kann ich leider nichts ändern , ausser ihr wisst wie man die Phoenix bibliotheken freischaltet
 
ich glaube es hat sich erledigt , habe diese info gerade gefunden :
FB_SLO_SimpleLogger
NOTE : If the CONCAT function would exceed the length of 80 characters, we will get no error message. So we have to care about the length of each string.

ich muss mein programm anpassen um diese problem zu umgehen und mehrfach loggen . leider scheint es mit einem logging vorgang nicht zu klappen da ich über 80 zeichen bin.
 
Zurück
Oben