Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

apro kurulumu yardım

Başlatan volkii, 21 Mayıs 2007, 11:09:54

volkii

herkese merhaba. yeni delfi (7) kullanmaya başladım. seri port işlemleri için aproyu kullanıcam. ancak birtürlü kuramadım. nasıl kurulacağı hakkındada pek bir bilgim yok aslında. hep hata mesajı alıyorum. büyük ihtimalle ben hata yapıyorum. nasıl kurmam gerektiği hakkın da en temel düzeyde bilgi verirseniz çok memnun olurum. delpi ortamına çok yabancıyım. yardımlarınızı bekliyorum.

birumher

1.. Dosyaları örneğin c:\DelphiComps\Apro gibi bir yere aç

2. Delphi yi çalıştır. Menüden Tools->Environment Options->Library e git.

3. Buradaki Library Path e source directorysini ekle. Örneğimizde "c:\DelphiComps\Apro\source"

 4. Packages directorysine git orada sonu R70 ile biten Runtime package i aç compile et. (İsmi _R70.dpk ile bitmeli)

5. Sonra yine packages directorysinde D70 ile biten designtime package i aç compile et ve install butonuna bas. (İsmi _D70.dpk ile bitmeli)

Artık apro componentleri kullanabilirsin...
Birkan.Herguner

volkii

dostum sağol o işi hallettim. ilgin için teşekkür ederim. ancak bi sorunum daha çıktı. seri porttan veri gönderme işleminin bittiğini nasıl anlarım?
herkese kolay gelsin iyi çalışmalar

birumher

OnTriggerOutSent event i işini görmüyor mu?
Birkan.Herguner

volkii

yani denedim ama, zannedersem yanlış yaptım. amacım, veriyi gönderme işlemi bittikten sonra seri porta bağlı cihazı (rf kullanıyorum)hemen receive moda almak. eğer kullanmam gereken event buysa bunun üzerine yoğunlaşıyım. teşekkür ederim.

volkii

merhaba veriyi gönder dedikten sonra, gönder butonunun enabled ını false yaptım. OnTriggerOutSent tede gönder butonunu enabledını true yaptım. veriyi gönderdikten sonra veri gidiyor. buton false oluyor. ancak gönderme işlemi bittikten sonra buton enabledı true olmuyor neden olabilir? teşekkürler iyi çalışmalar.

birumher

type
  TForm1 = class(TForm)
    ApdComPort1: TApdComPort;
    StartBtn: TButton;
    StatusLabel: TLabel;
    procedure ApdComPort1TriggerStatus(CP : TObject;
      TriggerHandle : Word);
    procedure FormCreate(Sender: TObject);
  public
    { Public declarations }
    OutSentTrig     : Word;
  end;

var
  Form1 : TForm1;

implementation

{$R *.DFM}
.
.
.
.
.
.
procedure TForm1.FormCreate(Sender: TObject);
begin
  //** comport u aç ayarlarını yap vs.
  OutSentTrig := ApdComPort1.AddStatusTrigger(stOutSent);
  ApdComPort1.SetStatusTrigger(OutSentTrig, 0, True);
end;

procedure TForm1.ApdComPort1TriggerStatus(CP : TObject;
  TriggerHandle: Word);
begin
  if TriggerHandle = OutSentTrig then
  begin
    StatusLabel.Caption := 'Data Gönderildi';
    SendButton.Enabled := True;
  end;
end;
.
.
.
.
.


bu kodu bir dene istersen
Birkan.Herguner

volkii

dostum ilgin için çok teşekkür ederim. verdiğin kodu denedim ancak veriyi gönder buyonuna bastığım anda bufferın boş olduğu ile ilgili bir hata mesajı veriyor. halbuki veri var. nolmalde gönderiyordu. ancak yukarıdaki kodu ekleyince sonuç bu oldu.

birumher

Yazdığın kodu yapıştırabilirsen bir de öyle bakalım.
Birkan.Herguner

volkii

buyur usta kod bu. tekrar sağol kardeşim



unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, OoMisc, AdPort, ExtCtrls, ComCtrls;

type
 TForm1 = class(TForm)
   sbServo1: TScrollBar;
   Button1: TButton;
   ApdComPort1: TApdComPort;
   cbID: TComboBox;
   cbCommand: TComboBox;
   cbPreamp: TComboBox;
   cbSecron: TComboBox;
   GroupBox1: TGroupBox;
   Label6: TLabel;
   Label7: TLabel;
   GroupBox2: TGroupBox;
   Label2: TLabel;
   Label3: TLabel;
   Panel1: TPanel;
   Label1: TLabel;
   lbServo1: TLabel;
   chSecron: TCheckBox;
   Label4: TLabel;
   cbBaud: TComboBox;
   chUpdate: TCheckBox;
   Button2: TButton;
   Memo1: TMemo;
   CheckBox1: TCheckBox;
   Button4: TButton;
   Label5: TLabel;
   procedure sbServo1Change(Sender: TObject);
   procedure Button1EndDrag(Sender, Target: TObject; X, Y: Integer);
   procedure cbBaudChange(Sender: TObject);
   procedure SendPacket();
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure CheckBox1Click(Sender: TObject);
   procedure ApdComPort1Trigger(CP: TObject; Msg, TriggerHandle,
     Data: Word);
   procedure FormCreate(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure ApdComPort1TriggerStatus(CP: TObject; TriggerHandle: Word);
   procedure ApdComPort1TriggerOutSent(Sender: TObject);
   procedure ApdComPort1TriggerOutbuffFree(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
  OutSentTrig: Word;
 end;

var
 Form1: TForm1;

 c: char;
 bir: integer;
 sifir: integer;
 veri_al: String;
 sec: integer;
 alma_aktif: boolean;


implementation

{$R *.dfm}
//******************************************************
procedure TForm1.sbServo1Change(Sender: TObject);
begin
 lbServo1.Caption := IntToStr(sbServo1.Position);

 if chUpdate.Checked = True then
   SendPacket;
end;

//******************************************************
procedure TForm1.Button1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
 Form1.Caption := 'dd';
end;

procedure TForm1.cbBaudChange(Sender: TObject);
begin
 ApdComPort1.Baud := StrToInt(cbBaud.Text);
end;
//******************************************************

procedure TForm1.SendPacket();
var
preamp: string;
secron: string;
servo1pos: string;
command: string;
i: integer;
begin

 servo1pos := IntToStr(sbServo1.Position);

 case cbCommand.ItemIndex of
   0: command := 'O';
   1: command := 'P';
 end;

 preamp := '';

 for i := 1 to StrToInt(cbPreamp.Text) do
   preamp := preamp + chr($AA);

 secron := '';

 if chSecron.Checked = True then
 begin
   for i := 1 to StrToInt(cbSecron.Text) do
     secron := secron + chr($FF);

   for i := 1 to StrToInt(cbSecron.Text) do
     secron := secron + chr($00);
  end
  else
  begin
    for i := 1 to StrToInt(cbSecron.Text) do
      secron := secron + chr($00);

    for i := 1 to StrToInt(cbSecron.Text) do
      secron := secron + chr($FF);
  end;

ApdComPort1.RTS := False;
sleep(51);
ApdComPort1.Output := preamp + secron + cbID.Text + command +
                     servo1pos + 'ABCD';

 //ApdComPort1.RTS := True;
sleep(97);
button1.Enabled := False;
end;
//***************************************************************
procedure TForm1.Button1Click(Sender: TObject);
begin
 SendPacket;
end;
//***************************************************************
procedure TForm1.Button2Click(Sender: TObject);
begin
 while sbServo1.Position <> sbServo1.Max do
 begin
   sbServo1.Position := sbServo1.Position + 1;
   sleep(500);
   Memo1.Refresh;
   Application.ProcessMessages;
 end;
 sbServo1.Position := 12;
end;
//***************************************************************
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 ApdComPort1.RTS := CheckBox1.Checked;
end;
//***************************************************************
procedure TForm1.ApdComPort1Trigger(CP: TObject; Msg, TriggerHandle,
 Data: Word);

begin
 c := ApdComPort1.GetChar();

 if (c = CHR($00)) and (sifir < 2) then                       // 3 byte 0xFF al
   sifir := sifir + 1

 else if (sifir = 2) and (c = CHR($FF)) and (bir < 3) then    // 3 byte 0xFF den sonra
   bir := bir + 1

 else if (bir = 3) then                                      // ilk anlamlı veriyi al
 begin
   veri_al := veri_al + c;                                      // gelen her veriyi 8 elemanlı veri_al dizisinine yaz
   sec := sec + 1;
 end;

 if (sec = 8) then                                           // alınacak olan veri sayısı sona erdiğinde
 begin

   sifir := 0;                                               // bütün değerleri sıfırla
   bir := 0;
   sec := 0;

 if veri_al[1] = '0' then
   Memo1.Lines.Add(veri_al);
 veri_al := '';
 end;
end;
//**********************************************************

procedure TForm1.FormCreate(Sender: TObject);


begin
 bir := 0;
 sifir := 0;
 veri_al := '';
 sec := 0;

 //  OutSentTrig := ApdComPort1.AddStatusTrigger(stOutSent);
//  ApdComPort1.SetStatusTrigger(OutSentTrig, 0, True);
end;
//**********************************************************

procedure TForm1.Button4Click(Sender: TObject);
begin
 Memo1.Lines.Clear;
end;

//*************************************************************

procedure TForm1.ApdComPort1TriggerStatus(CP: TObject;
 TriggerHandle: Word);
begin

//  if TriggerHandle = OutSentTrig then
// begin
//   button1.Caption := 'Data Gönderildi';
 // button1.Enabled := True;
// end;
end;

//**************************************************************

procedure TForm1.ApdComPort1TriggerOutSent(Sender: TObject);
begin
   button1.Enabled := True;
end;
procedure TForm1.ApdComPort1TriggerOutbuffFree(Sender: TObject);
begin
   button1.Enabled := True;
   ApdComPort1.RTS := True;
end;

end.

birumher

APRO nun kendi örneğini biraz değiştirdim. Bu haliyle çalışıyor.

Senin kodda da bir hata göremedim. Data okuma kısmın farklı bir event ile yazmışsın ama o da doğru. En basitinden APRO Examples içindeki ExCom.dpr örneğini aç aşağıdaki değişiklikleri yap bak bakalım çalışıyor mu? Çalışırsa buraya göre değiştir. Püf noktası TriggerStatus eventinin sonuna tekrar ApdComPort1.SetStatusTrigger(OutSentTrig, 0, True); satırını eklemekmiş. Eklenmeyince bende de çalışmıyor. Ama bu haliyle çalıştı...
(***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is TurboPower Async Professional
 *
 * The Initial Developer of the Original Code is
 * TurboPower Software
 *
 * Portions created by the Initial Developer are Copyright (C) 1991-2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** *)

{*********************************************************}
{*                    EXCOM0.PAS 4.06                    *}
{*********************************************************}

{**********************Description************************}
{*    TApdComPort with an OnTriggerAvail handler.        *}
{*********************************************************}

unit Excom0;

interface

uses
  WinTypes, WinProcs, SysUtils, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, AdPort, OoMisc;

type
  TForm1 = class(TForm)
    ApdComPort1: TApdComPort;
    Test: TButton;
    procedure TestClick(Sender: TObject);
    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    procedure FormCreate(Sender: TObject);
    procedure ApdComPort1TriggerStatus(CP: TObject; TriggerHandle: Word);
  private
    { Private declarations }
    OutSentTrig     : Word; 
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.TestClick(Sender: TObject);
  {TestClick button click - Send output}
var
  i: integer;
begin
  Test.Enabled := false;
  Caption := 'Data Gidiyor';
  for i := 1 to 20 do
    ApdComPort1.OutPut := 'dsafsafafafdsafdfdsfsadafdfdfadsafafasfATZ';
end;

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
  {Event OnTriggerAvail - Example how OnTriggerAvail works} 
var
  I : Word;
  C : Char;
  S : String;
begin
  S := '';
  for I := 1 to Count do begin
    C := ApdComPort1.GetChar;
    case C of
      #0..#31 : {Don't display} ;
      else S := S + C;
    end;
  end;
  ShowMessage('Got an OnTriggerAvail event for: ' + S);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OutSentTrig := ApdComPort1.AddStatusTrigger(stOutSent);
  ApdComPort1.SetStatusTrigger(OutSentTrig, 0, True);
end;

procedure TForm1.ApdComPort1TriggerStatus(CP: TObject;
  TriggerHandle: Word);
begin
if TriggerHandle = OutSentTrig then
  begin
    Caption := 'Data Gönderildi';
    Test.Enabled := True;
  end;
  ApdComPort1.SetStatusTrigger(OutSentTrig, 0, True);
end;

end.
Birkan.Herguner

volkii

dostum kodu şimdi deniyeceğim. ilgin için teşekkür ederim kardeşim. sonucu buraya yazar seni bilgilendiririm. tekrar teşekkürler

volkii

merhaba;
dostum bi sorunum daha çıktı. veriyi 4 kere gönderdikten sonra, 1 kere alabiliyorum. yani her 1 veri gönderdikten sonra hemen bir veri almam gerekiyor. hiper terminal de sorun olmadığını görüyorum. devremde  problem yok yani . neden olabilir?
iyi çalışmalar.

birumher

Bu durumda pek fikir yürütemiyorum. Bence Apro nun örneğinden yola çıkarak elle yazıp gönder gelen veriyi de bir memo içine yazdır öyle kontrol et. Buffer problemi olabilir ya da başlangıç bitiş karakterleri problem yaratabilir.
Birkan.Herguner