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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Aus 200Byte je 1Bit auslesen diese nacheinander abspeichern aber mit verdrehten Bytes

  1. #1
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 182 Danke für 167 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Ich will aus 200Bytes jeweils das Bit x.1 auslesen und diese Bits hintereinander speichern wobei ich aber dann in jedem Word das low und high Byte vertauschen muss.

    Also das mit dem auslesen ist ja kein Problem und die Bits hintereinander abspeichern. Aber wenn ich die ersten 16Bit übertragen habe dann muss ich die Bytes drehen!
    Ich weiß nicht wie ich das machen soll ohne das ich die Werte zwischenspeichere.


    Hier mal ein auszug aus dem Code:

    Code:
          L     #Anzahl_Stoermeldungen
    Lo1:  T     #LOOP_Stoerungen_an_HMI
    
          U     DBX [AR1,P#0.1]     //Lese Bits aus Byte
          =     DIX [AR2,P#0.0]     //Schreibe Bits hintereinander
    
          TAR2                          //Probiere irgendwie von den gespeicherten Bits bei jedem Word das LOW und HIGH Byte zu drehen
          L     P#2.0
          MOD   
          L     0
          ==I   
          SPBN  Lo11
          L     DBW [AR2,P#0.0]
          TAW   
          T     DBW [AR2,P#0.0]
    
    Lo11: L     P#0.0
          +AR1  P#2.0
          +AR2  P#0.1
    
          L     #LOOP_Stoerungen_an_HMI
          LOOP  Lo1
    Würde das mit SCL einfacher sein?

    godi
    Zitieren Zitieren Aus 200Byte je 1Bit auslesen diese nacheinander abspeichern aber mit verdrehten Bytes  

  2. #2
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Code:
    L     MW10    //Lade den Wert von MW10 in AKKU 1.
    TAW            //Kehre die Reihenfolge der Bytes in AKKU1-L um.
    T     MW20    //Transferiere das Ergebnis nach MW20.
    wofür brauchst du das?
    Aber den Befehl TAW hast du ja schon selber gefunfen

  3. #3
    Avatar von godi
    godi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 182 Danke für 167 Beiträge

    Standard

    Ich habe in einem Datenbaustein in jedem Word das Bit 0.1 als Störmeldung das ich in einem DB schreiben will zur Übergabe an WinCC flexible.
    Naja und da muss ich eben die Bytes drehen damit die Störungen in flex nicht verdreht sind.

  4. #4
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Ich habe in einem Datenbaustein in jedem Word das Bit 0.1 als Störmeldung das ich in einem DB schreiben will zur Übergabe an WinCC flexible.
    Naja und da muss ich eben die Bytes drehen damit die Störungen in flex nicht verdreht sind.
    Pass doch deine Meldetexte in WinCC flex an

  5. #5
    Avatar von godi
    godi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 182 Danke für 167 Beiträge

    Standard

    Wollte da mal was Probieren:
    Für eine Störmeldung einen UDT anlegen wo ich ca5Bits drinnen habe.
    Diesen UDT kann ich dann einfach an die Motorbausteine usw. übergeben.
    In einen Motorbaustein kann ich dann die Störung generieren und das Störbit in den UDT schreiben. Desweiteren kann ich dann aus dem UDT herauslesen ob die Störmeldung in der HMI schon gelesen worden ist usw.
    Und in einem Störungsbaustein bereite ich dann die ganzen Bits für die HMI vor.

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo Godi,
    da du ja weiter oben im Thrwead danach fragtest habe ich dir mal meinen Störungs-FB in SCL hier eingestellt.
    Code:
    FUNCTION_BLOCK FB16                  // UP Auswertung Störungen
    TITLE   = 'UP Auswertung Störungen'  // UP Auswertung Störungen
    AUTHOR  : 'L.L.'
    VERSION : '1.2'   //   22.08.07
    //KNOW_HOW_PROTECT
    // -----------------------------------------------------------------------------------------------------------------------
    //     Bausteinparameter 
    // -----------------------------------------------------------------------------------------------------------------------
    VAR_INPUT
        DT_Quit  : BOOL ;   // DT Quittierung Störung
        DT_Start : BOOL ;   // DT Start Anlage
        M_Blink  : BOOL ;   // M Blink-Takt für LM_Stoerung 
    END_VAR
    VAR_IN_OUT
    END_VAR
    VAR_OUTPUT
        LM_Stoerung : BOOL ;   // LM Stoerung vorhanden
    END_VAR
    VAR
       Stoerung_Quit      : BOOL ;   // ext. Quittierung Störung
       Meldung_vorhanden  : BOOL ;   // Meldung vorhanden
       Stoerung_vorhanden : BOOL ;   // Stoerung vorhanden
       
       Meldung  : ARRAY [001 .. 016] OF BOOL ;    // Bereich Info-Meldungen 
          w_Meldung  AT Meldung  : WORD ;
       Stoerung : ARRAY [017 .. 256] OF BOOL ;    // Bereich Stör-Meldungen
          w_Stoerung AT Stoerung : ARRAY [2 .. 16] OF WORD ;
                                                   
       OP_Stoermeldungen : ARRAY [1..16] OF WORD ; // Störmelde-Bereich für OP                                            
    END_VAR
    VAR_TEMP
       i    : INT ;     // Schleifen-Variable
    END_VAR
    
    // -----------------------------------------------------------------------------------------------------------------------
    BEGIN
    // -----------------------------------------------------------------------------------------------------------------------
    IF DT_Quit OR DT_Start OR Stoerung_Quit THEN
       FOR i := 2 TO 16 BY 1 DO
          w_Stoerung[i] := 0 ;
       END_FOR ;
    END_IF ;
    Meldung_vorhanden  := false ;
    Stoerung_vorhanden := false ;
    OP_Stoermeldungen[1] := ROL (IN:=w_Meldung , n:=8) ;
    IF w_Meldung <> 0 THEN Meldung_vorhanden := true ; END_IF ;
    FOR i := 2 TO 16 BY 1 DO
       OP_Stoermeldungen[i] := ROL (IN:=w_Stoerung[i] , n:=8) ;   
       IF w_Stoerung[i] <> 0 THEN Stoerung_vorhanden := true ; END_IF ;
    END_FOR ;
    LM_Stoerung := Stoerung_vorhanden AND M_Blink ;
    
    // -----------------------------------------------------------------------------------------------------------------------
    END_FUNCTION_BLOCK
    Bei meinem Baustein geht es mir nur darum, zu wissen ob irgendeine Störung anliegt, alle auf einmal quittieren zu können und sie einmal DB-richtig entgegenzunehmen und OP-richtig dem OP (oder TP oder PC) zur Verfügung zu stellen.
    Vielleicht kannst du damit ja was machen oder es als Anregung gebrauchen ...

    Gruß
    LL

  7. Folgende 2 Benutzer sagen Danke zu Larry Laffer für den nützlichen Beitrag:

    Ganz (18.01.2008),godi (15.01.2008)

  8. #7
    Avatar von godi
    godi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 182 Danke für 167 Beiträge

    Standard

    @L.L.

    Wie überträgst du dann die Daten in deine HMI?
    Direkt aus dem Instanzdatenbaustein?

    godi

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo Godi,
    der Bereich OP_Störmeldungen ist der Bereich auf den die Visu zugreift und der ist dort auch projektiert. Der FB16 dient nur der Auswertung der Einzelbits und dem Umschaufeln. Hintergrund bei mir (wie scheinbar auch bei dir) war: ich wollte. dass Störungsbit 17 auch Störmeldung 17 ansteuert - das hatte mich immer genervt ...

    Wie du aus anderen Beiträgen von mir vielleicht schon herausgelesen hast, ist bei mir ein I-DB kein Heiligtum, sondern für mich ist das ein ganz normaler DB, wie andere auch. Was man damit macht und was nicht und ob das klappt oder nicht hat natürlich immer etwas mit Disziplin zu tun.

    Vielleicht kannst du das ja gebrauchen ...

    Gruß
    LL

  10. #9
    Registriert seit
    16.10.2007
    Ort
    Ba Wü
    Beiträge
    61
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo habe ein ähnliches Problemchen und wollte mir den Code anpassen. Leider bin ich noch am Anfang meines selbststudium und komm da noch nicht ganz mit.

    Mein Problem:
    Ich habe in einem DB einen Bereich bei dem ich jedes gerade bit .7 auslesen möchte und in ein dw schreiben möchte.

    Nachfolgenden Code habe ich einfach mal übernommen.
    anzahl_Störmeldungen als Variable IN (Int-Format) deklariert
    loop als tempvariable (INT-Format)
    AR1 und AR2 als In-Out (Pointer)

    Mein Problem ist nun, das sich bei mir einfach mal nichts tut
    Wobei ich dazu sagen muss, dass ich keine ahnung von pointer und co habe.

    Falls mir da jemand einen kleinen hinweis geben kann wäre ich sehr dankbar


    Gruß fabix

    L #Anzahl_Stoermeldungen
    Lo1: T #LOOP_Stoerungen_an_HMI

    U DBX [AR1,P#0.1] //Lese Bits aus Byte
    = DIX [AR2,P#0.0] //Schreibe Bits hintereinander

    TAR2 //Probiere irgendwie von den gespeicherten Bits bei jedem Word das LOW und HIGH Byte zu drehen
    L P#2.0
    MOD
    L 0
    ==I
    SPBN Lo11
    L DBW [AR2,P#0.0]
    TAW
    T DBW [AR2,P#0.0]

    Lo11: L P#0.0
    +AR1 P#2.0
    +AR2 P#0.1

    L #LOOP_Stoerungen_an_HMI
    LOOP Lo1
    Zitieren Zitieren unwissenheit  

  11. #10
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.849
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    in der faq findest du eine schöne beschreibung zum pointer.

    beitrag: pointer zeiger fifo lifo
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Datenbaustein auslesen aber wie???
    Von Black Scorpion im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 26.06.2009, 11:53
  2. nacheinander bytes aus db in ein merker kopieren
    Von Robert_k im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 09.05.2008, 21:18
  3. Antworten: 5
    Letzter Beitrag: 14.06.2005, 14:55
  4. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 18:13
  5. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 17:59

Lesezeichen

Berechtigungen

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