#!/usr/bin/perl -w ########################################################################### # Name : mystoerung # Funktion : Stoerungen nur ueber die Visualisierung ausloesen # 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); #print "\033[2J"; #clear the screen #print "\033[0;0H"; #jump to 0,0 while (1) { 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) { if(&timeon(1,15)) {setbit_key('SYS_Stoerung_32_1',16) }} else { &timeon(0,0); clrbit_key('SYS_Stoerung_32_1',16) } sleep 1; #print "\033[2J"; #clear the screen #print "\033[0;0H"; #jump to 0,0 } #################################################################################################### # 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. #################################################################################################### sub timeon { my ($start,$verzoegerung_sek) = @_; my $aktzeit = time; state $startzeit; state $endzeit; state $startflanke; state $diffzeit; my $retval; if ($start) { if ($startflanke) { if ($aktzeit > $endzeit) {$retval=1;} else {$retval=0; $diffzeit=$aktzeit-$startzeit;} } else { $startzeit=$aktzeit; $endzeit=$startzeit+$verzoegerung_sek; $diffzeit=0; $startflanke=1; $retval=0;} } else { $startzeit=0; $endzeit=0; $diffzeit=0; $startflanke=0; $retval=0;} # print "Start:$start\nStartzeit:$startzeit\nEndzeit:$endzeit\nStartflanke:$startflanke\nLaufzeit:$diffzeit\nRetval:$retval\n\n"; return $retval; }