BLKMOV Fehler 16#837F

DiGo1969

Level-2
Beiträge
139
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein Problem mit dem SFC20 (BLKMOV).
Folgende Ausgangssituation:
- FC geschrieben in SCL
- im FC rufe ich über einen Pointer einen Datenbaustein auf
- den Inhalt möchte ich in eine Lokalvariabel ablegen (zum weiterverarbeiten)
- es handelt sich dabei um STRING-Variablen


hier die Struktur meiner VAR_TEMP
Code:
VAR_TEMP
  Pointer_Struct_in:  STRUCT
    ID:               BYTE;
    DataTyp:          BYTE;
    laenge:           INT;
    DB_Nummer:        INT;
    Byte_Bit:         DWORD;
  END_STRUCT;
  Pointer_Source AT Pointer_Struct_in: ANY;

  Pointer_Struct_out: STRUCT
    ID:               BYTE;
    DataTyp:          BYTE;
    laenge:           INT;
    DB_Nummer:        INT;
    Byte_Bit:         DWORD;
  END_STRUCT;
  Pointer_Meldung AT Pointer_Struct_out: ANY;
    Meldung:                    STRING[32];
END_VAR


Hier ein Auszug ais meinem Programm – hinter dem / habe ich die aktuellen Wert von „Beobachten“ geschrieben
Code:
// Aufrug des DB wo der String her kommt
  Pointer_Struct_in.ID:= 16#10;                             / 16#10
  Pointer_Struct_in.DataTyp:= 16#13;                        / 16#13
  Pointer_Struct_in.laenge:= 6;                             / 6
  Pointer_Struct_in.DB_Nummer:= 60                          / 60
  Pointer_Struct_in.Byte_Bit:= 16#84000000                  / 16#84000000 

// Pointer auf Lokalvariable kopieren
  Pointer_Meldung:= Meldung;                                /
// Anzeige zur Kontrolle
  HM_Byte:= Pointer_Struct_out.ID;                          / 16#10
  HM_Byte:= Pointer_Struct_out.DataTyp;                     / 16#13
  HM_INT:= Pointer_Struct_out.laenge;                       / 1
  HM_INT:= Pointer_Struct_out.DB_Nummer;                    / 0
  HM_DWord:= Pointer_Struct_out.Byte_Bit;                   / 16#870000E0
  Pointer_Struct_out.laenge:= 6;                            / 6
// Test ob etwas kopiert wurde
  HM_INT:= LEN(Meldung);                                    / 0

// BLKMOV
  HM_INT:= BLKMOV(SRCBLK := Pointer_Source                  / -31873
                 ,DSTBLK := Pointer_Meldung
                 );
// RET_VAL in Hex wandeln
  HM_Word:= INT_TO_WORD(HM_INT);                            / 16#837F
// Test ob etwas kopiert wurde
  HM_INT:= LEN(Meldung);                                    / 0

Wo ist mein Fehler, das der BLKMOV nicht ausgeführt wird?
Vielen Dank schon mal im Voraus! Dirk

 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Danke - ich habe beide Datentypen auf Byte geändert und kurz mal eine Abfrage programmiert, um herauszubekommen, ob der eingelesenen String die richtigen Daten enthält. Scheint zu funktionieren.
 
Guten Morgen,
ich hatte nun noch ein bisschen Zeit, um zu testen. Dabei ist mir folgendes aufgefallen:

- ich habe den DatenTyp auf 16#2 (Byte) geändert
- als länge habe ich verschiedenen Werte probiert - hier ist völlig egal was ich da eintrage

Nach dem BLKMOV ist die länge von "Meldung" immer die länge wie der Text im DB steht. Wenn ich die Textlänge im DB ändere ändert sich auch die länge von "Meldung".
Wo nimmt denn der BLKMOV die Anzahl der Wiederholungen her?


Arrays vom Datentyp String sind beim BLKMOV nicht erlaubt.
Wenn String nicht erlaub ist. Was habe ich nun für Möglichkeiten einen String aus einem DB als interne Variable in einen FC zu bekommen? Und das ganze bitte in SCL.


Vielen Dank - Gruß Dirk
 
Wo nimmt denn der BLKMOV die Anzahl der Wiederholungen her?

Also ich würde den baustein in den Übersichten markieren und dann die magische Taste drücken.
Da steh so etwas von Quelle und Ziel und das Verhalten bei verschiedenen Größen.


bike


P.S: gib Bescheid ich kenne "Der Vorleser"
 
Übersichten??? => Bausteinordner
magische Taste??? => F1

Ok - wenn man die Hilfe richtig liest, kommt man um einiges weiter. Habe ich leider vorher nicht gemacht. Ich habe nun das ganze mal ein bisschen getestet. Es sieht so aus, das alles so funktioniert wie ich das benötige.

Vielen Dank noch mal.

Gruss Dirk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok - wenn man die Hilfe richtig liest, kommt man um einiges weiter. Habe ich leider vorher nicht gemacht. Ich habe nun das ganze mal ein bisschen getestet. Es sieht so aus, das alles so funktioniert wie ich das benötige.

Vielen Dank noch mal.

Gruss Dirk

Ich bin begeistert, er hat es verstanden.
Nimm es nicht krumm, doch zuerst ein Bisschen selbst was tun und wenn es dann noch klemmt fragen, das ist doch ein tolles Zusammenspiel.


bike
 
Zurück
Oben