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.