Modull Zufallstimer

Begonnen von J Schohaus, 19. November 2007, 06:38:27

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 8 Gäste betrachten dieses Thema.

J Schohaus

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


hugo

danke das werden wir gerne in einer der nächsten releases aufnehmen

hugo

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

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?

hugo

wir haben dan baustein ab der version 2.4 drin, und den sode entsprechend korrigiert.
danke für den input