SFC15 im FB bringt Fehler!

INST

Level-2
Beiträge
272
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Ich will einen FB erstellen der mir die Ansteuerung eines DP-Slaves übernimmt. Mit SFC14 eingelesen werden 3Bytes und geschrieben werden sollen 2 Bytes. Da ich von "aussen" die PAE und PAA Adr. vergeben will, hab ich die SFC' benutzt. Hier das Prog.

Call "BLKMOV"
SRCBLK :=#Out_Echtzeitkanal //Struct Var. mit 16 Bits (2Byte Länge)
Ret_Val :=#Temp_Int
DSTBLK :=P#L 0.0 Byte 2

Call "DPWR_DAT"
LADDRf :=#Adr_PAA //Adr. in Hardwarekonfig in Hex
Record :=P#L 0.0 Byte 2
Ret_Val :=#Temp_Val

Das gleiche hab ich andersrum auch zum einlesen gemacht und funktioniert es. Die Adr. in Hex ist richtig angegeben aber auch sonst fällt mir nix auf was noch falsch sein könnte. Als Fehlermeldung bringt der SFC15 aber trotzdem "8090"

Hat jemand ne Idee?

Vielen Dank schon im vorraus
 
Hallo
Hast Du versucht mit T PAW XXX ?
Manche Slaves konnte ich auch nicht mit SFC auslesen bzw. schreiben. Besonders gerade Byte-Zahlen.
 
Zuletzt bearbeitet:
T PAW hab ich zwar noch nicht versucht, aber "P#A 100.0 Byte 2" und damit funktioniert es auch. Den SFC15 hab genommen damit ich die Adresse des Slaves "von aussen" also beim Aufruf des FB's frei vergeben kann. Das geht ja mit T PAW nicht oder gibt es noch ne andere möglichkeit?

Am Ret_Val zeigt er die "8090" an. Die Hilfe dazu bin ich durch gegangen aber hab nix falsches gefunden.

Gruß INST
 
doch geht

Code:
      L     #addr                       //in
      SLD 3
      T     #addr_temp                  //temp (dword)
      L     PEW [#addr_temp]
 
Zuletzt bearbeitet:
@volker
Mein geehrter Moderator, hast du nicht in deinem Code das berühmte SLD 3 vergessen?

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich habs versucht aber irgendwie werd ich noch nicht so ganz glücklich. Zur Info die PAA Adr. ist 98 also 62H.
Ich hab geschrieben:

L 98 Online steht: 62
SLD 3 310
T #Temp_DWord 310
T PAW [#Temp_DWord] 310

Hab auch versucht die 98 in anderen Formaten einzugeben aber immer das gleiche Ergebnis.
Das verwirrende ist nun, dass mein Slave zwar angesprochen wird, aber es ist egal was für eine Adr. (98) ich angebe. Ob 31, 120, ... alles egal.

Zur Info: Der Slave ist ein Burster Kraft-Weg-Auswertegerät.

Gruß INST
 
:( Ups. Sorry das mit den unterschiedlichen Adressen war Quatsch. Wenn ich diese ändere (und die CPU auf STOP und wieder RUN) wird der Slave nicht mehr angesprochen.

Aber nochmal zu deinem Code:

L #addr //in
SLD 3
T #addr_temp //temp (dword)
L PEW [#addr_temp]

Wo werden hier die Daten geladen die ich auf den Slave übertragen will?
Ich hab ja die Variable #Out_Echtzeitkanal die ich übertragen will.

Gruß INST
 
Wo werden hier die Daten geladen die ich auf den Slave übertragen will?
Ich hab ja die Variable #Out_Echtzeitkanal die ich übertragen will.
Gruß INST
niergendwo. ;)
Code:
L #addr //out
SLD 3
T #addr_out//temp (dword)
L #Out_Echtzeitkanal
T PAW [#addr_out]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Variable #Out_Echtzeitkanal hat das Format Struct und das kann ich nicht angeben. Aber über ne andere Variable und BlockMove gehts.

Vielen Dank für Eure Hilfe

Gruß Inst
 
warum struct?

ist das eine tempvar?
dann z.b. so
L LW 2

oder wenns im db liegt so
L db10.dbw10
 
Es ist eine StatVar.
Und Struct weil darin meine einzelnen statischen Var (alles Bits) zur Ansteuerung des Slaves sind. Nicht so gut? Hab ich von einem anderen Prog in dem ein Indramat Servo angesteuert wird aber da funktionierts auch mit den SFC14/15:)

Gruß Inst
 
Zuviel Werbung?
-> Hier kostenlos registrieren
klar kannnst du das so machen. wollte halt nur wissen warum.
normalerweise sollte das auch mit den sfc's klappen. bei 2 byte gehts aber halt auch über paw.
es würden bei statvar beide von mir erwähnten möglichkeiten funktionieren.
 
Mich interessiert halt schon noch warum es mit dem SFC nicht klappt aber das wichtigste ist das es jetzt läuft. Ich schau dann mal noch in Ruhe danach.:D

Vielen Dank für deine Hilfe

Gruß Inst
 
Zurück
Oben