![]() |
|
PLC ile mesafeli artımsal (incremental) motor kontrol - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mikrodenetleyiciler ve Gömülü Sistemler (https://www.delphican.com/forumdisplay.php?fid=1128) +---- Forum: Gömülü Sistemler (https://www.delphican.com/forumdisplay.php?fid=1132) +---- Konu Başlığı: PLC ile mesafeli artımsal (incremental) motor kontrol (/showthread.php?tid=6476) Sayfalar:
1
2
|
PLC ile mesafeli artımsal (incremental) motor kontrol - guverdik - 10-12-2021 Sürücülerde pals, yön ve enable uçları vardır. PLC ve görsel programlama kodlamaları aynıdır. Motorlar kaç mm veya kaç cm gideceği mesafesi belli olan uygulamadır. GMT PLC’yi kullanarak motorları iki türlü hareket ettirilir. Birincisi artımsal, ikincisi ise mutlak hareket. Artımsal, pals üretilerek motoru hareket ettirilir. Örnek 100 pals üret ve dur. 100 palslik çalışma anında motor ne kadar ilerlerse ölçülür ve net ölçüm ortaya çıkar. Gerekirse pals rakamları ile test edilerek istenilen motor hareket mesafesi ortaya çıkar. 100 pals üretildikten sonra 20 pals daha üret derseniz o zaman 120 pals üretilmiş olur. Önceki rakamın üzerine ilave edilerek arka planda hesaplama yapılır. Bu hareket tekniği artımsal olarak tanımlanır. Hareket kontrol sekmesinden hareket oluşturma fonksiyonu çalışma alanına getirilir. Motor sürücünün enable ve yön pinleri için openadlar eklenir. [attachment=1920] [attachment=1921] Step motor 8 kablo bağlantısı: A+ = MAVİ-SARI. A- = KIRMIZI – YEŞİL. B+ = TURNCU – KAHVE. B- = SİYAH - BEYAZ
[attachment=1922] GMTSuite editör programında konfigürasyon menüsünden ilgili kanal / lar aktif edilir. Üç adet hızlı çıkış kanalı vardır. 496T plc modelinin 0,1,2 digital çıkışları yüksek hızlı çıkış olarak kullanılır. 3,4,5 nolu digital çıkışlar ise yönlendirme için kullanılır. Yüksek hızlı uygulamalarda muhakkak 470 ohmluk direnç kullanılır. [attachment=1923] [attachment=1924] [attachment=1925] [attachment=1926] [attachment=1927]
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls,
Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, iComponent, iVCLComponent, iCustomComponent, iSwitchLever,
iLed, iLedRound, iSwitchToggle, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdModBusClient, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
iSwitchLever1: TiSwitchLever;
Label1: TLabel;
iLedRound1: TiLedRound;
GroupBox1: TGroupBox;
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Button2: TButton;
Edit3: TEdit;
Button3: TButton;
GroupBox2: TGroupBox;
Edit4: TEdit;
Button4: TButton;
Edit5: TEdit;
Button5: TButton;
Edit6: TEdit;
Button6: TButton;
iSwitchToggle1: TiSwitchToggle;
Label2: TLabel;
iSwitchToggle2: TiSwitchToggle;
Label3: TLabel;
IdModBusClient1: TIdModBusClient;
Label6: TLabel;
iLedRound2: TiLedRound;
Label9: TLabel;
Edit7: TEdit;
Timer1: TTimer;
CheckBox1: TCheckBox;
procedure iSwitchLever1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure iSwitchToggle2Change(Sender: TObject);
procedure iSwitchToggle1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// PULSE_HIZLANMA için ModBus : 40007 - 40000 = 7
IdModBusClient1.WriteRegister(7, StrToInt(Edit1.Text));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// PULSE_HEDEF için ModBus : 40006 - 40000 = 6
IdModBusClient1.WriteRegister(6, StrToInt(Edit2.Text));
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// PULSE_YAVASLAMA için ModBus : 40005 - 40000 = 5
IdModBusClient1.WriteRegister(5, StrToInt(Edit3.Text));
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// FREKANS_HIZLANMA için ModBus : 40004 - 40000 = 4
IdModBusClient1.WriteRegister(4, StrToInt(Edit4.Text));
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// FREKANS_HEDEF için ModBus : 40003 - 40000 = 3
IdModBusClient1.WriteRegister(3, StrToInt(Edit5.Text));
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
// FREKANS_YAVASLAMA için ModBus : 40002 - 40000 = 2
IdModBusClient1.WriteRegister(2, StrToInt(Edit6.Text));
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Timer1.Enabled := CheckBox1.Checked;
end;
procedure TForm1.iSwitchLever1Change(Sender: TObject);
begin
iLedRound1.Active := iSwitchLever1.Active;
IdModBusClient1.Host := Edit7.Text;
if iSwitchLever1.Active then
// Motor çalıştırma için ModBus = 5
IdModBusClient1.WriteCoil(5, True) else
IdModBusClient1.WriteCoil(5, False);
end;
procedure TForm1.iSwitchToggle1Change(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
if iSwitchToggle1.Active then
// Motor yönü için ModBus = 6
IdModBusClient1.WriteCoil(6, True) else
IdModBusClient1.WriteCoil(6, False);
end;
procedure TForm1.iSwitchToggle2Change(Sender: TObject);
begin
IdModBusClient1.Host := Edit7.Text;
if iSwitchToggle2.Active then
// Motor enable için ModBus = 1
IdModBusClient1.WriteCoil(1, True) else
IdModBusClient1.WriteCoil(1, False);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var MESGUL_DURUM: Boolean;
ANLIK_PULSE, TOPLAM_PULSE: word;
begin
IdModBusClient1.Host := Edit7.Text;
// Motor meşgul için ModBus = 7
IdModBusClient1.ReadCoil(7, MESGUL_DURUM);
if BoolToStr(MESGUL_DURUM) = '-1' then
iLedRound2.Active := True else iLedRound2.Active := False;
end;
end.
[attachment=1928] Kolay gelsin.
PLC ile mesafeli artımsal (incremental) motor kontrol - emozgun - 11-12-2021 Elinize sağlık @guverdik hocam teşekkürler PLC ile mesafeli artımsal (incremental) motor kontrol - enigma - 11-12-2021 Hocam selamlar. Benim bir sorum olacak. Bende uzun yıllardır endüstriyel uygulamalar üzerine yazılım yapıyorum. Pek çok PLC, Akıllı kamera vb. haberleşme yaptım. Önümüzdeki günlerde bir proje için bir panel PC ile çalışacağım. Bu projede PLC kullanmak istemiyorum. Panel PC'nin dokümanında GPIO denene (Genel Amaçlı Giriş Çıkış) portu olduğu yazıyor. (Henüz ürün elime geçmedi) Bunu kullanarak bir kontakt/çıkış vermem gerekecek. Delphi ile nasıl yapıldığı hakkında bir tecrübeniz var mı acaba ? Cvp: PLC ile mesafeli artımsal (incremental) motor kontrol - guverdik - 12-12-2021 (11-12-2021, Saat: 15:02)enigma Adlı Kullanıcıdan Alıntı: Hocam selamlar. Elbette çok tecrübelerimiz var. Okul ve işletmeler bazında. https://www.youtube.com/playlist?list=PLiJNPzG6vygxQOBWxd71CD2teaLvUp-qL bu listeye bir göz atın. Farklı bir şeyler de isterseniz her türlü çözeriz. (11-12-2021, Saat: 06:37)emozgun Adlı Kullanıcıdan Alıntı: Elinize sağlık @guverdik hocam teşekkürler Teşekkür ederim @emozgun (11-12-2021, Saat: 15:02)enigma Adlı Kullanıcıdan Alıntı: Hocam selamlar. Ayrıca bu video ya da bi gözatın: PLC ile mesafeli artımsal (incremental) motor kontrol - sadikacar60 - 13-12-2021 hocam paylaşımlarınız çok güzel. bende bir soru sorayım. delphi7 ide kullanıyorum pascal scada kompenantları ile plc ile haberleşiyorum. makinada arıza olup plc yi resetlediğimde bazen prg kitleniyor. haberleşme kodlarımın hepsinde try except blogunu kullanıyorum hata olursa prg kitlemesin diye. sizin bu pascal scada kompenantları ile tecrübeniz oldumu. saygılarımla Cvp: PLC ile mesafeli artımsal (incremental) motor kontrol - guverdik - 13-12-2021 (13-12-2021, Saat: 07:39)sadikacar60 Adlı Kullanıcıdan Alıntı: hocam paylaşımlarınız çok güzel. bende bir soru sorayım. delphi7 ide kullanıyorum pascal scada kompenantları ile plc ile haberleşiyorum. makinada arıza olup plc yi resetlediğimde bazen prg kitleniyor. haberleşme kodlarımın hepsinde try except blogunu kullanıyorum hata olursa prg kitlemesin diye. sizin bu pascal scada kompenantları ile tecrübeniz oldumu. Evet pascal scada yı biliyorum Güney Amerikada ki bir ülkede yazıldı zannedersem. İncelemelerim neticesinde sadece siemens için yazıldığı için pek sıcak bakmamıştım. Size tavsiyem ModBus protokolleri ile ilerlemeniz. Siemens PLC içinde ModBus protokollerini AKTİF ettirin ve DelphiModBusTCP bileşenleri üzerinden gidin. hem kodlaması basit hem de her türlü ModBus kullanan tüm cihazlar ile haberleşebiliyor. PLC ile mesafeli artımsal (incremental) motor kontrol - sadikacar60 - 13-12-2021 DelphiModBusTCP bileşenlerini rs485 rtu haberleşmede kullanmıştım. sonra tcp haberleşmede bu paket denk geldi açıkcası kullanımı çok kolay gmt ile kullanıyorum alıştım. çok bilen ve kullanan yok detaylı öğrenmek istesemde öğrenemedim. şimdilik böyle devam ediyorum hocam. saygılarımla teşekkürler. Cvp: PLC ile mesafeli artımsal (incremental) motor kontrol - guverdik - 13-12-2021 (13-12-2021, Saat: 20:07)sadikacar60 Adlı Kullanıcıdan Alıntı: DelphiModBusTCP bileşenlerini rs485 rtu haberleşmede kullanmıştım. sonra tcp haberleşmede bu paket denk geldi açıkcası kullanımı çok kolay gmt ile kullanıyorum alıştım. çok bilen ve kullanan yok detaylı öğrenmek istesemde öğrenemedim. şimdilik böyle devam ediyorum hocam. Kolay gelsin kardeşim, bazen alışkanlıklar da iyidir.
PLC ile mesafeli artımsal (incremental) motor kontrol - coarikan - 11-12-2022 Değerli hocam, örnekleriniz ve açıklamalarınız gerçekten çok faydalı.. Benim de tam çözemediğim daha doğrusu arada saçmaladığı için çözüm aradığım bir konu var.. Onunla ilgili olarak bir fikir verebilirseniz çok memnun olurum.. GMT PLC ile bir makina kontrol işlevi yapan yazılım yapıyorum. Önceden Delphi BDS2006 ile yazıyorduk ama sonradan yeni sürümler satınalınınca (XE8 ve Alexandra) bunlara geçirdim.. Fakat sizin de kullandığınız bu IdModbusClient komponentleri XE11-Alexandria'da yok.. O nedenle de araştırınca ModLink diye bir komponent buldum (ücretli ama şu an geliştirme için trial vermişler, onunla deniyorum).. Ücretsiz olanlar da bu yeni sürümde çalışmadı.. Neyse sorunum şu.. PLC'e PS232 ve RS485 ile RTU metodu ile bağlanıyorum.. 115200/8/N/1 şeklinde.. PLC'den kontrol edilen yaklaık 200'e yakın adres var ve bunların yaklaşık 100'ü Coil/Bit türünde, diğerleri de Register/Value türünde.. Fakat sizin örneklerdeki gibi bunlar ard-arda gelen adreslerde değiller.. O yüzden de her birini ayrı Read'ler ile okutmam gerekiyor.. Belki 5-10 tanesini birleştirip bir seferde okutabiliyorum ama 3-5 tane için çok farketmiyor.. Adresler çok dağınık seçilmiş çünkü.. Sorun da burada çıkıyor.. Programın ilk açılışında, 200e yakın adresi tek tek read-read yapınca, bunları bir Array matrise atayım dedim.. Bu arada bu verilerin bazıları makine tarafından anlık değişen değerlere sahip, hepsi değil ama belki 30-40 tanesi de anlık okunup ekrrana veri basması gerekiyor.. Veriler bazen ilk okumada normal geliyor ama genellikle ikinci kez ya da üçüncü kez okutursam tam olarak alınabiliyor.. Bunun için de bir Timer koydum, okunacak değerleri alt alta bir procedure içine yazdım ve o şekilde arka arkaya okutuyorum.. Sanırım sürekli arka arkaya read-read yapınca bir şekilde okuma kesiliyor ve tüm değerler gelmiyor.. Bazen çok güzel hepsi geliyor bazen bir kısmı geliyor bir kısmı gelmiyor.. Bu okuma işlemlerini yaparken nasıl bir işlem yaparsam çok fazla veriyi bu şekilde sorunsuz okutabilirim? Bana önerebileceğiniz bir yol var mıdır acaba? Teşekkürler.. Cvp: PLC ile mesafeli artımsal (incremental) motor kontrol - guverdik - 11-12-2022 (11-12-2022, Saat: 20:35)coarikan Adlı Kullanıcıdan Alıntı: Değerli hocam, örnekleriniz ve açıklamalarınız gerçekten çok faydalı.. Öncelikle güzel yorumlarınızi çin teşekkürler. Özel mesajdan haberleşelim. Uygun çözüm bulunca forumda paylaşalım |