Welche Komponente

TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 755
Registered: 06 / 2013
Subject:

Welche Komponente

 · 
Posted: 21.05.2021 - 11:02  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Welche Komponente

 · 
Posted: 21.05.2021 - 11:27  ·  #2
Quote by 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
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 755
Registered: 06 / 2013
Subject:

Re: Welche Komponente

 · 
Posted: 21.05.2021 - 11:38  ·  #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
You must be logged in or your permissions are to low to see this Attachment(s).
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: Welche Komponente

 · 
Posted: 21.05.2021 - 12:47  ·  #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
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 755
Registered: 06 / 2013
Subject:

Re: Welche Komponente

 · 
Posted: 21.05.2021 - 13:32  ·  #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
You must be logged in or your permissions are to low to see this Attachment(s).
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 755
Registered: 06 / 2013
Subject:

Re: Welche Komponente

 · 
Posted: 21.05.2021 - 14:07  ·  #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
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Welche Komponente

 · 
Posted: 23.05.2021 - 02:24  ·  #7
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 66
Posts: 755
Registered: 06 / 2013
Subject:

Re: Welche Komponente

 · 
Posted: 23.05.2021 - 18:33  ·  #8
Quote by 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
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.025409s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI