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

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

Thema: Problem mit BLKMOV

  1. #1
    Registriert seit
    11.04.2008
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo miteinander,
    ich habe ein kleines Problem. Udn zwar möchte ich eine Real-Zahl in einen String umwandeln. Hierfür hab' ich mir von OSCAT dei Funktion REAL_TO_STRF besorgt.

    Die beiden Variablen liegen im DB301
    +0.0 realzahl REAL 1.230000e+000
    ...
    +6.0 realstring STRING[14] '666'

    #str ist eine Lokale Temp-Variable vom Typ STRING

    Hier ist der Code den ich dafür benutzen wollte. Nur irgendwie scheint das nicht zu funktionieren. Der String wird immer mit nullen überschrieben.

    Code:
          CALL  "REAL_TO_STRF"
           IN     :=DB301.DBD0
           N      :=2
           RET_VAL:=#str
    
    
    
          CALL  "BLKMOV"
           SRCBLK :=#str
           RET_VAL:=MW0
           DSTBLK :=P#DB301.DBX6.0 BYTE 14
    Wo liegt mein Denkfehler? Danke schon mal.
    Geändert von dasgrundprinzip (09.10.2009 um 09:44 Uhr)
    Zitieren Zitieren Problem mit BLKMOV  

  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,

    schau mal in die S7-Hilfe. Da steht:
    Angabe des Speicherbereichs, der kopiert werden soll (Quellfeld). Arrays vom Datentyp STRING sind nicht erlaubt.
    Grüße
    Gebs

  3. #3
    dasgrundprinzip ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.04.2008
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke, Soll heißen:
    Code:
    SRCBLK :=#str
    ist so nicht richtig.
    Aber wie geb ich jetzt nen pointer auf diesen string an?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ich meiner Step7-Hilfe steht zwar, das String-Array's nicht kopiert werden - einzelne Strings aber schon. Daran wird es also wohl nicht liegen.

    Da du eine TEMP-Variable für die String-Zuweisung nimmst ... versuch doch mal diese vor Verwendung zu initialisieren (deklarierte Länge und 0 für die tatsächlich genutze Länge in die Bytes 0 + 1 des Strings-Headers einzutragen ...

    Gruß
    LL

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

    Standard

    Code:
    P#L 0.0 BYTE 14
    0.0 muss Du dann durch die Anfangsadresse von #str ersetzen.

    Grüße
    Gebs

  6. #6
    Registriert seit
    16.05.2007
    Ort
    im Stahlwerk...
    Beiträge
    1.178
    Danke
    120
    Erhielt 429 Danke für 236 Beiträge

    Standard

    Deine temporär-Variable #str vom Typ "String" belegt ja einen Adressbereich im Temp-Bereich. Den kannst Du auch 'normal' mit einem Move-Befehl umkopieren:

    Code:
    L LW0             //Erstes Wort der Lokalen Stringvariable
    T DB301.DW6   //Erstes Wort im DB
    L LW2             //Zweites Wort der Lokalen Stringvariable
    T DB301.DW8   //Zweites Wort im DB
    usw
    Siehe auch Beitrag #4 und #5

    Gruß
    Nihil est in cpu, quod non fuerit in intellectu" - Nichts ist in der CPU, was nicht (zuvor) im Verstand war.
    Zitieren Zitieren geht auch ohne Blockmove..  

  7. #7
    dasgrundprinzip ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.04.2008
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wenn ich mit dem Pointer auf den lokalen String zeige - wie von Gebs beschrieben - bekomme ich ebenfalls nur Nullen.

    Die Variante von Approx liefert das selbe ergebnis

    es scheint das im String #str schon nichts drinsteht.

  8. #8
    Registriert seit
    16.05.2007
    Ort
    im Stahlwerk...
    Beiträge
    1.178
    Danke
    120
    Erhielt 429 Danke für 236 Beiträge

    Standard

    aus der OSCAT-Hilfe zu dem verwendeten Baustein:
    REAL_TO_STRF konvertiert einen REAL-Wert in einen STRING mit einer festen
    Anzahl von Nachkommastellen N. Bei der Konvertierung wird ausschließlich
    in Normales Zahlenformat XXX.NNN umgewandelt. Bei der Umwandlung
    wird IN auf N Stellen nach dem Komma gerundet und dann in
    einen String mit dem Format XXX.NNN gewandelt. Wenn N = 0 wird die
    REAL Zahl auf 0 Stellen hinter dem Komma gerundet und das Ergebnis als
    Integer ohne Punkt und Nachkommastellen ausgegeben. Wenn die Zahl IN
    kleiner ist als mit N Nachkommastellen erfasst werden können wird eine
    Null ausgegeben. Die Nachkommastellen werden immer auf N Stellen mit
    Nullen aufgefüllt. Die maximale Länge der Zeichenkette beträgt 20 Stellen.
    Beispiel: REAL_TO_STRF(3.14159,4) = '3.1416'
    REAL_TO_STRF(3.14159,0) = '3'
    REAL_TO_STRF(0.04159,3) = '0.042'
    REAL_TO_STRF(0.001,2) = '0.00'
    Nihil est in cpu, quod non fuerit in intellectu" - Nichts ist in der CPU, was nicht (zuvor) im Verstand war.

  9. #9
    dasgrundprinzip ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.04.2008
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Approx: Das hab' ich auch gelesen. Dürfte aber nicht das Problem sein.
    Realzahl: 1,23
    N: 2
    Ergebnis: 1,23
    Zumindest sollte dass das Ergebnis sein. *g*

  10. #10
    Registriert seit
    16.05.2007
    Ort
    im Stahlwerk...
    Beiträge
    1.178
    Danke
    120
    Erhielt 429 Danke für 236 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Sicher. Ich hab bloß vermutet, dass deine angegebenen 1,23 nur als Beispiel zur Problemverdeutlichung dienten und in Wirklichkeit eine dynamische Variable am IN parametriert war. Wenn diese dann kleiner 0,01 ist, wäre das eine mögliche Erklärung gewesen...

    Tja.. dann ist es ja nen komischen kram. Kannst Du statt einer Temp-Variable nicht mal nen DB oder Merkerbereich dranklatschen?

    Gruß
    Nihil est in cpu, quod non fuerit in intellectu" - Nichts ist in der CPU, was nicht (zuvor) im Verstand war.

Ähnliche Themen

  1. Blkmov
    Von sps_mitte im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.08.2010, 12:24
  2. blkmov in SCL
    Von Felse im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 25.03.2009, 14:20
  3. Sfc 20 blkmov
    Von Franz im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 29.12.2008, 14:24
  4. Problem mit BLKMOV bei Zugriff auf V-Lokaldaten
    Von armadillo im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.02.2006, 06:38
  5. BlkMov
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.02.2004, 11:33

Lesezeichen

Berechtigungen

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