Autor |
Beitrag |
tiller
Hält's aus hier
Beiträge: 2
Win XP/Vista
Delphi 7
|
Verfasst: Fr 26.10.07 13:54
Hallöchen!
Ich studiere im ersten Semester Elektrotechnik und bin im Moment bei der Planung meines ersten Projektes. Was es wird, weiß ich noch nicht, einzige Bedingung ist eigentlich, dass die Gerätschaft später irgendeine (sinnvolle) Funktion hat. Und dazu braucht man eine Steuerung, sei es nun die eines Motors auf Grund von Sensordaten oder eine irgeneiner anderen Art.
Nunja, mein Problem liegt nun darin, dass ich bis jetzt nur mit Delphi (ein ganz kleines bisschen auch mit C++) programmiert habe. Meine Frage lautet nun also, ob es möglich ist, mit Delphi eine Steuerung für den Roboter (so nenne ich das Gerät jetzt einfach mal) zu programieren. Voraussetzung ist dabei natürlich, dass er ständig mit dem Rechner verbunden ist. Kann man mit Delphi Daten von Sensoren auslesen, diese irgendwie verarbeiten und dann ein daraus resultierndes Signal an einen Schalter weitergeben - sprich Ein/Aus?
Danke für eure Hilfe!
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Fr 26.10.07 14:00
tiller hat folgendes geschrieben: | Nunja, mein Problem liegt nun darin, dass ich bis jetzt nur mit Delphi (ein ganz kleines bisschen auch mit C++) programmiert habe. Meine Frage lautet nun also, ob es möglich ist, mit Delphi eine Steuerung für den Roboter (so nenne ich das Gerät jetzt einfach mal) zu programieren. Voraussetzung ist dabei natürlich, dass er ständig mit dem Rechner verbunden ist. Kann man mit Delphi Daten von Sensoren auslesen, diese irgendwie verarbeiten und dann ein daraus resultierndes Signal an einen Schalter weitergeben - sprich Ein/Aus? |
Ja.
Wenn du genaueres wissen willst, musst du auch Infos über die Art des Anschlusses (parallel, seriell, usb, ...) geben.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
tiller 
Hält's aus hier
Beiträge: 2
Win XP/Vista
Delphi 7
|
Verfasst: Fr 26.10.07 14:13
Ich (wir: Team á 4 Leute, sage in Zukunft einfach "ich", das ist einfacher) sind noch beim absoluten Nullpunkt, das heißt die Schnittstelle kann frei gewählt werden. Welche Möglichkeiten gibt es denn bzw. welche ist am sinnvollsten/einfachsten? Das Problem bei der ganzen Sache ist, dass ich sowas noch nie gemacht habe, dank sei dem äußerst praktisch ausgelegten Gymnasium, "Abitur" hört sich zwar gut an, ich weiß auch jetzt sehr viel unnötiges, bringen wird es mir aber (außer der Hochschulzugangsberechtigung) wohl nie was.
Wenn du nach der Schnittstelle fragst, geh ich einfach mal davon aus, dass mein Vorhaben prinzipiell möglich ist. Gehen wir einfach mal von wasd ganz sporadischem aus: Ich will, dass mein immaginärer Motor hier nur läuft, wenn dieser ebenfalls immaginäre Sensor hier eine Temperatur < 20°C meldet. Wo bekomme ich diesen Sensor in der Realität her bzw. worauf muss ich beim Kauf achten und wie wird er an den PC angeschlossen? Gleiches wüsste ich gerne von meinem Schalter, der den Motor steuert... Wenn ich das weiß und mich noch etwas um die Syntax kümmere (Daten vom Sensor auslesen etc.) ist mein Problem ja eigentlich bereits gelöst.
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Fr 26.10.07 16:14
tiller hat folgendes geschrieben: | Ich (wir: Team á 4 Leute, sage in Zukunft einfach "ich", das ist einfacher) sind noch beim absoluten Nullpunkt, das heißt die Schnittstelle kann frei gewählt werden. Welche Möglichkeiten gibt es denn bzw. welche ist am sinnvollsten/einfachsten? Das Problem bei der ganzen Sache ist, dass ich sowas noch nie gemacht habe, dank sei dem äußerst praktisch ausgelegten Gymnasium, "Abitur" hört sich zwar gut an, ich weiß auch jetzt sehr viel unnötiges, bringen wird es mir aber (außer der Hochschulzugangsberechtigung) wohl nie was.
.... |
Hallo,
ich weiss nicht, wer die Aufgabe gestellt hat, aber es ist eigentlich unverantwortlich, jemanden mit einer Maschinensteuerung zu beauftragen, BEVOR wenigstens Grundlagen über Real Time Systeme erarbeitet wurden. Darüber gibt es ganze Bibliotheken voller Bücher, aber um es kurz zusammenzufassen:
Der Programmablauf eines beliebigen PC-Programms kann durch andere Aktivitäten unterbrochen werden, und zwar für beliebig lange Zeit, besonders wenn Fehler auftreten. Ein bekannter Fall: alles steht für einige Sekunden, während das CD-Laufwerk eine neu eingelegte CD analysiert.
Während dieser Zeit würde also bei einer Maschinensteuerung die Abfrage, ob eine Achse bis ans Ende gefahren ist, NICHT ausgeführt, so dass der Schlitten über die Begrenzung der Achse hinausfährt und die Maschine zerstört. Je nach Grösse der Maschine besteht dabei Lebensgefahr, und selbstverständlich macht sich der Konstrukteur damit strafbar und schadensersatzpflichtig.
Diese Eigenschaft haben alle Desktop-(PC-)Betriebssysteme, auch Linux - sie sind eben KEINE Real Time Systeme und auch nicht dafür gedacht. Man kann zwar darüber nachdenken, unter Kenntnis dieser Tatsache bestimmte Steueraufgaben trotzdem von einem PC-Programm ausführen zu lassen (die Endabschaltung z.B. nicht!), aber ohne diese Grundlagen zu kennen ist das indiskutabel.
Gruss Reinhard
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 26.10.07 17:17
Hallo,
man kann ja einen Mikrocontroller ansteuern, der die Sache in Echtzeit erledigt, aber wozu mit Kanonen auf Spatzen schiessen.
Es gibt viele integriete IC's die mittels eines NTC oder PTC die Temperatur erfassen und dann einen Thyristor/Triac ansteuern können. (Z.B icn Heizlüftern, Backofen etc). O.K. es dient wohl nur als Einstand in die Materie.
Gruß Horst
|
|
pigfacejoe
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Fr 26.10.07 17:51
Hi tiller,
Ich weiß nicht, ob du's gebrauchen kannst, aber wir hatten mal im Informatikunterricht einen Modell- Aufzug mit Delphi gesteuert, also Werte vom Aufzug (den Sensoren) in Varaiblen geschrieben und verwertet und natürlich auch Befehle an den Aufzug gesendet.
Hierbei gingen wir über die serielle Schnittstelle mit den Ausgängen TXD,DTR und RTS und den Eingängen DSR,CTS und DCD. Da ich grade los muss, hier einfach mal die Unit, mit der man diese Schnittstelle anschalten bzw aussschalten kann und elektr. positives oder negatives Niveau auf die jeweiligen Ausgänge legen kann und die Eingänge auslesen kann.
Die Funktionen erklären sich hoffe ich, von selbst. Ich weiss ja nicht, ob dus gebrauchen kannst, aber es schadet ja nicht das hier einfach mal "hinzuknallen" weil von den obigen Beiträgen habe ich nicht sehr viel verstanden...
Also hier der Quelltext der Unit
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: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179:
| unit uSchnittstellenunit;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
procedure TIMEOUTS (TOut: Integer); stdcall; function OPENCOM (OpenString: pchar): Integer; stdcall; procedure CLOSECOM(); stdcall; procedure TXD(State:integer); stdcall; procedure DTR(State:integer); stdcall; procedure RTS(State:integer); stdcall; procedure Schnittstelleeinschalten; procedure Schnittstelleausschalten; procedure TXDein; procedure TXDaus; procedure DTRein; procedure DTRaus; procedure RTSein; procedure RTSaus; function DSR():Integer; stdcall; function CTS():Integer; stdcall; function DCD():Integer; stdcall; function RI():Integer;stdcall; function DSRlesen():integer; function CTSlesen():integer; function DCDlesen():integer; function RIlesen():integer;
implementation var SaveExit: Pointer; PortHandle: THandle; StartTime: Int64; TimeUnit: Real = 0.000838;
procedure TIMEOUTS (TOut: Integer); stdcall; var TimeOut:TCOMMTIMEOUTS; begin TimeOut.ReadIntervalTimeout:=1; TimeOut.ReadTotalTimeoutMultiplier:=1; TimeOut.ReadTotalTimeoutConstant:=TOut; TimeOut.WriteTotalTimeoutMultiplier:=10; TimeOut.WriteTotalTimeoutConstant:=TOut; SetCommTimeouts(PortHandle,TimeOut); end;
function OPENCOM (OpenString: pchar): Integer; stdcall; var PortStr, Parameter :String; DCB: TDCB; begin Result := 0; if PortHandle > 0 then CloseHandle(PortHandle); Parameter := OpenString; PortStr := copy (Parameter,1,4); PortHandle:=CreateFile(PChar(PortStr),GENERIC_READ or GENERIC_WRITE,0,NIL,OPEN_EXISTING,0,0); GetCommState(PortHandle,DCB); BuildCommDCB(PChar(Parameter),dcb); DCB.Flags := 1; if SetCommState(PortHandle,DCB)then Result := 1; TimeOuts (10); end;
procedure CLOSECOM(); stdcall; begin CloseHandle(PortHandle); PortHandle:= 0; end;
procedure TXD(State:integer); stdcall; begin if (State=0) then EscapeCommFunction(PortHandle,CLRBREAK) else EscapeCommFunction(PortHandle,SETBREAK); end;
procedure DTR(State:integer); stdcall; begin if (State=0) then EscapeCommFunction(PortHandle,CLRDTR) else EscapeCommFunction(PortHandle,SETDTR); end;
procedure RTS(State:integer); stdcall; begin if (State=0) then EscapeCommFunction(PortHandle,CLRRTS) else EscapeCommFunction(PortHandle,SETRTS); end;
function DSR():Integer; stdcall; Var mask:Dword; begin GetCommModemStatus(PortHandle,mask); if (mask and MS_DSR_ON)=0 then result:=0 else result:=1; end;
function CTS():Integer; stdcall; Var mask:Dword; begin GetCommModemStatus(PortHandle,mask); if (mask and MS_CTS_ON)=0 then result:=0 else result:=1; end;
function DCD():Integer; stdcall; Var mask:Dword; begin GetCommModemStatus(PortHandle,mask); if (mask and MS_RLSD_ON)=0 then result:=0 else result:=1; end;
function RI():Integer; stdcall; Var mask:Dword; begin GetCommModemStatus(PortHandle,mask); if (mask and MS_RING_ON)=0 then result:=0 else result:=1; end;
procedure Schnittstelleeinschalten; begin Opencom('COM1'); end;
procedure Schnittstelleausschalten; begin Closecom(); end;
procedure TXDein; begin TXD(1); end;
procedure TXDaus; begin TXD(0); end;
procedure DTRein; begin DTR(1); end;
procedure DTRaus; begin DTR(0); end;
procedure RTSein; begin RTS(1); end;
procedure RTSaus; begin RTS(0); end;
function DSRlesen():integer; begin result:=DSR(); end;
function CTSlesen():integer; begin result:=CTS(); end;
function DCDlesen():integer; begin result:=DCD(); end;
function RIlesen():integer; begin result:=RI(); end;
end. |
Schönen Gruss aus dem Saarland
PigfaceJoe
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Fr 26.10.07 19:06
Schau mal nach dem K8055-Board der Firma Vellemann bei Conrad, das Ding lässt sich super in Delphi programmieren und an USB anschließen.
ub60
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mo 29.10.07 08:00
Hi
Ich glaube nicht, das es auf dieser Welt die Blauäugigkeit gibt, unter Windows, Vista oder Linux Echtzeitsysteme versuchen. Allerdings, genügend Kenntnisse vorausgesetzt und am Kern programmiert, ist ein Prozessor schon in der Lage, Maschinen in Echtzeit zu steuern. Auch in SPS'en sind letztendlich nur Prozessoren....
Wer noch den guten alten Z80 im Assembler programmierte und die Zyklen der einzelnen Befehle berechnete, konnte schon passable Steuerungen mit einer akzeptablen Gesamtzykluszeit im ms Bereich herauskitzeln, und das bei wahnsinnig hohen 4-8 MHz.
Ok, experimentieren mit einem PC geht immer, solange man nicht ein (Atom-)Kraftwerk steuert. Hatte ich glaub ich auch schon mal erwähnt.
Die Experimentierplatine von Velleman (Conrad-Elektronikversand) ist für einfache Anwendungen ohne großartige Basteleien schnell einsetzbar.
5 Digitaleingänge, 2 Analogeingänge (0-5V) sowie 8 gepufferte Digitalausgänge (Relais bis zu 48 V anschließbar) und 2 Analogausgänge (0-5 V) einfach über USB erreichbar.
Ok, die 5 Eingänge sind ein wenig karg...
Eine schöne Übung ist, ein Programm zu schreiben, mit welchem nun eine logische Verschaltung zur Laufzeit generiert werden kann und damit unterschiedliche Programmierung einer Steuerung möglich ist, ohne das Delphi-Programm zu ändern. Falls Interesse besteht, ich hab mal sowas angefangen für eine Eisenbahnsteuerung.
_________________ Zier dich nich so, ich krieg dich schon....
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Mo 29.10.07 22:26
INTERESSE!
Mich interessiert eigentlich alles, was mit dem K8055 zusammenhängt. Also her damit.
Und für die im Topic angefragte Aufgaben finde ich das Board gut.
ub60
|
|
C.Schoch
      
Beiträge: 28
WinXp
Turbo Dephi Win 32
|
Verfasst: Mo 29.10.07 22:31
Hi,
Für eine solche Aufgabe würde ich eine Siemens LOGO! oder vergleichbare Kleinsteuerung einsetzen, ich glaube Moeller bietet so was ähnliches auch an.
_________________ Das System hofft auf Besserung
[Siemens]
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Di 30.10.07 08:14
Hi
Zitat: | Für eine solche Aufgabe würde ich eine Siemens LOGO! oder vergleichbare Kleinsteuerung einsetzen, ich glaube Moeller bietet so was ähnliches auch an. |
Nun ja, es kommt darauf an, was ich will. Eine fertige Steuerung bietet nicht nur den Vorteil, das sie autark mit wenig Leistung zuverlässig arbeitet und von Hause aus schon eine ganze Menge fertiger Tools mit sich bringt. Dazu seriösen Aufbau und Beschaltung ermöglicht bei geringstem Arbeitsaufwand.
Eine Steuerung per PC bedeutet (fast) immer wüste Hardwarebastelei und zeitaufwändige Programmentwicklung. Ideal zum Erlernen von Programmiertechnik, denn mal ehrlich, den 159sten Taschenrechner und das 721te Adressbuch zu programmieren, obendrein bereits bei MS im Zubehör fertig vorhanden, kann nicht unbedingt die Erfüllung sein. Da aber neue Themen nicht so einfach am Himmel hängen und nur gepflückt werden müssen, ist der Weg zu einer Steuerung per PC (zu Anschauungszwecken, für Labor oder Hobby) gar nicht so übel und trotz vieler Argumente dagegen, auch sehr reizvoll. Allerdings auch sehr Zeitintensiv.....
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
firefuzy
      
Beiträge: 69
Win 98 SE, WinXP Prof, Vista HPrem.
Delphi 7
|
Verfasst: Mi 31.10.07 16:13
Am einfachsten wäre es einen Fischertechnik Computing Baulasten zu kaufen. (Shop auf [url]Fischertechnik.de[/url]) Der "Computing Starter" Baukasten enthält schon Motoren und verschiedene Sensoren. Die Schnittstelle ist wahlweise COM oder USB. Und das aller Beste ist, dass man auf ftcomputing.de/sprachen.htm für praktisch alle Sprachen eine DLL zum Ansteuern runterladen kann.
Ich kann Fischertechnik generell nur empfehlen.
MfG firefuzy
|
|
|