1.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von mikoop Experte (2.7k Punkte)
Hallo,

Momentan versuche ich über eine batch-Datei Relais anzusprechen, die am PC seriell angeschlossen sind. Dazu nutze ich das Programm Relaiser von Frank Steinberg.
Das klappt auch soweit ganz gut.

Das ganze soll quasi endlos durchlaufen, ausser wenn es später als eine bestimmte Uhrzeit ist.
Wenn die Uhrzeit beim Start der batch-Datei schon überschritten ist, dann startet die Datei wie geplant nicht.
Wird die Uhrzeit aber zwischendrin erreicht, läuft die Datei immer weiter durch, auch wenn sie am Start die Uhrzeit wieder checken soll.

Da ich mich dunkel daran erinnere, dass der Check der Uhrzeit in der Batch-Datei nicht aktualisiert wird, habe ich mal testweise versucht, die Zeitüberprüfung und das Ansprechen der Relais in zwei verschiedene batchs aufzuteilen, die sich gegenseitig aufrufen.
Das hat leider auch nicht geklappt.

Hier die Datei:

cls
cd\
cd relaiser
setlocal

:start

for /f "delims=:" %%i in ("%time%") do set /a Std=%%i

if %Std% geq 7 (
if %Std% lss 18 set "OK=1"
)

if defined OK (
goto anfang
) else (
goto ende
)

:anfang

echo.
echo.
echo starten der Bewaesserung
timeout /T 3 >NUL

rem Masterventil oeffnen
relaiser 3 3 128 com2

rem Platine 1
relaiser 3 1 1 com2
timeout /T 3
relaiser 3 1 2 com2
timeout /T 3
relaiser 3 1 4 com2
timeout /T 3
relaiser 3 1 8 com2
timeout /T 3
relaiser 3 1 16 com2
timeout /T 3
relaiser 3 1 32 com2
timeout /T 3
relaiser 3 1 64 com2
timeout /T 3
relaiser 3 1 128 com2
timeout /T 3
relaiser 7 1 128 com2

rem Platine 2
relaiser 3 2 1 com2
timeout /T 3
relaiser 3 2 2 com2
timeout /T 3
relaiser 3 2 4 com2
timeout /T 3
relaiser 3 2 8 com2
timeout /T 3
relaiser 3 2 16 com2
timeout /T 3
relaiser 3 2 32 com2
timeout /T 3
relaiser 3 2 64 com2
timeout /T 3
relaiser 3 2 128 com2
timeout /T 3
relaiser 7 2 128 com2

rem platine 3
relaiser 6 3 1 com2
timeout /T 3
relaiser 3 3 130 com2
timeout /T 3
relaiser 3 3 132 com2
timeout /T 3
relaiser 3 3 136 com2
timeout /T 3
relaiser 3 3 144 com2
timeout /T 3
relaiser 3 3 160 com2
timeout /T 3
relaiser 3 3 192 com2
timeout /T 3
relaiser 7 3 192 com2

rem platine 4 ohne Mastervalve
relaiser 3 4 1 com2
timeout /T 3
relaiser 3 4 2 com2
timeout /T 3
relaiser 3 4 4 com2
timeout /T 3
relaiser 3 4 8 com2
timeout /T 3
relaiser 7 4 8 com2

cls
echo Pause vor Wiederholung
timeout /T 1800
goto start

:ende
echo off
cls
echo.
echo.
echo Uhrzeit ausserhalb der vorgesehenen Bewaesserungszeit
echo Abbruch des Programms
echo.
timeout /T 60

exit



Das Alles läuft auf einem PC mit Win 7 Prof. als BS.

Wo kann da der Fehler liegen?
Mache ich einen Denkfehler?
Gibt es eine andere / bessere Lösung?

Danke und Gruss, Mikoop

12 Antworten

0 Punkte
Beantwortet von mikoop Experte (2.7k Punkte)
Hallo Flupo,

Vielen herzlichen Dank für deine engagierte Hilfe und die Erläuterungen dazu.

Jetzt läuft es so wie gewünscht!

Ich muss noch ein paar Feinheiten (Laufzeiten, Anzeige auf dem Bildschirm etc) anpassen, wenn das alles klappt mache ich den Thread dann per 'gelöst' zu.

Nochmals danke, Mikoop
0 Punkte
Beantwortet von mikoop Experte (2.7k Punkte)
Hallo Flupo,

und alle Anderen, die das lesen...

Nach einer Woche Dauerbetrieb kann ich feststellen, dass das Skript problemlos durchläuft und auch stoppt, wenn die Zeit abgelaufen ist.

Das einzige aufgetretene Problem hat nichts mit der batch-Datei zu tun:
Wenn man die Datei einfach mit Klick auf das X (des Fensters) beendet bleibt der Status der Relais (=Ventile) unverändert - also ggf. geöffnet bis zum nächsten Neustart. Das geht ja gar nicht.

Als einzige Lösung fiel mir dazu ein, die Bewässerungs-batch nicht direkt, sondern über ein vbs Skript zu starten, das dann anschliessend darauf wartet, dass diese Batch wieder beendet wird und dann eine andere Batch aufruft, die an jedes Relais nochmal einen Sshliessbefehl sendet.
Das klappt auch soweit.

Nochmals danke für die Hilfe, Mikoop
...