22-05-2022, Saat: 02:33
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.