ferdisdot
26.12.2005, 22:46
Hallo an Alle.
ich habe ein kleines Problem bei der Kommunikation mit der CC über en Com-Port: Meine gesendeten Daten kommen völlig falsch und ohne erkennbares Muster wie zum Beispiel eine Verschiebung an.
Hier meine Programm das sendet:
### Zum Öffnen der Verbindung ####
procedure TForm1.Starten1Click(Sender: TObject);
var dcb: TDCB;
begin
BuildCommDCB('Com3: baud=9600 parity=N data=8 stop=1', dcb);
if dcb.BaudRate = 9600
then ShowMessage('OK');
Coms := true;
// if (OpenDevice(0) = 0) and (OpenDevice(1) = 1)
// then begin
Com1 := CreateFile(PChar('COM1'), Generic_Read or Generic_Write, 0, nil, Open_Existing, File_Attribute_Normal, 0);
Com3 := CreateFile(PChar('COM3'), Generic_Read or Generic_Write, 0, nil, Open_Existing, File_Attribute_Normal, 0);
Karteladen1.Enabled := false;
Thermikerzeugen1.Enabled := false;
Thermikladen1.Enabled := false;
Startpunktfestlegen1.Enabled := false;
Starten1.Enabled := false;
Pause1.Enabled := true;
Stop1.Enabled := true;
Timer1.Enabled := true;
Timer1Timer(Sender);
// end
// else ShowMessage('ERROR. Could not connect Interface');
end;
### Zum Sende der Daten ###
procedure TForm1.Timer1Timer(Sender: TObject);
procedure ActualizeValues;
var Data: Array[0..1] of Integer;
begin
OpenDevice(0);
ReadAllAnalog(Data[0], Data[1]);
end;
function CreateGPSMessage: String;
var GPSMessage, Temp: String;
begin
DecimalSeparator := '.';
GPSMessage := '$GPGGA,';
Temp := TimeToStr(Now);
while Pos(':', Temp) > 0
do Delete(Temp, Pos(':', Temp), 1);
GPSMessage := GPSMessage + Temp + ',';
GPSMessage := GPSMessage + IntToStr(Position.XPos.Deg) + IntToStr(Position.XPos.Min) + FormatFloat('#.0000', Position.XPos.Sec) + ',N,';
GPSMessage := GPSMessage + IntToStr(Position.YPos.Deg) + IntToStr(Position.YPos.Min) + FormatFloat('#.0000', Position.YPos.Sec) + ',E,1,04,2.7,';
GPSMessage := GPSMEssage + FormatFloat('#.0', Height) + ',M,32.5,M,,*FF';
DecimalSeparator := ',';
CreateGPSMessage := GPSMessage;
end;
procedure SendGPSMessage(GPSMessage: String);
var BytesWritten: Cardinal;
begin
WriteFile(Com3, GPSMessage, Length(GPSMessage), BytesWritten, nil);
if not(BytesWritten = Length(GPSMessage))
then ShowMessage('Error occured while transmitting GPS-Data');
end;
procedure WriteCompass(Course: Byte);
var BytesWritten: Cardinal;
begin
WriteFile(Com1, Course, 1, BytesWritten, nil);
if not(BytesWritten = 1)
then ShowMessage('Error occured while transmitting Compass-Data');
end;
procedure SimulateSensors;
begin
OpenDevice(0);
OutputAllAnalog(Round(Height/256), Round(Height) mod 256);
OpenDevice(1);
OutputAnalogChannel(1, 128);
end;
begin
ActualizeValues;
if Coms
then begin
SendGPSMessage(CreateGPSMessage);
WriteCompass(Round(Direction/360*255));
end;
SimulateSensors;
end;
Ich hoffe mal ihr könnt mir helfen. Schon mal danke
Ferdinand
Ich habe mal versucht mit der "Code" Funktion für das Programm die Darstellung etwas übersichtlicher zu machen. Manfred
ich habe ein kleines Problem bei der Kommunikation mit der CC über en Com-Port: Meine gesendeten Daten kommen völlig falsch und ohne erkennbares Muster wie zum Beispiel eine Verschiebung an.
Hier meine Programm das sendet:
### Zum Öffnen der Verbindung ####
procedure TForm1.Starten1Click(Sender: TObject);
var dcb: TDCB;
begin
BuildCommDCB('Com3: baud=9600 parity=N data=8 stop=1', dcb);
if dcb.BaudRate = 9600
then ShowMessage('OK');
Coms := true;
// if (OpenDevice(0) = 0) and (OpenDevice(1) = 1)
// then begin
Com1 := CreateFile(PChar('COM1'), Generic_Read or Generic_Write, 0, nil, Open_Existing, File_Attribute_Normal, 0);
Com3 := CreateFile(PChar('COM3'), Generic_Read or Generic_Write, 0, nil, Open_Existing, File_Attribute_Normal, 0);
Karteladen1.Enabled := false;
Thermikerzeugen1.Enabled := false;
Thermikladen1.Enabled := false;
Startpunktfestlegen1.Enabled := false;
Starten1.Enabled := false;
Pause1.Enabled := true;
Stop1.Enabled := true;
Timer1.Enabled := true;
Timer1Timer(Sender);
// end
// else ShowMessage('ERROR. Could not connect Interface');
end;
### Zum Sende der Daten ###
procedure TForm1.Timer1Timer(Sender: TObject);
procedure ActualizeValues;
var Data: Array[0..1] of Integer;
begin
OpenDevice(0);
ReadAllAnalog(Data[0], Data[1]);
end;
function CreateGPSMessage: String;
var GPSMessage, Temp: String;
begin
DecimalSeparator := '.';
GPSMessage := '$GPGGA,';
Temp := TimeToStr(Now);
while Pos(':', Temp) > 0
do Delete(Temp, Pos(':', Temp), 1);
GPSMessage := GPSMessage + Temp + ',';
GPSMessage := GPSMessage + IntToStr(Position.XPos.Deg) + IntToStr(Position.XPos.Min) + FormatFloat('#.0000', Position.XPos.Sec) + ',N,';
GPSMessage := GPSMessage + IntToStr(Position.YPos.Deg) + IntToStr(Position.YPos.Min) + FormatFloat('#.0000', Position.YPos.Sec) + ',E,1,04,2.7,';
GPSMessage := GPSMEssage + FormatFloat('#.0', Height) + ',M,32.5,M,,*FF';
DecimalSeparator := ',';
CreateGPSMessage := GPSMessage;
end;
procedure SendGPSMessage(GPSMessage: String);
var BytesWritten: Cardinal;
begin
WriteFile(Com3, GPSMessage, Length(GPSMessage), BytesWritten, nil);
if not(BytesWritten = Length(GPSMessage))
then ShowMessage('Error occured while transmitting GPS-Data');
end;
procedure WriteCompass(Course: Byte);
var BytesWritten: Cardinal;
begin
WriteFile(Com1, Course, 1, BytesWritten, nil);
if not(BytesWritten = 1)
then ShowMessage('Error occured while transmitting Compass-Data');
end;
procedure SimulateSensors;
begin
OpenDevice(0);
OutputAllAnalog(Round(Height/256), Round(Height) mod 256);
OpenDevice(1);
OutputAnalogChannel(1, 128);
end;
begin
ActualizeValues;
if Coms
then begin
SendGPSMessage(CreateGPSMessage);
WriteCompass(Round(Direction/360*255));
end;
SimulateSensors;
end;
Ich hoffe mal ihr könnt mir helfen. Schon mal danke
Ferdinand
Ich habe mal versucht mit der "Code" Funktion für das Programm die Darstellung etwas übersichtlicher zu machen. Manfred