Hallo Bianca,
ich möchte einmal mit meinen Worten das erklären was Du meinst. (ob ich es verstanden habe)
Ich habe eine Funktion "Timer" in der libx
Jedesmal wenn ich die Funktion Timer aufrufe, deklariere ich ein hash, das ich per Referenz an die Funktion Timer übergeben. Somit brauche ich kein stat, da ja mein hash global ist.
Ich habe jetzt versucht, deine Idee in mein Programm einzubauen. Ich denke
so geht es schon, aber ich habe diverse Fehlermeldungen die ich nicht weg bekomme. Wie gesagt die Function an sich kommt später in eine andere lib.
in der auch z.B. die Funktion "lesen_messwert_dez()" usw. steht.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/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
}
Fehlermeldungen
Global symbol "%para" requires explicit package name (did you forget to declare "my %para"?) at ./mystoerung line 37.
....
....
syntax error at ./mystoerung line 57, near "my "
./mystoerung has too many errors.
... ich sehe schon ein kleines Licht am Ende des Tunnels ;-)
Danke für die Unterstützung
Last edited: 2019-01-27 14:46:02 +0100 (CET)