Entwickler-Ecke
Sonstiges (Delphi) - Schnittstelle an eine Waschmaschine ;)
Johannes Maier - Do 02.09.04 14:49
Titel: Schnittstelle an eine Waschmaschine ;)
Hallo,
ein Freund von mir (nein, ich bin NICHT der Verrückte ;) ) will in einer Waschmaschine Bier brauen (lol). Dazu will er diese an den PC anschließen, und per Delphi-Programm steuern.
Nun möchte er wissen, wie man vorgeht und was für Befehle / Komponenten man braucht, um die einzelnen "er nannte es PINGs" anzusteuern und dieses Methoden zuzuweisen.
Ich persönlich kenne mich in Delphi etwas aus und in C/C++ , er in Delphi und VB ... Kann man das überhaupt mit Delphi realisieren, diese Schnittstellenprogrammierung?
Udontknow - Do 02.09.04 15:05
Ich glaube, da hatten sie auch mal was im Fernsehen gezeigt über Leute, die in der Waschmaschine Bier brauen...
Dein Kollege meinte wohl Pins, also die einzelnen Stecker-Pins einer seriellen Schnittstelle. Da gibt es Komponenten, mit denen du auch in Delphi die Schnittstelle ansprechen kannst.
Cu,
Udontknow
Johannes Maier - Do 02.09.04 15:46
Kennst du da eine passende Website oder den Namen einer solchen Komponente?
RFZ - Do 02.09.04 16:10
Titel: Re: Schnittstelle an eine Waschmaschine ;)
Moin,
du kannst dafür den Parallelport/LPT nutzen.
Such dir die IO.DLL im Netz und bau sie so mit in dein Programm ein: (muss in deinem Programmordner liegen)
Delphi-Quelltext
1: 2:
| procedure PortOut(Port : Word; Data : Byte); stdcall; external 'IO.DLL'; function PortIn(Port:Word):Byte; stdcall; external 'IO.DLL'; |
Mit dem Befehl PortOut($378, wert); kannst du die acht Datenleitungen (D0-D7) am Port ansteuern. 'wert' steht für die angelegte Zahl, also bei '1' ist D0 aktiv, bei '2' D1, bei '3' D0+D1, Binärsystem eben *g*, besser kann ichs grad nicht erklärn :)
Mit den 8 Pins kannst du Transistoren und damit Relais für die Waschmaschine schalten, das sollte (zumindest bei älteren Maschinen) kein Problem sein.
greetz RFZ
Johannes Maier - Do 02.09.04 19:32
Vielen Dank!!! :)
Johannes Maier - Do 11.11.04 19:02
So, ich muss leider dieses alte Thema wieder ausgraben :)
Wenn ich jetzt die Funktionen so aufbaue, wie RFZ beschrieben hat und auf ButtonClick einen PIN setzen lasse (z.B. den ersten), wie kann ich dann testen ob es geklappt hat? Also wie kann ich zum Beispiel einen Byte-Wert auf einem Label ausgeben oder so? ;) Falls ich PortIn zum Testen verwenden soll ...
Hoffe ihr versteht mein Gebrabbel und könnt mir helfen ;)
Johannes
RFZ - Do 11.11.04 19:18
Willst du es testen um ggf. eine Fehlermeldung zu bringen, oder willst du es richtig testen um zu sehn ob es geht?
Ich geh mal vom letzteren aus, daher schau dir mal das Pinlayout vom Parallelport an:
http://www.mg.dropbear.id.au/powermod/pc-connect.html (Da hat auch ein Typ was übern Parallelport gesteuert)
Du musst hald jetzt mit nem Voltmeter oder einer LED (braucht hier zum Test nur direkt angeschlossen werden, das geht) schaun ob an D0 zu GND (das dürften die Grünen auf dem Bild sein) Spannung anliegt.
greetz RFZ
Johannes Maier - Do 11.11.04 19:25
Hmm ehrlich gesagt versteh ich von der Seite nicht allzuviel ;)
Der Bekannte von mir hat jedenfalls jetzt ein kleines "Gerät" (kA was es genau ist) mit Relais gebaut, da ist ein Schalter für an die Serielle Schnittstelle schon dran, den muss ich einfach nur anstecken, und ein Ausgangsstecker für an die Waschmaschine auch.
Kann man den Wert, der momentan anliegt, nicht vom PC her auslesen? Also mit der Funktion PortIn oder Assembler oder so?
Ich möchte nicht wissen, ob es wirklich funktioniert, da es später sowieso auf einem anderen PC laufen wird, und man sieht ja, ob die Maschine angeht oder nicht ;)
Es stellt sich mir nur die Frage, wie ich den Byte-Wert auf einem Label oder Panel ausgeben kann.
Achja, was bedeutet eigentlich $347 ?
Danke schonmal
Johannes
RFZ - Do 11.11.04 19:35
| Johannes Maier hat folgendes geschrieben: |
| Kann man den Wert, der momentan anliegt, nicht vom PC her auslesen? Also mit der Funktion PortIn oder Assembler oder so? (...) Es stellt sich mir nur die Frage, wie ich den Byte-Wert auf einem Label oder Panel ausgeben kann. |
Jup, versuch mal label.caption := inttostr(integer(bytevar));
Ich kanns grad nicht testen, da mein Delphi mit "Runtime Error 217 at 000329EC" abbricht, aber das dürft hinhaun. bytevar ist hald hier der Ausgabewert von PortIn.
| Johannes Maier hat folgendes geschrieben: |
| Achja, was bedeutet eigentlich $347 ? |
$378 ist die Adresse des Parallelports, normal lautet die des LPT1 so. LPT2 hat normal $278. Die Adressen kannst auch im Gerätemanager lesen, oder evtl im Bios.
greetz RFZ
Johannes Maier - Do 11.11.04 20:02
OK ich teste das sofort :) Wirklich vielen vielen Dank für die superschnellen Antworten, hab ehrlich gesagt erst morgen früh mit einer Antwort überhaupt gerechnet *g*
Johannes Maier - Do 11.11.04 20:29
So, ich hab mal folgenden Code getestet, jedoch erscheint immer 255 als Wert. Ist das nur ein Verständnisfehler (denn ich muss zugeben, dass ich das mit dem Setzen der Werte noch nicht ganz verstanden hab :) Programmiere nicht sehr intensiv in Delphi) oder klappt es nicht?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); begin PortOut($347, 1); end;
procedure TForm1.Button2Click(Sender: TObject); begin Panel1.Caption := IntToStr(Integer(PortInt(§347))); end; |
Das Formular besteht aus diesen zwei Buttons + einem Panel.
Ich starte also das Programm und drücke Button2 um den aktuellen Wert zu erhalten. Der ist 255 (was bedeutet das?) und dann Button1 + Button2 um den geänderten Wert zu erfahren, aber der ist wieder der gleiche ;)
Danke schonmal für die Mühe ;)
RFZ - Do 11.11.04 21:33
$378
Johannes Maier - Do 11.11.04 21:45
Omg ich Idiot *kopfandiewandhau* ;) Du hast es oben schonmal geschrieben und ich Trottel schreibs einfach weiter falsch :shock:
Danke :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!