Sfc14 - ret_val_fehlercode: 80b1

GSOhm

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



ich bekomme in folgendem Programm, immer einen Fehler (beim beobachten) - RET_VAL-FEHLERCODE: 80B1 = [Die Länge des angegebenen Zielbereichs ist ungleich der mit HW Konfig projektierten Nutzdatenlänge.]

Ich find den Fehler nicht! :confused:

Hier meine Programm ausschnitte (Programm ist eigentlich für mehrere Regler - ich wills aber erstmal mit einem hinkriegen):


Danke im Vorraus


[DB]
Adresse Deklaration Name Typ Anfangswert Aktualwert Kommentar
0.0 stat:in Regler_01.Adresse_IN WORD W#16#0 W#16#0
2.0 stat:in Regler_01.Adresse_OUT WORD W#16#0 W#16#0
4.0 stat Regler_01.Regler.IN.PEW1 DWORD DW#16#0 DW#16#0 Flow Rd
8.0 stat Regler_01.Regler.IN.PEW2 DWORD DW#16#0 DW#16#0 Setpoint Rd
12.0 stat Regler_01.Regler.IN.PEW3 WORD W#16#0 W#16#0 HW Error Rd
14.0 stat Regler_01.Regler.IN.PEW4 DWORD DW#16#0 DW#16#0 SerialNumber Rd
18.0 stat Regler_01.Regler.OUT.PAW1 DWORD DW#16#0 DW#16#0 Setpoint Wr

22.0 stat Regler_01.Regler.OUT.PAW2 WORD W#16#0 W#16#0 HW Error Reset WR

[FB10]
Netzwerk: 1 EINLESEN
CALL "DPRD_DAT" SFC14 -- Read Consistent Data of a Standard DP Slave
LADDR :=#Adresse_IN #Adresse_IN
RET_VAL:=#retval #retval
RECORD :=#Regler.IN #Regler.IN

Netzwerk: 2 VERARBEITUNG
//VERARBEITUNG

Netzwerk: 3 AUSGABE
CALL "DPWR_DAT" SFC15 -- Write Consistent Data to a Standard DP Slave
LADDR :=#Adresse_OUT #Adresse_OUT
RECORD :=#Regler.OUT #Regler.OUT

RET_VAL:=#retval #retval


[FB1]
Netzwerk: 1 Aufruf Regler_1

CALL #Regler_01
Adresse_IN :=W#16#100


Adresse_OUT:=W#16#100


[HW-KONFIG]
67 256...259 E ---- 1(3) - - - 1 -
67 260...263 E ---- 1(3) - - - 2 -
67 264...265 E ---- 1(3) - - - 3 -
67 266...269 E ---- 1(3) - - - 4 -
131 256...259 A ---- 1(3) - - - 5 -

131 260...261 A ---- 1(3) - - - 6 -

 
Das Problem lieg bei den RECORD Parameter für SFC14, also #Regler.IN.
Ich kann es nicht durchschauen. Irgendwo verschwindet es wo #Regler.IN deklariert ist.

Es scheint das den HW Eingangsbereich das SFC14 transferieren muss ist die Bytes 256 bis 259. Das sind nur 4 bytes.
SFC14 kann nur für 3 bytes, oder 5 bytes oder grösser verwendet werden.
 
genau das heisst es. um sfc14/15 nutzen zu können muss in der hw-config der bereich als konsitent angegeben werden.
hier mal als beispiel dp/dp-koppler. ist aber grundsätzlich bei anderen genauso
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    8,7 KB · Aufrufe: 120
Ich sehe ein anderes Problem. Du möchtest mit SFC14 entsprechend der Deklaration von Regler.In 16 Byte kopieren, aber auf deiner EA-Adresse 100 liegen nur 4 Byte. Du müsstest 4 Aufrufe mit den Variablen Regler.In.PEW1 bis -PEW4 zaubern.

PS: Ich würde die Variablen -.PED1 nennen ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Aventinus,

wäre schön wenn es so enifach wäre aber wenn ich im FB10 bei Record #Regler.IN.PED1 hinschreibe gibts mir nen fehler aus

oder mach ich was falsch?
 
Hi Aventinus,

wäre schön wenn es so enifach wäre aber wenn ich im FB10 bei Record #Regler.IN.PED1 hinschreibe gibts mir nen fehler aus

oder mach ich was falsch?

Das liegt daran das du in dem Struct die Variable auch PEW1 und nicht PED1 benannt hast. Trotzdem ist dein PEW1 im Stat-Bereich ein Doppelwort und sollte somit passen.
**Edit: Oder du änderst in deinem Struct für die 4 "PED's" den Datentyp von DWORD auf BYTE und lässt den Rest am SFC14. Das ergibt dann auch wieder die richtige Breite.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hier

4.0 stat Regler_01.Regler.IN.PEW1 DWORD DW#16#0 DW#16#0 Flow Rd
8.0 stat Regler_01.Regler.IN.PEW2 DWORD DW#16#0 DW#16#0 Setpoint Rd
12.0 stat Regler_01.Regler.IN.PEW3 WORD W#16#0 W#16#0 HW Error Rd
14.0 stat Regler_01.Regler.IN.PEW4 DWORD DW#16#0 DW#16#0 SerialNumber Rd


ändern auf:

4.0 stat Regler_01.Regler.IN.PEW1 BYTE B#16#0 B#16#0 Flow Rd
5.0 stat Regler_01.Regler.IN.PEW2 BYTE B#16#0 B#16#0 Setpoint Rd
6.0 stat Regler_01.Regler.IN.PEW3 BYTE B#16#0 B#16#0 HW Error Rd
7.0 stat Regler_01.Regler.IN.PEW4 BYTE B#16#0 B#16#0 SerialNumber Rd

Die Frage ist nur ob die Daten wie von die geplant auch wirklich in ein Byte passen. Aber das musst du schon selber schauen.
 
Ach Stopp, Kommando zurück. Ich habe zu schnell gelesen. Ja das Problem ist, wie schon richtig erkannt, das die Daten in HW-Konfig nicht konsistent sind und du im Moment mehrere Aufrufe vom SFC14 brauchst. Lass die Änderung in Byte von mir. Das war quatsch!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oh ich glaub ich check jetzt waste meinst aber - ich hab aber auch vorhin vergessen euch meine UDT mit rein zu stellen, vielleicht führt euch das auf die richtige Lösung?

INSTRUCT
PEW1DWORDDW#16#0FLOW RD
PEW2DWORDDW#16#0SETPOINT RD
PEW3WORDW#16#0HW ERROR RD
PEW4DWORDDW#16#0SERIALNumber RD
ENDSTRUCT
OUTSTRUCT
PAW1DWORDDW#16#0SETPOINT WR
PAW2 WORDW#16#0HW ERROR RESET
ENDSTRUCT
 
ES LÄUFT ES LÄUFT ES LÄUFT!!!! - Hab jetzt einfach für jeden PEW einen einzelnen SFC14 und dann flutscht es wie geschmiert!!!
Mein erstes Erfolgserlebnis!!!:ROFLMAO:ROFLMAO:ROFLMAO::ROFLMAO:
 
Zurück
Oben