Delphi Can

Orjinalini görmek için tıklayınız: #4 USCO API ile SERİ PORT Kontrol
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
USCO API ile USB kablusuyla bilgisayarımıza bağlı TIVA TM4C123G kartına USCO 01 protokolüyle, ARDUINO UNO, ARDUINO NANO ve ARDUINO MEGA kartlarına ise GOMIO protokolüyle yönetme işlerimizin konusu olacak bu yazımız. USCO 01 protokolü direk PC ye bağlı kontrol kartlarımızı çalıştırmak için kullanılır. Bir önceki yazımız olan USCO API ile USCO 01 kontrol konusunda kullandığımız projemizin KLASÖR kopyası ile bu projemizi üreteceğiz. DATA_FORM ve USCO_01_KONTROL_FORM’larımızda değişiklikler olacaktır. Artık projemize fiziki olarak KART bağlı ve bu cihazlara TComPort bileşenleri ile erişmeye çalışacağız.

Bu örneğimizde kullanacağımız USCO API leri kısaca bir tanıyalım.
procedure AIDI_GETIR(CIHAZ_KOD: Integer); Bu USCO API ile seçili CIHAZ’a ait son sensör bilgileri getirilir.

procedure CIHAZLAR_USCO_GETIR(CIHAZ_KOD:Integer); Seçili CIHAZ’a ait USCO komutları getirilir.

procedure VERI_GETIR(AIDI_KOD:Integer); Seçili cihaza ait AIDI komut ID si ile TOPLANAN verilerin SON 50 kaydı getirilir.

DataForm.Data.Temp.AidiDuzelt(TARIH_SAAT: string; DIGITAL_INPUT: string; DIGITAL_OUTPUT: string; SICAKLIK: string; NEM: string; ADC1: string; ADC2: string; ADC3: string; ADC4: string; ADC5: string; ADC6: string; ADC7: string; ADC8: string; ADC9: string; ADC10: string; ADC11: string; ADC12: string; ADC13: string; ADC14: string; ADC15: string; ADC16: string; ADC17: string; ADC18: string; ADC19: string; ADC20: string; DEVIR1: string; KOD: Integer) Seçili CIHAZ’a ait SENSÖR; DURUM, DEVIR, SICAKLIK, NEM vb bilgileri AIDI_BILGI gloabal isimli değişkene, mikrodenetleyiceden gelen bilgiler atanır. Atanan bu bilgiler bu API ile VERİTABANINA gönderilir.

Aşağıdaki ekran görüntülerini DİKKATLİCE inceleyiniz.

USCO_API_SERIPORT_KONTROL_1.png
USCO_API_SERIPORT_KONTROL_2.png
 procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
   procedure AIDI_GETIR(CIHAZ_KOD: Integer);
   procedure CIHAZLAR_USCO_GETIR(CIHAZ_KOD:Integer);
   procedure VERI_GETIR(AIDI_KOD:Integer);
   
 private
   
   { Private declarations }
 public
   { Public declarations }
   Temp: TServerMethods1Client;
   lDataSet: TDataSet; lDataSet1: TClientDataSet; DSP,DSP1: TDataSetProvider;
   KULLANICI_ADI, SIFRE: String;
 end;

var
 DATA: TDATA;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}


procedure TDATA.AIDI_GETIR(CIHAZ_KOD:Integer);
begin
 DataForm.DATA.AIDI_TABLE.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.AIDI_GETIR(KULLANICI_ADI, SIFRE, CIHAZ_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.AIDI_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.AIDI_TABLE.Open;
 finally
   DataForm.DATA.AIDI_TABLE.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;


procedure TDATA.CIHAZLAR_USCO_GETIR(CIHAZ_KOD:Integer);
begin
 DataForm.DATA.CIHAZLAR_USCO_TABLE.Close; CIHAZLAR_USCO_TABLE2.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.CIHAZLAR_USCO_GETIR(KULLANICI_ADI, SIFRE, CIHAZ_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.CIHAZLAR_USCO_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.CIHAZLAR_USCO_TABLE.Open;
   CIHAZLAR_USCO_TABLE2.Data := CIHAZLAR_USCO_TABLE.Data;    
   CIHAZLAR_USCO_TABLE2.Open;
 finally
   DataForm.DATA.CIHAZLAR_USCO_TABLE.SetProvider(nil);
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;

procedure TDATA.VERI_GETIR(AIDI_KOD:Integer); 
begin
 DataForm.DATA.VERI_GETIR_TABLE.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.VERI_GETIR(AIDI_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.VERI_GETIR_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.VERI_GETIR_TABLE.Open;
 finally
   DataForm.DATA.VERI_GETIR_TABLE.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;

procedure TDATA.DataModuleCreate(Sender: TObject);
begin
 Temp := TServerMethods1Client.Create(DSRestConnection1);
end;

procedure TDATA.DataModuleDestroy(Sender: TObject);
begin
 Temp.Free;
end;


  public
    { Public declarations }
   AIDI_BILGI: String;
   
 end;

var
 USCO_01_KONTROL_FORM: TUSCO_01_KONTROL_FORM;

implementation

{$R *.dfm}

uses DataForm;

procedure TUSCO_01_KONTROL_FORM.Button12Click(Sender: TObject);
begin
 TRY
 DataForm.DATA.CIHAZLAR_USCO_GETIR(StrToInt(Edit1.Text));
 EXCEPT
    ShowMessage('Kullanıcı adı veya şifre hatalı');
 END;
end;

procedure TUSCO_01_KONTROL_FORM.Button13Click(Sender: TObject);
var TARIH_SAAT,DIGITAL_INPUT,DIGITAL_OUTPUT,SICAKLIK,NEM,ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC7,ADC8: String;
begin  
 { // SENSÖR bilgilerini VERİTABANINA gönderme USCO API'si
   function TServerMethods1Client.AidiDuzelt(TARIH_SAAT: string; 
   DIGITAL_INPUT: string; DIGITAL_OUTPUT: string; SICAKLIK: string; NEM: string; ADC1: string; ADC2: string; 
   ADC3: string; ADC4: string; ADC5: string; ADC6: string; ADC7: string; ADC8: string; ADC9: string; 
   ADC10: string; ADC11: string; ADC12: string; ADC13: string; ADC14: string; ADC15: string; ADC16: string; 
   ADC17: string; ADC18: string; ADC19: string; ADC20: string; DEVIR1: string; KOD: Integer)
   : Boolean;
 }
{ // Mikrodenetleyiceden gelen AIDI_BILGI isimli değişkene atanan bilgi örnek DEĞER'i
:2720:2360:0087:0049:3538:4013:4054:4063,DI:11,T: 24,H: 64,D0:    0,D1:    0,<0000000000>,Saniye:    76
}  
 if ComPort1.Connected then // Eğer TIVA KART PC'ye bağlanmış ve OPEN yapılmış ise ..
 begin
    Timer1.Enabled := False; Sleep(150); // Tazeleme geçici olarak durmalı..
    // Hem TARIH_SAAT hem de VERI TOPLAMA aktif bilgisi bir arada toplanıyor... Toplamda 21 Karakter eder..
    // Örnek veri =  27.05.2020 01:42:17 1
    TARIH_SAAT := DateTimeToStr(now) + ' ' + DataForm.DATA.AIDI_TABLE.FieldByName('KOD').AsString;
    // Copy(AIDI_BILGI,79,9)  digital output durum bilgisi... AIDI_BILGI'den 79.dan itibaren 9 karakter al.
    // Copy(AIDI_BILGI,45,2) Digital input bilgisi..
    // Copy(AIDI_BILGI,63,5) ve Copy(AIDI_BILGI,72,5) DEVIR1 ve DEVIR2 bilgileri..
    // Copy(AIDI_BILGI,98,6) mikrodenetleyicinin çalışma süre bilgisi..
    // ':1' VERI TOPLA aktif bilgisi.. pasif ise ':0' olur..     
    if CheckBox3.Checked then  // Eğer VERİ TOPLA kutusu işaretlen miş ise,     
    DIGITAL_INPUT := Copy(AIDI_BILGI,79,9) + ':' + Copy(AIDI_BILGI,45,2) + ':1' + ':' + 
    Copy(AIDI_BILGI,63,5) + ':' + Copy(AIDI_BILGI,72,5) + ':' + Copy(AIDI_BILGI,98,6) else 
    DIGITAL_INPUT := Copy(AIDI_BILGI,79,9) + ':' + Copy(AIDI_BILGI,45,2) + ':0' + ':' + 
    Copy(AIDI_BILGI,63,5) + ':' + Copy(AIDI_BILGI,72,5) + ':' + Copy(AIDI_BILGI,98,6);
    DIGITAL_OUTPUT := ''; //Bu bilgi değeri DIGITAL_INPUT ile toplandı. API için lazım.
    SICAKLIK := Copy(AIDI_BILGI,50,3); NEM := Copy(AIDI_BILGI,56,3);
    ADC1 := Copy(AIDI_BILGI,2,4);  ADC2 := Copy(AIDI_BILGI,7,4);  ADC3 := Copy(AIDI_BILGI,12,4);
    ADC4 := Copy(AIDI_BILGI,17,4); ADC5 := Copy(AIDI_BILGI,22,4); ADC6 := Copy(AIDI_BILGI,27,4);
    ADC7 := Copy(AIDI_BILGI,32,4); ADC8 := Copy(AIDI_BILGI,37,4);
    //ADC9 .. ADC20 ye kadar olan veriler USCO 01 tarafından desteklenmediği için '0' alındı..
    DataForm.Data.Temp.AidiDuzelt(TARIH_SAAT,DIGITAL_INPUT,DIGITAL_OUTPUT,SICAKLIK,NEM,
    ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC7,ADC8,
    '0','0','0','0','0','0','0','0','0','0','0','0','', StrToInt(Edit1.Text)); // ADC9 .. ADC20 arası SIFIR
    Timer1.Enabled := True; Sleep(150); // Geçizi olarak duran Tazeleme devam etmeli ..
 end;  
end;

procedure TUSCO_01_KONTROL_FORM.Button1Click(Sender: TObject);
begin
 DataForm.DATA.AIDI_GETIR(StrToInt(Edit1.Text));
end;

procedure TUSCO_01_KONTROL_FORM.Button2Click(Sender: TObject);
begin
 DataForm.DATA.Temp.CihazlarUscoDuzelt(DataForm.DATA.KULLANICI_ADI, DataForm.DATA.SIFRE, 
 (Sender as TButton).Hint, 'EVET', '', (Sender as TButton).Tag, StrToInt(Edit1.Text));
end;

procedure TUSCO_01_KONTROL_FORM.CheckBox1Click(Sender: TObject);
begin
 Timer1.Enabled := CheckBox1.Checked;
 CheckBox3.Enabled := True;
end;

procedure TUSCO_01_KONTROL_FORM.CheckBox2Click(Sender: TObject);
begin
 if ComComboBox1.ItemIndex < 0 then
 begin
   ShowMessage('Lütfen SERİ PORT seçiniz.');
   CheckBox2.Checked := False;
   Exit;
 end;
 ComPort1.Port := ComComboBox1.Text;
 ComPort1.Connected := CheckBox2.Checked; 
 CheckBox1.Enabled := True; 
end;

procedure TUSCO_01_KONTROL_FORM.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
 AIDI_BILGI := Str; // KART tan toplanan VERİ'ler gloabal değişkene atanıyor.
 Label6.Caption := AIDI_BILGI;         
end;

procedure TUSCO_01_KONTROL_FORM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Timer1.Enabled := False;
end;

procedure TUSCO_01_KONTROL_FORM.FormShow(Sender: TObject);
begin
 EnumComPorts(ComComboBox1.Items);
end;

procedure TUSCO_01_KONTROL_FORM.Timer1Timer(Sender: TObject);
begin
 Button1Click(Self);   // AIDI Veri Getir..
 Sleep(50); Application.ProcessMessages;
 Button12Click(Self); // USCO Komut Gönder..
 if CheckBox2.Checked then Button13Click(Self); // AIDI Gönder..
 DataForm.DATA.VERI_GETIR(DataForm.DATA.AIDI_TABLE.FieldByName('KOD').AsInteger); // Toplanan verileri getir
 if DataForm.DATA.CIHAZLAR_USCO_TABLE2.FieldByName('DURUM').AsString = 'EVET' then
 begin
   if ComPort1.Connected then ComPort1.WriteStr(
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.FieldByName('komut').AsString + ' ' +
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.FieldByName('PARAMETRE').AsString + #13#10);           
   DataForm.DATA.Temp.CihazlarUscoDuzelt(DataForm.DATA.KULLANICI_ADI, DataForm.DATA.SIFRE, 
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.FieldByName('PARAMETRE').AsString, '', '', 
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.FieldByName('USCO_KOD').AsInteger, StrToInt(Edit1.Text));
 end;  
end;

Bu projemizi ayrıca, MOBILE uygulamadan kontrol eden uygulamanın APK'sını indirebilirsiniz.

Ayrıca MOBILE APK'ya ait SOURCE - KAYNAK kodları:

USCO KONTROL_FORM için
unit USCO_01KontrolForm;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit,
 FMX.Controls.Presentation, FMX.Layouts, FMX.ListBox, System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.ScrollBox,
 Data.Bind.Components, Data.Bind.DBScope, System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.EngExt,
 Fmx.Bind.DBEngExt, Fmx.Bind.Grid, Data.Bind.Grid, FMX.TabControl;

type
 TUSCO_01_KONTROL_FORM = class(TForm)
   Panel1: TPanel;
   Timer1: TTimer;
   Button12: TButton;
   Panel6: TPanel;
   Button13: TButton;
   Button15: TButton;
   Panel7: TPanel;
   Edit1: TEdit;
   Label1: TLabel;
   CheckBox1: TCheckBox;
   BindingsList1: TBindingsList;
   BindSourceDB2: TBindSourceDB;
   StringGrid1: TStringGrid;
   LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;
   StringGrid2: TStringGrid;
   BindSourceDB1: TBindSourceDB;
   LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
   TabControl1: TTabControl;
   TabItem1: TTabItem;
   TabItem2: TTabItem;
   StringGrid3: TStringGrid;
   StringGrid4: TStringGrid;
   BindSourceDB3: TBindSourceDB;
   LinkGridToDataSourceBindSourceDB3: TLinkGridToDataSource;
   BindSourceDB4: TBindSourceDB;
   LinkGridToDataSourceBindSourceDB4: TLinkGridToDataSource;
   Button5: TButton;
   Label7: TLabel;
   Button11: TButton;
   Button10: TButton;
   Button9: TButton;
   Button8: TButton;
   Button7: TButton;
   Button6: TButton;
   Button4: TButton;
   Button3: TButton;
   Button2: TButton;
   procedure Timer1Timer(Sender: TObject);
   procedure CheckBox1Change(Sender: TObject);
   procedure Button12Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button13Click(Sender: TObject);
   procedure Button15Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 USCO_01_KONTROL_FORM: TUSCO_01_KONTROL_FORM;

implementation

{$R *.fmx}

uses DataForm, ClientClassesUnit1;

procedure TUSCO_01_KONTROL_FORM.Button12Click(Sender: TObject);
begin
 Timer1.Enabled := False;
 Close;
end;

procedure TUSCO_01_KONTROL_FORM.Button13Click(Sender: TObject);
begin
 DataForm.DATA.AIDI_GETIR(StrToInt(Edit1.Text));
 Label7.Text := DataForm.DATA.AIDI_TABLE.FieldByName('TARIH_SAAT').AsString;
 DataForm.DATA.VERI_GETIR(StrToInt(Edit1.Text));
 StringGrid1.Columns[0].Width := 0;
 StringGrid2.Columns[0].Width := 0;
 StringGrid1.Columns[1].Width := 205;
 StringGrid2.Columns[1].Width := 205;
 StringGrid1.Columns[2].Width := 50;
 StringGrid2.Columns[2].Width := 50;
 StringGrid1.Columns[3].Width := 120;
 StringGrid2.Columns[3].Width := 120;
end;

procedure TUSCO_01_KONTROL_FORM.Button15Click(Sender: TObject);
begin
 TRY
   DataForm.DATA.CIHAZLAR_USCO_GETIR(StrToInt(Edit1.Text));
   StringGrid3.Columns[1].Width := 100;
   StringGrid4.Columns[1].Width := 100;
   StringGrid3.Columns[3].Width := 110;
   StringGrid4.Columns[3].Width := 110;
 EXCEPT
    ShowMessage('Kullanıcı adı veya şifre hatalı');
 END;
end;

procedure TUSCO_01_KONTROL_FORM.Button2Click(Sender: TObject);
begin
 DataForm.DATA.Temp.CihazlarUscoDuzelt(DataForm.DATA.KULLANICI_ADI, DataForm.DATA.SIFRE, (Sender as TButton).Hint, 'EVET',
   '', (Sender as TButton).Tag, StrToInt(Edit1.Text));
end;

procedure TUSCO_01_KONTROL_FORM.CheckBox1Change(Sender: TObject);
begin
 Timer1.Enabled := CheckBox1.IsChecked;
end;

procedure TUSCO_01_KONTROL_FORM.Timer1Timer(Sender: TObject);
begin
 Button13Click(Self); 
 Sleep(150); Application.ProcessMessages; 
 Button15Click(Self);
end;

end.

LOGIN_FORM için:
unit LoginForm;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit,
 FMX.Controls.Presentation;

type
 TLOGIN_FORM = class(TForm)
   Label1: TLabel;
   Label2: TLabel;
   Edit1: TEdit;
   Edit2: TEdit;
   Button1: TButton;
   Label3: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 LOGIN_FORM: TLOGIN_FORM;

implementation

{$R *.fmx}

uses DataForm, USCO_01KontrolForm;

procedure TLOGIN_FORM.Button1Click(Sender: TObject);
var
 GELEN: String;
begin

 if Edit1.Text = '' then
 begin
   ShowMessage('Kullanıcı Adı Zorunlu');
   Exit;
 end;

 if Edit2.Text = '' then
 begin
   ShowMessage('Şifre Zorunlu');
   Exit;
 end;

 GELEN := DataForm.DATA.Temp.KULLANICI_KONTROL(Edit1.Text, Edit2.Text);
 if GELEN <> '0' then
 begin
   DataForm.DATA.KULLANICI_ADI := Edit1.Text;
   DataForm.DATA.SIFRE:=Edit2.Text;
   USCO_01_KONTROL_FORM.Show;    
 end else  ShowMessage('Kullanıcı adı veya şifre yanlış');

end;

end.

DATA_FORM için;
unit DataForm;

interface

uses
 System.SysUtils, System.Classes, Datasnap.DSClientRest, ClientClassesUnit1, Data.DB, Datasnap.DBClient,
  Datasnap.Provider;

type
 TDATA = class(TDataModule)
   DSRestConnection1: TDSRestConnection;
   AIDI_TABLE: TClientDataSet;
   AIDI_SOURCE: TDataSource;
   CIHAZLAR_USCO_SOURCE: TDataSource;
   CIHAZLAR_USCO_TABLE: TClientDataSet;
   CIHAZLAR_USCO_SOURCE2: TDataSource;
   CIHAZLAR_USCO_TABLE2: TClientDataSet;
   VERI_GETIR_SOURCE: TDataSource;
   AIDI_TABLETARIH_SAAT: TStringField;
   AIDI_TABLESICAKLIK: TFloatField;
   AIDI_TABLENEM: TFloatField;
   AIDI_TABLECIHAZ_KOD: TIntegerField;
   AIDI_TABLEDIGITAL_INPUT: TStringField;
   AIDI_TABLEDIGITAL_OUTPUT: TStringField;
   AIDI_TABLEDEVIR1: TStringField;
   AIDI_TABLEDEVIR2: TStringField;
   AIDI_TABLESURE: TIntegerField;
   AIDI_TABLEADC1: TIntegerField;
   AIDI_TABLEADC2: TIntegerField;
   AIDI_TABLEADC3: TIntegerField;
   AIDI_TABLEADC4: TIntegerField;
   AIDI_TABLEADC5: TIntegerField;
   AIDI_TABLEADC6: TIntegerField;
   AIDI_TABLEADC7: TIntegerField;
   AIDI_TABLEADC8: TIntegerField;
   VERI_GETIR_TABLE: TClientDataSet;
   IntegerField1: TIntegerField;
   StringField1: TStringField;
   StringField2: TStringField;
   StringField3: TStringField;
   FloatField1: TFloatField;
   FloatField2: TFloatField;
   StringField4: TStringField;
   StringField5: TStringField;
   IntegerField2: TIntegerField;
   IntegerField3: TIntegerField;
   IntegerField4: TIntegerField;
   IntegerField5: TIntegerField;
   IntegerField6: TIntegerField;
   IntegerField7: TIntegerField;
   IntegerField8: TIntegerField;
   IntegerField9: TIntegerField;
   IntegerField10: TIntegerField;
   CIHAZLAR_USCO_TABLEUSCO_KOD: TIntegerField;
   CIHAZLAR_USCO_TABLEPARAMETRE: TStringField;
   CIHAZLAR_USCO_TABLEDURUM: TStringField;
   CIHAZLAR_USCO_TABLEkomut: TStringField;
   CIHAZLAR_USCO_TABLE2USCO_KOD: TIntegerField;
   CIHAZLAR_USCO_TABLE2PARAMETRE: TStringField;
   CIHAZLAR_USCO_TABLE2DURUM: TStringField;
   CIHAZLAR_USCO_TABLE2komut: TStringField;
   procedure DataModuleCreate(Sender: TObject);
   procedure DataModuleDestroy(Sender: TObject);
   procedure AIDI_GETIR(CIHAZ_KOD: Integer);
   procedure CIHAZLAR_USCO_GETIR(CIHAZ_KOD:Integer);
   procedure VERI_GETIR(AIDI_KOD:Integer);
   
 private
   { Private declarations }
 public
   { Public declarations }
   Temp: TServerMethods1Client;
   lDataSet: TDataSet; lDataSet1: TClientDataSet; DSP,DSP1: TDataSetProvider;
   KULLANICI_ADI, SIFRE: String;

 end;

var
 DATA: TDATA;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}
{$R *.dfm}

procedure TDATA.AIDI_GETIR(CIHAZ_KOD:Integer);
begin
 DataForm.DATA.AIDI_TABLE.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.AIDI_GETIR(KULLANICI_ADI, SIFRE, CIHAZ_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.AIDI_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.AIDI_TABLE.Open;
 finally
   DataForm.DATA.AIDI_TABLE.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;


procedure TDATA.CIHAZLAR_USCO_GETIR(CIHAZ_KOD:Integer);
begin
 DataForm.DATA.CIHAZLAR_USCO_TABLE.Close; CIHAZLAR_USCO_TABLE2.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.CIHAZLAR_USCO_GETIR(KULLANICI_ADI, SIFRE, CIHAZ_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.CIHAZLAR_USCO_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.CIHAZLAR_USCO_TABLE.Open;
   CIHAZLAR_USCO_TABLE2.Data := CIHAZLAR_USCO_TABLE.Data;    
   CIHAZLAR_USCO_TABLE2.Open;
 finally
   DataForm.DATA.CIHAZLAR_USCO_TABLE.SetProvider(nil);
   DataForm.DATA.CIHAZLAR_USCO_TABLE2.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;

procedure TDATA.VERI_GETIR(AIDI_KOD:Integer); 
begin
 DataForm.DATA.VERI_GETIR_TABLE.Close;
 DataForm.DATA.lDataSet := DataForm.DATA.Temp.VERI_GETIR(AIDI_KOD);
 DataForm.DATA.DSP := TDataSetProvider.Create(Self);
 try
   DataForm.DATA.DSP.DataSet := DataForm.DATA.lDataSet;
   DataForm.DATA.VERI_GETIR_TABLE.SetProvider(DataForm.DATA.DSP);
   DataForm.DATA.VERI_GETIR_TABLE.Open;
 finally
   DataForm.DATA.VERI_GETIR_TABLE.SetProvider(nil);
   DataForm.DATA.DSP.Free;
 end;
end;

procedure TDATA.DataModuleCreate(Sender: TObject);
begin
 Temp := TServerMethods1Client.Create(DSRestConnection1);
end;

procedure TDATA.DataModuleDestroy(Sender: TObject);
begin
 Temp.Free;
end;

end.
walla hocam Micro Denetleyiciler ve gömülü sistemler departmanını neredeyse tek başınıza götürüyorsunuz. Bir Delphican üyesi olarak emeklerinize sağlık..
(31-05-2020, Saat: 17:41)mcuyan Adlı Kullanıcıdan Alıntı: [ -> ]walla hocam Micro Denetleyiciler ve gömülü sistemler departmanını neredeyse tek başınıza götürüyorsunuz. Bir Delphican üyesi olarak emeklerinize sağlık..

Teşekkür ederim kardeşim. Elimizden ne gelirse ....