Double Integer to String und zuweisen

DocSchmid

Member
Beiträge
18
Punkte Reaktionen
3
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
 

bike

Well-known member
Beiträge
6.464
Punkte Reaktionen
794
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
 
OP
D

DocSchmid

Member
Beiträge
18
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
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.
 
Zuletzt bearbeitet:

seth452

Member
Beiträge
5
Punkte Reaktionen
2
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
 
Zuletzt bearbeitet:

seth452

Member
Beiträge
5
Punkte Reaktionen
2
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
 
OP
D

DocSchmid

Member
Beiträge
18
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
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.
 

seth452

Member
Beiträge
5
Punkte Reaktionen
2
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
 
OP
D

DocSchmid

Member
Beiträge
18
Punkte Reaktionen
3
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!
 
OP
D

DocSchmid

Member
Beiträge
18
Punkte Reaktionen
3
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
 
Oben