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

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

Thema: Problem bei Umsetzung

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.268
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das funktioniert so nicht. Das Aktivieren der Steuerleitung erfolgt, danach muß der Ausgang erst einmal von der Steuerung an die Peripherie gehen, das erfolgt am Zyklusanfang (oder Ende, ist in diesem Falle ja egal). Erst dann kann man das Ergebnis am Eingangsbyte ablesen, wenn man Pech hat und der externe BCD-Schalter eine Elektronik enthält, die Zeit zum Umschalten benötigt, muß man auch hier nochmal etwas warten. Also kannst du maximal in jedem SPS-Zyklus eine Steuerleitung aktivieren und abfragen, bzw. falls der BCD-Schalter zu langsam ist auch da noch eien Zyklus warten. Ich würde mir in diesem Falle eine kleine Schrittkette bauen, die in 8 Schritten durchläuft:

    1. Steuerleitung 1 aktivieren, die anderen deaktivieren
    2. Ergebnis auslesen
    3. Steuerleitung 2 aktivieren, die anderen deaktivieren
    4. Ergebnis auslesen
    5. Steuerleitung 3 aktivieren, die anderen deaktivieren
    6. Ergebnis auslesen
    7. Steuerleitung 4 aktivieren, die anderen deaktivieren
    8. Ergebnis auslesen, Berechnen der Drehzahl und Ausgeben an den Servo

    So Programmieren, das die SPS in einem Zyklus immer nur einen Schritt ausführt, nicht alle Schritte auf einmal!!!
    Geändert von Ralle (27.05.2008 um 14:49 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  2. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Zet0r (27.05.2008)

  3. #12
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    [......]
    ...aber das hatte ich ja im beispiel von 07.05.2008 schon eingepflegt
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Zet0r (27.05.2008)

  5. #13
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.268
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    ...aber das hatte ich ja im beispiel von 07.05.2008 schon eingepflegt
    Aber in seinem eigenen neuen Code war genau das nicht mehr drin, womit das Ganze garantiert nicht funzt!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    Zet0r (27.05.2008)

  7. #14
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Aber in seinem eigenen neuen Code war genau das nicht mehr drin, womit das Ganze garantiert nicht funzt!
    richtig ... da hilft noch nicht mal schneller als die zykluszeit zu sein, er arbeitet ja mit dem prozessabbild ... aber auch die wort-schubserei scheint nicht so das gelbe zu sein ...
    Geändert von vierlagig (27.05.2008 um 15:17 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Zet0r (27.05.2008)

  9. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.268
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    richtig ... da hilft noch nicht mal schneller als die zykluszeit zu sein, er arbeitet ja mit dem prozessabbild ... aber auch dir wort schubserei scheint nicht so das gelbe zu sein ...
    @ZetOr

    Mach das mit dem Byte nicht zu kompliziert. Jeder Zyklus bringt dir ein Byte.
    Sieh dir den Befehl BTD an. Du nimmst jeweils das Byte (BCD) und transferrierst es an die richtige Stelle in einem MD!
    Ok das 2. und 4. vorher entsprechend um 4 Bit verschieben und verodern!

    Code:
     
    L 0
    T MD10
    
    L BCD-Byte 1  //definiert als Byte!
    L BCD-Byte 2
    SLW 4
    OW
    T MB13
    
    L BCD-Byte 3
    L BCD-Byte 4
    SLW 4
    OW
    T MB12
    
    L MD10
    BTD
    T MD14
    Im MD14 steht dann deine eingelesene 4-stellige Dezimalzahl.
    Geändert von Ralle (27.05.2008 um 15:36 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Zet0r (27.05.2008)

  11. #16
    Zet0r ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.05.2008
    Beiträge
    9
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
     
    //wird aber nur ausgeführt wenn das VKE = 1 ist ... also min:
    //ach so...jetzt versteh ich was du meinst...also S durch SET ersetzen.
    Aber für R gilt das nicht oder? 
    
    
           SET     "H-St1"                     //Steuerleistung 1 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F
          UW    
          T     MW   125                    //Im Merker 125 speichern
          R     "H-St1"                     //Steuerleitung 1 deaktivieren
    
          SET     "H-St2"                     //Steuerleitung 2 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F0
          UW    
          SLW   4                           //Um 4 Stellen nach links
          T     MW   127                    //Im Merker 127 speichern
          R     "H-St2"                     //Steuerleitung 2 deaktivieren
    
          SET     "H-St3"                     //Steuerleitung 3 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F00
          UW    
          SLW   8                           //Um 8 Stellen verschieben
          T     MW   129                    //Im Merker 129 speichern
          R     "H-St3"                     //Steuerleitung 3 deaktivieren
    
          SET     "H-St4"                     //Steuerleitung 4 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F000
          UW    
          SLW   12                          //Um 12 Stellen verschieben
          T     MW   131                    //Im Merker 131 speichern
          R     "H-St4"                     //Steuerleitung 4 deaktivieren
    
    
    //in Anbetracht der Tatsache, dass MW125 und MW126 überlappen würde eine
    Oder-verknüpfung so aussehen:
    
    MW125:  0000 0000 0000 1111
    MW126:  0000 1111 xxxx xxxx
    OW
    MW129:  0000 1111 xxxx 1111
    also:      0    F    x    F
    
    so müsste es dann richtig sein...also ohne Überlappung:
     
           L     MW   125                    //ersten Merker laden
          L     MW   127                    //zweiten Merker laden
          OW                                //ODER Verknüpfen
          T     MW   133                    //In Ergebnismerker 133 laden
    
          L     MW   133                    //Ergebnismerker 133 laden
          L     MW   129                    //dritten Merker laden
          OW                                // ODER verknüpfen
          T     MW   133                    //In EM 133 speichern
    
          L     MW   131                    //vierten Merker laden
          L     MW   133                    //Ergebnismerker laden
          OW                                //ODER verknüpfen
          T     MW   133                    //In EM 133 speichern
    
    
          L     MW   133                    //Ergebnismerker 133 in AKKU 1 laden
          BTI                               //BCD in Ganzzahl
          T     MW   133                    //speichern
    
          L     MW   133                    //Ergebnismerker 133 laden
          L     3.456000e+000             
    
          *I                                //multiplizieren
          T     "UA"                        //in Analogausgang laden 
    
          BE                                //Baustein ENDE
    ich habe mir den FC106 mal angesehen. So wie ich die S7 Hilfe verstanden habe macht er das was die Multiplikation mit der Gleitkommazahl machen soll...Wenn ich den Baustein in den Code reinziehe erscheint folgendes:

    Code:
      
    
    CALL  "UNSCALE"
           IN     :=   MW133              //Wenn ich die S7 Hilfe richtig verstanden habe, muss hier die  zu skalierende  Variable rein, also der Merker 133
           HI_LIM :=8000
           LO_LIM :=0
           BIPOLAR:= 0 //Werte von 0 bis 27648
           RET_VAL:=
           OUT    :=PAW128
    Kommt das so hin?? Also bei einem Wert von 8000 im Merker soll der Wert 27648 (entspricht 10V) am Analogausgang anliegen.

    Zitat Zitat von Ralle Beitrag anzeigen
    @Zet0r

    Mach das mit dem Byte nicht zu kompliziert. Jeder Zyklus bringt dir ein Byte.
    Sieh dir den Befehl BTD an. Du nimmst jeweils das Byte (BCD) und transferrierst es an die richtige Stelle in einem MD!
    Wieso soll ich ein MD benutzen, das ist doch eine 32 Bit Ganzzahl, wenn eine 16 Bit Ganzzahl ausreicht? Und der Analogausgang ist doch auch eine 16 Bit Ganzzahl. Ich habe keinen Befehl gefunden mit dem ich von 32Bit auf 16 zurückwandeln kann....oder steh ich da auf dem Schlauch...

  12. #17
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    aaaaaaaaaaaaalso:

    Code:
     
    //wird aber nur ausgeführt wenn das VKE = 1 ist ... also min:
    //ach so...jetzt versteh ich was du meinst...also S durch SET ersetzen.
    Aber für R gilt das nicht oder? 
    //nein! ich habe es doch auch drüber geschrieben :rolleyes:
    //deine darstellung würde sowieso nicht übersetzt werden
    //lies dir bitte nochmal ralles beiträge durch
    //was du da vorhast funktioniert so nicht!
    
           SET     "H-St1"                     //Steuerleistung 1 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F
          UW    
          T     MW   125                    //Im Merker 125 speichern
          R     "H-St1"                     //Steuerleitung 1 deaktivieren
    
          SET     "H-St2"                     //Steuerleitung 2 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F0
          UW    
          SLW   4                           //Um 4 Stellen nach links
          T     MW   127                    //Im Merker 127 speichern
          R     "H-St2"                     //Steuerleitung 2 deaktivieren
    
          SET     "H-St3"                     //Steuerleitung 3 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F00
          UW    
          SLW   8                           //Um 8 Stellen verschieben
          T     MW   129                    //Im Merker 129 speichern
          R     "H-St3"                     //Steuerleitung 3 deaktivieren
    
          SET     "H-St4"                     //Steuerleitung 4 aktivieren
          L     EB   125                    //Eingangsbit laden
          L     W#16#F000
          UW    
          SLW   12                          //Um 12 Stellen verschieben
          T     MW   131                    //Im Merker 131 speichern
          R     "H-St4"                     //Steuerleitung 4 deaktivieren
    
    
    //in Anbetracht der Tatsache, dass MW125 und MW126 überlappen würde eine
    Oder-verknüpfung so aussehen:
    
    MW125:  0000 0000 0000 1111
    MW126:  0000 1111 xxxx xxxx
    OW
    MW129:  0000 1111 xxxx 1111
    also:      0    F    x    F
    
    so müsste es dann richtig sein...also ohne Überlappung:
    
    //wenn du jetzt noch anfängst mit durch zwei teilbaren,
     natürlichen zahlen adressierst wirds einfacher
      
           L     MW   125                    //ersten Merker laden
          L     MW   127                    //zweiten Merker laden
          OW                                //ODER Verknüpfen
          T     MW   133                    //In Ergebnismerker 133 laden
    
          L     MW   133                    //Ergebnismerker 133 laden
          L     MW   129                    //dritten Merker laden
          OW                                // ODER verknüpfen
          T     MW   133                    //In EM 133 speichern
    
          L     MW   131                    //vierten Merker laden
          L     MW   133                    //Ergebnismerker laden
          OW                                //ODER verknüpfen
          T     MW   133                    //In EM 133 speichern
    
    
          L     MW   133                    //Ergebnismerker 133 in AKKU 1 laden
          BTI                               //BCD in Ganzzahl
          T     MW   133                    //speichern
    
          L     MW   133                    //Ergebnismerker 133 laden
          L     3.456000e+000             
    
          *I                                //multiplizieren
          T     "UA"                        //in Analogausgang laden 
    
          BE                                //Baustein ENDE
    Zitat Zitat von Zet0r Beitrag anzeigen
    ich habe mir den FC106 mal angesehen. So wie ich die S7 Hilfe verstanden habe macht er das was die Multiplikation mit der Gleitkommazahl machen soll...Wenn ich den Baustein in den Code reinziehe erscheint folgendes:
    Code:
      
    
    CALL  "UNSCALE"
           IN     :=   MW133              //Wenn ich die S7 Hilfe richtig verstanden habe, muss hier die  zu skalierende  Variable rein, also der Merker 133
           HI_LIM :=8000
           LO_LIM :=0
           BIPOLAR:= 0 //Werte von 0 bis 27648
           RET_VAL:=
           OUT    :=PAW128
    Zitat Zitat von Zet0r Beitrag anzeigen
    Kommt das so hin?? Also bei einem Wert von 8000 im Merker soll der Wert 27648 (entspricht 10V) am Analogausgang anliegen.
    und bei 0 liegen 0V an...so ist das richtig, aber die eingabe am IN würde er nicht akzeptieren ... stichwort REAL

    Zitat Zitat von Zet0r Beitrag anzeigen
    Wieso soll ich ein MD benutzen, das ist doch eine 32 Bit Ganzzahl, wenn eine 16 Bit Ganzzahl ausreicht? Und der Analogausgang ist doch auch eine 16 Bit Ganzzahl. Ich habe keinen Befehl gefunden mit dem ich von 32Bit auf 16 zurückwandeln kann....oder steh ich da auf dem Schlauch...
    da gibt es nicht viel zu wandeln, bis aufs vorzeichen. also positive zahlen kannst du ohne weiteres beschneiden, solange sie in den bereich der kleineren zahl fallen (plausibilitätsprüfung könnte angebracht sein)
    also so:


    MD 10 ... DINT mit <=32767
    MW 12 ... INT

    wenn es sich um eine zorzeichen behaftete zahl handelt ist es ein wenig anders

    Code:
    *
          L     MD    10                    //DINT
          L     DW#16#7FFFFFFF
          UD                                //DW-und
          T     MD     2                    //als DW speichern
    //vorzeichenrichtige Zahl liegt in MW4
    Geändert von vierlagig (27.05.2008 um 18:53 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  13. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Zet0r (27.05.2008)

  14. #18
    Zet0r ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.05.2008
    Beiträge
    9
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also ich hab mich an die Sache nochmals rangesetzt und jetzt sollte es eigendlich funktionieren.

    Hier erstmal der Inhalt die FC 2:

    Code:
    Netzwerk1 - Schritt 1 - Steuerleitung 1 wird aktiviert
    
    Code:
          U     "TS1"
          =     "S-St1"                     //wenn VKE 1 dann S-St1 aktiv
          SPBNB _001
          L     0
          T     "MD0"                       //MD0 wird 0 gesetzt - "RESET" von MD0
    _001: NOP   0
    Netzwerk 2 - Schritt 2 - Steuerleitung 1 weiterhin aktiv, lesen und speichern
    Code:
          U     "TS2"
          =     "S-St1"
          SPBNB _002
          L     EB   125
          OW    
          T     MW     2
    _002: NOP   0
    Netzwerk 3 - Schritt 3 - Steuerleitung 2 wird aktiviert
    Code:
          U     "TS3"
          =     "S-St2"
    Netzwerk 4 - Schritt 4 - Steuerleitung 2 weiterhin aktiv, lesen und speichern
    Code:
          U     "TS4"
          =     "S-St2"
          SPBNB _003
          L     EB   125
          SLW   4
          OW    
          T     MW     2
    _003: NOP   0
    Netzwerk 5 - Schritt 5 - Steuerleitung 3 wird aktiviert
    Code:
          U     "TS5"
          =     "S-St3"
    Netzwerk 6 - Schritt 6 - Steuerleitung 3 weiterhin aktiv, lesen und speichern
    Code:
          U     "TS6"
          =     "S-St3"
          SPBNB _004
          L     EB   125
          SLW   8
          OW    
          T     MW     2
    _004: NOP   0
    Netzwerk 7 - Schritt 7 - Steuerleitung 4 wird aktiviert
    Code:
          U     "TS7"
          =     "S-St4"
    Netzwerk 8 - Schritt 8 - Steuerleitung 4 weiterhin aktiv, lesen und speichern
    Code:
          U     "TS8"
          =     "S-St4"
          SPBNB _005
          L     EB   125
          SLW   12
          OW    
          T     MW     2
    _005: NOP   0
    Netzwerk 9 - Schritt 8 - Umrechnung des Ergebnisses entsprechend der Aufgabenstellung und anlegen an den Analogausgang
    Code:
          U     "TS8"
          =     "S-St4"
          SPBNB _006
          L     MW     2                    //MW2 laden
          BTI                               //von BCD in 16 Bit Ganzzahl
          ITD                               //Ganzzahl 16 Bit zu Ganzzahl 32 Bit
          DTR                               //Ganzzahl 32 Bit zu 32 Bit Gleitkomma
          L     3.456000e+000               //Umrechnungs-Faktor laden
          *R                                //Gleitkomma-Muliplikation
          RND                               //Gleitkomma zu Ganzzahl runden
          T     "UA"                        //in den Analogausgang laden
    _006: NOP   0
    Das Programm läuft in 8 Zyklen ab. Es gibt immer noch die 4 Steuerleitungen (S-Stx). Diese sind jeweils für 2 Zyklen aktiviert. Im 1. Zyklus wird die Steuerleitung aktiviert und im 2. Zyklus wird dann bei immernoch aktivierter Steuerleitung der Wert eingelesen. 2 Zyklen pro Steuerleitung mal 4 Steuerleitungen, macht 8 Zyklen. Die "TSx" Werte sind Zählerstände. Also wenn der in einem anderen FB umgesetzte Zähler den Wert 8 hat, ist TS8 gleich 1 und die anderen TS Variablen sind 0. Im ersten Zyklus ist TS1 1 und die anderen TS Variablen sind 0.

  15. #19
    Zet0r ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.05.2008
    Beiträge
    9
    Danke
    15
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Inzwischen hab ich das Programm zum laufen bekommen und noch ein paar Fehler gefunden. Aber kann mir jemand sagen wo der Fehler im folgenden Code liegt:

    Code:
          L     MW     2                    //MW2 laden
          BTI                               //von BCD in 16 Bit Ganzzahl
          ITD                               //Ganzzahl 16 Bit zu Ganzzahl 32 Bit
          DTR                               //Ganzzahl 32 Bit zu 32 Bit Gleitkomma
          L     3.456000e+000               //Umrechnungs-Faktor laden
          *R                                //Gleitkomma-Muliplikation
          RND                               //Gleitkomma zu Ganzzahl runden
          T     "UA"                        //in den Analogausgang UA (Word) laden
    Am Analogausgang liegt nur Mist an.

  16. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Welchen Wert hast du denn in MW2 und was steht dann in "UA" ...?

  17. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Zet0r (05.06.2008)

Ähnliche Themen

  1. Umsetzung Caddy++ Projekt --> Eplan
    Von mitchih im Forum E-CAD
    Antworten: 1
    Letzter Beitrag: 10.06.2011, 05:31
  2. Flyer Umsetzung 13849
    Von Safety im Forum Werbung und Produktneuheiten
    Antworten: 0
    Letzter Beitrag: 08.01.2010, 20:38
  3. kniffelige umsetzung bs34 zu blockmove ???
    Von mknoellner im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.05.2009, 15:50
  4. Umsetzung RS232 auf Profibus Step7
    Von steven001 im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 17.10.2008, 21:59
  5. Umsetzung
    Von nourdine im Forum Programmierstrategien
    Antworten: 15
    Letzter Beitrag: 07.09.2008, 12:26

Lesezeichen

Berechtigungen

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