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

Seite 6 von 8 ErsteErste ... 45678 LetzteLetzte
Ergebnis 51 bis 60 von 74

Thema: WORD aus einzelnen Bits zusammensetzen

  1. #51
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also bei mir geht die Lösung von Kai auch wenn ich die Eingänge durcheinander würfele. Also Bit_00 := E0.1 und Bit_01 := E0.0 geht bei mir.
    If you open your Mind too much, your Brain will fall out.

  2. #52
    Registriert seit
    06.10.2003
    Beiträge
    3.410
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo moeins,

    Zitat Zitat von moeins Beitrag anzeigen
    Ich will mir einen FB bauen..
    Dich hätten wir ja fast vergessen. Du hast es sicherich schon so umgesetzt wie OHGN es im fünften Beitrag beschrieben hat! In solch kleinen, überschaubaren Funktionen hat die absolute Adressierung der Lokaldaten durchaus eine Berechtigung.

    @Jürgen
    Schlaf gut! Auch ich hatte bei Inbetriebnahmen noch nie lange Weile.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    OHGN (22.11.2007)

  4. #53
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Kai Beitrag anzeigen
    Ich bin gerade am Ausprobieren. So wie ich das im Augenblick sehe, müssen in der Funktion das DB-Register und das Adressregister AR1 am Anfang gesichert und am Ende wiederhergestellt werden.
    Meine Funktion FC100 arbeitet auch ohne Sicherung und Wiederherstellung des DB-Registers und des Adressregisters AR1 richtig:

    http://www.sps-forum.de/showpost.php...1&postcount=30

    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  5. #54
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Der Vollständigkeit halber hier noch einmal die Funktion FC100 mit der Sicherung und Wiederherstellung des DB-Registers und des Adressregisters AR1:

    Code:
    FUNCTION "FC_BOOL_WORD_PT" : VOID
    TITLE =BOOL => WORD
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : LOKALDAT
    VERSION : 1.0
     
    VAR_INPUT
      IN_BIT_00 : BOOL ;    
      IN_BIT_01 : BOOL ;    
      IN_BIT_02 : BOOL ;    
      IN_BIT_03 : BOOL ;    
      IN_BIT_04 : BOOL ;    
      IN_BIT_05 : BOOL ;    
      IN_BIT_06 : BOOL ;    
      IN_BIT_07 : BOOL ;    
      IN_BIT_08 : BOOL ;    
      IN_BIT_09 : BOOL ;    
      IN_BIT_10 : BOOL ;    
      IN_BIT_11 : BOOL ;    
      IN_BIT_12 : BOOL ;    
      IN_BIT_13 : BOOL ;    
      IN_BIT_14 : BOOL ;    
      IN_BIT_15 : BOOL ;    
    END_VAR
    VAR_OUTPUT
      OUT_WORD : WORD ; 
    END_VAR
    VAR_TEMP
      TEMP_DB : WORD ;  
      TEMP_AR1 : DWORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =DB-Register und Adressregister AR1 sichern
     
          L     DBNO; 
          T     #TEMP_DB; 
     
          TAR1  #TEMP_AR1; 
     
    NETWORK
    TITLE =IN_BIT_00 - IN_BIT_15 (BOOL) => OUT_WORD (WORD)
     
          L     P##IN_BIT_00; 
          LAR1  ; 
     
          L     W [AR1,P#0.0]; 
          TAW   ; 
          T     #OUT_WORD; 
     
    NETWORK
    TITLE =DB-Register und Adressregister AR1 wiederherstellen
     
          AUF   DB [#TEMP_DB]; 
     
          LAR1  #TEMP_AR1; 
     
    END_FUNCTION
    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  6. #55
    Registriert seit
    24.11.2006
    Ort
    57072 Siegen
    Beiträge
    466
    Danke
    59
    Erhielt 121 Danke für 109 Beiträge

    Ausrufezeichen

    Zitat Zitat von Kai Beitrag anzeigen
    Meine Funktion FC100 arbeitet auch ohne Sicherung und Wiederherstellung des DB-Registers und des Adressregisters AR1 richtig:

    http://www.sps-forum.de/showpost.php...1&postcount=30

    Gruß Kai
    @Kai:
    Klar, dein FC funktioniert und du musst auch nicht zwingend AR1 / DBreg. retten.

    Ein erfahrener Programmierer weis, dass er mit offenem AR-Registern über Bausteingrenzen hinweg eben vorsichtig
    umgehen muss.

    Das DB1 - Register wird eh beim nächsten vollquallifizierten Zugriff wieder beschrieben,
    also drohen auch da keine Probleme.

    Das einzigste Argument, dass für das Retten / Laden der Register spricht, ist ein unsynchroner Aufruf
    der FC, z.B. in einem Alarm - OB.

    IMHO hast du alles richtig gemacht.


    Zitat Zitat von zotos Beitrag anzeigen
    Also bei mir geht die Lösung von Kai auch wenn ich die Eingänge durcheinander würfele. Also Bit_00 := E0.1 und Bit_01 := E0.0 geht bei mir.
    Zotos,
    das ist ganz klar, da der P## nicht die Adresse des Operanden sondern die Anfangsadresse des Parameters lädt,
    das ist ja der Witz des P## - Befehls.
    OK, das ist schon etwas komplex, S7 - Neulinge wie du sollten vielleicht doch erst noch mit Schmiermerkerwörtern arbeiten...



    Zitat Zitat von Onkel Dagobert Beitrag anzeigen

    @Jürgen
    Schlaf gut! Auch ich hatte bei Inbetriebnahmen noch nie lange Weile.

    Gruß, Onkel
    Hallo Onkel,
    ja, danke auch.

    Ich glaub, wenn bei dir mal Langeweile aufzukommen droht, dann mischst du hier das Jungvolk auf, was?


    CU

    Jürgen

    .

    Zur Beachtung:
    Ich distanziere mich ausdrücklich von allen Aussagen in diesem Forum
    welche nicht von mir stammen und mache mir deren Inhalte nicht zu eigen.


    www.ibn-service.com
    Zitieren Zitieren Wer bezahlt mich eigendlich für die Nachhilfestunden hier ?  

  7. #56
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Ich möchte ganz einfach mal wissen, ob jemandem auffällt was an dem Vorschlag von Kai nicht stimmt. Ich kann in dieser Runde doch nicht der einzige sein, dem das sofort ins Auge sticht? Ich meine nicht solche "Kleinigkeiten" wie das Sichern und Wiederherstellen des AR1.
    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Nur soviel, es handelt sich um eine Funktion (FC). Dass die Ein- und Ausgangsparameter nicht in den Lokaldaten liegen, habt ihr mir ja hoffentlich schon mal abgekauft. Weiterhin sollten die 16 Eingänge nicht im selben Operandenbereich, und schon garnicht in geordneter Reihenfolge vorliegen müssen, sonst wäre die Funktion überflüssig. Jetzt sollte es schon etwas klarer werden?
    Ich glaube, ich verstehe langsam, worauf Onkel Dagobert hinaus will. Zumindest habe ich folgendes Problem gefunden:

    Die Funktion FC100 habe ich im OB1 einmal in der FUP-Ansicht im Netzwerk 1 und einmal in der AWL-Ansicht im Netzwerk 2 eingefügt.

    Wenn man sich den OB1 nun einmal in der FUP-Ansicht und einmal in der AWL-Ansicht ansieht, kann man einen interessanten Unterschied zwischen den beiden Bausteinen sehen:

    Im Netzwerk 1 werden die Eingänge zunächst in Lokaldaten kopiert und mit diesen Lokaldaten wird dann der FC100 beschaltet.

    Im Netzwerk 2 wird der FC100 direkt mit den Eingängen beschaltet.

    Dieses hat nun zur Folge, dass der FC100 im Netzwerk 1 richtig funktioniert, der FC100 im Netzwerk 2 aber nicht.

    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  8. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    Onkel Dagobert (22.11.2007),zotos (22.11.2007)

  9. #57
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Hier noch ein paar Bilder aus der Simulation mit PLCSIM:

    Netzwerk 1:

    FC100 - OUT_WORD = DB100.DBW2

    Die Eingänge des FC100 werden richtig im DB100.DBW2 gespeichert.

    Netzwerk 2:

    FC100 - OUT_WORD = DB100.DBW4

    Die Eingänge des FC100 werden falsch oder gar nicht im DB100.DBW4 gespeichert.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

  10. #58
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    OB1 - Netzwerk 1:

    Der FC100 im Netzwerk 1 arbeitet richtig, weil die Eingänge zunächst in Lokaldaten ab L20.0 kopiert werden und der FC100 dann mit diesen Lokaldaten beschaltet wird. Es wird dann das LW20 als Ausgang OUT_WORD ausgegeben.

    Code:
          FC100:
     
          L     P##IN_BIT_00                // Zeiger auf L20.0
          LAR1  
     
          L     W [AR1,P#0.0]               // LW20
          TAW   
          T     #OUT_WORD                   // LW20
    OB1 - Netzwerk 2:

    Der FC100 im Netzwerk 2 arbeitet falsch. Es wird statt den Eingängen das EW100 als Ausgang OUT_WORD ausgeben.

    Code:
          FC100:
     
          L     P##IN_BIT_00                // Zeiger auf E100.0
          LAR1  
     
          L     W [AR1,P#0.0]               // EW100
          TAW   
          T     #OUT_WORD                   // EW100
    Gruß Kai

  11. #59
    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 IBN-Service Beitrag anzeigen
    @Kai:
    Klar, dein FC funktioniert und du musst auch nicht zwingend AR1 / DBreg. retten.
    In welchen Fällen das Adressregister geändert wird habe ich ja schon hier geschrieben

    Zitat Zitat von IBN-Service Beitrag anzeigen
    Ein erfahrener Programmierer weis, dass er mit offenem AR-Registern über Bausteingrenzen hinweg eben vorsichtig
    umgehen muss.
    Was spricht dagegen, in einem FC/FB indem ich die Adressregister usw. benutze, diese grundsätzlich zu sichern und zurück zu laden. Dann bin ich immer auf der sicheren Seite. Soviel extra code ist das ja schliesslich auch nicht und ich muss mir keine Gedanken machen, ob was schiefgehen kann

    Zitat Zitat von IBN-Service Beitrag anzeigen
    Das einzigste Argument, dass für das Retten / Laden der Register spricht, ist ein unsynchroner Aufruf
    der FC, z.B. in einem Alarm - OB.
    Wird das Programm durch einen OB unterbrochen, dann werden vom Betriebssystem automatisch die aktuellen Inhalte der Akkumulatoren und
    Adressregister sowie die Nummer und die Größe der geöffneten Datenbausteine im U-Stack gesichert. Beim Rücksprung in den aufrufenden Baustein werden diese wieder zurück geladen. Wenn du in deinem OB also nur den FC aufrufst, gibt es keine Probleme
    Weitere Infos hierzu Beitrags-ID 14845057

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

    Onkel Dagobert (22.11.2007),zotos (22.11.2007)

  13. #60
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kai Beitrag anzeigen
    Im Netzwerk 1 werden die Eingänge zunächst in Lokaldaten kopiert und mit diesen Lokaldaten wird dann der FC100 beschaltet.

    Im Netzwerk 2 wird der FC100 direkt mit den Eingängen beschaltet.

    Dieses hat nun zur Folge, dass der FC100 im Netzwerk 1 richtig funktioniert, der FC100 im Netzwerk 2 aber nicht.

    Gruß Kai
    Da sind wir auch wieder bei einem Thema, was mich vor etlichen Wochen auch sehr verwundert hat - nämlich das Step 7 beim call-Aufruf die IN-Variablen wie IN-OUT behandelt (also quasi called-by-reference), beim FUP/KOP Aufruf jedoch "by value". Hatte damals auch mit dem support telefoniert, der mir dann nochmals bestätigt hat, das dies so volle Absicht sei ( )
    Hat nun der Programmierer "sauber programmiert" und von Haus aus nicht auf IN-Variablen geschrieben, spielt das de Facto keine Rolle. Muss man jedoch was Laufendes ändern, so muss man schon genau hinschauen, was da vor sich geht.
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)

  14. Folgende 2 Benutzer sagen Danke zu kiestumpe für den nützlichen Beitrag:

    IBN-Service (22.11.2007),zotos (22.11.2007)

Ähnliche Themen

  1. SCL: Auf Bits eines Word zugreifen.
    Von Aksels im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.10.2011, 17:10
  2. Aus Word BITs rausziehen
    Von mfg_mr.e im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 20.06.2011, 11:02
  3. WORD of BITS - ILC Phönix Contacts
    Von poelli85 im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 05.09.2010, 22:55
  4. Codesys Bits, Byte, Word und DWord
    Von Znarf im Forum Sonstige Steuerungen
    Antworten: 16
    Letzter Beitrag: 03.05.2007, 13:36
  5. Antworten: 10
    Letzter Beitrag: 28.09.2004, 08:36

Lesezeichen

Berechtigungen

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