auf Event warten
-
- Beiträge: 36
- Registriert: Di 14. Nov 2006, 10:15
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Hohenstein - Er.
auf Event warten
Hallo
Hab wiedermal ne Frage.
An die serielle Schnitstelle wird ein String gesendet, klappt gut. Nun könnte es auf den String (je nach Inhalt) eine Antwort geben. Wie kann ich dieses Ereigniss mitbekommen ohne Pollen. Synaser bietet OnStatus an, nur da kommt nix an. Ich denk das ich wiedermal zu dumm bin. Wer kann mir helfen?
Hab wiedermal ne Frage.
An die serielle Schnitstelle wird ein String gesendet, klappt gut. Nun könnte es auf den String (je nach Inhalt) eine Antwort geben. Wie kann ich dieses Ereigniss mitbekommen ohne Pollen. Synaser bietet OnStatus an, nur da kommt nix an. Ich denk das ich wiedermal zu dumm bin. Wer kann mir helfen?
mfg Jornbyte
http://forum.electronicwerkstatt.de/phpBB/" onclick="window.open(this.href);return false;
http://forum.electronicwerkstatt.de/phpBB/" onclick="window.open(this.href);return false;
-
- Beiträge: 36
- Registriert: Di 14. Nov 2006, 10:15
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Hohenstein - Er.
Ich habs geahnt
Danke
Danke
mfg Jornbyte
http://forum.electronicwerkstatt.de/phpBB/" onclick="window.open(this.href);return false;
http://forum.electronicwerkstatt.de/phpBB/" onclick="window.open(this.href);return false;
Synaser
Hallo Leute,
Habe ein ähnliches Problem wie jornbyte. Ich vermisse bei Synaser ein Ereignis/Interrupt um sofort zu merken wann etwas auf meiner schnittstelle angekommen ist. Gibts es soetwas schon? Was meinst du mit "Threads"? Meine Idee: Man könnte z.B. einen Timer bauen der alle 10-100ms nach CanRead fragt, möchte aber wenn möglich soetwas vermeiden. Thx
Habe ein ähnliches Problem wie jornbyte. Ich vermisse bei Synaser ein Ereignis/Interrupt um sofort zu merken wann etwas auf meiner schnittstelle angekommen ist. Gibts es soetwas schon? Was meinst du mit "Threads"? Meine Idee: Man könnte z.B. einen Timer bauen der alle 10-100ms nach CanRead fragt, möchte aber wenn möglich soetwas vermeiden. Thx
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Ein Thread ist ein separater Prozess, der kann ständig nachschaun ob etwas auf der Schnittstelle angekommen ist und ein Ereignis auslösen wenn etwas da ist.
Lest euch mal in Threads ein.
Ich hab mal ne kleine Unit angehängt die euch ne TComport Klasse bereitstellt die sowas tut.
Lest euch mal in Threads ein.
Ich hab mal ne kleine Unit angehängt die euch ne TComport Klasse bereitstellt die sowas tut.
- Dateianhänge
-
- ucomport.pas
- (9.68 KiB) 146-mal heruntergeladen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Hallo nochmal,
Erstmal danke für die schnelle Antwort. Diese unit scheint genau das zu sein wonach ich gesucht habe. Habe diese auch in mein Projekt aufgenommen, schaffe es aber nicht das Event abzufangen. Könntest du mir sagen wie es heisst bzw. wie ich es aufrufen kann. Meine Vermutung: OnCharRecived oder OnLineRecived!?
Erstmal danke für die schnelle Antwort. Diese unit scheint genau das zu sein wonach ich gesucht habe. Habe diese auch in mein Projekt aufgenommen, schaffe es aber nicht das Event abzufangen. Könntest du mir sagen wie es heisst bzw. wie ich es aufrufen kann. Meine Vermutung: OnCharRecived oder OnLineRecived!?
Sry, ich hab mich wieder missverständlich ausgedrückt. Zumal bin ich Anfänger und habe deshalb nicht verstanden wie in meiner unit die procedur für das Ereignis deklariert werden muss. Habe in den uses synaser und die ucomport aufgenommen. Habe unter anderem folgendermassen ausprobiert, was natürlich nicht so funzt(omg):
procedure TComPort.OnCharRecived();
begin
end;
Zumal die ucomport 2 Klassen bereitstellt: TRecvThread & TComport.
Wäre nett wenn du mir einen Tip geben könntest.
procedure TComPort.OnCharRecived();
begin
end;
Zumal die ucomport 2 Klassen bereitstellt: TRecvThread & TComport.
Wäre nett wenn du mir einen Tip geben könntest.
Ich weiss jetzt wird langsam lästig und nervig aber ich brauche unbedingt dieses Event. Hab die Ratschläge soweit befolgt, komme trozdem nicht weiter. Habe ucomport in mein Projektverzeichniss und in mein Projekt aufgenommen und unter uses mit aufgeführt. Soweit sogut. Möchte jetzt in einer unit auf das Event OnLineRecived zugreifen.
Bekomme immer die Fehlermeldung: "Projekt raised exception class 'External: SIGSEGV' HILFE 
Code: Alles auswählen
ser: TComport;
procedure TForm3.FormShow(Sender: TObject);
begin
ser.OnLineRecived:=@Form3LineRecived;
end;
procedure TForm3.serLineRecived(Port: TComport; line: string);
begin
end;

-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Ich hätt den code nicht posten dürfen. Bereu das schon weider zutiefst. Genau deshalb gibt es wenig Open Source Software von mir.
Starkard dieses Forum hier ist nicht dazu da um Leuten beizubringen wie sie Pascal lernen können. Sondern um Leuten bei problemen mit Pascal und Lazarus zu helfen. Allein das es jemandem Ohne Pascal Kentnisse Möglich ist soweit wie du zu kommen ist ein riesiger Beweis für die Tauglichkeit der Sprache und Lazarus.
Du findest im Internet Hunderte pascal Tuturials, Beschreibungen der Seriellen Schnittstelle u.s.w. Ich hab den Code als referenz gepostet und nicht damit ich dir erklären muss wie du eine Zeile Code in Pascal schreibst.
Bei Aussagen wie Hilfe ich bekomme eine Fehlermeldung SIGDEV stellen sich mir immer wieder die Nackenhaare auf. So etwas kann von Benutzern kommen aber nicht von Programmierern.
Arbeite bitte zuerst mal ein Pascal Tuturial DURCH bevor du versuchst zu programmieren ohne zu wissen was du da tust. Und dann lern den Debugger zu neutzen um deine Fehler zu finden.
@Theo, das recived ist warscheinlich n Tippfehler von mir und Lazarus hat den beim erzeugen des Ereignisses natürlich mit übernommen.
Starkard dieses Forum hier ist nicht dazu da um Leuten beizubringen wie sie Pascal lernen können. Sondern um Leuten bei problemen mit Pascal und Lazarus zu helfen. Allein das es jemandem Ohne Pascal Kentnisse Möglich ist soweit wie du zu kommen ist ein riesiger Beweis für die Tauglichkeit der Sprache und Lazarus.
Du findest im Internet Hunderte pascal Tuturials, Beschreibungen der Seriellen Schnittstelle u.s.w. Ich hab den Code als referenz gepostet und nicht damit ich dir erklären muss wie du eine Zeile Code in Pascal schreibst.
Bei Aussagen wie Hilfe ich bekomme eine Fehlermeldung SIGDEV stellen sich mir immer wieder die Nackenhaare auf. So etwas kann von Benutzern kommen aber nicht von Programmierern.
Arbeite bitte zuerst mal ein Pascal Tuturial DURCH bevor du versuchst zu programmieren ohne zu wissen was du da tust. Und dann lern den Debugger zu neutzen um deine Fehler zu finden.
@Theo, das recived ist warscheinlich n Tippfehler von mir und Lazarus hat den beim erzeugen des Ereignisses natürlich mit übernommen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Das hier scheint ganz gut:Christian hat geschrieben: Arbeite bitte zuerst mal ein Pascal Tuturial DURCH bevor du versuchst zu programmieren ohne zu wissen was du da tust. Und dann lern den Debugger zu neutzen um deine Fehler zu finden.
http://www.delphi-treff.de/tutorials/ei ... rs/page/8/" onclick="window.open(this.href);return false;
Dort steht auch was zu "Ereignisse". Das meiste gilt auch für Lazarus.
Das @ Zeichen brauchst du aber im objfpc mode. (Sonst {$mode delphi} )
Wenn wir schon dabei sind: "Tutorial" nicht "Tuturial"Christian hat geschrieben: @Theo, das recived ist warscheinlich n Tippfehler von mir

Hallo,
Ich habe mir mal wieder die ucomport angeschaut, und muss
nochmals eine Frage stellen. Erwarte keine Antwort, wäre aber sehr dankbar.
Es scheitert an der Stelle des Threaderstellens. Habe es aus Testgründen bei der Defaultinitialisierung belassen und möchte einfach die Schnittstelle öffnen:
Warum bekomme ich an dieser Stelle diesen Fehler, obwohl ich ein TComportobjekt erzeugt habe? Danke
Ich habe mir mal wieder die ucomport angeschaut, und muss
nochmals eine Frage stellen. Erwarte keine Antwort, wäre aber sehr dankbar.
Es scheitert an der Stelle des Threaderstellens. Habe es aus Testgründen bei der Defaultinitialisierung belassen und möchte einfach die Schnittstelle öffnen:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
seri:=TComPort.Create('COM1');
seri.Open;
end;
//--------
constructor TRecvThread.Create(Port : TComPort);
begin
FPort := Port;
FBuffer := '';
inherited Create(False); // <-- NOTHREADERROR
end;