Autor Thema: easyE4 Anwenderbaustein EasySoft v7.11 - xTimeCount  (Gelesen 6424 mal)

Online weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
easyE4 Anwenderbaustein EasySoft v7.11 - xTimeCount
« am: Februar 16, 2020, 10:33:20 Vormittag »
Hallo Easy-Gemeinde,
eventuell ist dieser Baustein (die Namensgebung ist eine Ableitung von E(x)tended (Time)r and (Count)er) hilfreich für eure Vorhaben.

Zur Realisierung:
Der Baustein nutzt einen Timer(T32), 6 logische Verknüpfungen (BV27 - BV32) und ein wenig ST-Code.
Ich ersuche um Verständnis dass der lauffähige Baustein nur mit Knowhow-Schutz veröffentlicht wird.
Bei Interesse stelle ich aber gerne Ausschnitte als Codeschnipsel zur Verfügung.

Die Eingänge I02, I03, I04 sowie der Ausgang QA03 sind derzeit ohne Funktion "for later use".
Für entsprechende Ideen und Anregungen bin ich jederzeit empfänglich.

ENABLE:
I01 aktiviert, deaktiviert (alle Ausgänge "0" bzw. "FALSE") den Baustein und wird an Q01 weitergegeben

TAKTMEKER:
Jedes Bit ändert in Abhängigkeit vom Basistakt den Zustand. (In Anlehnung an den Si...ns-Taktmerker)
Die Berechnung erfolgt nach Basistakt * Multiplikator (welcher 1, 2, 4, 5, 8, 10, 16, 20 ist)
Beispiel 1: Basistakt 100ms, Bit 4 ändert alle (Basistakt 100ms * Multiplikator 5) 500ms den Zustand. 
Beispiel 2: Basistakt 50ms, Bit 7 ändert alle (Basistakt 50ms * Multiplikator 5) 800ms den Zustand. 
Der Basistakt ist intern mit 100ms definiert und kann bei Bedarf an IA01 überschrieben werden.
Gültige Werte sind 50ms bis 250ms und werden nur bei Signalwechsel an I01 (enable) übernommen.
Mit 50ms Basistakt entspricht das Verhalten dem Si...ns-Taktmerker.

TAKTMERKER FLANKE:
Dieser Taktmerker gibt bei jeder Signaländerung von Taktmerker 1 eine positive Flanke aus.
Beispiel 1: Basistakt 100ms, Bit 4 (Basistakt 100ms * Multiplikator 5) alle 500ms eine Flanke. 
Beispiel 2: Basistakt 50ms, Bit 7 (Basistakt 50ms * Multiplikator 5) alle 800ms eine Flanke.

SONDERTAKT FLANKE:
Der Baustein liefert den schnellstmöglichen Systemtakt und weitere 7 Sondertimer (IA02 - IA08).
Die Taktsignale erfolgen in Form einer positiven Flanke und werden in einem Byte zur Verfügung gestellt.
Bit1 = Systemtakt, Bit2 - Bit8 = Sondertakt. Die Zeitangabe erfolgt in millisekunden an IA02 bis IA08.
Die ersten 4 Sondertimer (IA02 bis IA05) werden an Q02 bis Q05  und der Systemtakt an Q06 ausgegeben.
Beispiel 1: ein Wert von 4500 an IA02 gibt an Q2 sowie Bit2 alle 4,5 sek. eine positive Flanke aus.
Beispiel 2: ein Wert von 3.600.000 an IA03 gibt an Q3 jede Stunde eine positive Flanke aus.

SONDERTAKT BLINKER:
Bei jeder SONDERTAKT FLANKE wechselt das jeweilige Bit den Zustand.
Beispiel 1: ein Wert von 4500 an IA02 ergibt an Bit 2 ein Blinken mit 4,5 sek. EIN / 4,5 sek. AUS

BITZÄHLER:
Der Baustein stellt 4 Bitzähler IA05 bis IA08 zur Verfügung.
Beispiel 1: ein Wert von 1485 an IA05 gibt den Wert 7 am zugehörigen Summenbyte aus
Beispiel 2: ein Wert von -1 an IA08 gibt den Wert 32 am zugehörigen Summenbyte aus

ZYKLUSZEIT:
Zykluszeit:aktuelle Zykluszeit in millisekunden
Zykluszeit max:maximale ermittelte Zykluszeit im millisekunden
Zykluszeit µsec:gemittelte Zykluszeit in microsekunden, Aktualisierungszeit ca. 3,5 sek.
Zykluszeit Summe:Zeit in millisekunden seit Programmstart

BAUSTEINBELEGUNG:
I01                         enable IN                         
I02 bis I04                      for later use                         
IA01                         Basistakt für Taktmerker, bei 100ms (default) keine Eingabe erforderlich
IA02 bis IA08                      Zeitvorgabe in ms für Sondertakt                
IA05 bis IA08             Werte für Bitzähler (Doppelbelegung mit Sondertakt)          
Q01                  enable OUT                         
Q02 bis Q05                 Sondertakt FLANKE (IA02 bis IA05)                
Q06                  Systemtakt                         
QA01      Byte01   Bit01 bis Bit08    Taktmerker BLINKER                   
      Byte02   Bit01 bis Bit08    Taktmerker FLANKE                    
      Byte03   Bit01 bis Bit08    Sondertakt BLINKER (IA02 bis IA08)   
      Byte04   Bit01 bis Bit08    Sondertakt FLANKE (IA02 bis IA08)    
QA02      Byte01                   Bitsumme von IA05                    
      Byte02                   Bitsumme von IA06         
      Byte03                   Bitsumme von IA07         
      Byte04                   Bitsumme von IA08         
QA03                for later use            
QA04      Word01          aktuelle Zykluszeit in ms      
      Word02          maximale Zykluszeit in ms      
QA05      DWord          Zykluszeit in µsekunden (aktualisierungszeit ca. 3500ms)         
QA06      DWord          gibt die Zeit in ms seit Programmstart an. Erster Überlauf nach ca. 24 Tagen   
« Letzte Änderung: März 24, 2020, 08:24:45 Vormittag von weiss_nix »
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Online weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:easyE4 Anwenderbaustein EasySoft v7.11 - xTimeCount
« Antwort #1 am: Februar 16, 2020, 10:48:55 Vormittag »
… das Codeschnipsel für den Taktmerker
MW31 := MW31 + MW09; // summieren der Zykluszeit für den Taktmerker
while MW31 >= MB53 do // durlaufe die Schleife solange wie MW31 größer als die Vorgabe MB53
    MW31 := MW31 - MB53; // subtrahiere den Vorgabewert von MW31

    M36  := true; // MerkerByte 5 Bit 4 setzen damit die Frequenzposition beim Zählen übersprungen wird
    M38  := true; // MerkerByte 5 Bit 6 setzen damit die Frequenzposition beim Zählen übersprungen wird
    MB05 := MB05 + 1; // MerkerByte 5 um 1 erhöhen

    if M425 or M426 or M427 then // Prüfen ob im MB54 ein überlauf der ersten 3 Stellen stattgefunden hat
        MB54 := MB54 + 1; // wenn nein dann erhöhe MB54 um 1
    else
        M 427 := true; // wenn Überlauf, dann sind 5 Takte vergangen, setze das 3. Bit (Wert 4)
    end_if;

    M36 := M428; // kopiere das Bit (Basistakt* 5) von MB54 nach MB05
    M38 := M429; // kopiere das Bit (Basistakt*10) von MB54 nach MB05
    M40 := M430; // kopiere das Bit (Basistakt*20) von MB54 nach MB05
end_while;

// Taktmerker als Taktflanke implementieren
BV32 ( EN := , I1 := MB05, I2 := MB55, ZE => , QV => MB06 );
MB55 := MB05;
« Letzte Änderung: Februar 16, 2020, 10:53:33 Vormittag von weiss_nix »
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!