2.7k Aufrufe
Gefragt in Anwendungen(Java,C++...) von mikoop Experte (2.7k Punkte)
Hallo,

Für unsere Bewässerung nutze ich mehrere Relaisplatinen, die über einen PC gesteuert werden.
Dazu arbeitet ein Programm mehrmals am Tag ein Script ab, dass vorgibt, welches Relais wie lange gestartet wird.

Als 'Globale Vorlage' gibt es eine txt-Datei, in der alle Relais und die dazugehörigen Kommentare und Befehle stehen. Statt der Laufzeit steht da aber ein Wort (aus, trocken, normal oder feucht).
Diese Liste passe ich an, wenn zB eine andere Kultur auf das Beet kommt oder sich der Wasserbedarf ändert.

Auf dem Bewässerungspc gibt es dann Batch-Dateien, die es ermöglichen, auf das Wetter zu reagieren (Regen = aus, Bedeckt = kürzer, Sonne = norm).
Wenn eine dieser batch-Dateien ausgeführt wird, werden mehrere vbs-Scripte hintereinander ausgeführt, die zB aus dem Befehl 'trocken' 180 Sekunden machen etc.
Anschliessend wird der Desktop Hintergrund geändert, damit ersichtlich ist, welcher Modus gerade aktiv ist.

Soweit funktioniert auch alles seit 2 Jahren.

Das Problem ist mal wieder der Mensch (und dabei auch ich):
Ein Schreibfehler in der Vorlage bringt das ganze System durcheinander. Kürzlich wollte ich ein leeres Beet ausschalten und so den Begriff 'normal' durch 'aus' ersetzen. Aus Versehen blieb das l stehen und da stand dann ausl.
Das Script konnte damit nichts anfangen und brach an dieser Stelle ab, alle folgenden Beete wurden nicht mehr bewässert.
Da ich erst von einem mechanischen Schaden ausging dauerte die Fehlersuche lange...

Jetzt kommt endlich meine Frage:

Kann ich über irgendeine Standard-Anwendung (wie Excle, html oder so) ein Auswahlmenue mit den benötigten Modi (aus, trocken, feucht, normal) erstellen, das zB über Dropdown oder ankreuzen funktioniert und dann die entsprechenden Stellen in der txt-Vorlage verändert, den Rest aber nicht anrührt?
Im Moment fehlt mir das der richtige Ansatz, habt ihr eine Idee?

Danke und Gruss, Mikoop

9 Antworten

0 Punkte
Beantwortet von mikoop Experte (2.7k Punkte)
Jetz habe ich zu schnell auf Absenden geklickt, hier zur Info noch die 'standard.txt' auf der alles basiert:

set 3 7 on {Einschalten des Mastervalve}
{Rosen}
set 1 1 on {Beginn der Bewässerung der Beete 1 bis 8}
aus
set 1 1 off
{Rosen}
set 1 2 on
aus
set 1 2 off
{Himbeeren}
set 1 3 on
aus
set 1 3 off
{Efeu P1}
set 1 4 on
normal
set 1 4 off
{Johannisbeeren}
set 1 5 on
normal
set 1 5 off
{vStr Kühlraum}
set 1 6 on
aus
set 1 6 off
{vStr}
set 1 7 on
feucht
set 1 7 off
{Str C7}
set 1 8 on
feucht
set 1 8 off
{Str C7}
set 2 1 on {Wechsel der Platine zu den Beeten 9 bis 15}
feucht
set 2 1 off
{Sträucher neu}
set 2 2 on
feucht
set 2 2 off
{Himbeeren}
set 2 3 on
trocken
set 2 3 off
{Fairy}
set 2 4 on
normal
set 2 4 off
{Himbeeren}
set 2 5 on
feucht
set 2 5 off
{Str C7}
set 2 6 on
aus
set 2 6 off
{C3 div}
set 2 7 on
aus
set 2 7 off
{Obst neu}
set 2 8 on
aus
set 2 8 off
{Kletterrosen}
set 3 1 on {Wechsel der Platine auf 3 für den Draht}
feucht
set 3 1 off
{Rosen neu}
set 3 2 on
aus
set 3 2 off
{Veitchii}
set 3 3 on
feucht
set 3 3 off
{Veitchii}
set 3 4 on
normal
set 3 4 off
{Rosenhaus}
set 3 5 on
normal
set 3 5 off
{Rosenhaus}
set 3 6 on
normal
set 3 6 off
set 3 7 off {Schliessen des Mastervalve}
sendbin 0 00000000


Danke und Gruss, Mikoop
0 Punkte
Beantwortet von
Man könnte dafür ein kleines Programm schreiben, allerdings ist das bei schon ca. 20 Jahre her, da muß ich passen.

Vielleicht reicht auch einfach ein anderer Editor, mit npp kann man eine eigene Sprache definieren und Farben für die Schlüsselwörter festlegen.
notepad-plus-plus.org/features/
0 Punkte
Beantwortet von
Hallo, etwas mehr zu der verwendeten Relaisplatine.
Schaue dir mal AutoIt an.

LeC2
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
In Excel kann man auswahl-listen (Drop-down-menues) erstellen, das ist dann aber erstmal keine Textdatei.
(Excel 2007: Registerkarte "Daten" / Gruppe "Datentools" / Datenüberprüfung / Einstellungen / Zulassen: Liste)

(Mit Hilfe von VBA könnte man in Excel natürlich noch was machen, aber dann kann man auch gleich eine andere Programmiersprache verwenden.)

Ich würde eine HTA-Anwendung schreiben
(https://de.wikipedia.org/wiki/HTML-Applikation)

Das heißt:
Du kannst eine HTML-Seite mit der gewünschen Funktionalität (Formulare / Javascript) erstellen, und mit einem kleinen Zusatz als HTA-Datei speichern, welche dann (mit ActiveX) auch Dateien speichern kann.
0 Punkte
Beantwortet von
Hallo Mikoop,

sicher gibt es viele Lösungsmöglichkeiten, wie oben beschrieben. Excel ist aber natürlich mal wieder eine der leichtesten.

Erstelle in einer neuen Arbeitsmappe im Bereich A1 bis E23 folgende Tabelle

Beetnr. Reihe Pos. Bezeichnung Bewässerung
1 1 1 Rosen aus
2 1 2 Rosen aus
3 1 3 Himbeeren aus
4 1 4 Efeu P1 aus
5 1 5 Johannisbeeren aus
6 1 6 vStr Kühlraum aus
7 1 7 vStr aus
8 1 8 Str C7 aus
9 2 1 Str C7 aus
10 2 2 Sträucher neu aus
11 2 3 Himbeeren aus
12 2 4 Fairy aus
13 2 5 Himbeeren aus
14 2 6 Str C7 aus
15 2 7 C3 div aus
16 2 8 Obst neu aus
Draht 3 1 Kletterrosen aus
Draht 3 2 Rosen neu aus
Draht 3 3 Veitchii aus
Draht 3 4 Veitchii aus
Draht 3 5 Rosenhaus aus
Draht 3 6 Rosenhaus aus


Dann E2 bis E23 markieren und in Excel 2007/2010 auf Daten -> Datenüberprüfung -> Datenüberprüfung gehen oder in Excel 2000/2003 auf Daten -> Gültigkeit.

Wähle dort Liste und gib bei Quelle aus;trocken;normal;feucht ein. -> OK

Öffne nun den VBA-Editor (Alt+F11) und gib bei Diese Arbeitsmappe folgenden Code ein:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

p = ThisWorkbook.Path
n = ThisWorkbook.Name

Open p & "\Datei.txt" For Output As #1
Print #1, "set 3 7 on {Einschalten des Mastervalve}"

i = 2
Do
Print #1, "{" & Cells(i, 4) & "}"
Print #1, "set " & Cells(i, 2) & " " & Cells(i, 3) & " on"
Print #1, Cells(i, 5)
Print #1, "set " & Cells(i, 2) & " " & Cells(i, 3) & " off"
i = i + 1
Loop Until Cells(i, 1) = ""

Print #1, "set 3 7 off {Schliessen des Mastervalve}"
Print #1, "sendbin 0 00000000"

Close #1

End Sub


Ersetzte dabei Datei.txt durch einen evtl. vorgegebenen Namen.

Immer wenn du Änderungen in der Excelmappe machst und diese speicherst wird im gleichen Ordner die Text-Datei aktualisiert.

Gruß Mr. K.
0 Punkte
Beantwortet von
Das Format der Tabelle wurde hier leider nicht richtig übernommen. Das aus muss natürlich in die Spalte "Bewässerung".
0 Punkte
Beantwortet von
Ich bin dann mal paar Tage weg.
Sollte es Probleme mit diesem Code geben, kann ich dir erst nächste Woche wieder antworten.
0 Punkte
Beantwortet von mikoop Experte (2.7k Punkte)
Hallo Exelking,

Das klappt bisher super, dank deiner ausführlichen Anleitung habe ich das soweit hinbekommen. Lokal auf meiner Workstation klappt das, jetzt muss ich das nur noch mit auf dem richtigen Rechner einrichten und den Dateinamen / Pfad anpassen.
Rückmeldung folgt!

Nochmals danke,

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

Hier die versprochene Rückmeldung, das klappt genauso wie es soll.
Nochmals vielen Dank und Excelking und an alle Anderen, die sich dafür interessiert haben.

Gruss, Mikoop
...