3.5k Aufrufe
Gefragt in HW-Sonstiges von mikoop Experte (2.7k Punkte)
Hallo,

Der eine oder andere weiß, dass ich eine Baumschule leite. Wir modernisieren jetzt ein Quartier für die Anzucht von Pflanzen in Töpfen.
Für die Steuerung der notwendigen Bewässerung brauche ich einen neuen 'Beregnungscomputer'

Bisher verwenden wir Geräte von 2 führenden Herstellern unserer Branche, leider hat jedes dieser Geräte so seine Eigenheiten - an beiden Geräten gibt es Einschränkungen, die mich stören.

Aus diesem Grund spiele ich mit dem Gedanken, einen Beregnungscomputer selbst zu 'konstruieren'. Dabei denke ich an einen einfachen PC, den ich mit Relaiskarten (wie zB so einer oder so) ausrüste und dann ein 'Beregnungsprogramm' dazu schreibe.

Sehr kompliziert muss so ein 'Programm' nicht sein, eigentlich besteht es daraus, ein Relais (dass dann ein Venil ansteuert) für eine voreingestellte Zeit zu öffnen und dann wieder zu schliessen und dann das nächste Relais zu öffnen und zu schliessen.
Und das Ganze dann zu bestimmten (Uhr-) Zeiten immer zu wiederholen.
Gut wäre noch die Möglichkeit einzelne Kreise manuell zu öffnen und die Programme zB für einen Tag zu unterbrechen ( zB wenn es regnet).

Vorteil der PC Lösung wäre, dass ich diesen PC im Firmennetzwerk einbinden könnte und so auch fernsteuern könnte, im Extremfall könnte ich also vom Bett aus per Smartphone die Bewässerung starten oder stoppen.

Die meisten dieser Karten sollen über C++, Delphi oder VB steuerbar sein, und da liegt das Problem: ist das sehr kompliziert? Ich habe davon nämlich keine Ahnung.
Teilweise gibt es Anwendungsbeispiele, die man abändern kann.

Haltet ihr die ganze Sache für durchführbar?
Hab eich ein Problem übersehen?
Könnte ich hier evtl. Hilfe bekommen?

Danke und Gruss, Mikoop

6 Antworten

0 Punkte
Beantwortet von Experte (3.2k Punkte)
Also auf jeden fall die erste hat nen FT232R an bord. Das isn USB-RS232-Wandler. Dahinter sitzt n kleiner Atmel ATTiny2313, der den seriellen Datenstrom dann auf die Relais verteilt.

Nachdem du die Treiber von der Webseite installiert hast (dazu siehe das verlinkte Handbuch oder direkt bei FTDI), kannst du einfach Kommandos über die virtuelle Schnittstelle senden. Die sind folgendermaßen aufgebaut:
0xFF Kanal An/Aus Kanal beginnt merkwürdigerweise bei 1 und nicht bei 0... und an/aus ist halt einfach 1/0. Soweit ich gesehn hab, gibts da n beispiel für C# und VB.
In C++ sieht das so aus (nicht getestet...):
#include <windows.h>
bool SetRelais(char comport,int kanal, bool on)
{
char comName[128]="\\\\.\\";
strcat(comName,comport); //hier wird der Name zusammengesetzt
HANDLE handle=CreateFile(comName,GENERIC_READ|GENERIC_WRITE,0
,NULL,OPEN_EXISTING,NULL,NULL);
//hier wird ein Handle auf den Com-Port geöffnet
char command[3]={0xFF,kanal,on?1:0}; //hier wird das Kommando gebastelt
DWORD bytesWritten;
if(!WriteFile(handle, command, sizeof(command), &bytesWritten, NULL)||bytesWritten!=sizeof(command))
{
CloseHandle(handle);
return false;
}
CloseHandle(handle);
return true;
}

int main (void)
{
int kanal;
bool on;
//blablabla....
//....
//kanal=irgendwas...
//on=irgendwas...

SetRelais("COM3",kanal,on);

//blabla irgendwas...
}

Der code ist dahingehend ineffektiv, da er immer ein Handle öffnet, sobald die funktion aufgerufen wird. man könnte ein handle öfnnen, wenn das programm gestartet wird und es schließen, wenn es beendet wird, das ist aber blos ne kleinigkeit. das sollte so ungefähr funktionieren.

Du kannst übrigens auch auf die Windows-Funktionen verzichten und eine Bibliothek von der FTDI-Seite (FTD2xx-Treiber) benutzen. Macht die kommunikation etwas schneller und ich finde die funktionen einfacher zu benutzen als die kryptischen winapi-teile mit ihren tausenden parametern. Einen wirklichen Vorteil hast du aber nicht.
Den gleichen Chip setze ich (und viele andere Hobby-Bastler) übrigens auch gerne auf selbst gebauten Platinen zur Kommunikation über USB ein. Und den AtTiny sowieso^^

Wie die zweite verlinkte karte zu programmieren ist, kann ich leider nicht erkennen. Auf der eBayseite steht aber, das software, treiber und SDK mitgeliefert werden. ICh geh ma davon aus, dass das entweder ähnlich funktioniert oder aber durch mitgelieferte funktionen genauso einfach geht.

Relaiskarten sind jedenfalls normalerweise recht einfach anzusprechen.^^

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

Vielen Dank für deine schnelle Antwort.
Den Anbieter der 2. Karte habe ich angeschrieben , was da an Software / Beispiele mitkommt, eine Antwort steht noch aus.

Ich habe schon die Steuer-Software einer anderen Karte ausprobiert, die eine grafische Oberfläche hat und einfach zu bedienen ist, allerdings ist diese Oberfläche sehr einfach gehalten und bietet nicht alle Funktionen, die ich mir wünsche.

Danke für den geposteten Code, den ich aber kaum verstehe.
Wo würde ich da jetzt zB eine 5 minütige Öffnung des Relais 1 eintragen, mit dem anschliessenden Schliessen des Relais 1 und dem Öffnen des Relais 2?

Wenn ich (?) so einen fertigen Code (direkt oder als Verknüpfung) auf dem Desktop speichere, lässt sich das dann ohne externes Programm ausführen wie eine bat-Datei?

Am liebsten wäre es mir, wenn ich einen Touchscreen-Monitor anschliessen könnte und es 3-4 Icons gäbe, die die verschiedenen Bewässerungsvorgänge symbolisieren. So könnten meine Mitarbeiter (oder ich) einfach das Symbol antippen und die Beregnung startet.

Übrigens hat mir ein Kollege zur Umsetzung alternativ SIEMENS Logo vorgeschlagen, da bin ich allerdings schon bei der Auswahl der Hardware verzweifelt...

Danke und Grüsse, Mikoop
0 Punkte
Beantwortet von Experte (3.2k Punkte)
Hmm.
Das war jetzt blos lowlevel code, also wie man überhaupt ein einzelnes Relais setzt.
Man müsste eine Anwendung schreiben, die 1. Relais Nr.1 öffnet, 5 minuten wartet und dann Relais Nr.1 schließt und dann halt mit irgendwas weitermacht. Das ist noch nicht so kompliziert.
Das mit dem Touchscreen ist ebenfalls zu realisieren. Dafür braucht man halt n kleinen LCD (vga oder dvi...) mit Touch, den man am besten direkt per usb anschließen kann. Die Software würde man dann im Vollbild auf diesem bildschirm laufen lassen. Sie hätte dann Buttons für die Beregnungsprogramme.

Je nachdem, wie kompliziert die Bewässerungsprogramme sind, sollte ein durchschnittlicher Programmierer sowas in vielleicht nem Tag oder zwei schaffen. Bitte entschuldige, ich habe
ist das sehr kompliziert? Ich habe davon nämlich keine Ahnung.
nur die (USB-)Kommunikation betreffend verstanden... Als nicht-Programmierer wird das schon schwierig.
Es wäre vielleicht wichtig zu wissen, wie weit du dich ans Erlernen einer Programmiersprache ranmachen möchtest.

Ich persönlich halte ein Programm zu rein zeitlichen Steuerung von einer Bewässerungsanlage übrigens für Anfänger und Nicht-Programmierer (jedenfalls solange man allzu technikfeindlich ist ;) als durchaus machbar, wenn auch mit Hilfen und Tipps. Ist daneben in meinen Augen auch ein gutes Projekt zum Lernen einer Sprache, wenn auch teilweise etwas oberflächlich.

achja, folgender code würde nacheinander alle 8 relais für 5minuten anschalten, allerdings als schwarzes konsolenfenster ohne irgendwelche buttons...:

int main (void)
{
int kanaljetzt=1; //variable für den aktuellen kanal
while(true) //wiederhole unendlich...
{
SetRelais("COM3",kanaljetzt,1); //schalte kanal an
Sleep(5*60*1000); //warte 5minuten * 60s/min * 1000ms/s = 300.000ms
SetRelais("COM3",kanaljetzt,0); //schalte kanal wieder aus

++kanaljetzt; //kanaljetzt um 1 erhöhen, also nächsten kanal auswählen
if(kanaljetzt>8) //kanal 9 gibt es nicht...
kanaljetzt=1; //...also wird wieder bei 1 angefangen
}
}

das programm ist noch schlecht, da es immer 5 minuten lang einfach schläft und in dieser zeit nichts machen kann. außerdem ist es noch recht starr, da man weder das zeitliche intervall, noch die kanalzahl, noch irgendwelche pausen einstellen kann.
Das lässt sich aber alles mehr oder weniger leicht machen.
In meinen Augen ist es am schwierigsten, alles zusammen in einer Graphischen Oberfläche zu verienen, aber auch das bekommt man hin.
Wenn du fragen hast, werden wir dir sicherlich helfen können^^.

Und leider reicht ein speichern und ausführen nicht. Du bräuchtest einen C++-Compiler bzw. ne IDE (oder halt einen für die sprache für die du dich entscheiden wirst). Das wären z.B. Visual C++-Express von Microsoft oder CodeBlocks mit MinGW.

Achja: mit SPS hab ich bisher noch nix zu tun gehabt. Sieht aber auch ganz interessant aus, vor allem da sich die Siemens logo ja preislich noch im rahmen zu halten scheint. Außerdem dürfte son kleines gerät auf dauer weniger strom verbrauchen als n pc, selbst netbooks dürften da mehr verbrauchen. dir würde halt die netzwerkunterstützung fehlen.
Man muss aber halt drauf achten, dass sich SPS ganz anders was beibringen lassen als pcs. Da muss man die logik quasi zeichnen und für den pc schreibt man halt befehle.

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

Noch keine Antwort vom Anbieter der anderen Relaiskarte...

Zwischenzeitlich habe ich noch diese Karte gefunden, weiter unten auf der Seite sieht man auch die grafische Steuerung dazu. Das geht doch schon mal in die Richtung, die ich mir vorstelle (falls ich alles richtig verstehe...)
Hoffentlich übersehe ich da nicht etwas...

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

Nur zur Info (falls es interessiert) ein kleines Update zum Projekt:

Zwischenzeitlich habe ich 3 Conrad Relaiskarten gekauft und montiert, die ich seriell am PC angeschlossen habe. Das Ganze steuere ich zZt. über das dazu gehörige Programm Lec2. Damit kann man Scripte (in meinem Fall also Bewässerungsvorgänge) speichern und über einen internen Taskmanager starten. Das ist eigentlich recht einfach und bequem...

Um auf verschiedene Wetterlagen reagieren zu können manipuliere ich die Sripte mittels batch-Dateien und kann so mit einem klick die Bewässerungszeiten verstellen .
Über eine andere batch-Datei kann ich jetzt auch die Bewässerung manuell starten.

Leider sind die Platinen im Dauereinsatz nicht sehr zuverlässig, irgendwann setzen einzelne Relais aus. Um dieses Problem zu umgehen trenne ich die Relais jeden Morgen 5 Minuten vom Strom und starte dann das Programm neu um die Karten neu zu initialisieren.
Damit ist das Problem zwar nicht gelöst, aber umgangen...

Darüber hinaus habe ich noch eine Relaiskarte von Dekovi gekauft und installiert. Diese ist auch nach längerem Einsatz noch zuverlässig.
Dazu gibt es ein sehr interessantes Programm (DRM Software, siehe selbe Seite weiter unten). Damit lässt sich jedes Relais einzeln steuren, entweder nach Wochentag, Zeit, Kalender, Impuls und so weiter.

Das war auf den ersten Blick sehr vielversprechend, allerdings sind diese Relais eher auf kurze Schaltfolgen konzipiert und rechnen in 50 ms Schritten.
Von der Software kann ich nicht mehr als 16 Minuten die Relais schliessen, die Hardware öffnet ein Relais nach spätestens 30 Minuten wieder.
Damit ist die Verwendung sehr eingeschränkt, mal sehen, wie ich damit weiter mache, zur Zeit steuere ich damit eine Tropfbewässerung.

Im Moment läuft alles, aber alle paar Tage muss ich noch nachjustieren. Ist halt ein Prototyp...

Grüsse, Mikoop
0 Punkte
Beantwortet von mikoop Experte (2.7k Punkte)
Nachtrag:

Gesteuert wird das Ganze übrigens über einen alten WinXP Rechner, der bei mir im Netzwerk hängt und per VNC ferngesteuert werden kann. Somit kann ich vom Büro oder von der Wohnung aus zB auf Regen reagieren, das ist schon eine echte Verbesserung zu vorher...

Mittelfristig werde ich die Steuerung noch mit einem Regensensor ausrüsten sowie mit einem Durchfluss-Sensor. Letzterer soll Alarm geben, wenn Wasser fliessen sollte, es aber nicht tut (Pumpe oder Magnetventil ausgefallen) oder wenn Wasser fliesst ohne dass es soll (Magnetventil oder Relais klemmt).
Einen passenden Sensor mit entsrechender Software habe ich noch nicht gefunden...

Gruss, Mikoop
...