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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: eingangsbyte variable in pointer aufrufen bzw verarbeiten

  1. #11
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    AHHH jo so gehts!

    jetzt hab ich noch das problem wie ich das bei den merkern und out mache

    = M [AR1,P#1.0]
    R M [AR1,P#3.0]

    will ich auch ersetzten durch eine in_out variable, hm oder ist eine nur out besser...

    Ja ich verwende einen FB

  2. #12
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    statt den merkern solltest du statische variablen verwenden.
    in oder in_out mußt du wissen.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  3. #13
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.339
    Danke
    449
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Also wenn ich das Richtig verstehe will du in deinem Multiinstanz-FB basierend auf 2 Bytes, welche die Bitposition deiner gesuchten Bits innerhalb von 2 Eingangsbytes repräsentieren.

    Warum plagst du dich da überhaupt mit Pointern? Wie wäre es mit einem neuem Denkanstoß basierend auf Bitmaskierung.

    Als erstes würde ich die zwei Eingangsbyte mittels In-Paramter an den FB übergeben. Wie oben schon erwähnt sollte man in Multiinstanzen nicht direkt mit den Eingangsytes arbeiten

    Wie wäre es mit

    Code:
    IN:
    EB1 Byte
    EB2 Byte
    Bitpos1 Byte
    Bitpos2 Byte
    
    //Status Bit x aus Eingangsbyte 1 lesen
          L     #Bitpos1         //Bitposition zwischen 0 und 7
          L     1
          SLW                     //Zahl 1 um Bitposition nach links verschieben Ergibt Zahlen 1,2,4,8,16,32,64,128
          L     EB1
          UW                      //UND-WORT mit der entsprechenden Zahl mit dem Eingangsbyte
          L     0  
          >I                      //Wenn die Enstehende Zahl größer null dann Bit = 1
          =     #Status_Bitaus_EB1
    so müsste da auch ohne Pointer klappen. Hab ich jetzt nur mal schnell getippt und nicht getestet. Braucht zwar ein paar Befehle mehr ist aber sehr einfach. Soll wie gesagt nur ein Denkanstoß sein

    Aber Gerhard war eh schon schneller
    Geändert von RONIN (31.01.2010 um 18:50 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  4. #14
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    danke jungs für die hilfe,aber irgendwie passt das mit den bitmuster vergleich nicht so ganz ..

    also ich will den fb bei einer überwachung von schiebern verweden (kugelhähn ,...), d.h. bei mir ist das eb0 die posi für schieber offen sensoren und eb1 für zu. ich will halt überprüfen welcher schieber offen bzw zu ist.

    schieber 1 : e0.0 zu; e1.0 offen
    schieber 2: e0.1 zu; e1.1 offen
    .
    .
    .

    wenn weder zu noch offen ist soll halt durch ein merker byte bei mir mb3 (in der normalen version) das dazugehörige bit gesetzt werden, und ich will halt auch durch die zustandsüberprüfung wissen ob die schieber offen oder geschlossen sind

  5. #15
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.339
    Danke
    449
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Zitat Zitat von Dementis Beitrag anzeigen
    wenn weder zu noch offen ist soll halt durch ein merker byte bei mir mb3 (in der normalen version) das dazugehörige bit gesetzt werden
    Ich weiß ich bin lästig und da hast auch schon gesagt des es nicht ganz passt. Aber ich steh halt auf Bitspiele

    Die Funktion geht mit 5 Zeilen

    Code:
    L EB0
    L EB1
    OW
    INVI
    T MB3 //Schon steht in MB3 welches Ventil weder offen noch zu ist
    Geändert von RONIN (31.01.2010 um 19:59 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

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

    Dementis (31.01.2010)

  7. #16
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Oh mein gott!!!
    unglaublich! tjo da sieht man wieder manchmal denkt man zu komplziert

    danke das mit den mb3 funktioniert! danke

    aber die status anzeige für den Zustand des schiebers.

    hier mal aktueler baustein:


    achja mit u dix ... hab ich auch probiert geht auch net




    L P##zustand_zu
    LAR1



    L 8
    next: T #zaehler

    // Schleife

    L #zaehler
    L 1
    -I
    LAR1


    //Überprüfen ob der Sperrhahn offen ist

    L P##zustand_zu
    LAR1

    U [AR1,P#0.0]
    UN [AR1,P#1.0]
    T #merker_auf (wenn die bedingung erfüllt ist will das dazugehörige bit von einen merkerbyte ansprechen)
    SPB ende



    //Überprüfung ob Sperrhahn zu ist
    UN [AR1,P#0.0] //Selbe vorgehensweise wie bei Offen
    U [AR1,P#1.0]
    T #merker_zu (hier das selbe wie oben)
    SPB ende



    ende: NOP 0



    L #zustand_zu
    L #zustand_auf
    OW
    INVI
    T #Stoer_merker

    // Ende Schleife

    L #zaehler
    LOOP next



    NOP 0
    Geändert von Dementis (31.01.2010 um 20:11 Uhr)

  8. #17
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.339
    Danke
    449
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Ganz vestehe ich deinen Code nicht

    Code:
            L     P##zustand_zu
            LAR1  //*1 Jetzt hast du die Adresse von zustand_zu im AR1
    
            L     8
    next: T     #zaehler
    
    // Schleife
    
          L     #zaehler //Hier schreibst du den Zählerstand in AR1
          L     1
          -I    
          LAR1  
    
    //Überprüfen ob der Sperrhahn offen ist
    
          L     P##zustand_zu //Hier überschreibst du den Inhalt von AR1 wieder mit der Adresse von zustand zu
          LAR1  
    
          U      [AR1,P#0.0]     //Bitoperation
          UN     [AR1,P#1.0]   //Bitoperation
          T     #merker_auf    //Wortoperation (kann nicht hinhauen oder)
          SPB   ende
    
    usw....
    Das Problem ist hier denke ich, das du versucht über einen Zahlenwert von 0..7 deinen Pointer auf das jeweilige Bit zu richten. Über eine Variable kann man aber so weit ich weiß nur die Byteadresse im Pointer vorgeben.
    Man kann zwar mit +AR1 P#0.1 den Bitoffset des Pointers erhöhen. Aber diesen Bitoffset über eine Variable zu beinflussen geht glaube ich nicht.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  9. #18
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hm, ich versuch mitels der schleife den zustand der einzeln bits zu überprüfen und hab eben eingangsveriable wo ich den zustand bekomme.

  10. #19
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.339
    Danke
    449
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Ich bin aber nicht so gut mit Pointern also habe noch einen einfachen Vorschlag für dich

    Code:
    IN: zustand_auf  Type:  Byte
    IN: zustand_zu  Type:   Byte
    
    OUT: merker_auf Type:  Byte
            merker_zu   Type: Byte
            merker stoe Type: Byte
    
    Temp: zust_auf_temp Type:  Byte
    Temp: zust_zu_temp Type:  Byte
    Temp: merk_auf_temp Type:  Byte
    Temp: merk_zu_temp Type:  Byte
    
    L zustand_auf
    T zust_auf_temp
    L zustand_zu
    zust_zu_temp
    
    U L0.0
    UN L1.0
    = L3.0
    
    U L0.1
    UN L1.1
    = L3.1
    
    usw...
    
    
    L merk_auf_temp
    T merker_auf
    L merk_zu_temp
    T merker_zu
    Wenn du Variablen im Temp-Bereich hast kannst du auch ohne Pointer direkt mit ihnen arbeiten. Ich weiß die Lösung ist nicht so schon wie mit Pointern und Schleifen aber ich weiß nicht wie man das anstellen sollte.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  11. #20
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    probiers mal so:

    Code:
    FUNCTION_BLOCK FB 1
    TITLE =
    AUTHOR : Micha
    VERSION : 0.1
     
    VAR_INPUT
      ZUSTAND_AUF : BYTE ; 
      ZUSTAND_ZU : BYTE ; 
    END_VAR
    VAR_OUTPUT
      QOFFEN : BYTE ; 
      QZU : BYTE ; 
      QSTO : BYTE ; 
    END_VAR
    VAR_TEMP
      tiLC : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          LAR1  AR2; 
          L     P##ZUSTAND_AUF; 
          +AR1  ; 
          L     8; 
    L1:   U     DIX [AR1,P#0.0]; 
          UN    DIX [AR1,P#1.0]; 
          =     DIX [AR1,P#2.0]; //RM Auf
          UN    DIX [AR1,P#0.0]; 
          U     DIX [AR1,P#1.0]; 
          =     DIX [AR1,P#3.0]; //RM Zu
          UN    DIX [AR1,P#0.0]; 
          UN    DIX [AR1,P#1.0]; 
          =     DIX [AR1,P#4.0]; //Störung
          +AR1  P#0.1; 
          LOOP  L1; 
    END_FUNCTION_BLOCK
    Gruß Micha

    Ergänzung: Die Lokalvariable kann gelöscht werden...
    "arbeite klug, nicht hart" - deutsches Sprichwort

  12. Folgende 2 Benutzer sagen Danke zu SPSKILLER für den nützlichen Beitrag:

    Dementis (31.01.2010),RONIN (31.01.2010)

Ähnliche Themen

  1. per Pointer eine FC aufrufen?
    Von FrankTheTank im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 08.08.2011, 12:50
  2. Antworten: 11
    Letzter Beitrag: 06.10.2007, 16:28
  3. Pointer als IN im FC verarbeiten
    Von Hewlett_de im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 03.07.2006, 22:00
  4. Pointer als IN im FC verarbeiten
    Von plc_tippser im Forum FAQ
    Antworten: 1
    Letzter Beitrag: 29.06.2006, 14:29
  5. Rohdaten Variable mit VBS verarbeiten
    Von Bender25 im Forum HMI
    Antworten: 11
    Letzter Beitrag: 04.04.2006, 12:45

Lesezeichen

Berechtigungen

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