#!/usr/bin/perl -w ########################################################################### # Name : mystoerung # Funktion : Störungen nur über die Visualisierung auslösen # Version : 0.1 # Datum : 25.01.2019 # Autor : PH # ################################################################################################### use strict; use warnings; use 5.010; use tools; use database_tools; use Term::ANSIColor qw(:constants); ######################################################################################################################## # Parameter 1 = Startbit # Bit = 0, Timer stoppt # Bit = 1, Timer laeuft von "0" beginnend # Bit = 1 -> 0 -> 1, Timer laeuft von "0" beginnend, Timer stoppt, Timer laeuft von "0" beginnend # Parameter 2 = Verzögerungszeit in Sekunden # Rückgabewert = 0 -> Zeit ist noch nicht abgelaufen bzw. wurde nicht gestartet # 1 -> Zeit wurde gestartet und ist abgelaufen. ######################################################################################################################## my $sub_timer = sub { my ($para) = @_; $para->{aktzeit} = time; if ($para->{start}) { if ($para->{startflanke}) { if ($para->{aktzeit} > $para->{endzeit}) { $para{retval}=1; } else {$para{retval}=0; $para{diffzeit}=$para{aktzeit}-$para{startzeit};} } else { $para{startzeit}=$para{aktzeit}; $para{endzeit}=$para{startzeit}+$para{verzoegerung_sek}; $para{diffzeit}=0; $para{startflanke}=1; $para{retval}=0;} } else { $para{startzeit}=0; $para{endzeit}=0; $para{diffzeit}=0; $para{startflanke}=0; $para{retval}=0;} # print "Start:$start\nStartzeit:$startzeit\nEndzeit:$endzeit\nStartflanke:$startflanke\nLaufzeit:$diffzeit\nRetval:$retval\n\n"; return $para{retval}; } ######################################################################################################################## ######################################################################################################################## #print "\033[2J"; #clear the screen #print "\033[0;0H"; #jump to 0,0 ## initialisieren Parameter #### my %params1 = (start=>0, verzoegerung_sek=>15, startflanke=>0, aktzeit=>0, startzeit=>0, endzeit=>0, differenz=0, retval=0 ); while (1) { $sub_timer->(\%params1); my $SYS_Stoerung_32_1 = lesen_messwert_dez('SYS_Stoerung_32_1'); my $SYS_stoerung_abstellen = lesen_messwert_real('SYS_stoerung_abstellen'); # print "$SYS_Stoerung_32_1\n"; # print "$SYS_stoerung_abstellen\n"; if (lesen_messwert_real('SYS_stoerung_abstellen') > 200.0) { $params1{start} =1; if($params1{retval}) {setbit_key('SYS_Stoerung_32_1',16) } } else { $params1{start}=0; clrbit_key('SYS_Stoerung_32_1',16) } sleep 1; #print "\033[2J"; #clear the screen #print "\033[0;0H"; #jump to 0,0 }