Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi ve PLC Haberleşmesi hk.
#1
Merhaba,

PLC üzerindeki verilerin alınıp işlenmesi ile ilgili küçük bir uygulama geliştireceğim. PLC programlamasını başka bir ekip yürütecek. PC uygulamasını biz yapacağız.

  1. Delphi uygulaması üzerinden PLC'ye Trigger veya komut gönderimi nasıl sağlanır?
  2. PLC haberleşme ile ilgili basit komponentler var mı?
  3. Eğer 2. madde yoksa açık kaynaklı kütüphanelerden bu işlemi sağlayanı var mı?
Doğru ifadeler kullanmamış olabilirim. Şimdiden vereceğiniz cevaplar için teşekkür ederim.
{ talk is cheap show me the code. }
Cevapla
#2
Hangi PLC?
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#3
(06-12-2017, Saat: 12:00)QuAdR Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHangi PLC?

Mitsubishi Melsec'te bulunan tüm seriler olabilir. Her PLC için ayrı bir DLL yada erişim yaklaşımı mı olacak?
{ talk is cheap show me the code. }
Cevapla
#4
Bazı global haberleşme standartları (Modbus, canbus, M-Bus....) haricinde her üretici kendine özgü haberleşme standartları geliştirir.
Bunlar seri ve ethernet haberleşmelerinde farklılık gösterebilirler.Bazı üreticiler protokolü açık bir şekilde sunarlar.
Bazıları devlet sırrı gibi saklamaya çalışır.Fark etmez sonuçta yine çözülür.

(06-12-2017, Saat: 10:33)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

PLC üzerindeki verilerin alınıp işlenmesi ile ilgili küçük bir uygulama geliştireceğim. PLC programlamasını başka bir ekip yürütecek. PC uygulamasını biz yapacağız.

  1. Delphi uygulaması üzerinden PLC'ye Trigger veya komut gönderimi nasıl sağlanır?
  2. PLC haberleşme ile ilgili basit komponentler var mı?
  3. Eğer 2. madde yoksa açık kaynaklı kütüphanelerden bu işlemi sağlayanı var mı?
Doğru ifadeler kullanmamış olabilirim. Şimdiden vereceğiniz cevaplar için teşekkür ederim.

Sorularına gelecek olursak;

1. Sorun: Seri haberleşme ile veyada ethernet haberleşmesi ile bağlanabilirsin.
2. Sorun : Hazır bazı kütüphaneler ve OPC serverlar var alıp direk olarak kullanabilirsin.(Örnek Keepware her plc yi destekler).
Delphi tarafı için opc server ile iletişim için kendiniz birşeyler yazabilirsiniz veyada OPC Client Toolkit for Delphi kullanabilirsiniz.

Tabii bu söylediklerim hazıra konma işleri Smile

Kendim yazarım diyorsan.Mitsubishi ve panasonic harici hemen hemen bütün plcler ile çeşitli işlerim olmuştur.
(GE Fanuc, Siemens, Beckhoff, Hitachi, Koyo, Omron, Fatek, Delta, Telemecanique).
Zannediyorum ki Mitsubishi açık protokol sunuyordur.Bakmadığım için emin değilim.
Açık sunmuyorsa bile haberleşen bir program üzeriden işlmeleri çözümlenebilir.
Üreticinin kendi programlama programını debug ederek veya dinleyerekte çözebilirsiniz.
Bunu yazarken haberleşme hızlılığı için belli başlı işlemleri tek seferde yapmaya dikkat etmelisiniz.
Genellikle tekli okuma çoklu okuma, tekli yazma çoklu yazma komutları vardır.
Sorguları önce sıralı hale getirip ardışık olanları çoklu komutlar ile tek seferde işlemelisiniz.
Her birini ayrı ayrı işlemeye kalkarsanız haberleşmeniz çok yavaşlayacaktır.
Yazma işlemi mecburi komut belirtme icra edeceği için çeşitlilik gösterir ama okuma işlemi sürekli aynıdır.
Bu yüzden plc içerisinde okuma yapılacak kısımları ayrı bir bölüme taşıyıp tek defada okursanız yine haberleşmeniz sorunsuz olacaktır.
Daha fazla detaya inmeden başlangıç kararlarınız için yardımcı olumuşumdur umarım.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#5
(06-12-2017, Saat: 12:46)QuAdR Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBazı global haberleşme standartları (Modbus, canbus, M-Bus....) haricinde her üretici kendine özgü haberleşme standartları geliştirir.
Bunlar seri ve ethernet haberleşmelerinde farklılık gösterebilirler.Bazı üreticiler protokolü açık bir şekilde sunarlar.
Bazıları devlet sırrı gibi saklamaya çalışır.Fark etmez sonuçta yine çözülür.

Sorularına gelecek olursak;

1. Sorun:  Seri haberleşme ile veyada ethernet haberleşmesi ile bağlanabilirsin.
2. Sorun : Hazır bazı kütüphaneler ve OPC serverlar var alıp direk olarak kullanabilirsin.(Örnek Keepware her plc yi destekler).
Delphi tarafı için opc server ile iletişim için kendiniz birşeyler yazabilirsiniz veyada OPC Client Toolkit for Delphi kullanabilirsiniz.

Tabii bu söylediklerim hazıra konma işleri Smile

Kendim yazarım diyorsan.Mitsubishi ve panasonic harici hemen hemen bütün plcler ile çeşitli işlerim olmuştur.
(GE Fanuc, Siemens, Beckhoff, Hitachi, Koyo, Omron, Fatek, Delta, Telemecanique).
Zannediyorum ki Mitsubishi açık protokol sunuyordur.Bakmadığım için emin değilim.
Açık sunmuyorsa bile haberleşen bir program üzeriden işlmeleri çözümlenebilir.
Üreticinin kendi programlama programını debug ederek veya dinleyerekte çözebilirsiniz.
Bunu yazarken haberleşme hızlılığı için belli başlı işlemleri tek seferde yapmaya dikkat etmelisiniz.
Genellikle tekli okuma çoklu okuma, tekli yazma çoklu yazma komutları vardır.
Sorguları önce sıralı hale getirip ardışık olanları çoklu komutlar ile tek seferde işlemelisiniz.
Her birini ayrı ayrı işlemeye kalkarsanız haberleşmeniz çok yavaşlayacaktır.
Yazma işlemi mecburi komut belirtme icra edeceği için çeşitlilik gösterir ama okuma işlemi sürekli aynıdır.
Bu yüzden plc içerisinde okuma yapılacak kısımları ayrı bir bölüme taşıyıp tek defada okursanız yine haberleşmeniz sorunsuz olacaktır.
Daha fazla detaya inmeden başlangıç kararlarınız için yardımcı olumuşumdur umarım.

Seri haberleşme olacaksa hali hazırda yazılmış olan sınıfları küçük revizelerle ayağa kaldırabilirim. Mitsubishi ve Eaton marka PLC'ler kullanılacak proje kapsamında. Tecrübelerinize dayanarak; Açık iletişim protokolü sunan tüm PLC'ler için çalışma prensibi ve erişimler standart mıdır hocam? Yoksa her biri ayrı bir arabirim üzerinden mi haberleşir?

Üreticinin kendi programlama programı üzerinde PLC testlerini Ladder ve SFC ile sağladım. Debug işlemleri de oldukça başarılı geçti. Burada ise yapacağım şey çeşitli kontrolleri ve işlemleri sağlayıp raporlama olarak oluşturup kullanıcıya sunmak olacak. Yani aşamalı olarak 10-100 farklı varyasyon üzerinde test işlemleri sağlanacak ve toplanan bu verileri alıp veritabanında muhafaza ederek nihai bir özet raporu sunmamız gerekecek.

Sorguları sıralı hale getirip ardışık olanları tek seferde işleme işini PC to PLC mi yoksa PLC to PC tarafında mı uygulamalıyız?
PLC üzerinde bu verileri ne kadar süre ile muhafaza edebiliriz? (Veya muhafaza edebilir miyiz?)
Run-time okuma işlemleri için performans kaybı mı yaşanır? (Ortalama 1~10 saniyede toplanacak veri muhafaza edilecek. Aynı işlem farklı kombinasyon ve uyarlamalarla en az 10 kez daha gerçekleşecek. Bu toplanan verileri bir üstte sorduğum soru ile birleştirerek; muhafaza edip tüm veriler tamamsa mı PC haberleşmesine geçmek gerekir? Yoksa 500 interval içinde ne var ne yok sürekli çekip durmak mı çok yavaşlatır? Yani her 10 saniyede 1 kez veri toplamak yeterli bir ölçü müdür?)

Sorularım saçma gelebilir. Kusura bakmayın. PLC ile ilk proje deneyimi olacak.
{ talk is cheap show me the code. }
Cevapla
#6
bu işin erbabı Mr.Boian. Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol .. bence takıldığınız yerlerde danışın.. cevap veriyor hemen
WWW
Cevapla
#7
Açık iletişimden kastım üreticinin protokol detaylarını vermesidir.Her üretici kendi standartını belirler yada global olanı destekler.
Mitsubishiye baktım açık kaynak sunuyor.
Linkten indirebilirsiniz.
_https://www.plcsystems.ru/catalog/Mitsubishi/doc/QJ71C24_QJ71E71_Reference.pdf

Yapacağınız işlem çok fazla haberleşme yükü gerektirmiyor sanırım.Sadece belirli verileri okuyup kaydetmek içinse vede
ileride profesyonel kullanım amaçlı düşünmüyorsanız basit bir şekilde belli hafıza bölgeleri için hazır sorgu oluşturup kullanabilirsiniz.

Sorguları sıralı hale getirip işleme pc tarafında yapılan bir işlem.
Okuma kısmı içinde yukarıdaki yorumda belirttiğim gibi (plc içinde taşıma işlemi) okunacak hafıza bölgelerini (bitleri veya wordleri..)
sıralı bir şekilde bir hafıza bloğuna yazmak okuma işlemi için elzem önem taşır.Tek seferde bütün veriyi pc tarafına almış olursunuz.
Örnek üzerinden anlatacak olursak.
Bitler
M0,M15,M16,M20,M25,M55,M64,M125...
Wordler
R0005, R0006,G0500...

Toplanacak adres başlangıcı
R0500

Bu durumda R0500 e sıralı taşıma yaptığınızda.Bu adresten başlayarak 5 word okuma yaparsanız tek pakette bütün veriyi almış olursunuz.
Tabi bu okuduğunuzu pc tarafında tekrardan bit lerine bytelarına veya wordlerine ayırmanız lazım.

(06-12-2017, Saat: 13:04)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlPLC üzerinde bu verileri ne kadar süre ile muhafaza edebiliriz? (Veya muhafaza edebilir miyiz?)

Kalıcı hafıza bloğuna yazarsanız plc pili bitene kadar veya plc silinip tekrar yüklenene kadar veriler hafızada tutulur.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#8
Merhaba Abdullah bey
Kullananacağınız plc marka modeline  ve haberleşme tipinize göre değişiklikler olacaktır.  Yukarıda çeşitli alternatiflerden bahsedilmiş.
Çok önceden omron plc ler ile seriport üzerinden kendi protokolü ile çalışan bir uygulama yapmıştım. PLC start stop komutları ve belirli DataMemory alanlarını okuma yazma yapan uygulama.   Doğrudan erişim yöntemini seçerseniz plcnin haberleşme dokümanı baş ucu kitabınız olmak zorunda.Takıldığınız noktaların cevapları genelde sayfa içerisinde (*) ile işaretlenen ve en altta küçük puntolarla yazılmış açıklamalar olacaktır Smile

Örnek olması açısından arşivden çıkardığım ve sadeleştirmek için ayıkladığım kod parçası aşağıdadır.  Yanlış hatırlamıyorsam PLC olarak Omron CP1M CPU 11 kullanmıştık.


//--
Function TfrmMain.ConvertStringToChar(InputString: String; CharPosition: Integer): Char;
Begin
 Result := InputString[CharPosition];
End;
//--
function TfrmMain.HexToInt(const Value: String): Integer;
begin
  Result := StrToInt('$' + Value);
end;
//-
function TfrmMain.FCS(data:string):string;
var a:integer;
   ab,ub:byte;
   temp:byte;
begin
  ab:=0;
  ub:=0;

   temp:=ord(convertstringtochar(data,1));
   for a:=2 to length(data) do
       temp:=temp xor ord(convertstringtochar(data,a));

   ab:=temp and $0F;
   ub:=temp and $F0;
   ub:= ub  shr 4;
   result :=inttohex(ub,1)+inttohex(ab,1);

end;
//----

function  TfrmMain.DM_Yaz(adres:string;data:string):boolean;
var senddata:string;
   a:integer;
   s:string;
begin


   IncomingRichEdit.Lines.Clear;
   senddata:='@00WD'+adres+data;
   s :=FCS(senddata);
   senddata:=senddata+s +'*';
    for a:=1 to length(senddata) do
        comport.SendChar(convertstringtochar(senddata,a));

        comport.SendChar(chr(13));

      // PLCde gelen cevap;
      sleep(200); // cevap gelmesi için bekle


      application.ProcessMessages;
      if IncomingRichEdit.Lines.Count>0 then
        begin //cevap geldi
          s:=IncomingRichEdit.Lines[0];
          if copy(s,6,2)='00' then
             result:=true
             else
             result:=false;

        end;

end;
//----
function  TfrmMain.DM_Oku(adres:string;paket:string):string;
var senddata:string;
   a:integer;
   s:string;
begin

 IncomingRichEdit.Lines.Clear;
 senddata:='@00RD'+adres+paket;
 s :=FCS(senddata);
 senddata:=senddata+s +'*';
 
 for a:=1 to length(senddata) do
        comport.SendChar(convertstringtochar(senddata,a));

        comport.SendChar(chr(13));

      // PLCde gelen cevap;
      sleep(500); // cevap gelmesi için bekle


      application.ProcessMessages;
      if IncomingRichEdit.Lines.Count>0 then
        begin //cevap geldi
          s:=IncomingRichEdit.Lines[0];
          if copy(s,6,2)='00' then
            begin
              result:=copy(s,8,4*strtoint(paket));

            end
             else
            begin
              result:='hata';

            end;

        end;

end;


// PLC DM ALANINDAN VERİ OKUMA ÖRNEK
procedure TfrmMain.guncelle;
var
  s:string;
  si:integer;

  starget,sstart,sacc,sdcc,stime,szaman:integer;

begin

  s:=dm_oku('0023','0001')+dm_oku('0022','0001');
  starget:= hextoint(s);

  s:=dm_oku('0027','0001')+dm_oku('0026','0001');
  sstart := hextoint(s);
  
  sacc   := hextoint(dm_oku('0020','0001'));
  sdcc   := hextoint(dm_oku('0021','0001'));

  s:=dm_oku('0028','0001');
  stime  := hextoint(s);

end;




// PLC START
procedure TfrmMain.PLCStartExecute(Sender: TObject);
var senddata:string;
   a:integer;
   s:string;

begin


 senddata:='@00SC02';
 s :=FCS(senddata);
 senddata:=senddata+s +'*';
    for a:=1 to length(senddata) do
     begin
        comport.SendChar(convertstringtochar(senddata,a));
     end;
      comport.SendChar(chr(13));

   sleep(200);
     labeltx.Color :=clmaroon;
     application.ProcessMessages ;


end;
// PLC STOP 
procedure TfrmMain.PLCStopExecute(Sender: TObject);
var senddata:string;
   a:integer;
   s:string;
begin
 labeltx.Color :=clred;
 application.ProcessMessages ;

senddata:='@00SC00';
 s :=FCS(senddata);
 senddata:=senddata+s +'*';
    for a:=1 to length(senddata) do
     begin
        comport.SendChar(convertstringtochar(senddata,a));
     end;
      comport.SendChar(chr(13));
   application.ProcessMessages ;
   sleep(200);
   application.ProcessMessages; 

   labeltx.Color :=clmaroon;
   application.ProcessMessages ;



end;
Cevapla
#9
@frmman
Ahh nostalji geldi aklıma Sysmac-Way omronun seri protokolü.2003-2004 seneleriydi sanırım buna tag sistemli opc server benzeri bir şeyler yapmıştım. Bunun ethernet için olanı FINS diye adlandırmışlardı onun ilede uğraşmıştım.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#10
Katkılarınız için çok teşekkür ederim. Bu süreçte yapacağım ek geliştirmeler ve faydalı bilgiler olursa buradan herkese ileteceğim. Yine sormak istediğim bir şey olursa başınızı ağrıtabilirim Shy İyi günler diliyorum.
{ talk is cheap show me the code. }
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile Arduino & Raspberry PI gibi Cihazlarla İletişim Kurmak Fesih ARSLAN 6 2.499 10-07-2017, Saat: 22:28
Son Yorum: Fesih ARSLAN
Video CodeRage XI - Arduino + Delphi Mobile Uygulamalar Fesih ARSLAN 0 1.235 16-11-2016, Saat: 16:51
Son Yorum: Fesih ARSLAN
  Delphi ile PIC Programlama Fesih ARSLAN 6 2.990 11-10-2016, Saat: 15:31
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi