Schleife ... jeden 3ten Wert lesen.

Für Fragen von Einsteigern und Programmieranfängern...
Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von Foxi1896 »

Foxi1896 hat geschrieben:
Funktion ReadValue

Code: Alles auswählen
function ReadValue (inW: String) : extended;

(...)
Meinst du das so? Was muss ich oben in die Klammern schreiben?

Das müssen wir mal genauer auseinander nehmen. Wozu gibt es den Übergabeparameter inW? Was für Daten enthält er?

ok der inW ist schwachwinn .... der Wert der mich interessiert ist der y_wert.
Was muss den bei einer Funktion in die Klammern?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2813
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von m.fuchs »

In die Klammern muss meiner Meinung nach nichts. Du willst ja keine Daten senden sondern nur empfangen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von Foxi1896 »

hmmm ... hab es jetzt an meine Werte so wie ich denke das es Richtig ist angepasst. Es kommt keine Fehlermeldung aber es kommt auch kein Wert =(
Hab nachdem Edits und Memo nicht gingen Listbox reingemacht (obwohl das doch eigentlich egal ist).

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  PortInc, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  y_wert                          : Real;
  n_wert                          : Integer;
  ReadStep                        : Int64;
 
implementation
 
{$R *.lfm}
 
 
{------------------------------------------------------------------------------}
 
function StrToFloat2(ValStr : String) : extended;
var
   ValRea : extended;
   i,Inf  : Integer;
   STX    : String;
begin
STX := '';
for i := 1 to Length(ValStr) do
    begin
    if Copy(ValStr,i,1) = ',' then STX := STX + '.';
    if Copy(ValStr,i,1) = '.' then STX := STX + '.';
    if Copy(ValStr,i,1) = '+' then STX := STX + '+';
    if Copy(ValStr,i,1) = '-' then STX := STX + '+';
    if Copy(ValStr,i,1) = '1' then STX := STX + '1';
    if Copy(ValStr,i,1) = '2' then STX := STX + '2';
    if Copy(ValStr,i,1) = '3' then STX := STX + '3';
    if Copy(ValStr,i,1) = '4' then STX := STX + '4';
    if Copy(ValStr,i,1) = '5' then STX := STX + '5';
    if Copy(ValStr,i,1) = '6' then STX := STX + '6';
    if Copy(ValStr,i,1) = '7' then STX := STX + '7';
    if Copy(ValStr,i,1) = '8' then STX := STX + '8';
    if Copy(ValStr,i,1) = '9' then STX := STX + '9';
    if Copy(ValStr,i,1) = '0' then STX := STX + '0';
    if Copy(ValStr,i,1) = 'e' then STX := STX + 'e';
    if Copy(ValStr,i,1) = 'E' then STX := STX + 'e';
    end;
Val(STX, ValRea, Inf);
if Inf =  0 then StrToFloat2 := ValRea else StrToFloat2 := 0;
 
end;
 
 
{------------------------------------------------------------------------------}
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   OpenCom(pchar('com' + Edit1.Text + ':9600,N,8,1'));
 
   {Messgerät - INIT}
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('s'));
  SendByte (ord('r'));
  SendByte (2);
  SendByte (ord('i'));
  SendByte (ord('n'));
  SendByte (ord('i'));
  SendByte (ord('t'));
  SendByte (10);
  SendByte (3);
 
  ReadByte;
 
end;
 
 
{------------------------------------------------------------------------------}
 
function ReadValue () : extended;
var i     : Integer;
    inB   : Integer;
    inW   : String;
 
begin
 
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('s'));
  SendByte (ord('r'));
  SendByte (2);
  SendByte (ord('f'));
  SendByte (ord('e'));
  SendByte (ord('t'));
  SendByte (ord('c'));
  SendByte (ord('?'));
  SendByte (10);
  SendByte (3);
 
  ReadByte;
 
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('p'));
  SendByte (ord('o'));
  SendByte (5);
 
  ReadByte;
 
  inW:='';
  i:=0;
  repeat
  inc(i);
  inB:=ReadByte;
  inW:=inW+chr(inB);
  until (inB=13) or (i>20);
 
  ReadByte;
  ReadByte;
 
  y_wert:=StrToFloat2(inW)*1000;
 
end;
 
 
 procedure TForm1.Timer1Timer(Sender: TObject);
 var Value: real;
 begin
  Value := y_wert;
  if Value = 0 then
  ReadStep := 0
  else
    begin
    Inc(ReadStep);
    if ReadStep = 3 then
     begin
     ListBox1.Items.Add(FloatToStr(Value));
     Beep;
     end;
    end;
 
  end;
 
 
{------------------------------------------------------------------------------}
 
end.
 

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von Foxi1896 »

Ich habe nun nur den Teil mal einzeln gemacht ohne mein ganzes anderes Zeug im Programm und es hinbekommen. Aber ohne function, den teil habe ich mit in nen Button getan. Woran liegt es das er die Function nicht annimmt.

Code: Alles auswählen

 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   OpenCom(pchar('com' + Edit1.Text + ':9600,N,8,1'));
 
   {Messgerät - INIT}
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('s'));
  SendByte (ord('r'));
  SendByte (2);
  SendByte (ord('i'));
  SendByte (ord('n'));
  SendByte (ord('i'));
  SendByte (ord('t'));
  SendByte (10);
  SendByte (3);
 
  ReadByte;
 
end;
 
 
{------------------------------------------------------------------------------}
 
procedure TForm1.Timer1Timer(Sender: TObject);
var i     : Integer;
    inB   : Integer;
    inW   : String;
     Value: real;
begin
 
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('s'));
  SendByte (ord('r'));
  SendByte (2);
  SendByte (ord('f'));
  SendByte (ord('e'));
  SendByte (ord('t'));
  SendByte (ord('c'));
  SendByte (ord('?'));
  SendByte (10);
  SendByte (3);
 
  ReadByte;
 
  SendByte (4);
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('0'));
  SendByte (ord('p'));
  SendByte (ord('o'));
  SendByte (5);
 
  ReadByte;
 
  inW:='';
  i:=0;
  repeat
  inc(i);
  inB:=ReadByte;
  inW:=inW+chr(inB);
  until (inB=13) or (i>20);
 
  ReadByte;
  ReadByte;
 
  y_wert:=StrToFloat2(inW)*1000;
 
form1.Edit2.Text:=inW;
form1.Edit3.Text:=IntToStr(i);
form1.Edit4.Text:=FormatFloat('0.00',y_wert);
 
 
 
 begin
  Value := y_wert;
  Edit3.Text:=FormatFloat('0.00',value);
  if Value = 0 then
  ReadStep := 0
  else
    begin
    Inc(ReadStep);
    if ReadStep = 3 then
     begin
     inc(n_wert);
     if n_wert=1 then Edita.Text:=   FormatFloat('0.0',y_wert);
     if n_wert=2 then Editb.Text:=   FormatFloat('0.0',y_wert);
     if n_wert=3 then Editc.Text:=   FormatFloat('0.0',y_wert);
     if n_wert=4 then Editd.Text:=   FormatFloat('0.0',y_wert);
     if n_wert=5 then Edite.Text:=   FormatFloat('0.0',y_wert);
     if n_wert=6 then Editf.Text:=   FormatFloat('0.0',y_wert);
     Beep;
     end;
    end;
 
  end;
 
end;                                        

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von Bauer321 »

Wenn ich das richtig gesehen habe rufst du die funktion nicht auf.
Außerdem musst du den ermittelten wert auch übergeben, indem du der variable result oder deinfunktionsname, welche den typ des Rückgabe wertes deiner funktion hat, den ermittelten wert zuweist.

Edit: ich sehe gerade du hast eine globale variable definiert, dann kannst du jedoch besser eine prozedur nutzen.

Das problem wird also sein das du readvalue nicht auf rufst
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2813
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Schleife ... jeden 3ten Wert lesen.

Beitrag von m.fuchs »

Foxi1896 hat geschrieben:Ich habe nun nur den Teil mal einzeln gemacht ohne mein ganzes anderes Zeug im Programm und es hinbekommen. Aber ohne function, den teil habe ich mit in nen Button getan. Woran liegt es das er die Function nicht annimmt.
Woran es liegt weißt du jetzt, ein kleiner Nachtrag noch von mir. Bitte nicht falsch verstehen, aber du solltest dringend mal in ein Grundlagenbuch für Pascal schauen. Vielleicht http://www.marcocantu.com/epascal/German/ oder http://de.wikibooks.org/wiki/Programmierkurs:_Delphi. Danach wirst du dir viele Fragen aus diesem Thema ganz leicht selbst beantworten können. :)
Im Forum kann vieles beantwortet werden, auch und gerade Anfängerfragen. Aber Grundlagenvermittlung ist auf diesem Wege nicht so optimal.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten