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

Ergebnis 1 bis 9 von 9

Thema: Double Integer to String und zuweisen

  1. #1
    Registriert seit
    15.05.2012
    Beiträge
    16
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo SPS-Experten

    ich tüftle jetzt schon mehrere Stunden an folgendem Problem:
    Ich muss aus einem Zählerwert der im Doubelintegerformat vorliegt, einen String erstellen der auch genau den Zählerwert aufweist. Dieser String soll dann auf einen Ausgangsbereich ausgegeben werden der sechs Byte lang ist. Grund hierfür ist eine große ASCII-Anzeige mit sechs Stellen die über PB-DB angesteuert wird, also pro Zeichenstelle ein Byte.
    Bisher hatte ich nur wenig bis garkeine Berührung mit Pointer und der Stringvariable und hoffe das Ihr mir da helfen könnt.
    Mein Ansatz war der SFC 5 DI_STRNG aber da kommt bei mir nur eine lustige Zeichenkette zum vorschein und wie ich die Sechs Byte auf einmal verschieben kann ist mir auch noch schleierhaft, hier hab ich mal mit dem SFC 20 BLK_MOV experimentiert aber leider ohne Erfolg.

    Danke schon mal für die Anregungen und Tipps!

    Gruß Doc
    Zitieren Zitieren Double Integer to String und zuweisen  

  2. #2
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von DocSchmid Beitrag anzeigen
    Mein Ansatz war der SFC 5 DI_STRNG aber da kommt bei mir nur eine lustige Zeichenkette zum vorschein und wie ich die Sechs Byte auf einmal verschieben kann ist mir auch noch schleierhaft, hier hab ich mal mit dem SFC 20 BLK_MOV experimentiert aber leider ohne Erfolg.
    Du musst nur die ersten zwei Byte nach dem Umwandeln weg lassen, dann hast du CHAR.
    Die kannst du dann weiter verwenden.
    Warum du die sechs Byte auf einmal schieben willst ist mir nicht klar.
    Was willst du machen damit?


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

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

    DocSchmid (17.01.2013)

  4. #3
    DocSchmid ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.05.2012
    Beiträge
    16
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo bike,

    ich weiß nicht ob die Byte zwingend auf einmal geschrieben werden müssen. Ich hab mir das nur so vor augen gehalten da ich mit einer Variablentabelle damit experimentiert hatte.

    AD 32 --> '1234'
    AW 36 --> '56'

    Ich würde gerne die Variable die dann an Stelle der 123456 tritt in einem auf den Ausgangsbereich zuweisen. Die Pointerbefehle hierzu kenne ich nicht bin aber immernoch am tüfteln. Wie soll ich die zwei bytes nach der Umwandlung weglassen hatte damit noch recht wenig zu tun.
    Geändert von DocSchmid (15.01.2013 um 14:12 Uhr)

  5. #4
    Registriert seit
    14.01.2013
    Beiträge
    5
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das klingt nicht nach einer ASCII-Anzeige wenn die Stellen mit nur 6 Byte angesprochen werden. Ist es eventuell eine 6-stellige 7-Segment-Anzeige? Dann musst du jede Stelle deiner DINT-Zahl in ein WORD umwandeln.
    Also z.B.
    DINT: L#123789 in
    BYTE: B#16#01; B#16#02; B#16#03; B#16#07; B#16#08 und B#16#09
    Geändert von seth452 (15.01.2013 um 15:43 Uhr)

  6. #5
    Registriert seit
    14.01.2013
    Beiträge
    5
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Wenn es doch char sind kannst du BLKMV verwenden.
    Ich weiß nicht wo du die 6 Bytes ablegst. Ich bin mal von MB0 - MB5 ausgegangen und bei den Ausgängen von AB0 -AB5. Wenn du stattdessen die Zeichen in einem DB liegen hast musst du "P#DB1.DBX0.0 BYTE 6" schreiben.

    Code:
          CALL  "BLKMOV"
            SRCBLK   :=P#M0.0 BYTE 6
            RET_VAL :=#Err
            DSTBLK   :=P#A0.0 BYTE 6

  7. Folgender Benutzer sagt Danke zu seth452 für den nützlichen Beitrag:

    DocSchmid (15.01.2013)

  8. #6
    DocSchmid ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.05.2012
    Beiträge
    16
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo seth452,

    eine 7-Segment-Anzeige ist es definitiv nicht denn wenn ich das mal so in die VAT-Tabelle eingebe wie B#16#02 dann schaut mich sowas aus dem Display an

    Ich habe es bis jetzt immer noch nicht hinbekommen das ich den DINT - Zählwert zum String wandeln kann. Muss auch nochmal erwähnen das ich gerade mit der Umwandlerrei schnell mal den Durchblick verliere.

  9. #7
    Registriert seit
    14.01.2013
    Beiträge
    5
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    OK. Du hast einen DB in dem der STRING angelegt ist. Ich gehe mal von DB1 aus und dort ist auch nur der STRING angelegt, nennen wir ihn "ANZEIGE" als STING[6]. Deinen DINT nennen wir "#DINT". Die 6 entstehenden BYTES musst du in AB0 - AB5 schreiben. Dann lautet dein Code:

    Code:
          CALL  "DI_STRNG"
           I      :=#DINT
           RET_VAL:=DB1.ANZEIGE
    
          CALL  "BLKMOV"
           SRCBLK :=P#DB1.DBX2.0 BYTE 6
           RET_VAL:=#Err
            DSTBLK :=P#A0.0 BYTE 6

  10. Folgender Benutzer sagt Danke zu seth452 für den nützlichen Beitrag:

    DocSchmid (17.01.2013)

  11. #8
    DocSchmid ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.05.2012
    Beiträge
    16
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Moin moin seth452,
    ich hab mir das gestern mal angesehen und ausprobiert.
    Wenn ich deinen Code in abgeändeter Form eingebe erhalte ich garkeine Anzeige. ???
    Ich habe die Zuweisung dann mit Lade/Transfer befehlen versucht und hatte dann auch eine Anzeige die dem Zählerwert entsprach, nur komplett durcheinander?

    Ich teste im Moment noch ein, zwei Theorien aber ich denke das ich einen Fehler aus dem DI_STRNG bekomme oder da noch etwas nicht stimmt.

    Ich melde mich auf jedenfall noch einmal!

    Gruß Doc!

  12. #9
    DocSchmid ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.05.2012
    Beiträge
    16
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So jetzt,

    also ich habe gestern die Umwandlung in einen STRING hin bekommen.
    Die Lösung war dann:

    Umwandlung mit DI_STRNG FC5 und ablage in einen DB mit der Variable ANZEIGE_ST2 STRING[8].
    Mein Fehler war bisher das ich mit der Zuweisung an die einzelnen STellen mit Byte 0 begonnen habe.
    Nach dem ich aber bemerkt hatte, dass da nur Kauderwelch drinsteht und sich in den darauf folgenden
    Bytes der Zählwert wiederspiegelte habe ich wie mir breits "bike" schon geraten hatte die ersten 2
    Bytes außer acht gelasssen. Die Zuweisung habe ich dann byteweise über Lade/Transferbefehle an die
    Ausgabebytes übergeben. --> Funtioniert

    Danke an der Stelle nochmal an "bike" und "seth452"

    Weiterhin frohes programmieren!

    Gruß Doc

Ähnliche Themen

  1. String in Integer
    Von Thorilla im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.01.2011, 13:02
  2. FC16 Integer in String wandeln
    Von peraho im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 09.04.2009, 08:05
  3. STRING einer DB-Variablen indirekt zuweisen (SCL)
    Von maweri im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 26.05.2008, 15:58
  4. HEX String aus Integer Parametern
    Von Florian30 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.10.2006, 11:29
  5. Integer nach String umwandeln
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 04.07.2004, 13:42

Stichworte

Lesezeichen

Berechtigungen

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