String Delete funktion auf 1000 Zeichen erweitern

PENT89

Level-2
Beiträge
67
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich bin leider innerhalb meines SPS Programms (Beckhoff TwinCat3) auf ein kleines Problem gestoßen. Die String Delete Funktion aus der Libery schneid mir meinen String(1000) nach 255 Zeichen ab.

Gibt es eine andere Funktion die ich nutzen kann?

Danke und Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Was würde denn die String Delete Funktion machen, wenn sie so könnte, wie Du es beabsichtigst?
Genügt es nicht, der StringVariablen einen leeren String bzw. eine leere StringKonstante zuzuweisen?
In VBA z.B.:
String = ""
 
Hallo Zusammen,

ich bin leider innerhalb meines SPS Programms (Beckhoff TwinCat3) auf ein kleines Problem gestoßen. Die String Delete Funktion aus der Libery schneid mir meinen String(1000) nach 255 Zeichen ab.

Gibt es eine andere Funktion die ich nutzen kann?

Danke und Gruß
Dafür gibt es doch die erweiterten Stringfunktionen schau mal hier im Infosys nach.
 
Steuerung hab ich oben hinzugefügt. Beckhoff Twincat3.

Dann Fange ich nochmal von vorne an....

Ich habe eine Variable TEXT : String(1000) definiert. Dort schreibe ich einen verschieden wörter rein die durch ein "," getrennt sind
Diese Wörter muss ich trennen.

Dazu schreibe ich mir mit verschieden String Funktionen aus der TC2_Standard_3.3.2 die Wörter weg. Anschließend lösche ich mit die rausgeschnitten Wörter mit der Delete Funktion.
Leider Schneidet diese Funktion mir meinen String an der 255 stelle ab. was natürlich doof ist.

Daher die Frage ob es eine andere Möglichkeit gibt das zu löschen.

hier der code:
Code:
iSchleife:=0;
iSchleifeMax := 4*sizeOfSwitchArr/SIZEOF(MC_CamSwitch);
numOfSwitches := 0;

sSaveData:=inputString;


done:= LEN(sSaveData) = 0;
WHILE LEN(sSaveData) > 0 AND iSchleife <= iSchleifeMax DO
    iSchleife:=iSchleife+1;

    iSplitKomma:= FIND(sSaveData,',');
    IF iSplitKomma = 0 THEN
        sHelp:=sSaveData;
        sSaveData:='';
    ELSE
        sHelp:=LEFT(sSaveData,iSplitKomma-1);
      sSaveData:=DELETE(sSaveData,iSplitKomma,1);
        
    END_IF;
   numOfSwitches := iD + 1;
END_WHILE;



/

done := TRUE;
 
Steuerung hab ich oben hinzugefügt. Beckhoff Twincat3.

Dann Fange ich nochmal von vorne an....

Ich habe eine Variable TEXT : String(1000) definiert. Dort schreibe ich einen verschieden wörter rein die durch ein "," getrennt sind
Diese Wörter muss ich trennen.

Dazu schreibe ich mir mit verschieden String Funktionen aus der TC2_Standard_3.3.2 die Wörter weg. Anschließend lösche ich mit die rausgeschnitten Wörter mit der Delete Funktion.
Leider Schneidet diese Funktion mir meinen String an der 255 stelle ab. was natürlich doof ist.

Daher die Frage ob es eine andere Möglichkeit gibt das zu löschen.

hier der code:
Code:
iSchleife:=0;
iSchleifeMax := 4*sizeOfSwitchArr/SIZEOF(MC_CamSwitch);
numOfSwitches := 0;

sSaveData:=inputString;


done:= LEN(sSaveData) = 0;
WHILE LEN(sSaveData) > 0 AND iSchleife <= iSchleifeMax DO
    iSchleife:=iSchleife+1;

    iSplitKomma:= FIND(sSaveData,',');
    IF iSplitKomma = 0 THEN
        sHelp:=sSaveData;
        sSaveData:='';
    ELSE
        sHelp:=LEFT(sSaveData,iSplitKomma-1);
      sSaveData:=DELETE(sSaveData,iSplitKomma,1);
       
    END_IF;
   numOfSwitches := iD + 1;
END_WHILE;



/

done := TRUE;
Ja, wie von mir in #7 geschrieben mit den erweiterten Stringfunktionen in dem Fall DELETE2
 
Nee ist schon so wie ich sagte ich hab die lib TC2_utilities_3.3.28 da ist delete2 anscheinend noch nicht drin.
 
Kann mir mal einer ein Anwendungsbeispiel zuschicken? Wenn ich das einprogrammiere komme ich immer in eine Exception rein.
 
ja, aber ich komme damit nicht so recht klar.

Code:
VAR_GLOBAL  // GVL TEST

Test3:STRING(1000);
IStringIn:STRING(1000);

pSrcString : POINTER TO STRING;
    pDstString : POINTER TO STRING;
    nDstSize   : UDINT;
    nLen       : UDINT;
    nPos       : UDINT;
   
END_VAR

 DELETE2(TEST.pSrcString:= ADR(TEST.IStringIn),TEST.pDstString,SIZEOF(TEST.Test3) ,8,1);
 
Zuletzt bearbeitet:
ja, aber ich komme damit nicht so recht klar.

Code:
VAR // GVL TEST

Test3:STRING(1000);
IStringIn:STRING(1000);

pSrcString : POINTER TO STRING;
    pDstString : POINTER TO STRING;
    nDstSize   : UDINT;
    nLen       : UDINT;
    nPos       : UDINT;
  
END_VAR

 DELETE2(TEST.pSrcString:= ADR(TEST.IStringIn),TEST.pDstString,SIZEOF(TEST.Test3) ,8,1);
Korrigier mal den Funktionsaufruf, der ist totaler blödsinn, mich wundert es, dass TC3 das so übersetzt.
 
Zurück
Oben