Befehl zum auslesen eines Strings

Zuviel Werbung?
-> Hier kostenlos registrieren
... ein bißchen ...

Aus dem ARRAY [0..255] of Byte würde ich zunächst einen STRING [254] machen.
Achtung hierbei : die Nutzdaten des String stehen ab Byte-Index String-Anfang +2. Im Byte 0 steht die definierte Länge des Strings (hier musst du 254 eintragen) und im Byte 1 steht die echte Länge des Strings (hier musst du die Anzahl der empfangenen Zeichen eintragen).
Nun kannst du mit den STRING-Routinen an dem String herummachen bis der Arzt kommt ...
Wichtig hier aber auch : Auch der Ziel-String für z.B. RIGHT muss initialisiert sein (in Byte 0 muss die deklarierte Länge des Strings stehen).

Um die Sache ggf. einfacher zu machen ... hast du SCL zur Verfügung ?

Gruß
LL

Ja nur woher weis ich die reale länge wie bekomme ich die raus oder kann der wert auch größer sein. ich weis ja nicht was mir gerade geschickt wurde und was mach ich wenn der pc auch die beiden ersten stellen beschreibt muss ich das wirklich angeben oder kann icjh die empfangfen irgendwie umkopieren oder sowas


Ja SCL habe ich nur leider noch nie mit gearbeitet bin bei sowas noch unbedarft
 
Zuletzt bearbeitet:
Das nützt mir im Augenblick nicht, da ich gerade kein Step7 zur Hand habe ...
Aber :
Code:
     CALL  FB    21 , DB21
       Send_DBNo          :=DB11        // DB with the Senddata
       Send_from_ByteNo   :=1           // Index of the first Byte to send
       [B][COLOR=red]Send_n_Bytes       :=#SendCount  // Quantity of Sendbytes[/COLOR][/B]
       Receive_DBNo       :=DB10        // DB for the Receivedata
       Start_Receivebuffer:=1           // Index for the begin of Receivebuffer
       Receivebuffer_Size :=30          // Size of the Receivebuffer (Ringbuffer)
       Input_65x          :=P#P  260.0 BYTE 4    // Input-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Output_65x         :=P#P  260.0 BYTE 4    // Output-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Used_Coupler_is_x33:=TRUE        // If the used Coupler is a 301 or 303 then put this input to FALSE else put it to TRUE
       Receive_next_Byte  :=#ReceiveIndex    //Index of the place for the next received character
       RESET              :=M10.0       // Reset to the serial Interface (this Variable will be deleted by the FB)
       Start_Sendjob      :=M10.1       // Start one Job for sending data (this Variable will be deleted by the FB)
am Beispiel deines Send-FB müßtest du sehen, was ich meinte ...
Poste doch mal den Receive-FB als Aufruf-Beispiel ...

Gruß
LL
 
Das nützt mir im Augenblick nicht, da ich gerade kein Step7 zur Hand habe ...
Aber :
Code:
     CALL  FB    21 , DB21
       Send_DBNo          :=DB11        // DB with the Senddata
       Send_from_ByteNo   :=1           // Index of the first Byte to send
       [B][COLOR=red]Send_n_Bytes       :=#SendCount  // Quantity of Sendbytes[/COLOR][/B]
       Receive_DBNo       :=DB10        // DB for the Receivedata
       Start_Receivebuffer:=1           // Index for the begin of Receivebuffer
       Receivebuffer_Size :=30          // Size of the Receivebuffer (Ringbuffer)
       Input_65x          :=P#P  260.0 BYTE 4    // Input-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Output_65x         :=P#P  260.0 BYTE 4    // Output-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Used_Coupler_is_x33:=TRUE        // If the used Coupler is a 301 or 303 then put this input to FALSE else put it to TRUE
       Receive_next_Byte  :=#ReceiveIndex    //Index of the place for the next received character
       RESET              :=M10.0       // Reset to the serial Interface (this Variable will be deleted by the FB)
       Start_Sendjob      :=M10.1       // Start one Job for sending data (this Variable will be deleted by the FB)
am Beispiel deines Send-FB müßtest du sehen, was ich meinte ...
Poste doch mal den Receive-FB als Aufruf-Beispiel ...

Gruß
LL
herr laffer
ich muss dich enttäuschen das ist die länge die ich sende die ich selbst eintrage die empfangslänge ist unbekannt
:sw11:
ich glaub ich erschiesse den dichtprüfer,

obwohl wenn ich den index benutze aber dazu muss ich wissen ob senden abgschlossen ist vielleicht ein time out
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Excuse me ... da habe ich doch glatt übersehen, dass du einen kombinierten SEND-RECEIVE-FB hast ...
Aber halb so wild ...
Mein Vorschlag dazu :
Test doch mal, was nach einem Empfang in "Receive_next_Byte" für ein Wert steht ... Nach meiner Meinung ist dies (wenn du bei jedem Empfangen mit "Start_Receivebuffer:=1" anfängst) die Länge der empfangenen Zeichen +1.
Also : Empfangene_Zeichen := Receive_next_Byte - 1 ;
 
Excuse me ... da habe ich doch glatt übersehen, dass du einen kombinierten SEND-RECEIVE-FB hast ...
Aber halb so wild ...
Mein Vorschlag dazu :
Test doch mal, was nach einem Empfang in "Receive_next_Byte" für ein Wert steht ... Nach meiner Meinung ist dies (wenn du bei jedem Empfangen mit "Start_Receivebuffer:=1" anfängst) die Länge der empfangenen Zeichen +1.
Also : Empfangene_Zeichen := Receive_next_Byte - 1 ;

werde ich morgen früh gleichj mal testen aber wie setzte ich das dann zusammen

erstelle ich einen neuen strin in den ich 254 kopiere dann an der zweiten stelle die länge und an die weiteren stellen die zeichen aus meinem db 11 warum kann ich dann den db 11 nicht direkt verwenden und immer so tun als hätte er die maximal länge egla ob irgendwann lehr oder nicht, ich hätte bei meinen bisherigen sachen bleiben sollen bit und dword da wuste ich was ich tu
 
Eyyyh ...!
Jetzt aber nicht klein beigeben. Das wird schon - aufgeben gilt nicht ...

Leider habe ich deine Frage nicht verstanden - war ein bißchen Konfus.
Du kannst den String auch als Pointer an den FB übergeben, nur bitte daran denken, dass du ab Adresse von Byte 2 angeben musst - vielleicht war das schon die Frage. Der DB stellt nicht automatisch die Länge zur Verfügung, weil er nicht so programmiert wurde. Muss du den Programmierer danach fragen.

Bis dahin
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eyyyh ...!
Jetzt aber nicht klein beigeben. Das wird schon - aufgeben gilt nicht ...

Leider habe ich deine Frage nicht verstanden - war ein bißchen Konfus.
Du kannst den String auch als Pointer an den FB übergeben, nur bitte daran denken, dass du ab Adresse von Byte 2 angeben musst - vielleicht war das schon die Frage. Der DB stellt nicht automatisch die Länge zur Verfügung, weil er nicht so programmiert wurde. Muss du den Programmierer danach fragen.

Bis dahin
Gruß
LL


Guten Morgen Larry,
aufgeben ist relativ wenn ich aufgebe werde ich glaube ich nicht mehr lange hier arbeiten...
also nein das tun wir nicht...
aber was ich meine ich muss mir nun einen neuen db bauen in den ich erst 255 an der zweiten stelle die wirkliche länge und dann den empfangen text hinkopiere oder kann ich das umgehen in dem ich sage mein strin ist immer 100 lang und lass leere stellen leere stellen sein. wie denkst du darüber, du kennst dich damit wenigstens aus ich hab davon null ahnung
 
Ich kenne leider deinen FB nicht. Ich denke aber mal, dass er nicht grundsätzlich den ganzen Puffer benutzt, wenn nicht entsprechend Zeichen übertragen werden.
Willst du dir da ganz sicher sein, dann arbeitest du mit dem Puffer wie gehabt und kopierst nach dem Receive mittels SFC20 (Block-Move) den ganzen Kram in deinen String, den du dann entsprechend auswertest.

Vorrangig würde mich allerdings interessieren, ob meine Theorie mit dem Empfangslänge stimmt ... Darauf baut alles weitere auf ...

Gruß
LL
 
Ich kenne leider deinen FB nicht. Ich denke aber mal, dass er nicht grundsätzlich den ganzen Puffer benutzt, wenn nicht entsprechend Zeichen übertragen werden.
Willst du dir da ganz sicher sein, dann arbeitest du mit dem Puffer wie gehabt und kopierst nach dem Receive mittels SFC20 (Block-Move) den ganzen Kram in deinen String, den du dann entsprechend auswertest.

Vorrangig würde mich allerdings interessieren, ob meine Theorie mit dem Empfangslänge stimmt ... Darauf baut alles weitere auf ...

Gruß
LL

den orginal fb von wago hab ich hier rein gesetzt und mein programm wie ich es machen will steht hier

Code:
/--- Teststatements -----------------
      L     MW   200
      T     #SendCount
//------------------------------------


// *********************************************** //
// ** EXAMPLE FOR THE CALL OF THE SERIAL-DRIVER ** // 
// *********************************************** //

      CALL  FB    21 , DB21
       Send_DBNo          :=DB11        // DB with the Senddata
       Send_from_ByteNo   :=1           // Index of the first Byte to send
       Send_n_Bytes       :=#SendCount  // Quantity of Sendbytes
       Receive_DBNo       :=DB10        // DB for the Receivedata
       Start_Receivebuffer:=1           // Index for the begin of Receivebuffer
       Receivebuffer_Size :=30          // Size of the Receivebuffer (Ringbuffer)
       Input_65x          :=P#P  260.0 BYTE 4    // Input-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Output_65x         :=P#P  260.0 BYTE 4    // Output-Startaddress of the serial modul (modulwidth only 4 or 6 Byte)
       Used_Coupler_is_x33:=TRUE        // If the used Coupler is a 301 or 303 then put this input to FALSE else put it to TRUE
       Receive_next_Byte  :=#ReceiveIndex    //Index of the place for the next received character
       RESET              :=M10.0       // Reset to the serial Interface (this Variable will be deleted by the FB)
       Start_Sendjob      :=M10.1       // Start one Job for sending data (this Variable will be deleted by the FB)


  CALL  SFC   20
       SRCBLK :=P#DB10.DBX0.0 BYTE 255
       RET_VAL:=#test
       DSTBLK :=#ReceiveData


      CALL  FC    10
       S1     :=#ReceiveData
       S2     :=#NID_1
       RET_VAL:=#NID_1_1

  CALL  FC    10
       S1     :=#ReceiveData
       S2     :=#NID_2
       RET_VAL:=#NID_2_1

  U     #NID_4_1               // Hier muss ich aus einem String eine zahl auslesen und später weiterverwenden
      L     DB10.DBD   12
      T     #Druck


     U     E      0.0
      SPBNB _001
      CALL  SFC   20
       SRCBLK :=#SPS_1
       RET_VAL:=#err_sps_1
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_001: NOP   0

      U     E      0.1
      SPBNB _002
      CALL  SFC   20
       SRCBLK :=#SPS_2
       RET_VAL:=#err_sps_2
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_002: NOP   0

      U     E      0.2
      SPBNB _003
      CALL  SFC   20
       SRCBLK :=#SPS_3
       RET_VAL:=#err_sps_3
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_003: NOP   0


      U     E      0.3
      SPBNB _004
      CALL  SFC   20
       SRCBLK :=#SPS_4
       RET_VAL:=#err_sps_4
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_004: NOP   0

      U     E      0.4
      SPBNB _005
      CALL  SFC   20
       SRCBLK :=#SPS_5
       RET_VAL:=#err_sps_5
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_005: NOP   0


      U     E      0.5
      SPBNB _006
      CALL  SFC   20
       SRCBLK :=#SPS_6
       RET_VAL:=#err_sps_6
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_006: NOP   0

      U     E      0.6
      SPBNB _007
      CALL  SFC   20
       SRCBLK :=#SPS_7
       RET_VAL:=#err_sps_7
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_007: NOP   0

      U     E      0.7
      SPBNB _008
      CALL  SFC   20
       SRCBLK :=#SPS_8
       RET_VAL:=#err_sps_8
       DSTBLK :=P#DB11.DBX0.0 BYTE 255
_008: NOP   0
ich werd nun mal mich an meine sps setzten und testen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der FC10 arbeitet nur mit Strings, diese müssen auch richtig initialisiert sein, d.h. in Byte 0 und 1 (max Länge, genutzte Länge) muß auch etwas drinstehen, sonst wird der FC10 kein Ergebnis liefern. Das gilt auch, bzw. insbesondere, wenn man temporäre Strings verwendet! Hatte ich dir aber schon geschrieben.

Aber by the way, hier mal ein Baustein, der einen DB nach einem String durchsucht, allerdings hat der String eine feste Länge, du müßtest das anpassen für variable Strings bzw. 2 FB für die 2 Strings schreiben. Nur als Anregung

Code:
FUNCTION_BLOCK FB 110
TITLE =
AUTHOR : Ralle
FAMILY : System
NAME : Search
VERSION : 0.9


VAR_INPUT
  DBNr : INT ;                    //DB-Nummer des DB, der durchsucht werden soll
  Scanncode : STRING  [18 ];    //18 Zeichen langer Suchstring
  Max_Len : INT ;                //Wieviele Bytes sollen im DB durchsucht werden?
END_VAR
VAR_OUTPUT
  Pos : INT ;                    //Byte-Nr, an der der Code gefunden wurde
END_VAR
VAR_IN_OUT
  Start : BOOL ;                //einmalig zum Start setzen, wird am Ende vom FB zurückgesetzt
  Fertig : BOOL ;                //Fertigmeldung, wird bei Start immer gelöscht
  Code_gefunden : BOOL ;        //Codevergeleich war positiv, wird bei Start immer gelöscht
END_VAR
VAR
  ddSuch : DWORD ;                //erstes DWord zur Suche
  Zaehler : INT ;                //Suchzähler
END_VAR
VAR_TEMP
  SAVE_VKE : BOOL ;    
  RETTAR1 : DWORD ;    
  RETTAR2 : DWORD ;    
  wDBNo : WORD ;    
  TEMP0 : DWORD ;    
END_VAR
BEGIN
NETWORK
TITLE =

//Sichere VKE im BIE
      SET   ; 
      SAVE  ; 
      =     #SAVE_VKE; 

//Adressregister retten
      TAR1  #RETTAR1; 
      TAR2  #RETTAR2; 

      U     #Start; 
      SPBN  ENDE; 

      L     #DBNr; 
      T     #wDBNo; 
      AUF   DB [#wDBNo];         //globalen DB öffnen

      SET   ; 
      R     #fertig; 
      R     #Code_gefunden; 

      L     P##Scanncode; 
      LAR1  ; 
      L     DID [AR1,P#2.0];     //Byte0+1 sind Stringlänge
      T     #ddSuch;             //Das ist das erste DWord, das gesucht wird

      L     #Max_Len;             //Maximale Länge der Daten im DB
Z001: T     #Zaehler; 

      L     #Max_Len; 
      L     #Zaehler; 
      -D    ;                     //wir wollen ja bei DBD0 anfangen (bei Bedarf noch ein Offset dazu)
      SLD   3;                     //aus dem Zähler einen Pointer machen
      LAR1  ; 
      L     DBD [AR1,P#0.0]; 
      L     #ddSuch; 
      ==D   ; 
      SPB   VERG; 

      L     MD   100; 
      L     1; 
      +D    ; 
      T     MD   100; 

WESU: L     #Zaehler; 
      LOOP  Z001;                 //der Zaehler wird automatisch um 1 dekrementiert (erniedrigt)
      SPA   KCOD;                 //alles durchsucht, aber keine Übereinstimmung gefunden

VERG: NOP   0; 
//18 Zeichen vergleichen
//1 Zeichen entspricht einem Byte, 4 Zeichen haben wir schon, bleiben 14 weitere, macht 3 DWORD + 1 WORD

//Zeichen 5-8
      L     #Max_Len; 
      L     #Zaehler; 
      -D    ; 
      SLD   3; 
      LAR1  ; 
      L     DBD [AR1,P#4.0]; 
      T     #TEMP0; 
      L     P##Scanncode; 
      LAR1  ; 
      L     DID [AR1,P#6.0]; 
      L     #TEMP0; 
      ==D   ; 
      SPBN  WESU;                 //ungleich, also oben weitersuchen mit dem nächsten Byte

//Zeichen 9-12  
      L     #Max_Len; 
      L     #Zaehler; 
      -D    ; 
      SLD   3; 
      LAR1  ; 
      L     DBD [AR1,P#8.0]; 
      T     #TEMP0; 
      L     P##Scanncode; 
      LAR1  ; 
      L     DID [AR1,P#10.0]; 
      L     #TEMP0; 
      ==D   ; 
      SPBN  WESU;                 //ungleich, also oben weitersuchen mit dem nächsten Byte

//Zeichen 13-16
      L     #Max_Len; 
      L     #Zaehler; 
      -D    ; 
      SLD   3; 
      LAR1  ; 
      L     DBD [AR1,P#12.0]; 
      T     #TEMP0; 
      L     P##Scanncode; 
      LAR1  ; 
      L     DID [AR1,P#14.0]; 
      L     #TEMP0; 
      ==D   ; 
      SPBN  WESU;                 //ungleich, also oben weitersuchen mit dem nächsten Byte

//Zeichen 17-18
      L     #Max_Len; 
      L     #Zaehler; 
      -D    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#16.0]; 
      T     #TEMP0; 
      L     P##Scanncode; 
      LAR1  ; 
      L     DIW [AR1,P#18.0]; 
      L     #TEMP0; 
      ==D   ; 
      SPBN  WESU;                 //ungleich, also oben weitersuchen mit dem nächsten Byte

//18 Zeichen gleich, also Code gefunden und fertig
      SET   ; 
      S     #fertig; 
      S     #Code_gefunden; 
      R     #Start; 
      L     #Max_Len; 
      L     #Zaehler; 
      -D    ; 
      T     #Pos; 
      SPA   ENDE; 

//keine Übereinstimmung gefunden, aber das Ende des Suchbereiches erreicht
KCOD: SET   ; 
      S     #fertig; 
      R     #Code_gefunden; 
      R     #Start; 
      L     0; 
      T     #Pos; 

ENDE: NOP   0; 

//Zurückübertragen der geretteten Adressregister
      LAR1  #RETTAR1; 
      LAR2  #RETTAR2; 

      U     #SAVE_VKE; 
      SAVE  ; 
      BE    ; 
END_FUNCTION_BLOCK
Und hier noch ein SCL-Baustein, der aus einem DB Strings extrahiert, indem er nach einer Trennsequenz sucht, bei dir war das /r/v oder so?

Code:
FUNCTION_BLOCK FB7

Title = 'Auftrag'
//
// Auftragstrennung
// Zerlegung des Auftragsfiles
// in seine einzelnen Bestandteile
// Im File trennt ';' die 
// einzelnen Positionen voneinander
// 
Version : '1.0'
author  : Ralle
name    : AUFTRAG
family  : SYSTEM

VAR_INPUT
  // Eingangsparameter
  Auftrag: STRING[200];
END_VAR

VAR_OUTPUT // Ausgangsparameter
  Car_id_No: STRING[7];
  Kind_of_production: STRING[4];
  IO_Flag: STRING[2];
  Sachnummer: STRING[10];
  OPS_Kennung: STRING[3];
  Auftrag_Order_No: STRING[8];
  D_Part_Number_1: STRING[8];
  D_Part_Number_2: STRING[8];
  D_Part_Number_3: STRING[8];
  D_Part_Number_4: STRING[8];
  D_Part_Number_5: STRING[8];
  D_Part_Number_6: STRING[8];
  D_Part_Number_7: STRING[8];
  D_Part_Number_8: STRING[8];

END_VAR

VAR_TEMP
    // temporäre Variablen
  Pos: INT;
  SuchString: STRING;
  Length: INT;
END_VAR

// Anweisungsteil
//SuchString := '$0D$0A';
SuchString := ';';
Length := 0;

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Car_id_No :=            MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Kind_of_production :=   MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
IO_Flag :=              MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Sachnummer :=       MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
OPS_Kennung :=     MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Auftrag_Order_No := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_1 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_2 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_3 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_4 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_5 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_6 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_7 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
D_Part_Number_8 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

;
END_FUNCTION_BLOCK
Leider bin ich gerade unterwegs und habe kaum Netzzugang, daher kann eine Antwort eher wieder am Ende der Woche von mir kommen.

Hoffe der Code hilft dir etwas weiter, sollte zumindest als Anregung dienen.

PS: FIND, MID und DELETE sind funktionen aus der IEC-Standard-Library unter Step7!
 
Zuletzt bearbeitet:
Zurück
Oben