Hi, also ich versuch mal meinen Code hier auszugeben damit man ungefaehr nachvollziehen kann was ich bisher gemacht hab.
const comport = 'ELV USB-AD-Wandler';
Delphi-Quellcode:
procedure TForm1.VerbindenClick(Sender: TObject);
var DCB : TDCB;
var TimeOut : TCommTimeouts;
begin
connect:=false;
i:=1;
while (ComHandle <= 0) and (i < 10) do
begin
ComHandle := CreateFile(pchar(comport), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0);
inc(i);
end;
if (i > 10) then
begin
memo1.lines.add('Verbindung fehlgeschlagen');
i:=0;
end;
if (ComHandle > 0) then
begin
memo1.lines.add('Verbindung hergestellt');
memo1.Lines.add(inttostr(ComHandle));
connect:=true;
DCB.DCBlength := SizeOf(DCB);
DCB.ByteSize := 8;
DCB.Parity := NoParity;
DCB.StopBits := ONESTOPBIT;
DCB.BaudRate := 38400;
DCB.Flags := 5123; { Wenn 2 Pins belegt sind }
DCB.EofChar := #0;
DCB.ErrorChar := #0;
DCB.EvtChar := #0;
DCB.XoffChar := #0;
DCB.XoffLim := 0;
DCB.XonChar := #0;
DCB.XonLim := 0;
SetCommState(ComHandle, DCB);
GetCommTimeOuts(ComHandle, TimeOut);
TimeOut.ReadIntervalTimeOut := 100;
TimeOut.ReadTotalTimeoutMultiplier := 0;
TimeOut.ReadTotalTimeoutConstant := 250;
TimeOut.WriteTotalTimeoutMultiplier := 0;
TimeOut.WriteTotalTimeoutConstant := 200;
SetCommTimeouts(ComHandle, TimeOut);
end;
end;
So versuche ich Kontakt zum ComPort bzw. zu dem AD-Wandler aufzubauen.
Mein PC selber hat zwei ComPorts: Com1 und Com3.
Wenn ich diese ansteuer (also comport:='com1';)
erhalte ich als Antwort
Zitat:
Verbindung hergestellt
96
und bei com3:
Zitat:
Verbindung hergestellt
112
Wenn ich jetzt irgendwelche anderen Ports angebe zb. comport:='com5'; , dann erhalte ich folgende Meldung:
Zitat:
Verbindung hergestellt
4294967295
Also eine Art Fehlermeldung. Und eben di erhalte ich auch wenn ich verscuhe 'ELV USB-AD-Wandler' anzusprechen.
Ansonste versuche ich noch Informationen an das Geraet zu senden mit folgendem Code:
Delphi-Quellcode:
procedure TForm1.SendenClick(Sender: TObject);
var send : Integer;
var text :
String;
begin
if (connect)
then
begin
text:= chr(50);
//ASCII "1"
send := FileWrite(ComHandle, Text[1], Length(Text));
//Fehlerueberpruefung
if (send <> Length(Text))
then memo1.lines.add('
Senden fehlgeschlagen')
else memo1.lines.add('
Senden OK');
form1.Antwort.Caption:='
"'+inttostr(send)+'
" und '+inttostr(length(Text))+'
"';
end;
end;
Bei Com1 und Com3 bekomme ich "Senden OK" , bei den anderen Eingaben erhalte ich als Antwort "Senden fehlgeschlagen", wobei send=-1 und length(Text)=1 sind.
Ich hab echt kein Plan wie ich auf das Ding zugreifen soll und von dem C++ Programm versteh ich wie gesagt nicht viel.. Da es aus mehreren Dateien besteht die alle aufeinander zureuckgreifen ist es auch schwer irgendwas zurueck zuerfolgen oder irgendeinen Code zu posten.
Hoffe meine Angaben stellen das Problem ein bisschen besser dar.
MfG HorstBS