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

Ergebnis 1 bis 10 von 10

Thema: Flankenmerker von Struktur erzeugen

  1. #1
    Registriert seit
    12.08.2010
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe eine Struktur und möchte alle Bits in der Struktur auf einen Flankewechsel prüfen. Die Auswertung soll in einem FC erfolgen.
    Ich habe mir das so gedacht:
    In einem FB habe ich eine Struktur angelegt die abgefragt werde soll. Zusätzlich habe ich die gleiche Struktur für die Flanken und die Impulse.

    Struct: IN_Flanke
    Struct: FP_Flanke
    Struct: Imp_Flanke

    Die Strukturen sollen einem FC übergeben und ausgewertet werden.
    Der FC soll von der Struktur "IN_Flanke" die positiven Flankenwechsel auswerten und die Flankenimpuls in der Strutur "Imp_Flanke" ausgeben.
    Der FC soll flexibel sein, so dass die Grösse der übergebenen Struktur keine Rolle spielt.

    Ich denke im FC muss zuerst die Grösse der Struktur ermittelt werden und dann in einer Schlaufe wortweise auf Flankenwechsel geprüft werden.

    Nun habe ich leider keine Erfahrung mit Pointern und indirekter Adressierung.
    Hat jemand eine Idee wir der FC aussehen könnte?

    Gruss
    NeuSim
    Zitieren Zitieren Flankenmerker von Struktur erzeugen  

  2. #2
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Deine Strukturen sind Word, DWord?

    Für steigende Flanken ...
    Code:
    L    #IN_Flanke      //zu prüfende Bits
    L    #FP_Flanke      //Stand der zu prüfenden Bits aus letztem Zyklus
    XOW bzw. XOD         //geänderte Bits ermitteln
    L    #IN_Flanke      //zu prüfende Bits
    UW bzw. UD           //unveränderte Bits ausblenden
    T    #Imp_Flanke     //Impuls der geänderten Bits ausgeben
    L    #IN_Flanke      //neuen Zustand der Bits puffern
    T    #FP_Flanke
    Das ganze in ne Schleife packen ...
    Geändert von ssound1de (12.08.2010 um 11:26 Uhr)

  3. #3
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Für fallende Flanken ...
    Code:
    L    #IN_Flanke      //zu prüfende Bits
    L    #FN_Flanke      //Stand der zu prüfenden Bits aus letztem Zyklus
    XOW bzw. XOD         //geänderte Bits ermitteln
    L    #FN_Flanke      //zu prüfende Bits
    UW bzw. UD           //unveränderte Bits ausblenden
    T    #Imp_Flanke     //Impuls der geänderten Bits ausgeben
    L    #IN_Flanke      //neuen Zustand der Bits puffern
    T    #FN_Flanke

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Hallo, hier meine Variante:
    Code:
    // steigende Flanken WORD ( DWORD ): Bits jetzt 1 und vorher 0
    L    #IN_Flanke    // Bits jetzt
    L    #FP_Flanke    // Bits vorher
    INVI               // ( INVD )
    UW                 // ( UD )
    T    #Imp_Flanke   // 1-Impuls bei Flanken Pos
    L    #IN_Flanke    // Bits jetzt // hier geht auch: POP oder TAK
    T    #FP_Flanke    // als Bits vorher merken
    
    // fallende Flanken WORD ( DWORD ): Bits jetzt 0 und vorher 1
    L    #IN_Flanke    // Bits jetzt
    INVI               // ( INVD )
    L    #FN_Flanke    // Bits vorher
    UW                 // ( UD )
    T    #Imp_Flanke   // 1-Impuls bei Flanken Neg
    L    #IN_Flanke    // Bits jetzt
    T    #FN_Flanke    // als Bits vorher merken
    siehe auch FAQ: Flankenauswertung in Step7

    Zitat Zitat von NeuSim Beitrag anzeigen
    Der FC soll flexibel sein, so dass die Grösse der übergebenen Struktur keine Rolle spielt.

    Ich denke im FC muss zuerst die Grösse der Struktur ermittelt werden und dann in einer Schlaufe wortweise auf Flankenwechsel geprüft werden.

    Nun habe ich leider keine Erfahrung mit Pointern und indirekter Adressierung.
    Das würde ich nicht machen, sondern ARRAY OF DWORD benutzen und den FC für jeden ARRAY-Member extra aufrufen.
    Oder hast Du hunderte Bits auszuwerten? Mit 3 Aufrufen eines DWORD-FC hast Du 96 Bits ausgewertet.

    Gruß
    Harald

  5. #5
    NeuSim ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.08.2010
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    Erstmal danke für die Antworten. Aber wie im Beitrag geschrieben handelt es sich um Strukturen unterschiedlicher Grösse. Darum möchte ich einen allgemeinen FB/FC schreiben um die Flanken abzufragen.

    Beispiel der Sruktur
    FlkSig struct
    Sig01 Bool
    Sig02 Bool
    Sig03 Bool
    etc.
    End struct

    Die Struktur soll an den FB/FC zur Flankenauswertung übergeben werden.
    Im FB/FC soll die Länge der Struktur ermittelt werden. Dann soll in einer Schlaufe für die ganze Struktur die Flankenauswertung gemacht werden.


    Gruss
    NeuSim

  6. #6
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Wenn du ein variables Datenfeld übergeben möchtest, so ginge das mit dem ANY-Pointer. Wie der funktioniert kannst du in der FAQ vom Forum nachlesen. Allerdings, wenn du einen Flankenwechsel auf jedes einzelne Element feststellen willst, so brauchst du auch für jedes einzelne Element deiner Struktur einen Hilfsspeicher, der den letzten Zustand speichert. Das sehe ich als etwas problematisch an bei einer variablen Strukturgröße.

    Vielleicht solltest du dein Vorhaben noch einmal überdenken.

  7. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Lupo Beitrag anzeigen
    Allerdings, wenn du einen Flankenwechsel auf jedes einzelne Element feststellen willst, so brauchst du auch für jedes einzelne Element deiner Struktur einen Hilfsspeicher, der den letzten Zustand speichert.
    Absolut, deshalb sollte der Hilfsspeicher dann ein Teil der Struktur sein.
    Und wie Lupo ja schon sagt, über einen Any-Zeiger kann man das ja alles aufdröseln.

    Zitat Zitat von NeuSim Beitrag anzeigen
    Darum möchte ich einen allgemeinen FB/FC schreiben um die Flanken abzufragen.
    Hast du denn schon damit angefangen?
    Zeig mal was du schon hast, oder wartest du auf die fertige Lösung?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #8
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Für fertige Lösungen schreiben wir aber ne Rechnung.

    [QUOTE=PN/DP;275562]
    Code:
    // steigende Flanken WORD ( DWORD ): Bits jetzt 1 und vorher 0
    L    #IN_Flanke    // Bits jetzt
    L    #FP_Flanke    // Bits vorher
    INVI               // ( INVD )
    UW                 // ( UD )
    T    #Imp_Flanke   // 1-Impuls bei Flanken Pos
    L    #IN_Flanke    // Bits jetzt // hier geht auch: POP oder TAK
    T    #FP_Flanke    // als Bits vorher merken
     
    // fallende Flanken WORD ( DWORD ): Bits jetzt 0 und vorher 1
    L    #IN_Flanke    // Bits jetzt
    INVI               // ( INVD )
    L    #FN_Flanke    // Bits vorher
    UW                 // ( UD )
    T    #Imp_Flanke   // 1-Impuls bei Flanken Neg
    L    #IN_Flanke    // Bits jetzt
    T    #FN_Flanke    // als Bits vorher merken
    Auch cool

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Auch cool
    Ist ja auch ganz einfach 1:1 von Bitverknüpfung in Wortverknüpfung übersetzt ...
    Code:
    // steigende Flanke: Bit jetzt 1 und vorher 0
    U    #Bit_jetzt
    UN   #Bit_vorher
    =    #Flanke_Pos
    U    #Bit_jetzt
    =    #Bit_vorher
    
    // fallende Flanke: Bit jetzt 0 und vorher 1
    UN   #Bit_jetzt
    U    #Bit_vorher
    =    #Flanke_Neg
    U    #Bit_jetzt
    =    #Bit_vorher

    @NeuSim

    Zitat Zitat von NeuSim Beitrag anzeigen
    Der FC soll flexibel sein, so dass die Grösse der übergebenen Struktur keine Rolle spielt.
    Zitat Zitat von NeuSim Beitrag anzeigen
    Die Struktur soll an den FB/FC zur Flankenauswertung übergeben werden.
    Im FB/FC soll die Länge der Struktur ermittelt werden. Dann soll in einer Schlaufe für die ganze Struktur die Flankenauswertung gemacht werden.
    Wie ein übergebener Datenbereich strukturiert ist kann mit S7 zur Laufzeit nicht ermittelt werden, erst recht nicht bei wechselnden
    Strukturen. Einzige Möglichkeit: Der Datenbereich ist ein Array eines einfachen Datentyps und wird per Any-Pointer übergeben,
    dann kann die Länge des Arrays ermittelt werden.
    Schau dir das mal an FAQ: Any-Zeiger für Datentypen

    Wie die Länge des übergebenen Arrays aus dem Any-Pointer ermittelt wird hatten wir hier im Forum kürzlich ein Programmbeispiel.
    Siehe Forums-Suche

    Gruß
    Harald

  10. #10
    Registriert seit
    25.08.2003
    Beiträge
    332
    Danke
    46
    Erhielt 54 Danke für 46 Beiträge

    Lächeln


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Tach,
    ich habe mir auch mal so einen FC geschrieben:

    3x IN-Parameter als Any:
    - Daten_Aktuell
    - Daten_Altwert
    - Daten_pFlanke

    Im FC zerlegst du dann die Anyzeiger, prüfst Längen etc. und packst das ganze in eine Schleife ala #4. Ich habe in meinem FC zwei Schleifen programmiert: Die erste über alle Doppelworte, die zweite über die restlichen Bytes, falls vorhanden. Spart Zykluszeit.

    Programmieren musst Du aber selbst. Berichte doch mal über deine Lösungsansätze!

    Gruß
    flinn

Ähnliche Themen

  1. Temp Flankenmerker
    Von baalrok im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 06.03.2012, 13:32
  2. Flankenmerker
    Von Manfred Stangl im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 08:31
  3. Flankenmerker in FB immer TRUE
    Von Reto im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.10.2006, 02:41
  4. Variablen als Flankenmerker
    Von blackball83 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 04.08.2006, 14:42
  5. Pointer auf Flankenmerker
    Von MEMO - Matthias im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 28.07.2005, 23:10

Lesezeichen

Berechtigungen

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