DINT->STRING->DB

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein Problem beim Umwandeln eines DoubleInteger-Wertes in String-Zeichenkette, die in Datenbaustein geschrieben werden soll.
Ich habe probiert den DINT->STRING-Konverter zu benutzen:

DI_String:
I: L#1234567
RET_VAL: #String

BlkMove:
SRCBLK: #String
Retval: nen Integer
Dstblk: DB3.xxxxxxxxxx (was muss hier hin?)

Danke schonmal,

Gruß Philipp
 
Strings....

Noch etwas:
Wie werden Strings verwendet? Was muss ich in der Symboltabelle für einen String eintragen?

Gruß Philipp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal das zu "String" gehörende Beispiel aus der Step7-Hilfe:

Code:
Aufgabenstellung

In einem Kaufhaus sollen auf einem Display zwei Texte abwechselnd angezeigt werden. Der Text soll alle fünf Minuten wechseln. 

·	Text 1: "Neue Kollektion - Besuchen Sie unsere Kindermodenabteilung"

·	Text 2: "Unser Restaurant im 6. Obergeschoß ist geöffnet"

Lösungsweg

Die Texte werden im Datenbaustein "TEXTBIBLIOTHEK" vorgehalten. Der gerade aktuelle Text wird mit Hilfe der SFC 20 "BLKMOV" in den Displaypuffer Datenbaustein "Textausgabe" kopiert. Der Fünf-Minuten-Takt wird mit Hilfe eines Timers realisiert.

AWL-Quelle

//*************************************************************************************

Symboltabelle

BLKMOV	SFC    20	SFC    20	Direct Word Move
TEXTAUSGABE	DB     11	DB     11	
TEXTBIBLIOTHEK	DB     112	DB     112	
//********************************************************************
DATA_BLOCK "TEXTBIBLIOTHEK"
TITLE = enthält die beiden anzuzeigenden Texte
VERSION : 1.0

  STRUCT 	
   Text1 : STRING[80] := 'Neue Kollektion - besuchen Sie unsere Kindermodenabteilung!';	
   Text2 : STRING[80] := 'Unser Restaurant im 6. Obergeschoß ist geöffnet.';	
  END_STRUCT ;	

BEGIN
END_DATA_BLOCK


//********************************************************************
DATA_BLOCK "TEXTAUSGABE"

TITLE = Puffer für Display
VERSION : 1.0

  STRUCT 	
   Display : STRING[80];	
  END_STRUCT ;	

BEGIN
END_DATA_BLOCK


//********************************************************************
ORGANIZATION_BLOCK OB1
TITLE =
VERSION : 1.0


VAR_TEMP
  OB1_System: array[1..20] of byte;
END_VAR

BEGIN
NETWORK
TITLE =

      UN    M 24.3; 
      SPB   m001; 
      CALL "BLKMOV" (
           SRCBLK                   := "TEXTBIBLIOTHEK".Text1,
           RET_VAL                  := MW 0,

           DSTBLK                   := "TEXTAUSGABE".Display);

m001: U     M 24.3; 
      SPB   m002; 
      CALL "BLKMOV" (
           SRCBLK                   := "TEXTBIBLIOTHEK".Text2,
           RET_VAL                  := MW 0,
           DSTBLK                   := "TEXTAUSGABE".Display);

m002: NOP   0; 


NETWORK
TITLE = Umschalten von M24.3, falls fünf Minuten abgelaufen sind

      UN    T 10; 			//Timer läuft noch?
      L     S5T#5M; 
      SE    T 10;			//Start als Einschaltverzögerung 

      BEB   ; 				//Sprung ans Bausteinende, wenn T noch läuft
      R     T 10; 
      UN    M 24.3; 
      =     M 24.3; 			//M 24.3 negieren
END_ORGANIZATION_BLOCK

Leider ist das rein mit symbolischen Namen, aber das beantwortet evtl. auch deine Frage nach dem Symbolikeintrag.
 
Versuch es mal mit einem Pointer z.B.

P#db3.dbx0.0 byte 20

P#Datenbaustein.Bit_bei_dem_der_String_beginnt -> Länge des String in Byte, Word oder DWord.

Wenn Du den Datenbaustein schon Symbolische bearbeitest hast, müsste nach Eingabe des Pointers der Symbolische Name erscheinen.
 
nochmal...

Es funktioniert leider doch nicht so.

Wir haben das Eingangswort (aus Euchner Chipleser)
PEW260 = 16#87720120 und wollen dieses als STRING in den DB1 laden.
Wir haben es mit dem DINT->String-Konverter FC5 versucht und dann das Ergebnis mit BLKMOV FC 20 in den DB1 zu schreiben versucht.
Es funktioniert leider nicht...
Wer kann helfen?

thanks
Philipp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich denke mal, das du den di_string nicht richtig benutzt.

Code:
temp: strg	String[7]	0.0


      L     7                           //dem verwaltungsbyte die länge des strings übergeben
      T     LB     0

      CALL  FC     5                    //DI_STRING
       I      :=L#-678901
       RET_VAL:=#strg
      NOP   0

      CALL  SFC   20
       SRCBLK :=P#L 0.0 BYTE 9          //muss 2 länger sein als der string
       RET_VAL:=MW10
       DSTBLK :=P#DB10.DBX0.0 BYTE 9
      NOP   0
 
Danke für die Antwort...
Kann man dint->String überhaupt benutzen, um 16#87720120 in einen String zu wandeln?
Der String wird dann in einen Datenbaustein geschrieben,auf den die SIMATIC MP270 zugreift und dann den Benutzer mit dem entsprechenden Level aus der Passwortliste anmeldet..
 
Zurück
Oben