Delphi Can

Orjinalini görmek için tıklayınız: Elektrik Sayaçlarından Veri Okuma
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Uygulamada TComPort bileşenleri kullanıldı. RS485 USB çeviricisi KÖHLER marka sayacın RS485 portuna bağlandı. OBIS kodları gönderilerek tüm elektriksel parametreler elde edilip MEMO bileşene aktarıldı.  Uygulamanın videosunu YOUTUBE'a gönderdim.



unit Unit1;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, CPort, CPortCtl, Vcl.ExtCtrls;

type
 TForm1 = class(TForm)
   ComPort1: TComPort;
   ComComboBox1: TComComboBox;
   ComDataPacket1: TComDataPacket;
   Button1: TButton;
   Button3: TButton;
   Button4: TButton;
   Edit1: TEdit;
   Memo1: TMemo;
   Label2: TLabel;
   Button5: TButton;
   Edit2: TEdit;
   Timer1: TTimer;
   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   procedure Button1Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure ComDataPacket1Packet(Sender: TObject; const Str: string);
   procedure Button4Click(Sender: TObject);
   procedure Button5Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   BILGI: WideString;
   GIDEN: String;
   ILK: Real;
   SON: Real;
 end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 EnumComPorts(ComComboBox1.Items);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ComPort1.Connected := False;
 ComPort1.Port := ComComboBox1.Text;
 ComPort1.BaudRate := br300;
 ComPort1.DataBits := dbSeven;
 ComPort1.Parity.Bits := prEven;
 ComPort1.StopBits := sbOneStopBit;
 ComPort1.Open;
 ComPort1.WriteStr('/?!' + #13#10);
 // ComPort1.WriteStr('/?!' + chr(13) + chr(10));
 // ComPort1.WriteStr('/?61149586!' + chr(13) + chr(10));
end;

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
 BILGI := BILGI + Str;
 if GIDEN = 'UYAN' then begin
   Memo1.Lines.Text := BILGI;
 end else if GIDEN = 'MANUEL' then begin
   Memo1.Lines.Text := BILGI;
 end
 else Label2.Caption := IntToStr(Round((GetTickCount - ILK) / MSecsPerSec)) + ' sn';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 GIDEN := '';
 BILGI := '';
 Label2.Caption := 'Okuma süresi 15sn';
 Application.ProcessMessages;
 ComPort1.Connected := False;
 ComPort1.Port := ComComboBox1.Text;
 ComPort1.BaudRate := br300;
 ComPort1.DataBits := dbSeven;
 ComPort1.Parity.Bits := prEven;
 ComPort1.StopBits := sbOneStopBit;
 ComPort1.Open;
 ComPort1.WriteStr('/?!' + #13#10);
 Sleep(1000);
 ComPort1.WriteStr(chr(6) + '050' + chr(13) + chr(10));
 Sleep(500);
 ComPort1.BaudRate := br9600;
 ComPort1.WriteStr(chr(1) + 'R2' + #2 + '0.0.0' + '()' + #13#10);
 ILK := GetTickCount;
 Timer1.Enabled := True;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 GIDEN := 'MANUEL';
 BILGI := '';
 Label2.Caption := '';
 Application.ProcessMessages;
 ComPort1.Connected := False;
 ComPort1.Port := ComComboBox1.Text;
 ComPort1.BaudRate := br300;
 ComPort1.DataBits := dbSeven;
 ComPort1.Parity.Bits := prEven;
 ComPort1.StopBits := sbOneStopBit;
 ComPort1.Open;
 ComPort1.WriteStr('/?!' + #13#10);
 Sleep(1500);
 ComPort1.WriteStr(chr(6) + '051' + chr(13) + chr(10));
 Sleep(500);
 ComPort1.BaudRate := br9600;
 ComPort1.WriteStr(#1 + 'R2' + #2 + Edit1.Text + '()' + #3 + Edit2.Text);
 Timer1.Enabled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 GIDEN := 'UYAN';
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = VK_ESCAPE then Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Memo1.Lines.Text := BILGI;
 Timer1.Enabled := False;
end;

end.
Elinize, emeğinize sağlık hocam.
Çok teşekkürler @guverdik hocam sağolun