4 Bytes an DP Slave schreiben

TonyMono

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem:

Innerhalb eines Funktionsbausteins sind mehrere Datenstrukturen enthalten (Länge 64 Byte). Diese Datenstrukturen müssen an einen DP Slave übertragen werden. Die Länge der zuübertragenden Datenstruktur ist abhängig von meiner zuvor definierten Telegrammlänge (z.B. IN/OUT64Byte; IN/OUT32Byte usw.). Dies funktioniert problemlos mit SFC14/15 und ich kann entsprechend 32 oder 64 Bytes an Slave übertragen bzw. lesen. Nun aber habe ich das Problem, dass es eine Telegrammlänge 64IN/4OUT Bytes gibt. An dieser Stelle kann ich keine SFC15 einsetzen (Fehlermeldung bei Übertragung von 4 Bytes). Welche Möglichkeiten bleiben mir zur Übertragung dieser 4 Bytes an den Slave ? (Um die 4 Bytes konsistent zuübertragen reicht eine Lade/Transfer Operation aus, aber die Parametrierung muss variabel sein).
Folgende Informationen liegen mir als Variable vor:
Adresse im A Bereich --> W#16#200
Telegrammlänge --> 4
Die Nummer des zugehörigen Instanz-DB kann variabel sein (über DINO bekomme ich diese Nummer). Die Positionen meiner Datenfelder innerhalb des DB sind immer identisch (z.B. DB32.DBX104.0 Byte 4).

Welche Möglichkeiten bleiben um die 4 Bytes an den Slave zu übertragen ? (SFC20 ?; SFC81 ?;..). Die Parametrierung des Ausgangsbereichs (z.B. PAD512) sowie die Nummer des DBs ist variabel.
 
Welche Fehlermeldung bekommst Du denn vom SFC15?

Normal sollten 4 Byte auch kein Thema sein.
Status 8092 sagt, In ANY-Referenz ist eine Typangabe ungleich BYTE angegeben.
Oder der ist auch gern genommen: 80B1 Die Länge des angegebenen Quellbereichs ist ungleich der mit STEP 7 projektierten Nutzdatenlänge.

Einfach mal die Hilfe des SFC aufrufen, da stehen die Fehlercode´s drin.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1,2 oder 4 byte kan du nur machem mit
L xByyy/xWyyy/xDyyy
T PABzzz/PAWzzz/PADzzz
oder mit SFC20 (adressieren mit Pointers)

Lese die hilfe von SFC14/15, diese SFC kan du nur brauchen fur 3 byte oder >4 byte konsistent zuübertragen .
 
1,2 oder 4 byte kan du nur machem mit
L xByyy/xWyyy/xDyyy
T PABzzz/PAWzzz/PADzzz
oder mit SFC20 (adressieren mit Pointers)

Lese die hilfe von SFC14/15, diese SFC kan du nur brauchen fur 3 byte oder >4 byte konsistent zuübertragen .

Ich habe die Hilfe der SFC14/15 gelesen, aber nichts gefunden, dass man 4 Byte nicht übertragen kann. Wo steht es genau?
 
Auf die underste alinia. Gleich oben die Fehlerliste (Bei der HINWEIS)
 

Anhänge

  • SFC14.JPG
    SFC14.JPG
    85,5 KB · Aufrufe: 58
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mal meine Hilfe als PDF angehängt.

Steht das dort auch? Verwende Step7 V5.4 SP1.

Ich habe vor ein paar Tage Information der Länge 4 Byte an einen FU gesendet und auch von ihm empfangen. Es gab keine Fehlermeldung. Verwendet habe ich SFC14/15.

Gruß
 

Anhänge

  • SFC14 Hilfe.pdf
    22,2 KB · Aufrufe: 50
Hierbij Die PDF file von SFC14 aus Step7 V5.4 SP4 Siehe bei Hinweis
 

Anhänge

  • SFC 14 _DPRD_DAT_.pdf
    9,2 KB · Aufrufe: 28
Danke für die Infos..

Ich arbeite nun mit der SFC81 weil die Ausführung der Funktion nicht unterbrochen werden kann und dadurch die Daten konsistent übertragen werden können. Allerdings gibt es nun das Problem, dass keine Speicherbereiche des Peripheriebereichs kopiert werden können (bzw. dorthin kopiert werden können) --> Ret_Val: w#16#8323. Wenn ich mein A-Bereich in das OB1-Prozessabbild lege funktioniert dieses einwandfrei.

Welche Möglichkeiten habe ich noch um die 4 Bytes in die Peripherie zu kopieren ?

L W#16#200 //Begin der Peripherie
T MW 12
LAR1 P##Pointer_ANY //Any für Parametrierung
L W#16#1002
T LW [AR1,P#0.0]
L W#16#4
T LW [AR1,P#2.0]
L W#16#0
T LW [AR1,P#4.0]
L B#16#82
SLD 24
L MW 12
SLD 3
OD
T LD [AR1,P#6.0]

U M 8.0
SPBN TTT1
R M 8.0
CALL "UBLKMOV"
SRCBLK :=P#DB32.DBX104.0 BYTE 4
RET_VAL:=MW10
DSTBLK :=#Pointer_ANY
 
Zurück
Oben