Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Probleme mit String leeren in TIA

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    ich habe folgende Problem. Habe ein Step 7 Projekt nach Tia V13 Migriert.
    Ich verwende einen Baustein in dem ich einen String Array leer macht.

    Code:
    FOR #i2 := 1 TO 6 BY 1 DO
            #ZAHL_FOLGE[#i2]:='';
            
        END_FOR;
    In Step 7 habe ich mit diesem Code keinen Fehler erhalten. In Tia bekomme ich den Fehler DB256 nicht geladen.


    setze ich in den String '' eine Zahl z.b so

    Code:
    FOR #i2 := 1 TO 6 BY 1 DO
            #ZAHL_FOLGE[#i2]:='0';
            
        END_FOR;
    ist der Fehler weg. Muss ich den Array String in TIA anders leeren ?
    Zitieren Zitieren Probleme mit String leeren in TIA  

  2. #2
    Registriert seit
    11.12.2009
    Beiträge
    2.097
    Danke
    387
    Erhielt 384 Danke für 267 Beiträge

    Standard

    ich mache es immer mit

    CHAR_VARIABLE := b#16#0;

    Grüße

    Marcel
    Stell Dir vor es geht, und keiner kriegts hin!

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Habe den Fehler gefunden. Es muss ein leerzeichen zwischen den ' ' .

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.791
    Danke
    884
    Erhielt 3.160 Danke für 2.560 Beiträge

    Standard

    Zitat Zitat von emilio20 Beitrag anzeigen
    Probleme mit String leeren in TIA
    [...]
    Code:
            #ZAHL_FOLGE[#i2]:='';
    In Step 7 habe ich mit diesem Code keinen Fehler erhalten. In Tia bekomme ich den Fehler DB256 nicht geladen.
    [...]
    Muss ich den Array String in TIA anders leeren ?
    Zitat Zitat von emilio20 Beitrag anzeigen
    Habe den Fehler gefunden. Es muss ein leerzeichen zwischen den ' ' .
    Das ist aber nicht das was Du wolltest. Damit erzeugst Du keinen leeren String sondern einen String, der ein Leerzeichen enthält.


    Zitat Zitat von Matze001 Beitrag anzeigen
    ich mache es immer mit

    CHAR_VARIABLE := b#16#0;
    Das ergibt ebenfalls keinen leeren String.


    Wann genau hat TIA wegen dem nicht geladenen DB256 gemeckert?
    Und nur dadurch, daß Du das Leerzeichen zwischen die Anführungsstriche schreibst, verschwindet die TIA-Fehlermeldung?
    Und wenn Du dann das Leerzeichen wieder weglöschst dann meckert TIA wieder?
    Eigentlich unglaublich.

    Wenn TIA nicht mehr meckert, dann heißt das noch lange nicht, daß der Programmcode richtig ist.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi all

    also wenn #zahl_folge ein string ist, dann kann man diesem mit #zahl_folge := '' leeren, d.h. auf Länge 0 bringen. Zwischen den einfachen Anführungszeichen ist kein Leerzeichen. '' ist der leere String.

    #zahl_folge[#i] ist der Zugriff auf das i-te Zeichen des Strings. In das i-te Zeichen kann man aber nicht nichts hinein schreiben sondern nur ein Zeichen, und sei es ein Leerzeichen oder $00 -- wie es die C Programmierer machen.

    Was einen ärgern und verrückt machen kann ist, dass es keinen Unterschied zwischen einem einzelnen Zeichen und einem String der Länge 1 gibt. 'x' ist beides. '' ist ein String und 'xx' auch.

    Was wir jetzt nicht wissen ist, ob emilo20 einen String der Länge 6 mit 6 Leerzeichen braucht oder einen String der Deklarationslänge 6 mit keinem Zeichen also der tatsächlichen Länge 0.

    'n schön' Tach auch
    HB


    PS: all we hear is Radio GaGa

  6. #6
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen


    Wann genau hat TIA wegen dem nicht geladenen DB256 gemeckert?
    Und nur dadurch, daß Du das Leerzeichen zwischen die Anführungsstriche schreibst, verschwindet die TIA-Fehlermeldung?
    Und wenn Du dann das Leerzeichen wieder weglöschst dann meckert TIA wieder?
    Eigentlich unglaublich.

    Wenn TIA nicht mehr meckert, dann heißt das noch lange nicht, daß der Programmcode richtig ist.

    Harald
    Sobaldl ich kein Leerzeichen verwende '' erhalte ich die Fehler "DB256 nicht geladen.". Verwende ich ein Leerzeichen ' ' ist der fehler weg.




    Was wir jetzt nicht wissen ist, ob emilo20 einen String der Länge 6 mit 6 Leerzeichen braucht oder einen String der Deklarationslänge 6 mit keinem Zeichen also der tatsächlichen Länge 0.

    Die Funktion ist für ein Codeschloss mit der ich über eine Matrix Tastatur die eingegeben Zahlenfolge zu einem String zusammen baue und diesen mit dem CODE vergleiche. Nach der Eingabe muss der Eingegeben Code gelöscht werden. hierzu möchte ich den String leeren.
    Für mein Programm reicht es aus ihn mit Leerzeichen zu füllen.


    Ich Poste mal den Code hierzu

    Code:
    
        
        #text:=' ';
      //Zuweißung TASTEN  
        #ZUWEISSUNG_TASTEN[1] :='1';
        #ZUWEISSUNG_TASTEN[2] :='2';
        #ZUWEISSUNG_TASTEN[3] :='3';
        #ZUWEISSUNG_TASTEN[4] :='4';
        #ZUWEISSUNG_TASTEN[5] :='5';
        #ZUWEISSUNG_TASTEN[6] :='6';
        #ZUWEISSUNG_TASTEN[7] :='7';
        #ZUWEISSUNG_TASTEN[8] :='8';
        #ZUWEISSUNG_TASTEN[9] :='9';
        #ZUWEISSUNG_TASTEN[10]:='0';
         
            
        
     /// Schieberegister. Bei Flanke EINGABE_FLANKE Zahl schieben
      IF #EINGABE_FLANKE = TRUE THEN
                    
            FOR #i := 1 TO 6 BY 1 DO
            #ZAHL_FOLGE[#i] :=#ZAHL_FOLGE[#i+1];
            END_FOR;
            
            #ZAHL_FOLGE[6] := #ZUWEISSUNG_TASTEN[#ZAHL];
          
        
      ///CODE_Zusammensetzen aus einselnen Zeichen zu einer Zeichenkette    
           END_IF;
            #ZAHL_FOLGE1:=#ZAHL_FOLGE;    
            
              #text:= CONCAT( IN1 :=#ZAHL_FOLGE1[1],
                             IN2 :=#ZAHL_FOLGE1[2]);
                             
              #text:= CONCAT( IN1 := #text,
                             IN2 := #ZAHL_FOLGE1[3]);
                             
              #text:= CONCAT( IN1 := #text,
                             IN2 := #ZAHL_FOLGE1[4]);
                             
              #text:= CONCAT( IN1 := #text,
                             IN2 := #ZAHL_FOLGE1[5]);
                             
              #text:= CONCAT( IN1 := #text,
                             IN2 := #ZAHL_FOLGE1[6]);
          
           #CODE_EINGABE:=#text;                         
                                      
                
      ///CODE RESET
      IF #RESET_FLANKE = true THEN 
          
        FOR #i2 := 1 TO 6 BY 1 DO
            #ZAHL_FOLGE[#i2]:=' ';
            
        END_FOR;
      END_IF;
    Geändert von emilio20 (14.12.2014 um 12:49 Uhr)

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.638
    Danke
    397
    Erhielt 2.379 Danke für 1.985 Beiträge

    Standard

    Hallo,
    es sieht für mich ein bißchen nach einer Deklarations-Geschichte aus.
    Das eine Mal heißt die Variable "Zahl_Folge" und das andere Mal "Zahl_Folge1".
    Es kann natürlich tatsächlich so sein, dass es beide Variablen (korrekt deklariert) gibt ... Schön wäre es m.E. also zu wissen, was an Variablen deklariert ist und wie (bzw. als was) ...

    Gruß
    Larry

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.791
    Danke
    884
    Erhielt 3.160 Danke für 2.560 Beiträge

    Standard

    Zitat Zitat von emilio20 Beitrag anzeigen
    Die Funktion ist für ein Codeschloss [...]
    Ich Poste mal den Code hierzu
    Die wichtigste Angabe fehlt: wie ist ZAHL_FOLGE deklariert?

    Anhand Deines Codes kommt man aber drauf, daß ZAHL_FOLGE ein STRING sein muß und kein Array of STRING.
    Ich glaube, Du solltest Dir die Erklärungen zu STRING, CHAR und Array nochmal genauer ansehen.

    Auch Deine falsch benutzten Fachausdrücke sind verwirrend. (String Array, String leeren, String Array leer machen, Zusammensetzen aus einzelnen Zeichen zu einer Zeichenkette)

    Zum Löschen eines Strings ist es nicht nötig, ihn komplett mit Leerzeichen zu füllen. Es reicht, die aktuelle Stringlänge auf 0 zu setzen, indem man ihm einen Leerstring (String mit der Länge 0) zuweist:
    Code:
    ZAHL_FOLGE := '' ;

    Zitat Zitat von emilio20 Beitrag anzeigen
    Habe ein Step 7 Projekt nach Tia V13 Migriert.
    Ich verwende einen Baustein in dem ich einen String Array leer macht.

    Code:
    FOR #i2 := 1 TO 6 BY 1 DO
            #ZAHL_FOLGE[#i2]:='';
            
        END_FOR;
    In Step 7 habe ich mit diesem Code keinen Fehler erhalten. In Tia bekomme ich den Fehler DB256 nicht geladen.
    Da mußt Du irgendwas nachträglich geändert haben... Auch in Step7-classic-SCL würde das eine Fehlermeldung ergeben.
    (damit der Code keinen Fehler ergibt, müßte ZAHL_FOLGE als "Array [1..6] of STRING" deklariert sein)

    Der Fehlertext von TIA ist in der Tat sinnfrei, da muß Siemens noch nacharbeiten. Vielleicht ist in der Entwicklungsabteilung auch noch niemand auf die Idee gekommen, einem CHAR ein Nichts zuzuweisen?


    Tip: Wenn Du sowieso nur Ziffern zur Codeeingabe nutzt, dann könntest Du statt Deinem verwirrend umständlichen und komplizierten Weg über Zeichen und Strings eine numerische Eingabe machen, da braucht man nur einfache Mathematik, etwa so:
    Code:
    VAR
      diEingabe : DINT ;
      iZAHL : INT ;
    END_VAR
    
    //eingegebene Ziffer anhängen
      IF #EINGABE_FLANKE THEN
        #diEingabe := ((#diEingabe * 10) + #iZAHL ) MOD 1000000 ;
      END_IF;
    
    //Eingabe löschen
      IF #RESET THEN
        #diEingabe := 0 ;
      END_IF;
    
    //Code richtig?
      IF #diEingabe = 123456 THEN
        ; // ...
      END_IF;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo ich habe einen String verwendet da ich die Funktionen evtl für eine Matrix Tastatur mit zahlen und Zeichen verwenden wollte.
    Was machst du wenn du als code (0304) verwenden willst ?
    Wenn ich es mit DINT mache kann ich bei der Code Eingabe dann auch 304 eingeben um die Türe zu Öffnen.
    Beim String muss ich 0304 eingeben damit die Türe Öffnet
    Geändert von emilio20 (14.12.2014 um 22:19 Uhr)

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.638
    Danke
    397
    Erhielt 2.379 Danke für 1.985 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... vielleicht bist du ja doch mal so nett und schreibst uns (vielleicht als Screenshot o.ä.) wie bei dir welche Variablen deklariert sind.

    Ansonsten :
    Wenn ich eine Code-Eingabe erstellen wollte dann sähe das bei mir komplett anders aus.
    Diese Code-Eingabe würde dann auf Basis der (Matrix-)Eingänge den Code-String immer um das entsprechende Zeichen erweitern. Also etwas so :
    Code:
    If Eingabe_1 then ZahlenFolge := Concat (ZahlenFolge , "1") ; end_if ;
    If Eingabe_2 then ZahlenFolge := Concat (ZahlenFolge , "2") ; end_if ;
    If Eingabe_3 then ZahlenFolge := Concat (ZahlenFolge , "3") ; end_if ;
    ... usw.
    Gruß
    Larry

    Nachsatz:
    Da ich gerade kein Step7 zur Hand habe ist der Befehl Concat nicht komplett syntax-richtig verwendet worden ...

Ähnliche Themen

  1. Mit C-Skript leeren String von S7 abfragen
    Von SchnitzelMatzi im Forum HMI
    Antworten: 2
    Letzter Beitrag: 07.10.2014, 07:04
  2. Probleme mit dem Auslesen von String-Arrays
    Von FelMa im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 10.03.2014, 15:32
  3. Probleme mit TIA Portal V11
    Von Lalelu im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.03.2013, 09:45
  4. Antworten: 10
    Letzter Beitrag: 09.04.2011, 20:40

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •