Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: CPU LEDs abfragen

  1. #1
    Registriert seit
    24.03.2010
    Ort
    Westerwald
    Beiträge
    161
    Danke
    41
    Erhielt 16 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    hab mir momentan eine Anwendung bei der ich die Zustände
    der CPU LEDs abfragen müsste. Hab selbst schon etwas
    dazu geschieben, nur leider funktionierts in keinster weise.
    Ist das erste mal das ich mit dem SFC51 arbeite, hab mir
    mal so einiges durchgelesen und es dann mal so zusammengeschrieben
    wie es für mich "plausibel" schien.

    Hier mal mein FC

    Code:
    FUNCTION "FC_DIAG" : VOID
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      BEAT_2HZ : BOOL ;    
      BEAT_0_5Hz : BOOL ;    
      ENABLE : BOOL ;    
    END_VAR
    VAR_TEMP
      DEAD : INT ;    
      BUSY : BOOL ;    
      INDEX : WORD ;    
      LED_ON : BOOL ;    
      LED_FLASHS_NOT : BOOL ;    
      LED_FLASHS_2Hz : BOOL ;    
      LED_FLASHS_0_5Hz : BOOL ;    
      ADRESSREGISTER : DWORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Adressregister widerherstellen
    
          TAR1  #ADRESSREGISTER; 
    NETWORK
    TITLE =Reset Sprungzähler
    
          L     "DB_DP_DIAGNOSE".SPL_BYTE; 
          L     B#16#6; 
          ==I   ; 
          SPBN  _SET; 
          L     B#16#0; 
          T     "DB_DP_DIAGNOSE".SPL_BYTE; 
    _SET: NOP   0; 
    NETWORK
    TITLE =Sprungliste
    
          L     "DB_DP_DIAGNOSE".SPL_BYTE; 
          SPL   _OUT; 
          SPA   _SF; 
          SPA   _RUN; 
          SPA   _FRC; 
          SPA   _STP; 
          SPA   _BF1; 
          SPA   _BF2; 
    _OUT: SPA   _MVE; 
    
    _SF:  L     W#16#1; 
          T     #INDEX; 
          +AR1  P#0.0; 
          SPA   _MVE; 
    
    _RUN: L     W#16#4; 
          T     #INDEX; 
          +AR1  P#0.1; 
          SPA   _MVE; 
    
    _FRC: L     W#16#6; 
          T     #INDEX; 
          +AR1  P#0.2; 
          SPA   _MVE; 
    
    _STP: L     W#16#5; 
          T     #INDEX; 
          +AR1  P#0.3; 
          SPA   _MVE; 
    
    _BF1: L     W#16#B; 
          T     #INDEX; 
          +AR1  P#0.4; 
          SPA   _MVE; 
    
    _BF2: L     W#16#C; 
          T     #INDEX; 
          +AR1  P#0.5; 
    
    _MVE: NOP   0; 
    NETWORK
    TITLE =Read DP
    
          CALL "RDSYSST" (
               REQ                      := TRUE,
               SZL_ID                   := W#16#19,
               INDEX                    := #INDEX,
               RET_VAL                  := #DEAD,
               BUSY                     := #BUSY,
               SZL_HEADER               := "DB_DP_DIAGNOSE".SZL_HEADER,
               DR                       := P#DB1.DBX8.0 BYTE 4);
    
    NETWORK
    TITLE =SET Output
    
          U     #BUSY; 
          SPB   NON; 
    
          L     "DB_DP_DIAGNOSE".led_on; 
          L     1; 
          ==I   ; 
          =     #LED_ON; 
    
          L     "DB_DP_DIAGNOSE".ed_blink; 
          L     0; 
          ==I   ; 
          =     #LED_FLASHS_NOT; 
          TAK   ; 
          L     1; 
          ==I   ; 
          =     #LED_FLASHS_2Hz; 
          TAK   ; 
          L     2; 
          ==I   ; 
          =     #LED_FLASHS_0_5Hz; 
    
    
          AUF   "DB_DP_DIAGNOSE"; 
          U     #LED_ON; 
          U     #LED_FLASHS_2Hz; 
          U     #BEAT_2HZ; 
          O     ; 
          U     #LED_ON; 
          U     #LED_FLASHS_0_5Hz; 
          U     #BEAT_0_5Hz; 
          O     ; 
          U     #LED_ON; 
          U     #LED_FLASHS_NOT; 
          =     DBX [AR1,P#14.0]; 
    
    NON:  NOP   0; 
    NETWORK
    TITLE =Sprungzähler
    
          U     #ENABLE; 
          UN    #BUSY; 
          SPBN  _CNT; 
          L     "DB_DP_DIAGNOSE".SPL_BYTE; 
          INC   1; 
          T     "DB_DP_DIAGNOSE".SPL_BYTE; 
    _CNT: NOP   0; 
    NETWORK
    TITLE =Adressregister sichern
    
          LAR1  #ADRESSREGISTER; 
    END_FUNCTION
    Schonmal Danke im vorraus
    Zitieren Zitieren CPU LEDs abfragen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Code:
    _BF2: L     W#16#C; 
          T     #INDEX; 
          +AR1  P#0.5; 
    
    _MVE: NOP   0; 
    NETWORK
    TITLE =Read DP
    
          CALL "RDSYSST" (
               REQ                      := TRUE,
               SZL_ID                   := W#16#19,
               INDEX                    := #INDEX,
               RET_VAL                  := #DEAD,
               BUSY                     := #BUSY,
               SZL_HEADER               := "DB_DP_DIAGNOSE".SZL_HEADER,
               DR                       := P#DB1.DBX8.0 BYTE 4);
    Wozu soll der rot geschriebene Code genau dienen, was soll er wo bewirken?
    Was gibt Ret_Val aus?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Avatar von plc_typ
    plc_typ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Ort
    Westerwald
    Beiträge
    161
    Danke
    41
    Erhielt 16 Danke für 8 Beiträge

    Standard

    hab grad selber auch noch ein wenig nachgeforscht, die RET_VAL
    sagt "0081 Länge des Ergebnisfeldes zu klein ". Verstehe nicht ganz
    wo das herrührt, in der Operationsliste sind 4 Byte als speicherbedarf
    angegeben und so wurds auch beschaltet.

    +AR1 P#0.5 soll den versatz vorgeben für
    = DBX [AR1,P#14.0]... jedenfalls hab ich mir das so gedacht

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    OK, man sollte zwar denken, daß der SFC51 das AR1 sichert und wiederherstellt, falls er damit etwas macht, aber zur Sicherheit würde ich mir das AR1 in einem DWord merken und dann kurz vor dem Verwenden nochmals zuweisen. Solange der SFC51 natürlich die Länge bemängelt, gibt er auch keine Daten raus.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    plc_typ (26.03.2010)

  7. #6
    Avatar von plc_typ
    plc_typ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Ort
    Westerwald
    Beiträge
    161
    Danke
    41
    Erhielt 16 Danke für 8 Beiträge

    Standard

    momentan liegt das größte problem erstmal dadrin das ich keine
    daten aus dem SFC51 bekomme. Deshalb hier nochmal die genaue
    beschaltung.

    Code:
                CALL "RDSYSST" (
               REQ                      := TRUE, 
               SZL_ID                   := W#16#19, //19 = Zustand aller LEDs     
               INDEX                    := #INDEX,  //Abfragen der verschiedenen LEDs
               RET_VAL                  := #DEAD,    
               BUSY                     := #BUSY,
               SZL_HEADER               := "DB_DP_DIAGNOSE".SZL_HEADER,    //Struct aus DB
               DR                       := P#DB1.DBX8.0 BYTE 4);    // Pointer für ausgabewert

  8. #7
    Registriert seit
    13.11.2006
    Ort
    Lengerich
    Beiträge
    68
    Danke
    0
    Erhielt 14 Danke für 14 Beiträge

    Standard

    Hallo,

    ich habe das auch schon mal gemacht. Da war mein Empfangsfeld größer. In den 4 Bytes sind ja nur die Informationen einer LED. Es wird aber der Zustand aller LEDs der CPU abgefragt. Daher mach deinen Empfangsbereich mal größer.

    Ich hatte 20 x 4 Byte
    Der Fehler liegt oft zwischen den Ohren!

  9. Folgender Benutzer sagt Danke zu Tetrade für den nützlichen Beitrag:

    plc_typ (26.03.2010)

  10. #8
    Avatar von plc_typ
    plc_typ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Ort
    Westerwald
    Beiträge
    161
    Danke
    41
    Erhielt 16 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    so, hab die geschichte jetzt am laufen.
    2 fehler waren drin, der erste und gravierendste war das die Falsche
    SZL_ID angegeben war, stat w#16#19 wird für die LED zustände w#16#74
    benötigt.
    2. fehler war das bei der Sprungliste +AR1 verwendet wir, richtig hier ist den
    versatz per LAR1 zu laden.

    Nochmal danke für die hilfe

Ähnliche Themen

  1. LEDs einzeln ansteuern?
    Von Osiris im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 12.10.2010, 14:40
  2. Alle LEDs der CPU blinken
    Von 301204020608 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 24.06.2009, 09:06
  3. SMD-IC f.Konstantstromquelle f.SMD-LEDs
    Von Klaus Coenen im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 08.07.2008, 21:00
  4. Zustand der Baugruppen-LEDs CPU 315-2 PN/DP
    Von Olliriegel im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.09.2007, 14:39
  5. Alle LEDs der CPU-315-2DP blinken.
    Von Tigerkroete im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 25.09.2006, 09:34

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •