Step 7 Keine "DONE" Meldung nach 2. Aufruf AG_SSEND

ziede

Active member
Beiträge
41
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Moin,

ich habe da ein Problem, bei dem ich nicht weiterkomme.
Ich hoffe das es bei euch jemanden gibt, der mir helfen kann.

Ich arbeite derzeit an einen Anlage mit einer S7-400 H Steuerung , die Steuerung ist mit 3 CPs ausgestattet (2* 443-1 Advanced, 1* CP443-1).
Programmiert wird mittels Step7 V5.7.

In dieser Anlage sollen mittel Baustein AG_SSEND daten zu einem PC uebertragen, werden.
Aufgrund der Datenmenge >8K soll das in mehreren Aufrufen von ja 1K uebertragen werden.
Die Aufrufe bilden sich in einer Ketten

...
U "Force1".Send1_req // Request Sending part 1
U "Force1".Send1_done // Sending pert 1 Done
S "Force1".Send2_req // Request Sending part 2
U "Force1".Send2_req // Request Sending part 2
R "Force1".Send1_req // Request Sending part 1
...

vor den Bausteinaufrufen werden aus den Requests noch Flanken gebildet.
...
U #Send1_req // Request Sending part 1
FP #fp_send1 // ising edge
= #send1 // ACT
...

#send1 ist dann die Variable am ACT-Eingang des SSend-Bausteins.

Bei 1. Aufruf funktioniert das auch, der 2. Aufruf tut auchnoch ein Senden Anstossen (also lt. Wireshark werden daten gesendet)
jedoch kommt das DONE nicht mehr und der Baustein Meldet ERROR mit dem Fehlercode 16#7000.

Hat von euch jemand eine Idee, was ich da falsch gemacht haben koennte?
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.951
Punkte Reaktionen
3.705
Zuviel Werbung?
->Hier kostenlos registrieren
Ich würde auch noch eine Pause (50ms) zwischen den Send-Kommandos einbauen, mindestens aber 1 Zyklus. (Oder bis Done und Error wieder False sind)
Außerdem nicht nur den Done prüfen, sondern auch Error und bei Error das Ganze mit Fehlermeldung abbrechen.
 

Heinileini

Well-known member
Beiträge
5.175
Punkte Reaktionen
1.113
Ungetestet und ohne Gewähr:
Code:
O   Send1
O   Send2
O   Send3
O   Send4
O   Send5
O   Send6
O   Send7
O   Send8
=   SendSum

O   Done      // <-- SendeBaustein
O   Error     // <-- SendeBaustein
U   SendSum
=   Activate

U   Send7
UN  Send8
U   Activate
S   Send8
R   Send7

U   Send6
UN  Send7
U   Activate
S   Send7
R   Send6

U   Send5
UN  Send6
U   Activate
S   Send6
R   Send5

U   Send4
UN  Send5
U   Activate
S   Send5
R   Send4

U   Send3
UN  Send4
U   Activate
S   Send4
R   Send3

U   Send2
UN  Send3
U   Activate
S   Send3
R   Send2

U   Send1
UN  Send2
U   Activate
S   Send2
R   Send1

UN  SendSum
U   Start     // <-- Sequenz starten
R   Start
S   Send1

U   SendSum
UN  Activate
=   Send      // --> SendeBaustein
 
OP
Z

ziede

Active member
Beiträge
41
Punkte Reaktionen
0
Danke fuer Eure unterstuetzung.
Bin zu einen weg gekommen, der Funktioniert.
Falls noch andere dieses Problem haben sollten stelle ich mal den Bausteincode ein.

Code:
      U     M   2222.0
      U     M   2222.2
      O     "Pulse500ms"
      S     "Force1".send

// Part1
      U     "Force1".send
      FP    "Force1".fp_send1           // rising edg
      UN    #Send1_req
      =     "Force1".send1
      S     #Send1_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send1           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX0.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send1_done
       ERROR :=#error_send1
       STATUS:=#state_send1

      U     #Send1_req
      U(   
      O     #tmp_send1_done
      O     #error_send1
      )     
      R     #Send1_req

// Part2
      U     "Force1".send1_req
      FN    "Force1".fp_send2           // rising edge
      U     "Force1".send
      UN    "Force1".send2_req
      =     "Force1".send2
      S     "Force1".send2_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send2           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX1450.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send2_done
       ERROR :=#error_send2
       STATUS:=#state_send2

      U     "Force1".send2_req
      U(   
      O     #tmp_send2_done
      O     #error_send2
      )     
      R     "Force1".send2_req

// Part3
      U     "Force1".send2_req
      FN    "Force1".fp_send3           // rising edge
      U     "Force1".send
      UN    "Force1".send3_req
      =     "Force1".send3
      S     "Force1".send3_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send3           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX2900.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send3_done
       ERROR :=#error_send3
       STATUS:=#state_send3

      U     "Force1".send3_req
      U(   
      O     #tmp_send3_done
      O     #error_send3
      )     
      R     "Force1".send3_req

// Part4
      U     "Force1".send3_req
      FN    "Force1".fp_send4           // rising edge
      U     "Force1".send
      UN    "Force1".send4_req
      =     "Force1".send4
      S     "Force1".send4_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send4           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX4350.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send4_done
       ERROR :=#error_send4
       STATUS:=#state_send4

      U     "Force1".send4_req
      U(   
      O     #tmp_send4_done
      O     #error_send4
      )     
      R     "Force1".send4_req

// Part5
      U     "Force1".send4_req
      FN    "Force1".fp_send5           // rising edge
      U     "Force1".send
      UN    "Force1".send5_req
      =     "Force1".send5
      S     "Force1".send5_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send5           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX5800.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send5_done
       ERROR :=#error_send5
       STATUS:=#state_send5

      U     "Force1".send5_req
      U(   
      O     #tmp_send5_done
      O     #error_send5
      )     
      R     "Force1".send5_req

// Part6
      U     "Force1".send5_req
      FN    "Force1".fp_send6           // rising edge
      U     "Force1".send
      UN    "Force1".send6_req
      =     "Force1".send6
      S     "Force1".send6_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send6           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX7250.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send6_done
       ERROR :=#error_send6
       STATUS:=#state_send6

      U     "Force1".send6_req
      U(   
      O     #tmp_send6_done
      O     #error_send6
      )     
      R     "Force1".send6_req

// Part7
      U     "Force1".send6_req
      FN    "Force1".fp_send7           // rising edge
      U     "Force1".send
      UN    "Force1".send7_req
      =     "Force1".send7
      S     "Force1".send7_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send7           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX8700.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send7_done
       ERROR :=#error_send7
       STATUS:=#state_send7

      U     "Force1".send7_req
      U(   
      O     #tmp_send7_done
      O     #error_send7
      )     
      R     "Force1".send7_req

// Part8
      U     "Force1".send7_req
      FN    "Force1".fp_send8           // rising edge
      U     "Force1".send
      UN    "Force1".send8_req
      =     "Force1".send8
      S     "Force1".send8_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send8           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX10150.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send8_done
       ERROR :=#error_send8
       STATUS:=#state_send8

      U     "Force1".send8_req
      U(   
      O     #tmp_send8_done
      O     #error_send8
      )     
      R     "Force1".send8_req

// Part9
      U     "Force1".send8_req
      FN    "Force1".fp_send9           // rising edge
      U     "Force1".send
      UN    "Force1".send9_req
      =     "Force1".send9
      S     "Force1".send9_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send9           //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX11600.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send9_done
       ERROR :=#error_send9
       STATUS:=#state_send9

      U     "Force1".send9_req
      U(   
      O     #tmp_send9_done
      O     #error_send9
      )     
      R     "Force1".send9_req

// Part10
      U     "Force1".send9_req
      FN    "Force1".fp_send10          // rising edge
      U     "Force1".send
      UN    "Force1".send10_req
      =     "Force1".send10
      S     "Force1".send10_req

      CALL  "AG_SSEND"
       ACT   :="Force1".send10          //"Force1".Send1_req
       ID    :=3                        //Verbindungs-ID gemäß Projektierun
       LADDR :=W#16#A4                  //LADDR in Hardware-Konfiguration
       SEND  :=P#DB10000.DBX13050.0 BYTE 1450    //Puffer für Sendedaten
       LEN   :=1450
       DONE  :=#tmp_send10_done
       ERROR :=#error_send10
       STATUS:=#state_send10

      U     "Force1".send10_req
      U(   
      O     #tmp_send10_done
      O     #error_send10
      )     
      R     "Force1".send10_req
      R     "Force1".send


      UN    "Force1".send
      R     "Force1".send1_req
      R     "Force1".send2_req
      R     "Force1".send3_req
      R     "Force1".send4_req
      R     "Force1".send5_req
      R     "Force1".send6_req
      R     "Force1".send7_req
      R     "Force1".send8_req
      R     "Force1".send9_req
      R     "Force1".send10_req
 
Oben