Welche Komponente

TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Welche Komponente

 · 
Gepostet: 21.05.2021 - 11:02 Uhr  ·  #1
Hallo,
was für eine Komponente nehm ihr für Delphi
wegen Serielle.

Die teste ich gerade comport411f

Gruß Frank
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: Welche Komponente

 · 
Gepostet: 21.05.2021 - 11:27 Uhr  ·  #2
Zitat geschrieben von TheBeginner

Hallo,
was für eine Komponente nehm ihr für Delphi
wegen Serielle.

Die teste ich gerade comport411f

Gruß Frank


Die ComPort gibt es schon sehr lange, haben wir in älteren Systemen immernoch im Einsatz, da spricht eigenlich nichts dagegen. In neueren Projekten nutze ich gerne die nrcomlib. Diese haben wir auch mit einem USB-Treiber im Einsatz. Bei der Componente kannst du Dich entscheiden für einen kleinen USB-Treiber oder den großen WinUSB. Beide werden von der Componente, wenn benötigt mit installiert. Hier brauchst Du dann keine Extra Installationsroutine wie beim libusb0. Vom Preis ist diese bezahlbar und spart sehr viel Programmieraufwand, unter anderen bekommt man dann gleich MODBUS, Z-Modem, USB und RS232/485 Funktionen mitgeliefert.

nrComLib

Thorsten
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Welche Komponente

 · 
Gepostet: 21.05.2021 - 11:38 Uhr  ·  #3
Guten morgen Thorsten,
Danke für deine Antwort, ich teste jetzt erstmal die 411f
Aber so ganz zufrieden bin ich damit nicht, liegt es am Programmierer oder
an der Hardware ?

AVRco 32Mhz




Delphi Code
Code

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
    SendStr:='';
    SendStr := Edit1.Text;
    ComPort1.WriteStr(SendStr);
end;

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
begin
  if count > 0 then
  begin
    ComPort1.ReadStr(EmpfSt, Count);
    Memo1.Lines.Add(EmpfSt);
  end;
end;




AVRco Code
Code

    repeat
      if SerStatCDC then
        incl(Led1);
        SerInpBlock_TO(UsartCDC, CDC_EmpfStr, 1);  //1 * 10 Systick = 10ms
        CDC_SendStr:= CDC_EmpfStr;
        len:= length(CDC_SendStr);
        SerOutBlock_P(UsartCDC, @CDC_SendStr, word(len));
        excl(Led1);






Gruß Frank
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
golf
Benutzer
Avatar
Geschlecht:
Herkunft: Donauwörth
Alter: 72
Beiträge: 266
Dabei seit: 11 / 2009
Betreff:

Re: Welche Komponente

 · 
Gepostet: 21.05.2021 - 12:47 Uhr  ·  #4
Hallo Frank,
ich hab früher mal sowas in der Art genutzt beim Comport

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str1:AnsiString;
begin

setlength(Str1,count);
ComPort1.Read(Str1[1],count);
RS232RXString:=RS232RXString + Str1;

VerarbeiteRS232RXdata;

Comport1.ClearBuffer(true,true);
end;


procedure TForm1.VerarbeiteRS232RXdata;
var
Pos1: integer;
TeilStr:AnsiString;
begin
repeat
Pos1:= pos(char(13),Form1.RS232RXString);

if Pos1 > 0 then
begin
TeilStr:= copy(Form1.RS232RXString,1,Pos1);
TeilStr:= Trim(TeilStr);
//Form1.memo1.Lines.Add(TeilStr);
DisplayMemo(TeilStr);
// hier evtl String auswerten

delete(Form1.RS232RXString,1,Pos1);
end;
until Pos1 = 0;
end;


procedure TForm1.DisplayMemo(Msg : String);
var
I : Integer;
begin
Form1.Memo1.Lines.BeginUpdate;
try
if Form1.Memo1.Lines.Count > 5 then // > 100
begin
Form1.Memo1.Lines.Delete(0);
end;
Form1.Memo1.Lines.Add(Msg);
finally
Form1.Memo1.Lines.EndUpdate;
SendMessage(Form1.Memo1.Handle, EM_SCROLLCARET, 0, 0);
end;
end;

golf
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Welche Komponente

 · 
Gepostet: 21.05.2021 - 13:32 Uhr  ·  #5
Hallo Golf,
Danke für den Code, das sieht echt gut aus, bei
219 hab eich aufgehört den Button zu drücken,
keine Fehler mehr.

Gruß Frank
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Welche Komponente

 · 
Gepostet: 21.05.2021 - 14:07 Uhr  ·  #6
Hallo,

in AVRco habe ich es jetzt so hinbekommen, keine Fehler mehr bekommen.

Code

        SerInpBlock_TO(UsartCDC, CDC_EmpfStr, 1);  //1 * 10 Systick = 10ms
        CDC_SendStr:= CDC_EmpfStr;
        len:= length(CDC_SendStr);
        setlength(CDC_SendStr,len);
        SerOutBlock_P(UsartCDC, @CDC_SendStr, word(len));
        SerOutCDC(#13);


Ich wollte das so machen aber das haut nicht hin.
Code
 
CDC_SendStr:= CDC_EmpfStr+#13+#10;



Gruß Frank
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: Welche Komponente

 · 
Gepostet: 23.05.2021 - 02:24 Uhr  ·  #7
TheBeginner
Schreiberling
Avatar
Geschlecht: keine Angabe
Herkunft: Wunsiedel Bayern
Alter: 68
Beiträge: 776
Dabei seit: 06 / 2013
Betreff:

Re: Welche Komponente

 · 
Gepostet: 23.05.2021 - 18:33 Uhr  ·  #8
Zitat geschrieben von Avra

For event driven non blocking communication with visual components use AsyncPro:
https://github.com/TurboPack/AsyncPro

For blocking communication mostly suited for thread based applications use Ararat Synapse (trunk version only):
http://www.ararat.cz/synapse/doku.php/download


Hello Avra,
Thanks for the info, but I can't see through it.

Hallo Avra,
Danke für die Info, aber da blicke ich nicht durch.


Gruß Frank
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.038434s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI