Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: volkii - 21 Mayıs 2007, 11:09:54

Başlık: apro kurulumu yardım
Gönderen: volkii - 21 Mayıs 2007, 11:09:54
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.
Başlık: apro kurulumu yardım
Gönderen: birumher - 21 Mayıs 2007, 11:37:36
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...
Başlık: apro kurulumu yardım
Gönderen: volkii - 21 Mayıs 2007, 13:27:47
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
Başlık: apro kurulumu yardım
Gönderen: birumher - 21 Mayıs 2007, 16:16:37
OnTriggerOutSent event i işini görmüyor mu?
Başlık: apro kurulumu yardım
Gönderen: volkii - 21 Mayıs 2007, 18:31:48
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.
Başlık: apro kurulumu yardım
Gönderen: volkii - 22 Mayıs 2007, 11:40:08
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.
Başlık: apro kurulumu yardım
Gönderen: birumher - 22 Mayıs 2007, 12:03:39

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
Başlık: apro kurulumu yardım
Gönderen: volkii - 22 Mayıs 2007, 14:17:35
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.
Başlık: apro kurulumu yardım
Gönderen: birumher - 22 Mayıs 2007, 18:29:33
Yazdığın kodu yapıştırabilirsen bir de öyle bakalım.
Başlık: apro kurulumu yardım
Gönderen: volkii - 22 Mayıs 2007, 18:32:40
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.
Başlık: apro kurulumu yardım
Gönderen: birumher - 23 Mayıs 2007, 12:19:20
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.
Başlık: apro kurulumu yardım
Gönderen: volkii - 24 Mayıs 2007, 10:02:16
dostum kodu şimdi deniyeceğim. ilgin için teşekkür ederim kardeşim. sonucu buraya yazar seni bilgilendiririm. tekrar teşekkürler
Başlık: apro kurulumu yardım
Gönderen: volkii - 24 Mayıs 2007, 15:32:45
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.
Başlık: apro kurulumu yardım
Gönderen: birumher - 25 Mayıs 2007, 15:06:50
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.