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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Takte pro Minute ermitteln

  1. #11
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Warum öffnest du nicht erst PLCSIM im Simatic Manager, dann lädst du die Systemdaten, dann das Programm
    and we all support the team (S.King - Die Arena)

  2. #12
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von dtsclipper Beitrag anzeigen
    Wie wäre es wenn Du einen Timer eine Minute lang laufen lässt und dann mit dem Timersignal und dem Signaleingang hochzählst?
    Er will ja nicht ne ganze Minute warten bis Taktänderungen angezeigt werden:
    Zitat Zitat von EMZ Beitrag anzeigen
    Gibt es denn eine andere Lösung, die Taktzahl über ein digitales Signal anzeigen zu lassen, ohne immer 1 Minte zu warten?
    Jetzt muss er nur 2 Sekunden warten:
    Zitat Zitat von EMZ Beitrag anzeigen
    Ich würde es glaube ich so lösen.
    Ich würde "Ganze Zahlen multiplizieren (16-Bit)" dann würde ich die Takte auf einen Zähler für z.B. 2 Sekunden zählen lassen. Diesen Zählwert dann mal 30 multiplizieren dann hätte ich die Takte pro Minute.
    wobei bei dieser Lösung die gleichen Einschränkungen wie bei der Logo gelten:
    Zitat Zitat von hucki Beitrag anzeigen
    ... wird mit abnehmender Erfassungszeit durch den höheren Faktor ungenauer):

    ... auch weil sie nur in [Anpassung] 30er [/Anpassung] Schritten zählt

  3. #13
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also ich habe es so gelöst wie oben beschrieben, aber es funktioniert nicht so ganz. Da muss ich hucki Recht geben.

    Habe einen Takt genommen, der wird über einen Zähler ausgewertet und nach 4s zählt der Zähler nicht mehr. Den Zählwert multiplizier ich mit 15 und komme so auf einen Wert.
    Gibt es denn keine andere möglichkeit die Taktanzeige so zu programmieren (in FUP), dass ich nach 1-2 sekunden eine Taktzahl pro Minute bekomme, ohne 1 Minute lang zu warten, bis der Zähler 1 Minute den Takt gezählt hat??

    LG EMZ

    Danke für eure ganzen Antworten.

  4. #14
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Um welche Taktraten handelt es sich denn überhaupt?

    Du hast ja bestimmt in Deinem dazugehörigen Logo-Thread gesehen, das es da min. 2 verschiedene Lösungsansätze gibt, die halt je nach Taktzahl Vor- und Nachteile haben.
    Hast Du das da mal simuliert? Bei der V2 kann man ja einfach mal 'nen Impulsgeber als Eingang nehmen, um etwas Kontrolle zu haben.

    Die 2. Variante müsste man bei S7 mit weniger Schwankungen hinbekommen, wenn man zum Messen des Zeitabstands zwischen 2 Signalen einen Hardwareinterrupt nimmt. Ich hab' das aber bei 'ner 300er noch nicht mal simuliert, bin da also keine große Hilfe. Aber definitiv ist der Zeitabstand zw. 2 Takten das Minimum, was zur Berechnung und Anzeige einer neuen Taktzahl benötigt wird.

  5. #15
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Nur mal so als Ablauf für die Interrupt-Geschichte:

    Interrupt bei positiver Flanke am Eingang, ich glaub' OB40:
    1. gespeicherte "Systemzeit neu" zu "Systemzeit alt" kopieren.
    2. aktuelle Systemzeit als "Systemzeit neu" speichern

    Im Zyklus (oder gleich im Interrupt, hängt von der Taktzahl ab):
    1. Zeitdifferenz "Systemzeit neu" minus "Systemzeit alt" berechnen -> Ergebnis sollte irgendwas im ms-Bereich sein
    2. 60.000 (ms = 1 min) geteilt durch den berechneten ms-Zeitabstand zwischen den beiden letzten Signalen = Taktzahl/min


    Das Ganze berechnet nach den letzten 2 Takten (und ohne Zyklusungenauigkeit) -> schneller geht es nicht.

  6. #16
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Interrupt bei positiver Flanke am Eingang, ich glaub' OB40:
    1. gespeicherte "Systemzeit neu" zu "Systemzeit alt" kopieren.
    2. aktuelle Systemzeit als "Systemzeit neu" speichern


    Wo finde ich das ganze?? Bzw. wie mache ich das.
    Und wie speicher ist die Systemzeit ab?

    kannst du es mir bitte bisschen genauer erklären?


    Schaut, so habe ich es gelöst. In Netzwerk zwei habe in nen Zähler und Timer nur zur Kontrolle reingebaut, ob die Taktzahl die mir im Netzwerk 3 angegeben wird richtig ist.
    Bis jetzt Stimmt die Taktzahl jedesmal, egal wie schnell ich den Taktmerker laufen lass. Würde es so fachgerecht gehen wie ich es programmiert habe? Die Eingänge E124.0 und E124.1 sind nicht zu beachten, sind nur zum Rücksetzen der Bauteile gedacht mehr nicht.


    Takt_min.jpg


    LG
    EMZ
    Geändert von EMZ (17.07.2013 um 15:58 Uhr)

  7. #17
    Registriert seit
    27.08.2008
    Beiträge
    8
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    So könnte auch gehen, Freigaben z.B Masch. läuft und Bereichsgrenzen sollten vielleicht noch rein.

    Kannst ja mal ausprobieren wenn du Lust hast.


    Code:
    FUNCTION_BLOCK "Leistung"
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      e_Freigabe : BOOL ;	
      e_Takt : BOOL ;	
    END_VAR
    VAR_OUTPUT
      a_Leistung : DINT ;	
    END_VAR
    VAR
      s_Flk_Takt : BOOL ;	
      s_Messung_laeuft : BOOL ;	
      s_TaktZeit_Time : TIME ;	
      s_SFB04_TOF_Messzeit : "TOF";	
    END_VAR
    VAR_TEMP
      t_Imp_Takt : BOOL ;	
      t_HV_Reset_Messung : BOOL ;	
      t_TaktZeit_Dint : DINT ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =Takt-Impuls aus Eingangs-Takt generieren
    
          U     #e_Takt; 
          FP    #s_Flk_Takt; 
          =     #t_Imp_Takt; 
    NETWORK
    TITLE = Messung läuft
    
          U     #t_Imp_Takt; 
          U     #s_Messung_laeuft; 
          =     #t_HV_Reset_Messung; 
          R     #s_Messung_laeuft; 
    
          U     #t_Imp_Takt; 
          UN    #t_HV_Reset_Messung; 
          UN    #s_Messung_laeuft; 
          S     #s_Messung_laeuft; 
    
    NETWORK
    TITLE =Messzeit Zwischenspeichen
    
          L     #s_TaktZeit_Time; 
          T     #t_TaktZeit_Dint; 
    
    NETWORK
    TITLE =Messzeit 
    
          CALL #s_SFB04_TOF_Messzeit (
               IN                       := #t_Imp_Takt,
               PT                       := T#2M,                                     //Max. Messzeit (0.5St/min.)
               ET                       := #s_TaktZeit_Time);
    
    NETWORK
    TITLE =Messzeit Prüfen
    
          L     L#0;                                                   //Wenn Messzeit<=0 dann auf 1       
          L     #t_TaktZeit_Dint;                               // wegen Div/0
          >=D   ; 
          SPBN  Nb01; 
          L     L#1; 
          T     #t_TaktZeit_Dint; 
    Nb01: NOP   0; 
    NETWORK
    TITLE =Leistung berechnen
    
          U     #t_Imp_Takt; 
          UN    #s_Messung_laeuft; 
          SPBN  Nc01; 
          L     #t_TaktZeit_Dint; 
          L     L#0;                                                     //Zyklus add bzw. konst. multipl.
          +D    ; 
          L     L#60000; 
          L     #t_TaktZeit_Dint; 
          /D    ; 
          T     #a_Leistung; 
    Nc01: NOP   0; 
    END_FUNCTION_BLOCK

  8. #18
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    @andy033,
    eine ähnlich Lösung hab' ich ihm im Logo-Thread vorgeschlagen. Allerdings läuft der Timer dabei halt durch die zyklische Abfrage asynchron zum Eingang, wodurch es bei hohen Taktraten zu Schwankungen in der Taktzahl kommt, auch wenn diese absolut gleichmäßig ist. (Ich hatte den Eingang einfach mal an einen Taktgeber gehangen). Ein paar Millisekunden machen halt bei der Berechnung jedesmal einen Unterschied. Ich vermute aber mal, dass die Schwankungen hier geringer sind, als bei der Logo. Hast Du das mal irgendwie getestet?

    Noch 'ne Frage:
    Zitat Zitat von Andy033 Beitrag anzeigen
    Code:
          L     #t_TaktZeit_Dint; 
          L     L#0;                                                     //Zyklus add bzw. konst. multipl.
          +D    ; 
          L     L#60000; 
          L     #t_TaktZeit_Dint; 
          /D    ; 
          T     #a_Leistung;
    Wozu dient die rote markierte Addition, wenn das Ergebnis weder gespeichert wird noch in die nächste Rechnung eingeht. (Mal davon abgesehen, das sich eh nichts ändert, weil nur Null addiert wird. Aber das ist sicher auch nur ein Platzhalter für den Wert im Kommentar)





    Zitat Zitat von EMZ Beitrag anzeigen
    Zitat Zitat von hucki Beitrag anzeigen
    Interrupt bei positiver Flanke am Eingang, ich glaub' OB40:
    1. gespeicherte "Systemzeit neu" zu "Systemzeit alt" kopieren.
    2. aktuelle Systemzeit als "Systemzeit neu" speichern
    Wo finde ich das ganze?? Bzw. wie mache ich das.
    Und wie speicher ist die Systemzeit ab?

    kannst du es mir bitte bisschen genauer erklären?
    Das Programm im OB40 zur Taktberechnung würde ungefähr so aussehen:
    Code:
          L     "SpeicherDB".Systemzeit_neu        //Systemzeit vom letzten Aufruf OB40
          T     "SpeicherDB".Systemzeit_alt        //als "Systemzeit_alt" abspeichern
    
          CALL  "DT_TOD"                           //Systemzeit vom jetzigen Aufruf OB40 extrahieren
           IN     :=#OB40_DATE_TIME                //Standard Libary -> IEC Function Blocks -> FC8
           RET_VAL:="SpeicherDB".Systemzeit_neu    //und als "Systemzeit_neu" speichern
    
          L     "SpeicherDB".Systemzeit_neu        //von der neuen Systemzeit
          L     "SpeicherDB".Systemzeit_alt        //die vorige Systemzeit
          -D                                       //abziehen
          T     "SpeicherDB".Differenz             //und speichern
          L     L#60000                            //60.000(ms) laden
          TAK                                      //Dividend und Divisor tauschen für die richtige Reihenfolge zur
          /D                                       //Division (60.000 / Differenz)
          T     "SpeicherDB".Takt                  //Ergebnis Taktzahl
    Womit ich mich nicht auskenne, ist die Einrichtung des Interrupts bzw. die Abfrage, was den OB40 ausgelöst hat.
    Soweit ich weiß, benötigst Du Hardware, die diese Prozessalarme unterstützt. Leider wieder nicht mein Gebiet.
    Bin mehr bei der 200er zuhause und mach' mich jetzt langsam mit der 1200er vertraut.



    Zitat Zitat von EMZ Beitrag anzeigen
    Schaut, so habe ich es gelöst.
    Bis jetzt Stimmt die Taktzahl jedesmal, egal wie schnell ich den Taktmerker laufen lass. Würde es so fachgerecht gehen wie ich es programmiert habe? Die Eingänge E124.0 und E124.1 sind nicht zu beachten, sind nur zum Rücksetzen der Bauteile gedacht mehr nicht.



    Takt_min.jpg
    Dieser Code kann halt die Taktzahl immer nur in 15er Schritten (durch den Faktor 15) anzeigen. Wenn das für Dich genau genug ist, dann ist's doch OK.



    Ich muss Dich jetzt aber auch mal tadeln.
    Du erwartest hier Hilfe, schaffst es aber nicht, auf Fragen zu antworten. Jeder Helfer macht das hier in seiner Freizeit. Da ist das ja wohl das Wenigste, das vom TE auf gestellte Fragen geantwortet wird.
    Im Logo-Thread weiß ich jetzt 2 Tage später noch nicht, ob Du die 2 Lösungen überhaupt gesehen hast. Trotzdem ich das hier schon 2 mal angesprochen und verlinkt habe. Wenn Du nicht antworten möchtest, klicke entweder auf Danke oder auf Beitrag melden und beschwer' Dich darüber. Aber keine Reaktion vom TE ist einfach nur ...

    Nur nehmen ist einfach nicht fair.
    Geändert von hucki (17.07.2013 um 21:42 Uhr) Grund: Fundort FC "DT_TOD" hinzugefügt

  9. #19
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    HI hucki,
    erstmals möchte ich mich entschuldigen für die ganze Verzögerung. Aber da ich leider keine LOGO-Software auf der Arbeit habe und momentan auch nicht in der Schule bin, kann ich deine Lösung nicht testen. Deshalb möchte ich diese erst in der Schule ausprobieren und anschließend dir eine Antwort geben.
    Trotzdem danke.


    Jetzt zu den anderen Lösungen:

    Es ist echt nett und super toll von euch, aber ich habe mehrmals erwähnt das dass ganze bitte in FUP realisiert werden sollte. Ich bin ein ziemlicher Neuling und habe erst mit FUP angefangen. Ich komme irgendwie mit den ganzen AWL/SCL Sachen nicht ganz klar. Das liegt wahrscheinlich an den Befehlen.

    Also geht das bitte bitte auch in FUP ?

    LG
    EMZ

  10. #20
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von EMZ Beitrag anzeigen
    HI hucki,
    erstmals möchte ich mich entschuldigen für die ganze Verzögerung. Aber da ich leider keine LOGO-Software auf der Arbeit habe und momentan auch nicht in der Schule bin, kann ich deine Lösung nicht testen. Deshalb möchte ich diese erst in der Schule ausprobieren und anschließend dir eine Antwort geben.
    Trotzdem danke.
    Kurze Antwort, man kann das erst später testen, und schon weiß man, woran man ist.





    Zitat Zitat von EMZ Beitrag anzeigen
    Jetzt zu den anderen Lösungen:
    ...
    Also geht das bitte bitte auch in FUP ?
    Geht schon.
    Ist aber gerade bei Berechnungen oft viel, viel umständlicher, da dauernd zwischen irgendwelchen Dateiformaten konvertiert werden muss, obwohl sich intern überhaupt nichts ändert. In meinem Beispiel wäre das z. B. von Time_of_Day zu DINT nötig, obwohl das vom gespeichertem Bitmuster her eigentlich genau das Gleiche ist.
    Aus dem Grund bin ich bei AWL geblieben und hab' für Dich jeden Befehl kommentiert. Die Hilfe F1 gibt dann weiteren Aufschluss.
    Auch hier ist es meiner Meinung nach nicht zuviel verlangt, sich die paar Befehle im Editor mal anzusehen.


    Mal davon abgesehen, läßt sich Text viel einfacher posten, während FUP/KOP noch zusätzliche Arbeit erfordert.

    Trotzdem hier mein Programm in FUP (in AWL kopieren/einfügen und zu FUP umschalten):
    Code:
    Netzwerk 1
          L     "SpeicherDB".Systemzeit_neu
          T     "SpeicherDB".Systemzeit_alt
          NOP   0
    
    Netzwerk 2
          CALL  "DT_TOD"
           IN     :=#OB40_DATE_TIME
           RET_VAL:="SpeicherDB".Systemzeit_neu
          NOP   0
    
    Netzwerk 3
          L     "SpeicherDB".Systemzeit_neu
          T     #diNeu
          NOP   0
    
    Netzwerk 4
          L     "SpeicherDB".Systemzeit_alt
          T     #diAlt
          NOP   0
    
    Netzwerk 5
          L     #diNeu
          L     #diAlt
          -D    
          T     #diDiff
          NOP   0
    
    Netzwerk 6
          L     L#60000
          L     #diDiff
          /D    
          T     #diTakt
          NOP   0
    
    Netzwerk 7
          L     #diTakt
          T     "SpeicherDB".Takt
          NOP   0
    PS: Da ist noch keinerlei Fehlerkorrektur dabei, die da z.B. wären - Division durch 0, Differenz der beiden Time_of_Day bei Tagesübergang (neu kleiner als alt), Aufruf OB40 durch andere Ereignisse ...
    Es ging einfach erst mal um's Prinzip.
    Angehängte Dateien Angehängte Dateien
    Geändert von hucki (17.07.2013 um 23:12 Uhr)

Ähnliche Themen

  1. Antworten: 21
    Letzter Beitrag: 29.04.2011, 23:23
  2. takte erzeugen
    Von stan_keiler im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 23.04.2010, 13:54
  3. Stückzahl pro Minute?
    Von bastler im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 30.03.2009, 08:13
  4. MoviconX (Progea)oder GP-Pro(Pro-face)
    Von mad_max im Forum HMI
    Antworten: 0
    Letzter Beitrag: 06.07.2008, 11:26
  5. Antworten: 11
    Letzter Beitrag: 16.11.2005, 10:31

Lesezeichen

Berechtigungen

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