Autor Thema: Modull Zufallstimer  (Gelesen 8387 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

J Schohaus

  • Gast
Modull Zufallstimer
« am: 19. November 2007, 06:38:27 »
Hallo Oscat nutzer

Des öfteren benötige ich ein Zufallstimer um die Funtion einer Maschine zu testen.
Durch verwenden von Oscat Bausteine habe ich mir so ein Timer zusammengebaut den ich auch wieder zu vergung stellen möchte.
Vielecht benötigen ja andere so ein Baustein. Wenn ja wäre es dann ja auch was für die Lib.

FUNCTION_BLOCK RDMTimer
###############################################################################
Ersteller / author : J.Schohaus
Datum / date: 13.07.2007
###############################################################################
Änderungen / Datum / Ersteller :
moditication / date / author :

###############################################################################
Verwendete Bibliotheken ( * werden im Baustein nicht benötigt )
Oscat.lib
###############################################################################

Beschreibung:
*)

VAR CONSTANT
V01_01_01: INT := 0 ;
END_VAR
VAR_INPUT
Enable : BOOL := TRUE ;
Min_Time_ms : TIME := t#1s ; (* min Taktzeit *)
Max_Time_ms : TIME := t#1.2s ; (* Max Taktzeit *)
TP_Q : TIME := t#100ms ; (* Zeit Ausgang auf TRUE *)
END_VAR
VAR_OUTPUT
xQ : BOOL ;
END_VAR
VAR
(* Taktgenerator Simulation *)
tonRDMTimer : TON ; (* Zeitbaustein Taktgenerator *)
tof_xQ : TOF ; (* Ausschaltverzögerung Taktgenerator *)
tRDMTime : TIME ; (* Sollzeit *)
rRDMTime : REAL ; (* Zufalswert Timer *)

END_VAR

(*##########################################################################
Taktgeber für Simulation
###########################################################################*)
(* Simulation *)
tonRDMTimer ( IN:= Enable , PT:= tRDMTime );
tof_xQ ( IN:= xQ , PT:= TP_Q );
IF tof_xQ.q THEN
xQ := FALSE ;
END_IF
IF tonRDMTimer.Q THEN
xQ := TRUE ;
rRDMTime := RDM ( last:= rRDMTime ) ;
tRDMTime := REAL_TO_TIME ( rRDMTime * TIME_TO_DINT( Max_Time_ms - Min_Time_ms ) + TIME_TO_DINT(Min_Time_ms )) ;
tonRDMTimer ( IN:= FALSE );
END_IF

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Modull Zufallstimer
« Antwort #1 am: 19. November 2007, 09:58:18 »
danke das werden wir gerne in einer der nächsten releases aufnehmen

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Modull Zufallstimer
« Antwort #2 am: 20. November 2007, 04:14:38 »
wir haben den code getestet und es ergaben sich ein paar fragen:

der folgende aufruf erzeugt immer nur ein true am ausgang für max einen zyklus.
IF tof_xQ.q THEN
   xQ := FALSE ;
END_IF

um den definierten puls mit der länge TP_Q zu erzeugen müsste es wie folgt sein:
if not tof_xQ.q then
        xQ := False ;
end_if;

desweiteren bekommen wir in der simulation einen fehler "unerlaubte arithmetische operation"

J Schohaus

  • Gast
Re: Modull Zufallstimer
« Antwort #3 am: 20. November 2007, 06:22:05 »
Zitat
der folgende aufruf erzeugt immer nur ein true am ausgang für max einen zyklus.
IF tof_xQ.q THEN
   xQ := FALSE ;
END_IF

stimmt entweder NOT oder eine TON Zeit davon machen.

Zitat
desweiteren bekommen wir in der simulation einen fehler "unerlaubte arithmetische operation"

Ich habe auf der aktuellen Codesys Version geteste und kein Fehler!
Mit welchen Werten wurde der Baustein aufgerufen?

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Modull Zufallstimer
« Antwort #4 am: 20. November 2007, 11:26:39 »
wir haben dan baustein ab der version 2.4 drin, und den sode entsprechend korrigiert.
danke für den input