Die Frage passt jetzt nicht 100%ig hier rein, aber trotzdem: Ich versuche mit meinem AVR über UART zu kommunizieren. Der AVR arbeitet einwandfrei das habe ich mit einem Terminalprogramm getestet. Wenn ich jetzt jedoch Daten aus meinem Delphi-Programm sende, funktioniert es nicht. Die Daten können irgendwann nicht übertragen werden, wenn die Daten etwas größer sind (zum Beispiel ein String) Ich gebe jedes Zeichen des Strings einzeln ins UART: WriteFile(Hcom, S[I], 1, test,nil); text ist irgedwann <> 1, es können also keine Daten mehr übertragen werden. Wie kann ich mit der WinAPI erkennen, ob das UART bereit fürs Daten senden ist?
Mit WaitCommEvent kannst Du relativ einfach feststellen ob der Sendepuffer lehr ist. Aber wieso sendest Du jedes Byte einzeln? WriteFile(HCom,S,Anzahl,test,nil) sendet Dir doch auch den ganzen Puffer auf einmal. Steffen
ich verwende die komponente SerialPortNG. Warscheinlich ist das einfacher als sich selbst um alles kümmern zu müssen. kann den link raussuchen, aber müsste recht schnell auf der delphi super page poland zu finden sein
Dann verstehe ich aber nicht, warum Du mit WriteFile die Daten rausschickst. Stellt die Komponente da keine Funktionen zur Verfügung? So wild ist das Senden und Empfangen über die serielle Schnittstelle nicht. Das machen im Prinzip alles die Windows API Funktionen. Schau dir mal folgende Funktionen an: CreateFile, SetupComm, SetCommMask, EscapeCommFunction Nach Einmaliger Initialisierung kannst Du mit WriteFile Daten schreiben und mit Readfile Daten lesen. Steffen
Ich verwende immer folgende Einstellungen: CommTimeouts.ReadIntervalTimeout:=4; CommTimeouts.ReadTotalTimeoutMultiplier:=1; CommTimeouts.ReadTotalTimeoutConstant:=10; CommTimeouts.WriteTotalTimeoutMultiplier:=10; CommTimeouts.WriteTotalTimeoutconstant:=100; SetCommTimeouts(m2,CommTimeouts); Wenn die Schnittstelle mit FILE_FLAG_WRITE_THROUGH geöffnet wird, dann sind die Werte wenn ich mich recht erinnere fast egal. Steffen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.