Auswertung Statuswort von AG_SEND/AG_RECV

Hardy81

Level-2
Beiträge
122
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin gerade dabei mit AG_SEND und AG_RECV rumzuspielen, da ich es brauch für eine Datenübertragung zu/von einer Schraubersteuerung über Profibus.

Jetzt meine Frage... Wie kann ich das Status-WORD auswerten???

Ich will verschiedene Zustände abfangen und entsprechend darauf reagieren. Muss ich mir dann aus dem Statuswort die einzelnen Bits zusammensuchen oder gibts ne einfachere und "elegantere" Methode dafür?

Ich steh im Moment ein wenig auf dem Schlauch...
 
Sieh dir mal die Hilfe zu den FC an, oben rechts "siehe auch", dort dann "Auswerten der Anzeigen". Da sind sämtliche Ausgabewerte des Status erklärt.

Code:
Die folgende Tabelle informiert über die vom Anwenderprogramm auszuwertende Anzeige, gebildet aus DONE, ERROR und STATUS.
Hinweis
Beachten Sie für die Einträge mit der Codierung 8FxxH unter STATUS auch die Angaben im Referenzhandbuch STEP 7 Standard und Systemfunktionen. Sie finden dort Hinweise im Kapitel “Fehlerauswertung mit dem Ausgangsparameter RET_VAL”

DONE    ERROR    STATUS    Bedeutung
1    0    0000H    Auftrag fertig ohne Fehler.
0    0    0000H    Kein Auftrag in Bearbeitung.
0    0    8181H    Auftrag läuft.
0    1    7000H    Die Anzeige ist nur bei S7-400 möglich: Der FC wurde mit ACT=0 aufgerufen; der Auftrag wird jedoch nicht bearbeitet.
0    1    8183H    Die Projektierung fehlt oder der FDL-Dienst im PROFIBUS-CP ist noch nicht gestartet.
0    1    8184H    -    Unzulässiger Datentyp für den Parameter SEND angegeben.-    FDL-Verbindung ohne Auftragspuffer: Systemfehler.-    FDL-Verbindung mit Auftragspuffer: Parameter LEN<4 oder unzulässiger Parameter im Auftragsheader (bei freiem Layer 2 Zugang).
0    1    8185H    Parameter LEN größer als Quell-Bereich SEND.
0    1    8186H    Parameter ID ungültig.  ID != 1,2....15,16.
0    1    8301H    SAP bei Ziel-Station nicht aktiviert.
0    1    8302H    keine Empfangsresourcen bei Ziel-Station, Empfänger-Station kann empfangene Daten nicht schnell genug verarbeiten bzw. hat kein Empfangsressourcen bereitgestellt.   
0    1    8303H    Der PROFIBUS-Service ( SDA-SendDatawithAcknowledge)  wird auf diesem SAP von der Ziel-Station nicht unterstützt.Die Anzeige kann auch temporär auftreten, wenn Verbindungen oder Netzübergänge “im RUN” geladen werden
0    1    8304H    Die FDL-Verbindung ist nicht aufgebaut.
0    1    8311H    Die Zielstation ist unter der angegebenen PROFIBUS-Adresse nicht erreichbar oder der benutzte Service ist für die angegebene PROFIBUS-Adresse nicht möglich.
0    1    8312H    PROFIBUS-Fehler im CP : z.B. Buskurzschluß, eigene Station nicht am Ring,.
0    1    8315H    Interner Parameterfehler  bei einer FDL-Verbindung mit Auftragsheader: Parameter LEN<4 oder unzulässiger Parameter im Auftragsheader (bei freiem Layer 2 Zugang).
0    1    8F22H    Quell-Bereich ungültig. z.B.:·    Bereich im DB nicht vorhanden·    Parameter LEN < 0
0    1    8F24H    Bereichsfehler beim Lesen eines Parameters.
0    1    8F28H    Ausrichtungfehler beim Lesen eines Parameters.
0    1    8F32H    Parameter enthält zu große DB-Nummer.
0    1    8F33H    DB-Nummer Fehler.
0    1    8F3AH    Bereich nicht geladen (DB).
0    1    8F42H    Quittungsverzug beim Lesen eines Parameters aus dem 
Peripheriebereich.
0    1    8F44H    Der Zugriff auf einen in der Bausteinbearbeitung zu lesenden Parameter ist gesperrt.
0    1    8F7FH    Interner Fehler. z.B. unzulässige ANY-Referenzz.B. Parameter LEN = 0 .
0    1    8090H    ·    Eine Baugruppe mit dieser Baugruppen-Anfangsadresse ist nicht vorhanden.·    Der verwendete FC passt nicht zur verwendeten Systemfamilie (es sind unterschiedliche FCs für S7-300 und S7-400 zu verwenden).
0    1    8091H    Baugruppen-Anfangsadresse nicht auf Doppel-Wort-Raster.
0    1    8092H    In ANY-Referenz ist eine Typangabe ungleich BYTE angegeben.    (nur bei S7-400)
0    1    80A4H    Die K-Busverbindung zwischen CPU und CP ist nicht aufgebaut. (bei neueren CPU-Ausgabeständen) Dies kann beispielsweise  begründet sein durch:·    eine fehlende Projektierung von Verbindungen;·    eine Überschreitung der maximalen Anzahl parallel betreibbarer CPs (Angaben hierzu siehe CP-Gerätehandbuch).
0    1    80B0H    Baugruppe kennt den Datensatz nicht.
0    1    80B1H    Der Ziel-Bereich ist ungültig.z.B. Ziel-Bereich > 240 Bytes.bei neueren CP-Typen ist folgende Bedeutung möglich (siehe CP-Gerätehandbuch):Die Anzahl der zu sendenden Daten überschreitet die für diesen Dienst zulässige Obergrenze.
0    1    80B2H    Die K-Busverbindung zwischen CPU und CP ist nicht aufgebaut.(bei älteren CPU-Ausgabeständen; sonst 80A4H ; weitere Angaben siehe dort ) 
0    1    80C0H    Datensatz kann nicht gelesen werden.
0    1    80C1H    Der angegebene Datensatz ist gerade in Bearbeitung..
0    1    80C2H    Es liegt ein Auftragstau vor.
0    1    80C3H    Betriebsmittel (Speicher) belegt.
0    1    80C4H    Kommunikationsfehler (tritt temporär auf; daher ist Wiederholung im Anwenderprogramm sinnvoll.
0    1    80D2H    Baugruppen-Anfangsadresse ist falsch.

V5.0 SP3
Also nach Start immer Word auslesen und auf 0 vergleichen, dann ist alles IO und fertig, 8181H bedeutet, der Auftrag läuft noch, mit den anderen kann man z.Bsp. eine Fehlermeldung generieren.

PS: Muß man aber nicht unbedingt machen, es gibt ja noch die Bits Error und Done. Bei Error, kann man dann den Status auslesen und in einer Textanzeige anzeigen, bei Bedarf.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht hab ich meine Frage ein wenig falsch gestellt...


Wie ich das Statuswort auslese ist mir bekannt. Die Fehlermeldungen hab ich auch schon in der Hilfe gefunden.

Nur wo ich noch nicht so durchblicke:

Wie unterscheide ich z.B.: 8181h (Auftrag läuft) und 80C1h (Datensatz in Bearbeitung) ?

Hab noch keine Möglichkeit gefunden, das irgendwie zu vergleichen bzw. herausfinden welcher Hex-Wert nun gerade ansteht (außer 0000h).

Ich könnte mir ja die Hex-Werte nach binär umbasteln und dann den Vergleich mit den binären Werten machen. Das fände ich allerdings ziemlich umständlich.
 
Wießt du jetzt nicht, wie man einen Vergleicher einsetzt oder reden wir komplett aneinander vorbei?

Code:
 L     #Status
 L     W#16#8181
 ==I   
 SPB   AUFL //Springe zu Auftrag läuft

 L     #Status
 L     W#16#81C1
 ==I   
 SPB   DASB //Springe zu Datensatz in Bearbeitung

Kannst natürlich statt SPB xxx auch

= M100.0

schreiben und dann die Merker auswerten.
 
Wie schön, wenn die Lösung so einfach ist ;-)

Das Programm, dass ich hier schreibe ist zu 95% in FUP und da gehts mit dem ==I nicht. Das war das was mich so verwundert hat. Aber das Ganze dann mal in AWL zu versuchen, daran hab ich dann nicht gedacht.

Aber trotzdem nochmal danke...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das geht auch mit FUP ... einfach auf ein undeklariertes merkerwort schreiben und dann den CMP ==I verwenden ...

da mußt du dann natürlich auf einen integerwert vergleichen, also eine dezimalzahl aus dem hex-wert errechnen und das zweierkomplement bilden ... das nenn ich dann mal kopierschutz :ROFLMAO:
 
aber nicht für hex- und dez-werte :rolleyes:

Versteh ich nicht??? Theoretisch gehts erstmal, was dabei als Ergebnis rauskommt muß man mal schauen :ROFLMAO:.

PS: Status ist als INT deklariert.

Ansonsten kann man statt w#16#8181 auch 33153 (dezimal) einsetzen.
 

Anhänge

  • Vergleicher_001.jpg
    Vergleicher_001.jpg
    179 KB · Aufrufe: 26
Zuletzt bearbeitet:
Danke schon mal für die Antworten. Habs jetzt in AWL ins Programm reingeschrieben. Funktioniert auch und erfüllt seinen Zweck.
 
Zurück
Oben