| Autor |
Beitrag |
Jens Jung
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 05.03.09 09:45
Hallo zusammen,
erstmal zu meinem Hintergrund.
Ich bin ins Delphi programieren sozusagen reingeworfen worden. Ich hatte einen einwöchigen Grundkurs, und den Rest musste ich mir in den letzten Jahren selbst beibringen.
Das genügt zwar für unsere Anwendungen, aber leider fehlt mir fast jede Kenntnis über die WIndows API, Pointer, Handles usw.
Jetzt zu meinem Problem.
Wir haben eine Siemens SITOP USV mit USB, welche ich jetzt aus Delphi 6 heraus abfragen soll, bzw. das Abschaltsignal schicken muss.
Die USV verwendet einen FTDI-Treiber und ich hatte bisher die besten Erfolge mit der D2XXUnit, d.h. ich konnte schon mal die Verbindung mit Open_USB_Device_By_Device_Description('SITOP DC-USV 6') öffnen. Zumindes bekomme ich ein FT_OK zurück.
Aber das Auslesen und das Senden krieg ich einfach nicht hin.
Ich habe auch versucht die USV als COM-Port anzusprechen. Komischer Weise sehe ich mit dem Hyperterminal was die USV sendet, kann aber im Delphi nichts empfangen oder senden.
Hat jemand Erfahrung mit der SITOP oder etwas ähnlichem und kann mir helfen? Siemens weigert sich nämlich strikt auch nur ein bischen brauchbaren Source zu verfügung zu stellen, obwohl deren App auch in Delphi erstellt wurde.
Vielen Dank schon mal.
Jens
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 05.03.09 10:47
Moin Namensvetter,
Zeig mal ein bisschen Sourcecode.
Meiner Erfahung (mit Scanner, Meterzählern oder Waagen) nach hat man schon fast gewonnen, wenn man das gewüschte Verhalten des Gerätes im Hyperterminal simulieren kann. Was das Hyperterminal kann, kann man mit Delphi schon lange. Der Rest ist Fleißarbeit.
Gruß,
Jens
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Jens Jung 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 05.03.09 12:19
Hallo Jens,
hier meine bisherigen Versuche.
Mit D2XXUnit:
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:
| procedure TForm1.Button1Click(Sender: TObject); var z:Cardinal; st :string; begin z:=Open_USB_Device_By_Device_Description('SITOP DC-USV 6'); if z=ft_ok then Memo1.Lines.Add('OK'); Set_USB_Device_TimeOuts(2000,2000); st:='R'; FT_Out_Buffer[0]:=Byte(st[1]); Write_USB_Device_Buffer(Length(st)); Close_USB_Device; end;
procedure TForm1.Button2Click(Sender: TObject); var z:Cardinal; st :string; i:integer; begin z:=Open_USB_Device_By_Device_Description('SITOP DC-USV 6'); if z=ft_ok then Memo1.Lines.Add('OK'); Set_USB_Device_TimeOuts(2000,2000); Freceivetext:=''; if Get_USB_Device_Status=FT_Event_RXCHAR then Memo1.Lines.Add('READ'); N:=Read_USB_Device_Buffer(84); for i:=1 to N do begin Freceivetext:=Freceivetext+intToHex(FT_In_Buffer[i-1],2); end; memo1.Lines.Add(Freceivetext); Close_USB_Device; end;
Und seriell:
procedure TForm1.Button3Click(Sender: TObject); var sLine:string; begin ComPort1.Connected:=True; ComPort1.ReadStr(sLine,20); ComPort1.Connected:=False; if sLine<>'' then Memo1.Lines.Add(sLine); end;
procedure TForm1.Button4Click(Sender: TObject); begin ComPort1.Connected:=True; ComPort1.WriteStr('R'); ComPort1.Connected:=False; end; |
Ich versteh es genauso wenig, dass Hyperterminal das lesen kann, aber ich (Delphi) nicht.
Jens
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 05.03.09 12:23
Jens Jung hat folgendes geschrieben : | | Ich versteh es genauso wenig, dass Hyperterminal das lesen kann, aber ich (Delphi) nicht. |
Liegt evtl. an falschen Einstellungen? Baudrate, Stopbits, Parität, usw.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 05.03.09 12:58
Xentar hat folgendes geschrieben : | Jens Jung hat folgendes geschrieben : | | Ich versteh es genauso wenig, dass Hyperterminal das lesen kann, aber ich (Delphi) nicht. |
Liegt evtl. an falschen Einstellungen? Baudrate, Stopbits, Parität, usw. |
Ist auch mein Tipp. Das böse an diesen Einstellung ist, dass man keine Fehlermeldung zurück bekommt, wenn die Einstellungen nicht passen, sondern dass einfach nicht ankommt.
[Edit]:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button3Click(Sender: TObject); var sLine:string; begin ComPort1.Connected:=True; ComPort1.ReadStr(sLine,20); ComPort1.Connected:=False; if sLine<>'' then Memo1.Lines.Add(sLine); end; |
Sendet das Gerät dauerhaft die Daten, oder musst Du erst mit einem Befehl die Daten anfordern? Setz mal das "ComPort1.Connected := True" an eine andere Stelle, z.b. im FormShow und frage mit einem Timer (vielleicht alle 200ms) die Daten vom Com-Port ab.
Gruß,
Jens
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Jens Jung 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 05.03.09 13:31
Hallo Xentar,
nee, mit serieller Kommunikation hab ich öfters zu tun und 8,N,1,9600 sind ja schon fast überall Standardeinstellungen.
Trotzdem Danke.
An Jens,
das mit dem Timer hab ich auch schon probiert, aber da kommt nix.
Beim Hyperterminal muss ich nur die Verbindung öffnen, und schon rattern die Daten los...
|
|
|