Comport'a bilgi yollamak....(CNC ye GCODE transferi )

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Comport'a bilgi yollamak....(CNC ye GCODE transferi )

Mesaj gönderen uğur alkan »

16KB seri port buffer bellegi bulunan bir mikrokontroller ile haberleşmeye çalışıyorum. bu 16 KB bellege delphi aracılığıyla "txt" bir dosyada yazılı olan satırları sırayla göndermek gerekiyor. bu satırlarda x y z ve c düzlemlerinin yapacakları hareketlerin hız ve yol bilgileri yer alıyor. mikrokontroller ilgili kod kendisine ulastıktan sonra ilgili eksene hareketini yaptırıyor. Hareket bittikten sonra bilgisayara hareket tamamlandı yenisini gönder diye bir "OK" kodu yollanıyor. Şimdi benim bu kodları bir buton vasıtasıyla tek tek göndermem gerekiyor. Kısacası makina yapacagı sabit işlerde txt dosyadan bilgi okumayacak bu butonun altında yer alan sabit komut dizinleri sırasıyla gönderilecek, bir txt dosya kullanılamayacak
komut yollanacak makinadan "ok"alınacak başka bir tane komut yollananacak. olay bu şekilde devam edecek birde stop butonum var bu butona bastığım zaman ise diğer işlerin arasına girilip stop komutu gönderilecek. böylece sistem tıpkı bir NC gibi çalışabilecek.
komut yollama butonuna bastığım zaman arka planda sürekli bir task çalışacak stop butonuna bastığımda ise bu task durudurulacak bunu nasıl yapabilirim...?
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Seko
Üye
Mesajlar: 11
Kayıt: 07 Ara 2004 01:16

Mesaj gönderen Seko »

Merhaba,

Delphi ile seri porta bilgi göndermek için ne kullanıyorsunuz belirtmemişsiniz ama Turbo Power'ın bu konuda başarılı bir bileşeni var. Bu bilşeni kullanarak bu istediklerinizi çok basit bir şekilde yapabilirsiniz.
Bir outbuffer oluşturursunuz. Tstringlist tipinde. Bu OutBuffer'a Komutların bulunduğu dosyayı yüklersiniz.

Sonrası kabaca

Kod: Tümünü seç

//GonderClick

Port.PutString(Outbuffer.Strings[0]);
OutBuffer.Delete(0);
GonderimDevam:=True;

//PortTriggerAvail

If PorttanGelenCevap<>'OK' Then
Begin
Port.PutString(SonGidenMesaj) // (veya hata var diyebilirsin)  
Exit;
End;

If (GonderimDevam) And (OutBuffer.Count>0)Then  //Buffer boşaldıysa dur mesajı göndersin
Begin
Port.PutString(Outbuffer.Strings[0]);
SonGidenMesaj:=Outbuffer.Strings[0];
OutBuffer.Delete(0);
End Else Port.PutStirng(StopKarakteri);


//StopClick

GonderimDevam:=False


Umarım işini görür kolay gelsin.
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

yapmak istediğim sey belli parçaların şekilleri aynı sadece boyutları farklı
ve toplam 20 veya 30 tane parça var. örneğin 1. parça için ekrandan parçanın boyutlarını girecek program bu boyutlara göre gcode üretecek ve transfer gerçeklecek... her seferinde çiz konvert et çok zaman alıyor ve CNC yi kullanan bunlardan pek anlamıyor. evet apro kullanıyorum bende, ilk denemeler olumlu tek tek gönderdiğim gcode ları işlenip bana "ok" cevabı döndü... CNC nin buffer biraz küçük 16KB kadar
yeri geliyor 1MB ye yakın gcode transfer etmen gerekiyor, bu yüzden ya 16k 16k transfer yapacaksın ki bu sefer bir hatalı işlem olduğunda stop komutu yollayamazsın, bundan dolayı satır satır göndermek daha mantıklı göründü...
ilgine çok teşekkür ederim. sağolasın.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
MakPRO
Üye
Mesajlar: 251
Kayıt: 31 Eki 2003 05:21
Konum: Antalya
İletişim:

seri porttan okuma

Mesaj gönderen MakPRO »

mrb

aşağıdaki linkten seri portları okuyabilen kodlara ulaşabilirsin.

http://www.swissdelphicenter.ch/torry/s ... php?id=841

iyi çalışmalar
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

dosya transferi protokü tamamlandı seri portta karşılıklı onaylatarak dosya transfer edecek arkadaşlar için ;dosya satır satır yollanıyor ve
karşıdaki cihazın işlemlerini bitirmesi bekleniyor....

Kod: Tümünü seç

unit butonstop;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    ApdComPort1: TApdComPort;
    Edit2: TEdit;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  FExit: Boolean;
   Dosya: TextFile;
    DosyaAdi, Satir: string;
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Enabled:=false;
FExit:=false;
DosyaAdi := 'c:\gcode.txt';
  AssignFile(Dosya, DosyaAdi);
  {$I-}
  Reset(Dosya);
  if IOResult = 0 then
sleep(100);
form1.Edit2.Clear;
form1.Edit2.Refresh;
ReadLn(Dosya, Satir);
form1.Edit1.Text:=Satir;
form1.ApdComPort1.PutString(satir);
while not EOF(Dosya) and (not FExit) do
begin
Application.ProcessMessages;
if form1.Edit2.Text='OK' then
begin
sleep(1000);----------------------------------olayları rahat seyretmek için
ReadLn(Dosya, Satir);
form1.Edit1.Text:=Satir;
form1.ApdComPort1.PutString(satir);
form1.Edit2.Clear;
form1.Edit2.Refresh;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
button1.Enabled:=true;
   FExit:= True;
end;

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
begin
form1.Edit2.Text:=form1.ApdComPort1.GetChar;
form1.Edit2.Text:=form1.Edit2.Text+form1.ApdComPort1.GetChar;
form1.Edit2.Refresh;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
form1.ApdComPort1.PutString('27--');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
form1.ApdComPort1.PutString('05--');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
form1.ApdComPort1.PutString('06--');
end;


end.
1. buton transferi başlatıyor.
2. buton transferi durduruyor...
editlerden durum izlenebiliyor...
diğer butonlar özel veri transferleri içindir...
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Cevapla