Autor Beitrag
Jens Jung
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 05.03.09 12:19 
Hallo Jens,

hier meine bisherigen Versuche.
Mit D2XXUnit:
ausblenden volle Höhe Delphi-Quelltext
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');                   //Funktioniert soweit
  Set_USB_Device_TimeOuts(2000,2000);
  st:='R';
  FT_Out_Buffer[0]:=Byte(st[1]);
  Write_USB_Device_Buffer(Length(st));       //USV bleibt an :-(
  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');                 //Funktioniert
  Set_USB_Device_TimeOuts(2000,2000);
  Freceivetext:='';
  if Get_USB_Device_Status=FT_Event_RXCHAR then
    Memo1.Lines.Add('READ');               // Kein Read event
  N:=Read_USB_Device_Buffer(84);           // und auch keine Zeichen empfangen (läuft in Timeout)
  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.ClearBuffer(True,True);
//  sleep(1000);
  ComPort1.ReadStr(sLine,20);           //kommt nur '' zurück
  ComPort1.Connected:=False;            //Hyperterminal zeigt die Strings an
  if sLine<>'' then
    Memo1.Lines.Add(sLine);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ComPort1.Connected:=True;
  ComPort1.WriteStr('R');
  ComPort1.Connected:=False;            //Auch hier bleibt die USV an
end;

Ich versteh es genauso wenig, dass Hyperterminal das lesen kann, aber ich (Delphi) nicht.

Jens

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 05.03.09 12:23 
user profile iconJens Jung hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 05.03.09 12:58 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconJens Jung hat folgendes geschrieben Zum zitierten Posting springen:
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]:

ausblenden 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.ClearBuffer(True,True);
//  sleep(1000);
  ComPort1.ReadStr(sLine,20);           //kommt nur '' zurück
  ComPort1.Connected:=False;            //Hyperterminal zeigt die Strings an
  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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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...