Step 7 Busteine SFB 14 und SFB 15 (PUT und GET)

widerstand

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

Ich habe eine SPS 400 (413-2DP) und eine SPS 300 (CPU 314 mit CP342-5). Ich habe mit den Bausteinen PUT und GET daten von von der S400 zu der S300 und umgekehrt gesendet über eine Profibusleitung die ich im NetPro (einseitige S7-Verbindung) eingerichtet habe. Beide Stationen sind als Master konfiguriert.

Die Übertragung der Daten verlief Problemlos. Ich möchte aber auch in einer Variablentabelle STATUS, NDR, DONE und ERROR angezeigt bekommen. Leider klappt es nicht so wie ich es mit Merker gemacht habe..

durch OB1 werden FC-Bausteine aufgerufen und in FC1 befindet sich SFB14 (GET) und in FC2 SFB15(PUT)

Wie bekomme ich die Werte für NDR, STATUS ERROR und DONE angezeigt.

Vielen Dank im vorraus für die Antworten
 

Anhänge

  • SFB14_GET.JPG
    SFB14_GET.JPG
    140,6 KB · Aufrufe: 54
  • Instanz-Datenbaustein von SFB14_GET.JPG
    Instanz-Datenbaustein von SFB14_GET.JPG
    63,9 KB · Aufrufe: 46
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort,
leider klappt es so auch nicht mit der Anzeige STATUS. in der Variablentabelle wird mir vor, während und nach der Übertragung immer wieder W#16#0000
angezeigt.

VAT.JPG

LG
 
Wie sieht denn der Signalverlauf des E0.2 aus?
Wird der Datentransfer nicht immer über eine Positive Flanke angestoßen.

Des weiteren (jetzt mal so aus dem Gedächtnis) liegt das NDR bzw. Statussignal nur sehr kurz am Ausgang an und wird nach erfolgreichem Abschluss wieder auf Null gesetzt oder?

Der Error Output is sowieso Null wenn die Kommunikation OK ist.
 
Du bist mit ein PC Adapter (MPI) angeschlossen. Vielleicht passiert den Transfer so schnell das du es nicht über den langsahme PC Adapter bemerken kannst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
E0.2 ist bei mir ein Schalter auf einem Board den ich selber betätige. Ich habe mir auch gedanken darüber gemacht das vielleicht das Signal für STATUS ect. nur kurz am Ausgang anliegt und ich es somit nicht sehen kann. Gibt es eine einfache Möglichkeit das Signal festzuhalten?
 
Danke für deinen Vorschlag aber so richtig verstanden habe ich das nicht. Z.B. was kommt an die Stelle von NDR und Status die Adresse des Datenbausteins?
Wofür steht SPBN Ma99?

Ich habe das so gemacht dass ich den Inhallt von dem Instanz-Datenbaustein DB15 in einem normalen Datenbaustein kopiert habe mit Lade-und Transferbefehl und diese im VAT anzeige.. leider auch ohne Erfolg ...

Baustein 1:

Netzwerk 1:

CALL FC 1
CALL FC 2
L DB14.DBB 6
T DB1.DBB 0
BE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
NDR und Status in meinem Beispiel, waren die Werte aus dem DB (oder von mir aus auch Datenpunkte in dem die Werte vom FB-Out gespeichert wurden).

Der Sinn von SPBN ist den Transferbefehl nur dann auszuführen wenn in Status irgendwas ungleich 0 steht. Ma99 war der Name meiner Sprungmarke.

wenn du den Transferbefehl, so wie du, zyklisch ausführst wird dann auch wieder 0 drüber geschrieben sobald Status wieder auf 0 geht... Duh
 
Zuletzt bearbeitet:
U "INSTANZ_DB_GET".NDR
S M 10.0
U "INSTANZ_DB_GET".ERROR
S M 11.0

L 0
L DB14.DBB 6
<>I
SPBN Ma99
T MW 12
Ma99: NOP 0

Bekomme nun endlich was angezeigt in der VAT. Sobald die Übertragung erfolgreich abgeschlossen wurde wird der BIT bei NDR und DONE gesetzt die anderen (STATUS ERROR) bleiben aber immer noch bei W#16#0000 ist ja auch logisch weil da sich ja nichts verändert: oder?

Zustandsparameter ERROR und STATUS,
Fehleranzeige:
ERROR=0
STATUS hat den Wert:
0000H: weder Warnung noch Fehler
<> 0000H: Warnung, STATUS liefert detaillierte Auskunft.
ERROR=1
Es liegt ein Fehler vor. STATUS liefert detaillierte Auskunft über die Art des Fehlers.


Wie bekomme ich aber den BIT bei M11.0 wieder zurückgesetzt wenn ich zb. den Schalter E 2.5 Betätige?


Und nochmals vielen DANK:D
 
du kannst deine Merker zum Beispiel beim Anstoß einen neuen Transaktion rücksetzten.

Und es muss Db14.DBW6 heißen.
 
Sorry E2.7 war nur ein Bespiel. Werde morgen es versuchen den Inhalt bei einem Anstoß einer neuen Transaktion zurückzusetzen für heute muss ich leider aufhören.

Ist ein echt tolles Forum hier:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst natürlich das Errorbit auf ein weiteres Bit legen welches du dann irgendwie resetest.

Ich mache das üblicherweise so das ich einen Zähler inkrementiere für jedes Done und jedes Error. Da sieht man dann recht schnell ob die Kommunikation läuft oder nicht.

Gleichzeitig sichere ich mir mit jedem Errorbit das kommt den Status bis zum nächsten Auftreten in einem eigenen Wort.
z.B. So:
Code:
#TSEND_Instance(REQ:=#C1.TSEND.SEND,
                ID:=#IKS_Parameter.id,
                LEN:=#C1.TSEND.LEN,
                DONE=>#C1.TSEND.DONE,
                BUSY=>#C1.TSEND.BUSY,
                ERROR=>#C1.TSEND.ERROR,
                STATUS=>#C1.TSEND.STATUS,
                DATA:=#Sendebereich);

IF  #C1.TSEND.DONE THEN
  #C1.TSEND.Donezähler := #C1.TSEND.Donezähler + 1;
END_IF;  

IF #C1.TSEND.ERROR THEN
  #C1.TSEND.Errorzähler := #C1.TSEND.Errorzähler + 1;
  #C1.TSEND.STATUS_SAVE := #C1.TSEND.STATUS;
END_IF;

mfG René
 
PUT GET.JPGVAT2.JPG

Hallo,

das was gestern funktioniert hat, hat heute leider nicht mehr funktioniert. Nachdem ich verusucht habe das Programm etwas anders zu schreiben und es aber wieder rückgängig gemacht habe da es nicht geklappt hat, ging die anzeige für NDR und DONE in der VAT nicht mehr. Das Bit für NDR und DONE wird nicht mehr gesetzt obwohl ich eigentlich alles wieder rückgängig gemacht habe.

Habe Bilder von dem Programm dem Anhang beigefügt.

Habe ich vielleicht etwas vergessen zu ändern oder ausversehen etwas gelöscht?? bitte um eure Hilfe saß heute 3 volle Stunden daran den Fehler auswendig zu machen daher bin ich erst dazu gekommen zu Posten
 
Hattest du auch gestern schon am Eingang EN(Enable) und am Eingang REQ(Request) den selben Parameter? Ich denke nicht.

Der Eingang Req reagiert auf einer Positive Flanke, die kann aber nur detektiert werden wenn Du den Baustein auch aufrufst wenn am Eingang Req auch mal eine logisch 0 liegt!

Edit: Ein Blick auf deinen Screenshot von gestern zeichnet das selbe Bild.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim Eingang REQ hatte ich E3.0 und beim Eingang EN E2.0 das habe ich auch so wieder rückgängig gemacht gehabt aber auch so hat es nicht mehr geklappt. Ich wollte, dass wenn das Bit z.B. bei E 0.0 gesetzt wird nach 5 sek (mit dem Baustein S_EVEREZ) der Ausgang A0.0 leuchtet und wenn der Ausgangsbit für A0.0 gesetzt wurde, dass dann auch die Übertragung mit GET stattfinden soll. Deshalb steht etwas anderes da...
 
Gut... aber so das kann auf keinen Fall funktionieren, wie gesagt der Baustein kann so keine pos. Flanke erkennen und "startet" damit erst gar nicht.
Er wird ja schließlich nur abgearbeitet wenn am Eingang REQ eine 1 liegt. Er sieht so gar keinen Signalwechsel.

Statt dem A0.0 am Eingang EN schreibst du dort mal irgendwas hin was immer auf 1 ist, dann führst du einen Signalwechsel von 0 auf 1 am Eingang REQ durch.
Danach schaust du mal was M4.0, M5.0 und vor allem MW6 sagen. (Die Merker und das MW solltest vor deinem Versuch natürlich auf 0 setzen)

Hier noch ein Beispiel wie ich solche Kommunikationen normal schreibe. Ist eine zyklische Kommunikation die ich mal schnell aus einem Projekt rauskopiert habe...
 

Anhänge

  • 1.png
    1.png
    20,4 KB · Aufrufe: 14
  • 2.png
    2.png
    17,2 KB · Aufrufe: 9
  • 3.png
    3.png
    4,1 KB · Aufrufe: 8
  • Get_test.zip
    240,9 KB · Aufrufe: 2
Zurück
Oben