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

Ergebnis 1 bis 10 von 10

Thema: Double_Integer in String wandeln

  1. #1
    Registriert seit
    12.11.2011
    Beiträge
    35
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, miteinander,
    ich möchte eine DINT wandeln in einen String.

    Allerdings akzeptiert der Baustein am RET_VAL nur einen StringTypen

    Ich habe schon etwas probiert, (DB mit fester Stringlänge), funzt aber nicht

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.dbx0.0 byte 10

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.dbx0.0 byte 18

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.String

    Wo stelle ich mich dumm an?
    Zitieren Zitieren Double_Integer in String wandeln  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo olddragon,

    der Baustein akzeptiert nur symbolisch adressierte Strings.

    Grüße
    Gebs

  3. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    olddragon (13.03.2012)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... und der String muss initialisiert sein - also in den beiden Headerbytes müssen die deklarierte Länge (und die tatsächliche Länge) des Strings korrekt drin stehen ...

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    olddragon (14.03.2012)

  6. #4
    Registriert seit
    12.11.2011
    Beiträge
    35
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jetzt gehts doch nicht.

    Temporäre Deklaration:
    Zeichenkette String[12] 0.0
    FailNr INT 14.0
    TE_DINT DINT 16.0
    Stringlaenge INT 20.0
    // Positive Flanke
    U M 168.1
    SPBNB _001
    // Double Integer in String wandeln
    CALL "DI_STRNG"
    I :=#IN_DINT
    RET_VAL:=#Zeichenkette
    // Länge der Zeichenkette feststellen
    CALL "LEN"
    S :=#Zeichenkette
    RET_VAL:=#Stringlaenge
    // Zeichenkette in DB7 übergeben
    CALL "BLKMOV"
    SRCBLK :=#Zeichenkette
    RET_VAL:=#FailNr
    DSTBLK :=P#DB7.DBX0.0 BYTE 14
    // Vorkopf beschreiben
    L 12
    T "DB_ZAEHLinCHAR".StringVK1
    NOP 0
    L #Stringlaenge
    T "DB_ZAEHLinCHAR".StringVK2
    _001: NOP 0


    Dieser Programmteil erzeugt wilde Zeichen statt einem vernünftigen String. Als Stringlänge wird 0 ausgegeben.

    Kann mir jemand sagen, warum?

  7. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Wie Larry schon schrieb, "#Zeichenkette" mußt initialisiert werden.
    Da das bei dir eine Temp ist, geht das nur über direkten Zugriff auf die Lokaldaten oder besser (weil sauberer) über indirekte Adressierung.

    L 255
    T LB0 //max. Länge des Strings
    L 2
    T LB1 //tatsächliche Länge des Strings

    oder

    L P##Zeichenkette
    LAR1

    L 255
    T B [AR1,P#0.0]
    L 2
    T B [AR1,P#1.0]

    Da die einfache Deklaration über String einen 255 Byte langen String erzeugt, der den lokalen Stack belegt, könntest du auch z.Bsp. einen String[20] deklarieren. noch einfacher geht es, wenn du einen String ein einem DB deklarierst, dann ist er auch initialisiert.

    Statt Lade 2 kannst du bitte mal lade 0 testen, sollte am Anfang ja ein String mit Länge 0 sein.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    olddragon (14.03.2012)

  9. #6
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... und der String muss initialisiert sein - also in den beiden Headerbytes müssen die deklarierte Länge (und die tatsächliche Länge) des Strings korrekt drin stehen ...
    Es reicht, die maximale Länge des Strings zu initialisieren.

    Die aktuelle Länge des Strings wird dann durch den FC5 DI_STRNG beschrieben.

    Gruß Kai

  10. #7
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    L 255
    T LB0 //max. Länge des Strings
    L 2
    T LB1 //tatsächliche Länge des Strings

    oder

    L P##Zeichenkette
    LAR1

    L 255
    T B [AR1,P#0.0]
    L 2
    T B [AR1,P#1.0]
    Es reicht, die maximale Länge des Strings zu initialisieren.

    Die aktuelle Länge des Strings wird dann durch den FC5 DI_STRNG beschrieben.

    L 255
    T LB0 //max. Länge des Strings

    oder

    L P##Zeichenkette
    LAR1

    L 255
    T B [AR1,P#0.0]

    Gruß Kai

  11. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    olddragon (14.03.2012)

  12. #8
    Registriert seit
    12.11.2011
    Beiträge
    35
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke, Ralle: Damit gehts!

    L P##Zeichenkette
    LAR1

    L 255
    T B [AR1,P#0.0]
    L 2
    T B [AR1,P#1.0]

  13. #9
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von olddragon Beitrag anzeigen
    Hallo, miteinander,
    ich möchte eine DINT wandeln in einen String.

    Allerdings akzeptiert der Baustein am RET_VAL nur einen StringTypen

    Ich habe schon etwas probiert, (DB mit fester Stringlänge), funzt aber nicht

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.dbx0.0 byte 10

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.dbx0.0 byte 18

    CALL "DI_STRNG"
    I :=L#56734
    RET_VAL:=p#db7.String
    Das nachfolgende Programmbeispiel wandelt mit der Funktion FC5 DI_STRNG einen DINT in einen STRING und speichert den STRING in einem DB.

    Der STRING wird mit einem führenden Vorzeichen dargestellt.

    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  14. #10
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und noch ein paar Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

Ähnliche Themen

  1. CHAR in STRING wandeln
    Von morpheuss im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.08.2011, 13:29
  2. CoDeSys Real in String wandeln
    Von guwen im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 08.04.2011, 06:36
  3. Byte in String wandeln
    Von matchef im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 15.10.2010, 17:03
  4. String in Any wandeln im SCL
    Von Masticore666 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 29.09.2010, 16:02
  5. Satz in String wandeln
    Von Gerri im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.07.2008, 18:29

Lesezeichen

Berechtigungen

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