AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Comport - Comm_Async sendet und empfängt Salat. ?!?
Thema durchsuchen
Ansicht
Themen-Optionen

Comport - Comm_Async sendet und empfängt Salat. ?!?

Ein Thema von HariboHunter · begonnen am 14. Dez 2006 · letzter Beitrag vom 14. Dez 2006
Antwort Antwort
Benutzerbild von HariboHunter
HariboHunter

Registriert seit: 5. Okt 2004
Ort: Kentucky
78 Beiträge
 
#1

Comport - Comm_Async sendet und empfängt Salat. ?!?

  Alt 14. Dez 2006, 09:34
Hi Jungs,
Ich hab ein komisches Problem, wo ich nicht weiterkomme.
Ich nutze für eine Kommunikation über die Com-Schnittstelle das Comm_Async.
wenn ich die Beiden Komports miteinander kommunizieren lasse, sende und empfange ich Datensalat.
Erst wenn ich mit einer anderen Anwendung auf diesen Port zugreife, bekomme ich anschließend mit meiner Unit die richtigen Werte gesendet und empfangen.
Jetzt bin ich ein wenig confused.

Delphi-Quellcode:

procedure TForm1.LMDButton1Click(Sender: TObject);
   begin

     Comm1.Port := Strtoint(copy(Combobox1.text,4,5)); //Auswahl, Com 1-16
     Comm1.BaudRate:= Getbaudrate; // übergabe Baudrate
     Comm1.Parity:= getparity; // ...
     Comm1.ByteSize := getdatabit;
     Comm1.StopBits := getstopbit;
     (...) // div. Buttons
     Timer1.Interval:= strtoint(edit3.text);
     Comm1.Open;
if Comm1.Connected= false then
   Messagebox(0,'Keine Verbindung, Port nicht vorhanden, oder schon belegt.' ,'Com Port nicht verbunden', MB_ICONError );
end;
Was mache ich denn falsch? Ich übergebe ihm die Parameter die er haben will und er connected auch brav. Aber dann spricht er mit fremden Zungen zu mir.
(es sei den der Port wurde schon mit einem anderen Programm initialisiert. Dann macht er alles richtig.)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Comport - Comm_Async sendet und empfängt Salat. ?!?

  Alt 14. Dez 2006, 10:35
HI,
also erstmal wäre hier etwas mehr Information ganz hilfreich.
Um was für ein Gerät handelt es sich und was für eine andere Software benutzt du? Woher kennst du die Spezifikation?

Hier gibt es dann schon viele Möglichkeiten, woran das liegen kann. Viele Geräte, die über RS232 kommunizieren erwarten erst einen Befehl um ihre Daten zu senden. Hier kann es also sein, dass die andere Software erst dieses Zeichen / diese Zeichenkette sendet und erst danach würde die anderen Daten übertragen werden. Hier hilft dir eventuell der PortMon von Sysinternals weiter.

Ansonsten wäre es natürlich auch schön zu wissen, was du empfängst und was du erwartest.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von HariboHunter
HariboHunter

Registriert seit: 5. Okt 2004
Ort: Kentucky
78 Beiträge
 
#3

Re: Comport - Comm_Async sendet und empfängt Salat. ?!?

  Alt 14. Dez 2006, 10:59
Also , eigentlich benutze ich nur Com 1 und 2 und eine Kabelverbindung.
Die Kommunikation klappt auch, wenn ich Tools wie, 'Docklight' benutze.

Nur wenn ich den Rechner einschalte, und mit meinem Programm auf die Ports zugreife und die Daten von Com 1 auf Com 2 schaufeln möchte, sendet und empfängt das Tool Datensalat. Erst wenn ich die Schnittstelle mit Docklite anspreche, diese Verbindung wieder löse und dann mein Tool ankopple, dann bekommt es die erwarteten Werte, die ich von Com1 aus sende. Dieses Verhalten kann ich mir nicht erklären.
  Mit Zitat antworten Zitat
Benutzerbild von HariboHunter
HariboHunter

Registriert seit: 5. Okt 2004
Ort: Kentucky
78 Beiträge
 
#4

Re: Comport - Comm_Async sendet und empfängt Salat. ?!?

  Alt 14. Dez 2006, 12:10
Hab das Problem gefunden.

Delphi-Quellcode:
//Quelle: Comm_async.pas

function TComm.GetStopBits: TStopBits;
begin
  case fDCB.StopBits of
    ONESTOPBIT : Result:= csbONE;
    ONE5STOPBITS : Result:= csbONE5;
    else Result:= csbTWO;
  end; //case
end;
Dies scheint nicht ganz hiermit zu passen:

Delphi-Quellcode:
function Getstopbit: Tstopbits;
var
st_3: string;
i: integer;

begin;
try;
  st_3 :=copy(form1.LMDedit1.text,5,1);
  i := strtoint(st_3);
    case i of
      0: Result:= csbONE;
      1: Result:= csbONE5;
      2: Result:= csbTWO;

    else begin
        Result:= csbONE;
        Messagebox(0, 'Bitte gültige Anzahl Datenbits angeben (0-2), Wert 0 übernommen.','Falsche Anzahl Stopbits', MB_ICONError );
    end;
  end;
 except;
 end;
end;
Da scheint ein Zahlendreher vorzuherrschen.
1 Stopbit ist anscheinend csbONE
0 ist csb ONE5
und 2 csb TWO.


Wenn ich die 0 Eingebe, dann passen die Daten.
Danach ist es egal was ich an Anzahl Stopbits reinschreib.

Jetzt geht es zwar, aber ich weiß immer noch nicht warum
  Mit Zitat antworten Zitat
14. Dez 2006, 13:16
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz