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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Position einer STAT-Variable feststellen

  1. #11
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Züttu Beitrag anzeigen
    Ich möchte nur die ersten 16 command-bits auf mein protocol kopieren und dabei MSB und LSB tauschen.
    Laut Deinem Code genau andersrum (Du kopierst das Wort auf die einzelnen Bits).
    Was spricht eigentlich dagegen, das ganze wortweise statt bitweise zu deklarieren?
    Gruß
    Michael

  2. #12
    Züttu ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2006
    Beiträge
    169
    Danke
    21
    Erhielt 19 Danke für 11 Beiträge

    Standard

    Mein Fehler, ich mach natürlich beides, status in die eine Richtung und command in die andere, sorry


    ich möchte in meinem FB symbolisch auf die einzelnen bits zugreiffen, die Namen die ich in der Deklaration brauche sind natürlich nicht einfach durchnummeriert wie in meinem Beispiel, sondern tragen mehr oder weniger sinnvolle Namen.

  3. #13
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Du könntest es wortweise deklarieren, legst es zu Beginn des Bausteins auf Bitweise deklarierte TEMP-Variable und transferierst es am Ende wieder zurück, und damit Du das wortweise machen kannst, holst Du Dir mit "LAR1 P##Erstes_TEMP_Bit" die Adresse von Deinem ersten Bit. Dann musst Du nur darauf achten, dass 16 Bit bei L XX.0 beginnen
    Gruß
    Michael

  4. #14
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ah, jetzt wird klar, was Du willst (ein paar Deiner Aussagen waren widersprüchlich ).

    Hier ein FC, mit dem Du MSB und LSB in einem Word tauschen kannst und die Parameter symbolisch dranschreiben kannst.
    IN_Adr und OUT_Adr kann auch der Beginn eines Bitfeldes sein, hauptsache, an den angegeben Adressen ist Platz für ein Word.
    Der FC ermittelt die Adresse der übergebenen Parameter (kann Merker-, DB- und STAT-Bereich sein) und kopiert dann ein Word,
    wobei MSB und LSB vertauscht werden.
    Die IN-/OUT-Adressen müssen an Byte-Grenzen liegen bzw. das wird erzwungen.
    Code:
    FUNCTION "iTBW" : VOID
    TITLE =Reihenfolge der Bytes in einem Word tauschen, indirekt
    AUTHOR : PN_DP
    VERSION : 0.1
    
    VAR_INPUT
      IN_Adr : POINTER ;	//Pointer auf zu lesendes Word
      OUT_Adr : POINTER ;	//Pointer auf zu schreibendes Word
    END_VAR
    VAR_TEMP
      Ptr_DB : WORD ;	
      Ptr_Ofs : DWORD ;	
      Value : WORD ;	
    END_VAR
    
    BEGIN
    NETWORK
    TITLE =
    
    //Pointer auf IN-Word in AR1 erstellen
          L     P##IN_Adr; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #Ptr_DB; 
          L     D [AR1,P#2.0]; 
          UD    DW#16#FFFFFFF8;  //auf P#x.0 zwingen
          T     #Ptr_Ofs; 
    
          AUF   DB [#Ptr_DB]; 
          LAR1  #Ptr_Ofs; 
    
    //IN-Word lesen
          L     W [AR1,P#0.0]; 
          T     #Value; 
    
    //Pointer auf OUT-Word in AR1 erstellen
          L     P##OUT_Adr; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #Ptr_DB; 
          L     D [AR1,P#2.0]; 
          UD    DW#16#FFFFFFF8;  //auf P#x.0 zwingen
          T     #Ptr_Ofs; 
    
          AUF   DB [#Ptr_DB]; 
          LAR1  #Ptr_Ofs; 
    
    //IN-Word MSB-LSB-gedreht auf OUT-Word ausgeben
          L     #Value; 
          TAW   ;                //MSB-LSB tauschen
          T     W [AR1,P#0.0]; 
    
    END_FUNCTION
    Aufrufen kannst Du den FC z.B. so:
    Code:
          CALL  "iTBW"
           IN_Adr :=#command.hmi.bit1
           OUT_Adr:=#command.hmi.protocol
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Frage bez. Graf 7 und Stat Variable?
    Von J.BORGER im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.06.2011, 12:42
  2. Globale Variable in einer Aktion?
    Von Phase8421 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.06.2008, 15:00
  3. Antworten: 5
    Letzter Beitrag: 29.08.2006, 05:07
  4. Bit in einer 8Bit Variable mit VBS setzen
    Von Anonymous im Forum HMI
    Antworten: 4
    Letzter Beitrag: 14.12.2005, 11:45
  5. Flankenmerker->Merker oder Stat-Variable?
    Von oliver2306 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 14.11.2003, 13:21

Lesezeichen

Berechtigungen

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