Profibus/Profinet-Teilnehmer Diagnose

Matze001

Level-3
Beiträge
2.813
Reaktionspunkte
572
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich stelle eigentlich eine Anfängerfrage, aber bisher habe ich mich leider noch nicht so wirklich mit dem
Thema auseinander gesetzt.

Istzustand:

Wenn ein DP-Teilnehmer ausfällt/wiederkommt wird OB86 aufgerufen, und aus den Lokaldaten wird eine Meldung erzeugt welcher Teilnehmer gegangen/gekommen ist.
Diese Funktion soll dem Bediener die Information geben das ein Teilnehmer fehlt, die Teilnehmer befinden sich normalerweise immer am Bus (also nichts mit an- oder abmelden).
Dies funktioniert zufriedenstellend, außer in einem Fall: Wenn die SPS hochläuft, und nicht alle Teilnehmer findet, wird der OB nicht aufgerufen, somit habe ich keine Info das der
Teilnehmer fehlt.

Sollzustand:

Wenn irgendwie möglich würde ich gern Regelmässig (OB1 Zyklus, wenn zu Ressourcenlastig auch Timergesteuert) meine Teilnehmer abfragen ob sie noch am Bus sind.
Gibt es dafür bestimmte Statusbytes auf die ich zugreifen kann? Zusätzlich setzen wir bei den nächsten Projekten vermutlich ausschließlich auf Profinet, daher schon einmal
die Frage nach dem selben für PN.

Ich danke euch schonmal, und hoffe nicht gleich schläge für so dumme Fragen zu kassieren ;)

Grüße

Marcel
 
Es ist keine Schande, etwas nicht zu wissen.

Ich gehe mal davon aus, dass du nur Profibus diagnositzieren willst und kein Profinet. Da gibts von Siemens einen FC125. Der macht genau was du willst. Wenn du eine passende Visu von Siemens hast bietet sich evtl. auch der FB125 an, der samt Diagnosebildern geliefert wird.

Die beiden Bausteine sind kostenlos.
http://support.automation.siemens.com/WW/llisapi.dll?query=fc125&func=cslib.cssearch&content=adsearch%2Fadsearch.aspx&lang=de&siteid=cseus&objaction=cssearch&searchinprim=0&nodeid0=4000024
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...außer in einem Fall: Wenn die SPS hochläuft, und nicht alle Teilnehmer findet, wird der OB nicht aufgerufen, somit habe ich keine Info das der
Teilnehmer fehlt.

Ist mir zwar neu, aber der Hochlauf ist ja auch mal beendet. Dann muss der OB86 aufgerufen werden. Vorher hat ja der Bediener sowieso keine Info am Display (Hochlauf)
 
Ich persönlich diagnostiziere ungern über die OB´s. Schon allein weil ich mir dann merken muss ob ein Slave ausgefallen oder gestört ist.
Daher nehme ich gern den FC125 bzw. mittlerweile was selbstgebasteltes wg. Profinet. Der FB126 von Siemens war zumindest anfangs ein Rohrkrepierer und jetzt schau ich mir den nicht mal mehr an.
 
Hallo,
also der von Aventinus vorgeschlagene Weg ist schon der Beste. Um die von Matze gewünschten Info's zu erhalten sollte man nicht die Bits der Fehler-OB's nutzen sondern besser den SFC51. Der kann sowohl die Diag-Info vom PB als auch vom PN abfragen und man kann sich damit schöne Sachen zusammenstellen. Der geannnte Siemens-FC macht das so (allerdings nur für PB) - man kann es aber ganz gut selber bauen. Ich habe dazu unlängst einen SCL-FB erstellt, der das macht. Bei Interesse kann ich den (allerdings erst später) gerne hier veröffentlichen (der ist allerdings zur Zeit noch im Pre-Release-Statdium).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Aventinus,

dein Link aus Beitrag #2 führt genau zum FB126, weil wegen Abkündigung des FB125 in 2008.
Für den FB125 gibt es keinen Download mehr !

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wow das ist ja mal ein Lauffeuer ;)


Zu #2 und #4:

Also den FB125 habe ich, wollte ich aber nicht nutzen da NUR PB. Da wir in Zukunft auf PN setzen will ich jetzt nicht etwas entwickeln was wir in einem Monat nicht mehr brauchen.
Die VISU-Seite für den FB125 ist außerdem unverschämt, denn sie verbraucht ca. 120 PT!

Zu #3:

Ja irgendwann ist der Hochlauf beendet, aber der OB wird nicht mehr aufgerufen, weil der Teilnehmer ja nicht nach dem Hochlauf geht, sondern nie da war!

Zu #5:

Ich schaue mir mal den SFC51 an, Programmierbeispiele sind natürlich gern gesehen!

Ich danke euch schonmal!

Grüße

Marcel
 
Wenn dir der SFC51 zu mächtig erscheint, kannst du auch mit dem SFC12 nach dem hochlauf, den
aktuellen Zustand abfragen, indem du den Mode auf "0" setzt. Wenn RetVal = "1" ist der Teilnehmer
aktiviert, bei "2" ist er deaktiviert.
 
... ging doch schneller als ich dachte.

Hier also der Code zu "meinem" FB126 :
Code:
FUNCTION_BLOCK FB126                       // UP Profibus/ProfiNet-Diagnose
TITLE   = 'UP Profibus/ProfiNet-Diagnose'  // UP Profibus/ProfiNet-Diagnose
AUTHOR  : 'Larry'
VERSION : '2.1'    //    01.06.2012
FAMILY  : 'LL_Std'
KNOW_HOW_PROTECT

VAR_IN_OUT
   OBxx_Trigger  : BOOL ;
END_VAR

VAR_OUTPUT 
   Auswertung_aktiv : BOOL ;  
   ProfiBus_vorh    : BOOL ; 
   ProfiBus_IO      : BOOL ; 
   ProfiNet_vorh    : BOOL ; 
   ProfiNet_IO      : BOOL ; 
END_VAR

VAR
   PB_Slaves : STRUCT 
      Anzahl   : INT ; 
      Status   : ARRAY[0..255] OF BYTE ;        // Bit0 : projektiert, Bit1: nicht in Funktion, Bit2: Störung
   END_STRUCT ;
 
   PN_Slaves : STRUCT 
      Anzahl   : INT ; 
      Status   : ARRAY[0..2047] OF BYTE ;       // Bit0 : projektiert, Bit1: nicht in Funktion, Bit2: Störung
   END_STRUCT ;

   intern : STRUCT 
      Ablauf_Check   : INT := 0 ;       // Schrittkette für die Abfrage der Diagnose-Info's
   
      erster_Start     : BOOL := true ;   // Init-HM für die erste Erkennung, ob es PN oder PB nicht gibt
   
      Fn_x092_Aktiv  : BOOL ; 
      Fn_x292_Aktiv  : BOOL ; 
      Fn_x692_Aktiv  : BOOL ; 
      Fn_x094_Aktiv  : BOOL ; 
      Fn_x294_Aktiv  : BOOL ; 
      Fn_x694_Aktiv  : BOOL ; 
   END_STRUCT ;
      
   Abfrage_PB_Slaves : STRUCT 
         projektiert         : ARRAY[0..255] OF BOOL ; 
         in_Funktion         : ARRAY[0..255] OF BOOL ; 
         mit_Stoerung        : ARRAY[0..255] OF BOOL ; 
   END_STRUCT ;
      
   Abfrage_PN_Slaves : STRUCT 
         projektiert_Status  : WORD ;
         projektiert         : ARRAY[0..2047] OF BOOL ;
         in_Funktion_Status  : WORD ;
         in_Funktion         : ARRAY[0..2047] OF BOOL ; 
         mit_Stoerung_Status : WORD ;
         mit_Stoerung        : ARRAY[0..2047] OF BOOL ; 
   END_STRUCT ;
   at_Abfrage_PN_Slaves AT Abfrage_PN_Slaves : STRUCT 
         projektiert         : ARRAY[0..128] OF WORD ; 
         in_Funktion         : ARRAY[0..128] OF WORD ;  
         mit_Stoerung        : ARRAY[0..128] OF WORD ;  
   END_STRUCT ;
    
   Timer_ReTrigger        : SFB4 ;   
END_VAR

VAR_TEMP
   Fehler , i , j  : INT ; 
   Trigger_SFC51   : BOOL ; 
   
   mySZL_Header    : STRUCT
                LenthDR : WORD ;
                n_DR    : WORD ;
   END_STRUCT ;
   hm_ProfiBus_IO , hm_ProfiNet_IO : BOOL ; 
END_VAR


BEGIN

IF (intern.Ablauf_Check <= 0) AND (OBxx_Trigger OR Timer_ReTrigger.Q OR intern.erster_Start) THEN 
   OBxx_Trigger := false ; 
   IF intern.erster_Start OR (PB_Slaves.Anzahl <> 0) THEN 
      intern.Ablauf_Check := 1 ;     // auch Profibus überprüfen
   ELSE 
      intern.Ablauf_Check := 7 ;     // nur Profinet überprüfen 
   END_IF ;
END_IF ;
Auswertung_aktiv := (intern.Ablauf_Check > 0) ;
// ----------------
Trigger_SFC51 := (intern.Ablauf_Check = 1) OR (intern.Ablauf_Check = 2) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0092               // Abfrage der projektierten ProfiBus-Stationen
                  ,INDEX := 1                        // Mastersystem-ID
                  ,BUSY := intern.Fn_x092_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := Abfrage_PB_Slaves.projektiert       // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
IF (intern.Ablauf_Check = 1) AND (intern.Fn_x092_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 2 ; END_IF ;
IF (intern.Ablauf_Check = 2) AND NOT intern.Fn_x092_Aktiv THEN intern.Ablauf_Check := 3 ; END_IF ;
                  
Trigger_SFC51 := (intern.Ablauf_Check = 3) OR (intern.Ablauf_Check = 4) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0292               // Abfrage der nicht ausgefallenen ProfiBus-Stationen
                  ,INDEX := 1                        // Mastersystem-ID
                  ,BUSY := intern.Fn_x292_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := Abfrage_PB_Slaves.in_Funktion       // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
       
IF (intern.Ablauf_Check = 3) AND (intern.Fn_x292_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 4 ; END_IF ;
IF (intern.Ablauf_Check = 4) AND NOT intern.Fn_x292_Aktiv THEN intern.Ablauf_Check := 5 ; END_IF ;
                  
Trigger_SFC51 := (intern.Ablauf_Check = 5) OR (intern.Ablauf_Check = 6) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0692               // Abfrage der gestörten ProfiBus-Stationen
                  ,INDEX := 1                        // Mastersystem-ID
                  ,BUSY := intern.Fn_x692_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := Abfrage_PB_Slaves.mit_Stoerung      // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
       
IF (intern.Ablauf_Check = 5) AND (intern.Fn_x692_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 6 ; END_IF ;
IF (intern.Ablauf_Check = 6) AND NOT intern.Fn_x692_Aktiv THEN intern.Ablauf_Check := 7 ; END_IF ;
                  
// ----------------
IF (intern.Ablauf_Check = 7) THEN  
   IF intern.erster_Start OR (PN_Slaves.Anzahl <> 0) THEN 
      intern.Ablauf_Check := 8 ;     // auch Profinet überprüfen
   ELSE 
      intern.Ablauf_Check := 14 ;     // Ende 
   END_IF ;
END_IF ;
Trigger_SFC51 := (intern.Ablauf_Check = 8) OR (intern.Ablauf_Check = 9) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0094               // Abfrage der projektierten ProfiNet-Stationen
                  ,INDEX := 100                      // Mastersystem-ID
                  ,BUSY := intern.Fn_x094_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := at_Abfrage_PN_Slaves.projektiert  // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
IF (intern.Ablauf_Check = 8) AND (intern.Fn_x094_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 9 ; END_IF ;
IF (intern.Ablauf_Check = 9) AND NOT intern.Fn_x094_Aktiv THEN intern.Ablauf_Check := 10 ; END_IF ;
                  
Trigger_SFC51 := (intern.Ablauf_Check = 10) OR (intern.Ablauf_Check = 11) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0294               // Abfrage der nicht ausgefallenen ProfiNet-Stationen
                  ,INDEX := 100                      // Mastersystem-ID
                  ,BUSY := intern.Fn_x294_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := at_Abfrage_PN_Slaves.in_Funktion       // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
       
IF (intern.Ablauf_Check = 10) AND (intern.Fn_x294_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 11 ; END_IF ;
IF (intern.Ablauf_Check = 11) AND NOT intern.Fn_x294_Aktiv THEN intern.Ablauf_Check := 12 ; END_IF ;
                  
Trigger_SFC51 := (intern.Ablauf_Check = 12) OR (intern.Ablauf_Check = 13) ;
Fehler := RDSYSST (REQ := Trigger_SFC51
                  ,SZL_ID := w#16#0694               // Abfrage der gestörten ProfiNet-Stationen
                  ,INDEX := 100                      // Mastersystem-ID
                  ,BUSY := intern.Fn_x694_Aktiv
                  ,SZL_HEADER := mySZL_Header
                  ,DR := at_Abfrage_PN_Slaves.mit_Stoerung      // Ziel-Datenbereich für die abgefragten Daten
                  ) ;
       
IF (intern.Ablauf_Check = 12) AND (intern.Fn_x694_Aktiv OR (Fehler = 0)) THEN intern.Ablauf_Check := 13 ; END_IF ;
IF (intern.Ablauf_Check = 13) AND NOT intern.Fn_x694_Aktiv THEN intern.Ablauf_Check := 14 ; END_IF ;
                  
// ----------------
hm_ProfiBus_IO   := true ; 
PB_Slaves.Anzahl := 0 ;
FOR i := 0 TO 254 BY 1 DO
   j := i + 1 ;
   PB_Slaves.Status[j] := 0 ;
   IF Abfrage_PB_Slaves.projektiert[i] THEN 
      PB_Slaves.Status[j] := PB_Slaves.Status[j] OR 1 ; 
      PB_Slaves.Anzahl := PB_Slaves.Anzahl +1 ; 
      
      IF NOT Abfrage_PB_Slaves.in_Funktion[i] THEN PB_Slaves.Status[j] := PB_Slaves.Status[j] OR 2 ; hm_ProfiBus_IO := false ; END_IF ; 
      IF Abfrage_PB_Slaves.mit_Stoerung[i] THEN PB_Slaves.Status[j] := PB_Slaves.Status[j] OR 4 ; hm_ProfiBus_IO := false ; END_IF ;   
   END_IF ; 
END_FOR ;    
ProfiBus_vorh := (PB_Slaves.Anzahl > 0) ; 
ProfiBus_IO   := ProfiBus_vorh AND hm_ProfiBus_IO ; 
// ----------------
hm_ProfiNet_IO   := true ; 
PN_Slaves.Anzahl := 0 ;
FOR i := 0 TO 2047 BY 1 DO
   PN_Slaves.Status[i] := 0 ;
   IF Abfrage_PN_Slaves.projektiert[i] THEN 
      PN_Slaves.Status[i] := PN_Slaves.Status[i] OR 1 ; 
      PN_Slaves.Anzahl := PN_Slaves.Anzahl +1 ;
      
      IF NOT Abfrage_PN_Slaves.in_Funktion[i] THEN PN_Slaves.Status[i] := PN_Slaves.Status[i] OR 2 ; hm_ProfiNet_IO := false ; END_IF ; 
      IF Abfrage_PN_Slaves.mit_Stoerung[i] THEN PN_Slaves.Status[i] := PN_Slaves.Status[i] OR 4 ; hm_ProfiNet_IO := false ; END_IF ;   
   END_IF ; 
END_FOR ;    
ProfiNet_vorh := (PN_Slaves.Anzahl > 0) ; 
ProfiNet_IO   := ProfiNet_vorh AND hm_ProfiNet_IO ; 
// ----------------
IF (intern.Ablauf_Check >= 14) THEN 
    intern.erster_Start := false ;
    intern.Ablauf_Check := -2 ; 
END_IF ;
Timer_ReTrigger (IN:= (intern.Ablauf_Check = -2) ,
                 PT:= T#60s ) ;

END_FUNCTION_BLOCK
in den entsprechenden Fehler-OB's setze ich ein Trigger-Bit für diesen Baustein, der im OB1 aufgerufen wird. Der Baustein nimmt dann das Trigger-Bit wieder zurück.
Die ermittelten Info's werden von mir in der Hauptsache in der Visu ausgewertet / angezeigt. Hier verwende ich dann die Instanz des FB direkt.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Rostiger Nagel:

Dein Ansatz ist genial, leider nicht für PN geeignet!

Larry:

Der Baustein ist super, ich habe ihn grad mal mit Profibus getestet, ich denke mit dem PN wird es auch funktionieren.
Das du ihn ins Forum stellst, heißt man darf ihn verwenden?

Grüße

Marcel
 
Der Baustein ist super, ich habe ihn grad mal mit Profibus getestet, ich denke mit dem PN wird es auch funktionieren.
Er funktioniert grundsätzlich - ich habe nur noch nicht alle Eventualitäten getestet ...

Das du ihn ins Forum stellst, heißt man darf ihn verwenden?
Die Frage war doch mehr rethorisch - oder ?
Selbstverständlich kannst du ihn verwenden - falls du noch einen Fehler finden solltest lass es mich aber bitte wissen ...

Gruß
Larry
 
Die frage war natürlich rethorisch, aber fragen tue ich trotzdem... ich finde es gehört sich einfach ;)

Ich habe alle meine Eventualitäten gecheckt, und muss sagen er tut genau das was er soll!

Für die Zukunft kommt vielleicht noch etwas, aber vielleicht kannst du mir da weiterhelfen...

Es gibt z.B. in der Hardwareconfig die Info "Einspeisemodul gestört" als Detailmeldung wenn man auf einen Busteilnehmer klickt, kann ich die auch irgendwie mit dem SFC51 auslesen und verarbeiten?
Das ist aber eher ein Nice-To-Have. Das man erstmal sieht das die Baugruppe gestört ist reicht mit für den Anfang!

Oh eine Frage fällt mir noch ein:

Die Profibusdiagnose funktioniert "live", stecker ziehen und stecken sehe ich direkt im dem entsprechenden Byte. Beim PN nur nach dem TRIGGER_OBxx (und vllt. noch nach dem TIMER?).
Warum ist das so? Und warum ist der Timer auf t#60s eingestellt? Sollte man ihn nicht niedriger stellen?

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn dir der SFC51 zu mächtig erscheint, kannst du auch mit dem SFC12 nach dem hochlauf, den
aktuellen Zustand abfragen, indem du den Mode auf "0" setzt. Wenn RetVal = "1" ist der Teilnehmer
aktiviert, bei "2" ist er deaktiviert.
Das sagt leider nichts darüber aus, ob der Teilnehmer vorhanden ist oder nicht. Sondern nur, ob er im Mastersystem aktiviert oder deaktiviert ist.
Die nächste Falle: ist ein PB-Teilnehmer deaktiviert, dann erscheint er nicht mehr als "gestört", was aber nicht bedeutet, daß er OK wäre ...

Harald
 
Es gibt z.B. in der Hardwareconfig die Info "Einspeisemodul gestört" als Detailmeldung wenn man auf einen Busteilnehmer klickt, kann ich die auch irgendwie mit dem SFC51 auslesen und verarbeiten?
Das ist aber eher ein Nice-To-Have. Das man erstmal sieht das die Baugruppe gestört ist reicht mit für den Anfang!
Das schaue ich mir mal an ...

Die Profibusdiagnose funktioniert "live", stecker ziehen und stecken sehe ich direkt im dem entsprechenden Byte. Beim PN nur nach dem TRIGGER_OBxx (und vllt. noch nach dem TIMER?).
Warum ist das so? Und warum ist der Timer auf t#60s eingestellt? Sollte man ihn nicht niedriger stellen?
Also den Trigger setze ich im OB100, OB82, OB83, OB86, OB??? (weiß ich gerade nicht - 121 ??) - es kann m.E. nur damit etwas zu tun haben.
Der Refresh-Timer ist eigentlich mehr als eine Art Zwischen-Aktualisierung da drin (falls man mal ein Event doch nicht mitbekommen hat). Den solltest du nicht zu niedrig stellen, da der FB ja doch eine gewisse Belastung für das zyklische Programm ist - so hatte ich es jedenfalls gedacht.

Gruß
Larry
 
Du musst dir wegen mir jetzt keine Aufgaben aufhalsen, vielleicht schau ich selbst auch mal.
Bisher ist es egal, deine drei Signale sind mehr als ausreichend!

Also sollte das Programm nur ablaufen wenn der Trigger gesetzt wird, so habe ich das auch rausgelesen.
Witzigerweise wird der DB für Profibus sofort aktualisiert, ich habe an dem Trigger nen Merker stehen der im Programm nicht verwendet wird. (Testweise) Bei Profinet tut es nur wenn ich den Trigger auf TRUE setze.

Ob der Baustein einmal die Minute oder alle 10 Sekunden meinen Zyklus beeinflusst sollte doch eigentlich keine Rolle spielen, außer er läuft A-Zyklisch...

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Marcel,
für die Funktion des Bausteins ist ja nur der Trigger relevant. Den setze ich in den genannten OB's (der letzte fehlende war bei mir der OB122). Hast du irgendeinen Fehler so wird der zuständige OB aufgerufen und dort der Trigger-Merker gesetzt (bei mir z.B. : UN M7.7 S M7.7). Der ist an dem im OB1 aufgerufenen FB126 dann der Trigger. Die Out-Info's des Bausteins verwende ich ggf. im weiteren SPS-Programm.

Warum du den PB viel schneller aktualisiert bekommst als den PN kann ich so nicht beurteilen. Der Baustein hat aber auch eine gewisse Laufzeit (über ettliche SPS-Zyklen, da der SFC51 ja asynchron arbeitet).

Für mich ist der Sinn dieses Bausteins, in der Visu auf einen Blick die Verfügbarkeit der Busteilnehmer darzustellen (das ist schon das eine oder andere Mal für die Instandhalter ein ganz gutes Feature gewesen). Bei der Visu kommt es aber auf 1 Sek. mehr oder weniger für die Anzeige nicht so an. Deswegen ist mir das vielleicht auch selbst noch nicht aufgefallen ...

Das mit dem "Arbeit aufhalsen" ist nicht so ein Thema. Für mich ist der FB ein Standard-Baustein, der in allen (zukünftigen) Projekten Anwendung finden soll. Manchmal fallen einem bei so etwas aber dann Dinge, die man vielleicht auch noch gebrauchen kann, nicht sofort auf. Deine Rand-Note hat für mich im Augenblick aber auch keine Prio-1 - aber schauen werde ich - interessiert mich ja auch ... :)

Gruß
Larry
 
Okay vielleicht verstehst du nicht ganz was ich meine ;)

Profibus:

An eingang Trigger_OBxx steht IMMER FALSE. Trotzdem werden die Daten der Profibusteilnehmer "live" * aktualisiert (sollte ja laut deiner Aussage nicht passieren)

* Live = quasi in dem Moment wo ich den Stecker ziehe oder stecke, also spielt der TIMER REFRESH keine Rolle dabei

Beim Profinet wird erst mit dem Trigger oder dem Timer aktualisiert, so wie von dir beschrieben.

Grüße

Marcel
 
Lieber Marcel,
in meinem Script wird der "Trigger_OB", sofern der FB ihn erkannt hat, sofort gelöscht und die Schrittkette gestartet. Das bedeutet dann, dass man selbst mit ganz viel gutem Willen niemals den Trigger "1" sehen wird (es sei denn die Zykluszeit der SPS liegt im Sekundenbereich).
Das einlesen der PB-Liste umfasst nur einen Bereich von 256 Bytes - der vom PN 2048 - ich denke mal, dass das den Unterschied macht - habe es aber bisher auch noch nicht gecheckt. Aber ... wie lange ist denn "Auswertung_Aktiv" bei dir =1 ? Das sollte dann ein ganz gutes Indiez sein ...

Grüße
Larry
 
Zurück
Oben