Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Waagenwerte über com-Schnittstelle einlesen (https://www.delphipraxis.net/163885-waagenwerte-ueber-com-schnittstelle-einlesen.html)

Carsten1812 21. Okt 2011 10:51

AW: Waagenwerte über com-Schnittstelle einlesen
 
Zitat:

Zitat von Bummi (Beitrag 1131664)
schmeiss' eine TComport Komponente auf Dein Form/Datenmodul, stelle die Parameter ein, führe beim Programmstart BaseSerial1.Connected := true; aus

hänge an OnRxChar einen Code in der Art:
Delphi-Quellcode:
procedure TCPOS.BaseSerial1RxChar(Sender: TObject; Count: Integer);
var
  s: AnsiString;
begin
  BaseSerial1.ReadStr(s, Count);
  FInBuffer := FInBuffer + s;
  InterPretBuffer;
end;
wenn Du etwas schreiben musst :

Delphi-Quellcode:
BaseSerial1.WriteStr(SendString);

also ich hatte das grade mal probiert so einzubauen.
ich bekomme da aber die fehlermeldung [Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'BaseSerial1'

CCRDude 21. Okt 2011 10:57

AW: Waagenwerte über com-Schnittstelle einlesen
 
An der Stelle ist jetzt aber wirklich erstmal Delphi-Grundwissen gefragt!

Daß sich BaseSerial1 auf den Namen der Komponente bezieht, kann man bereits am Namen des Events erahnen :)

Carsten1812 21. Okt 2011 11:10

AW: Waagenwerte über com-Schnittstelle einlesen
 
Habe den 'BaseSerial' aber leider nicht in meiner Library.
kann man die irgendwo runter laden?

CCRDude 21. Okt 2011 11:16

AW: Waagenwerte über com-Schnittstelle einlesen
 
Nochmal - BaseSerial1 ist ein Name einer Instanz. Die legst Du fest, wenn Du eine Komponente auf eine Form packst. Die sind selbstverständlich in keiner Library schon vordefiniert.

(ja, ich hätte besser "Name der Instanz der Komponente" statt "Name der Komponente" schreiben sollen, aber wie gesagt - das der Instanzname der erste Teil eines automatisch über die IDE erstellten Events ist, ist eigentlich Grundwissen)

In Deinem Beispiel heißt die Instanz ComPort1 statt BaseSerial1. Wenn Du die gleiche Komponente wie Bummi verwendest, verwende doch den. Sonst musst Du halt schauen, welche Komponente er in seinem Kurzbeispiel verwendet, oder die vermutlich nur minimal anderen Property/Methoden-Namen Deiner Komponente anhand von Namensähnlichkeiten erraten.

Carsten1812 21. Okt 2011 11:27

AW: Waagenwerte über com-Schnittstelle einlesen
 
Danke, das hat mir grade richtig geholfen (sorry das ich mich manchmal noch etwas blöde anstelle, bin noch Anfänger und steige grade in die Materie ein)
jetzt habe ich aber noch zwei ander Fehlermeldungen.
[Fehler] Unit1.pas(84): Undefinierter Bezeichner: 'FInBuffer'
[Fehler] Unit1.pas(85): Undefinierter Bezeichner: 'InterPretBuffer'
wie bekomme ich die weg?

CCRDude 21. Okt 2011 11:42

AW: Waagenwerte über com-Schnittstelle einlesen
 
FInBuffer ist wohl ein Puffer der Form. Im private-Teil der Form-Deklaration, also etwa unter der Zeile mit
Delphi-Quellcode:
  { Private-Deklarationen }
, solltest Du eine Zeile mit
Delphi-Quellcode:
FInBuffer: AnsiString;
einfügen. Und darunter
Delphi-Quellcode:
procedure InterPretBuffer;
und dann Strg+Shift+C drücken, das fügt Dir gleich die Implementierung dieser Methode ein.

Bummi 21. Okt 2011 11:52

AW: Waagenwerte über com-Schnittstelle einlesen
 
FInBuffer ist eine AnsiString den Du irgendwo in Deinem Form deklarierst
InterPretInbuffer ist die Prozedur die Dir FInBuffer auswertet und kürzt.

Meine Routinen werden für Dich nicht passen, etwas in der Art könnte Dich gegf. auf den Pfad bringen



Delphi-Quellcode:
TForm1 = class(TTForm)
    private
      FInBuffer: AnsiString;
      procedure InterPretInBuffer;
 ......  
implementation






procedure TForm1 .InterpretInbuffer;
var
     i:Integer;
     part:AnsiString;
begin
     i := Pos(#10,FInBuffer);
     Memo1.Lines.Add(FInBuffer);
     while i>0 do
        begin
           Part := Copy(FInBuffer,1,i-1);
           FInBuffer := Copy(FInBuffer,i+1,Length(FInBuffer));
           Memo2.Lines.Add(Part);
           i := Pos(#10,FInBuffer);
        end;
end;
Du könntest im ersten Schritt mal etwas in der Art machen:

Carsten1812 21. Okt 2011 13:00

AW: Waagenwerte über com-Schnittstelle einlesen
 
Ich habe das jetzt mal auf mich angepasst, jetzt habe ich aber das Problem das mir das Programm beim starten gleich abstürtzt.( bekomme keine Warnung oder Fehlermeldung)muss es dann über 'Start' => 'Programm zurücksetzen' rücksetzten
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
s: AnsiString;
begin
  ComPort1.ReadStr(s, Count);
  FInBuffer := FInBuffer + s;
  InterPretInbuffer;
end;

procedure TForm1 .InterpretInbuffer;
var
     i:Integer;
     part:AnsiString;
begin
     i := Pos(#10,FInBuffer);
     Memo1.Lines.Add(FInBuffer);
     while i>0 do
        begin
           Part := Copy(FInBuffer,1,i-1);
           FInBuffer := Copy(FInBuffer,i+1,Length(FInBuffer));
           Memo2.Lines.Add(Part);
           i := Pos(#10,FInBuffer);
        end;
end;

Bummi 21. Okt 2011 13:04

AW: Waagenwerte über com-Schnittstelle einlesen
 
kenn' ich wenn die Baudrate nicht passt ....

fkerber 21. Okt 2011 13:04

AW: Waagenwerte über com-Schnittstelle einlesen
 
Hi,

dann würde ich im FormCreate einen Breakpoint setzen und dann mit Einzelschritt durchgehen, bis du die Stelle findest, wo es knallt.


LG, Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz