Yorumları: 1.044
Konuları: 149
Kayıt Tarihi: 14-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.093 Uzman
(18-08-2020, Saat: 12:10)QuAdR Adlı Kullanıcıdan Alıntı: @pro_imaj
Dikkat ederseniz arkadaşın belirttiği yöntemlerde ( Modbus TCP/IP kompenenti, Siemens Profinet için dll dosyaları, Beckhoff için ADS pas. veya OPC ) hazır olan yapılar üzerine geliştirme yapılmış. Burada yapılan işlemler zaten birileri tarafından geliştirilmiş sistemler üzerinden haberleşme yapmak veya sorgu göndermek. Nasıl haberleşme yapıldığını , protokol yapısını, verimliliği hakkında herhangi bir bilgi edinmeden sadece 3. parti bileşenlerle işlem yapmaktır. Profinet i ele alırsak ISO-TSAP standartı haberleşme kullanır. 102 nolu port ile haberleşir. Sizin dediğiniz gibi "Yani firmalar verdikleri verileri sadece kendi geliştirdikleri sistemlere farklı algoritmalar ile gönderiyorlar." siemens haberleşme detaylarını paylaşmaz ama bu sizin bunu çözemeyeceğiniz anlamına gelmez. Burada biraz tersine mühendislik devreye giriyor. Network tabanlı veya seri bir haberleşme yapan, veya aracı bir programla haberleşen herhangi bir sistemde giden gelen paketleri yakalayıp inceleme ile nasıl haberleştiğini çözebilirsiniz. Örnek kod olarak aşağıda profinet protolünü okuma isteği yapma ve yazma isteği yapma procedure lerini bulabilirsiniz.
FirstStartCommand: array[0..21] of byte = ($03,$00,$00,$16,$11,$E0,$00,$00,$00,$01,$00,$C1,$02,$01,$00,$C2,
$02,$01,$01,$C0,$01,$09);
StartCommand: array[0..24] of byte = ($03, $00, $00, $19, $02, $f0, $80, $32, $01, $00, $00, $00, $00, $00,
$08, $00, $00, $f0, $00, $00, $01, $00, $01, $01, $e0);
RCommand: array[1..31] of byte = ($03, $00, $00, $1f, $02, $f0, $80, $32, $01, $00, $00, $04, $00, $00, $0e, $00, $00,
$04, $01, $12, $0a, $10,$04,$00,$02,$00,$01,$84,$00,$00,$18);
// Area ID
S7AreaI = $81;
S7AreaQ = $82;
S7AreaM = $83;
S7AreaDB = $84;
S7AreaCT = $1C;
S7AreaTM = $1D;
// Word Length
S7WLBit = $01;
S7WLByte = $02;
S7WLChar = $03;
S7WLWord = $04;
S7WLInt = $05;
S7WLDWord = $06;
S7WLDInt = $07;
S7WLReal = $08;
S7WLDate = $09;
S7WLTOD = $0A;
S7WLTime = $0B;
S7WLS5Time = $0C;
S7WLDT = $0F;
S7WLCounter = $1C;
S7WLTimer = $1D;
// Block type
Block_OB = $38;
Block_DB = $41;
Block_SDB = $42;
Block_FC = $43;
Block_SFC = $44;
Block_FB = $45;
Block_SFB = $46;
// Sub Block Type
SubBlk_OB = $08;
SubBlk_DB = $0A;
SubBlk_SDB = $0B;
SubBlk_FC = $0C;
SubBlk_SFC = $0D;
SubBlk_FB = $0E;
SubBlk_SFB = $0F;
// Block languages
BlockLangAWL = $01;
BlockLangKOP = $02;
BlockLangFUP = $03;
BlockLangSCL = $04;
BlockLangDB = $05;
BlockLangGRAPH = $06;
//Error Code
NoError = 0; // Success
WrongCPU_Type = 1;
ConnectionError = 2;
//IPAdressNotAvailable
WrongVarFormat = 10;
WrongNumberReceivedBytes = 11;
SendData = 20;
ReadData = 30;
WriteData = 50;
InvalidAdress = 5;
function TProfinetProtocol.MakeReadRequest(mType: Byte; ReadType:string; BaslangicAdresi, DbNo,
Size: integer): integer;
var
HexStr: string;
i: integer;
begin
// Count := 2;
i := 0;
Result := 0;
//RCommand[0] := $03; RCommand[1] := $00; RCommand[2] := $00; RCommand[3] := $1f;
//RCommand[4] := $02; RCommand[5] := $f0; RCommand[6] := $80;
// RCommand[7] := $32; RCommand[8] := $01; RCommand[9] := $00; RCommand[7] := $00;
HexStr := IntToHex(Count,4);
//gönderilen istek sayısı
RCommand[12] := HexToInt(copy(HexStr,1,2)); ; RCommand[13] := HexToInt(copy(HexStr,3,2));
// RCommand[12] := $00; RCommand[13] := $0e;
// RCommand[14] := $00; RCommand[15] := $00;
// RCommand[16] := $04; //RCommand[17] := $01;
// RCommand[18] := $12; RCommand[19] := $0a;
//RCommand[20] := $10;
//Taşıma uzunluğu word - byte - bit
// RCommand[23] := $04;
HexStr := IntToHex(Size ,4);
//Okunacak data sayısı
RCommand[24] := HexToInt(copy(HexStr,1,2)); ; RCommand[25] := HexToInt(copy(HexStr,3,2));
//Blok numarası
HexStr := IntToHex(DbNo ,4);
RCommand[26] := HexToInt(copy(HexStr,1,2)); ; RCommand[27] := HexToInt(copy(HexStr,3,2));
RCommand[28] := mType;
if ReadType = 'W' then
begin
if mType = S7AreaDB then
begin
i := BaslangicAdresi * 8;
i := i * 2;
Result := 2 * Size;
end;
if mType = S7AreaM then
begin
i := BaslangicAdresi;
Result := Size;
end;
RCommand[23] := S7WLWord;
end;
if ReadType = 'O' then
begin
i := BaslangicAdresi * 8;
Result := 2 * Size;
RCommand[23] := S7WLByte;
end;
if ReadType = 'B' then
begin
i := BaslangicAdresi;
Result := Size;
RCommand[23] := S7WLBit;
end;
HexStr := IntToHex(i,6);
RCommand[29] := HexToInt(copy(HexStr,1,2)); RCommand[30] := HexToInt(copy(HexStr,3,2)); RCommand[31] := HexToInt(copy(HexStr,5,2));
if Count = 32000 then Count := 0
else Count := Count + 1;
end;
procedure TProfinetProtocol.MakeWriteRequest(mType: Byte; Values,
ReadType: string; BaslangicAdresi, DbNo, Size: integer);
var
DataLength: integer;
HexStr: string;
Result,i : integer;
ValuesList: TStringList;
PaketUzunlugu: integer;
begin
ValuesList := TStringList.Create;
ValuesList.CommaText := Values;
if ReadType = 'W' then
PaketUzunlugu := 35 + (Size * 2);
if ReadType = 'O' then
PaketUzunlugu := 35 + Size;
if ReadType = 'B' then
PaketUzunlugu := 35 + Size;
SetLength(WriteArray, PaketUzunlugu);
WriteArray[0] := $03; WriteArray[1] := $00;
HexStr := IntToHex(PaketUzunlugu,4); //paket uzunluğu
WriteArray[2] := HexToInt(copy(HexStr,1,2)); WriteArray[3] := HexToInt(copy(HexStr,3,2));
WriteArray[4] := $02; WriteArray[5] := $f0; WriteArray[6] := $80;
WriteArray[7] := $32; WriteArray[8] := $01; WriteArray[9] := $00; WriteArray[10] := $00;
HexStr := IntToHex(Count,4);
//gönderilen istek sayısı
WriteArray[11] := HexToInt(copy(HexStr,1,2)); WriteArray[12] := HexToInt(copy(HexStr,3,2));
WriteArray[13] := $00; WriteArray[14] := $0e;
//Veri uzunluğu + sabit 4 byte parametre
if ReadType = 'W' then
begin
DataLength := 4 + (2 * Size);
HexStr := IntToHex(DataLength,4);
WriteArray[15] := HexToInt(copy(HexStr,1,2)); WriteArray[16] := HexToInt(copy(HexStr,3,2));
end;
if ReadType = 'O' then
begin
DataLength := 4 + Size;
HexStr := IntToHex(DataLength,4);
WriteArray[15] := HexToInt(copy(HexStr,1,2)); WriteArray[16] := HexToInt(copy(HexStr,3,2));
end;
if ReadType = 'B' then
begin
DataLength := 4 + Size;
HexStr := IntToHex(DataLength,4);
WriteArray[15] := HexToInt(copy(HexStr,1,2)); WriteArray[16] := HexToInt(copy(HexStr,3,2));
end;
WriteArray[17] := $05; WriteArray[18] := $01;
WriteArray[19] := $12; WriteArray[20] := $0a;
WriteArray[21] := $10;
HexStr := IntToHex(Size ,4);
//Okunacak data sayısı
WriteArray[23] := HexToInt(copy(HexStr,1,2)); WriteArray[24] := HexToInt(copy(HexStr,3,2));
//Blok numarası
HexStr := IntToHex(DbNo ,4);
WriteArray[25] := HexToInt(copy(HexStr,1,2)); WriteArray[26] := HexToInt(copy(HexStr,3,2));
WriteArray[27] := mType;
if ReadType = 'W' then
begin
if mType = S7AreaDB then
begin
i := BaslangicAdresi * 8;
i := i * 2;
Result := 2 * Size;
Result := 8 * Result;
end;
if mType = S7AreaM then
begin
i := BaslangicAdresi;
Result := Size;
end;
WriteArray[22] := S7WLWord;
end;
if ReadType = 'O' then
begin
i := BaslangicAdresi * 8;
Result := Size * 8;
WriteArray[22] := S7WLByte;
end;
if ReadType = 'B' then
begin
i := BaslangicAdresi;
Result := Size;
WriteArray[22] := S7WLBit;
end;
HexStr := IntToHex(i,6);
WriteArray[28] := HexToInt(copy(HexStr,1,2)); WriteArray[29] := HexToInt(copy(HexStr,3,2)); WriteArray[30] := HexToInt(copy(HexStr,5,2));
WriteArray[31] := $00;
//Veri tipi word byte...
WriteArray[32] := S7WLWord; //WriteArray[22];
if ReadType = 'B' then WriteArray[32] := 3;
HexStr := IntToHex(Result, 4);
WriteArray[33] := HexToInt(copy(HexStr,1,2)); WriteArray[34] := HexToInt(copy(HexStr,3,2));
for i := 35 to length(WriteArray) - 1 do
begin
WriteArray[i] := HexToInt(ValuesList[i-35]);
end;
HexStr := '';
for i := 0 to Length(WriteArray) - 1 do
begin
HexStr := HexStr + IntToHex(WriteArray[i],2);
end;
//ShowMessage(HexStr);
if Count = 32000 then Count := 0
else Count := Count + 1;
end;
Açıklamalarınız için teşekkürler, kafamda eksik kalan yer tamamlanmış oldu, sanırım zaten işin en uğraştırıcı ve zaman alıcı kısmı burası oluşturuyor, buda ayrı bir uzmanlık konusu.
Teşekkürler.
Yorumları: 4
Konuları: 1
Kayıt Tarihi: 13-08-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 77 Başlangıç
(18-08-2020, Saat: 10:43)pro_imaj Adlı Kullanıcıdan Alıntı: (17-08-2020, Saat: 23:01)Milenyumotomasyon Adlı Kullanıcıdan Alıntı: Öncelikle bilgileriniz için teşekkürler, bu konuları benim gibi bir arkadaşında aynı yöntemle çözdüğünü bilmek beni mutlu etmiştir. Scada sistemleri ağırlıklı olarak proses (Yem, Un, Arıtma, Kimya, Elektrik Santralleri vb) uygulamalarında kullanılır ve sistemi yöneten genellikle üst seviye tek bir PLC veya Endüstriyel PC dir. Bu nedenle farklı farklı Plc lerden veri okuma yazma işlemi yapmak zorunda kalınmaz. Eğer farklı PLC lerle bu işlem yapılacaksa dediğiniz gibi OPC
bu iş için uygundur. Fabrikalarda makine parkı ve çeşitliliği çok olduğu için genelde makine kontrolörüne fazla dokunulmaz, otomasyon sistemine ufak müdahale ile sinyal alınır ve makine-operatör performansları ölçülür. Ayrıca Delphi mutlaka Scada olarak kullanılacak diyede bir kural yok. Sadece bir makina PLC kontolörü ve Delphi ile yazdığınız arayüz programı ile makineye veri girişi ve raporlama yaptırabilirsiniz. Örneğin lastikciye gittiniz, arabanıza balans ayarı yaptıracaksınız, tekeri bağladığı makine bir PLC ve PC den oluşur. PLC tekerleği çevirir ve balansın olduğu yönü açısal olarak verir, bu değerleride PC ekranında göstermek Delphi ile yazacağınız programa kalır.
Teşekkürler.
Öncelikle şunu belirtmekte fayda var, her fabrikayı ayrı değerlendirmek gerekir. Bir yem fabrikası 3000-4000 sinyalin işlendiği bütün makinelerin genelde tek bir PLC veya endüstriyel PC
tarafından kontrol edildiği komple bir yapıdır. Arıtma tesisleri, un fabrikaları, kimya tesisleride aynıdır. Üretim çeşitliğinin çok olduğu fabriklarda durum biraz faklıdır. Makina parkı ve çeşidi çok olduğu için standart bir haberleşme yapılamaz. Ancak makine kontrolörleri OPC yi destekliyorsa, buda makine üreticisinin insiyatifine kalmış genelde uygulamazlar zaten. Bunun yerine teknik olarak otomasyon sistemine ufak müdahelerle bu işler halledilir. Delphi mutlaka Scada olarak kullanılacak diyede bir kaide yoktur. Tek bir makine arayüzünüde yazabilirsiniz. Makineden veri çekip rapor ve grafik oluşturmak, verileri analiz etmek, bu tamamen sizin yazacağınız programa kalıyor. Örneğin bizim daha önce yapmış olduğumuz teleskop gözlem evinde, teleskop hedef yıldız takip ederken dünyanın dönüşünden dolayı sürekli dönmek zorundadır, teleskop dönünce bizim yaptığımız kontrolöre bağlı kubbeninde dönmesi gerekiyordu. Bizde Delphi ile ethernet üzerinde teleskobun pozisyonu okuyup kontrölere gönderdik ve senkron olarak dönmelerini sağladık.
Cevaplar için teşekkürler. Lastikçi örneğinizden yola çıkarsak, İlgili PLC bize bilgi vermeyeceğine göre PC tarafında da kendi iletişimi kurup haberleşme sağladığına göre Delphi ile yazacağımız program nereden nasıl beslenecek, zaten projelerdeki sorun bu. Yani firmalar verdikleri verileri sadece kendi geliştirdikleri sistemlere farklı algoritmalar ile gönderiyorlar.
Benim aklıma görüntü işleme ile PC'deki kendi yazılımlarının ekran görüntüsünden verileri sabit alanlardan kamera ile okumak geliyor, buda çok sıkıntılı bir bir yöntem (Ekranda hep aynı yazılım açık kalmayabiliyor.)
Teşekkürler.
Otomasyon tarafında Plc programlarınıda yazan birisi olarak, plc kodlarınıda kendim yazdığım icin hangi adresde hangi datalar var biliyorum. Başkaları tarafindan yazilmış plc programında şifre yoksa programı çekerek veri adreslerini görebilirsin. Bu konuda biraz plc bilgisine ihtiyacınız olacak.
Yorumları: 1.044
Konuları: 149
Kayıt Tarihi: 14-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.093 Uzman
(18-08-2020, Saat: 14:35)Milenyumotomasyon Adlı Kullanıcıdan Alıntı: (18-08-2020, Saat: 10:43)pro_imaj Adlı Kullanıcıdan Alıntı: Cevaplar için teşekkürler. Lastikçi örneğinizden yola çıkarsak, İlgili PLC bize bilgi vermeyeceğine göre PC tarafında da kendi iletişimi kurup haberleşme sağladığına göre Delphi ile yazacağımız program nereden nasıl beslenecek, zaten projelerdeki sorun bu. Yani firmalar verdikleri verileri sadece kendi geliştirdikleri sistemlere farklı algoritmalar ile gönderiyorlar.
Benim aklıma görüntü işleme ile PC'deki kendi yazılımlarının ekran görüntüsünden verileri sabit alanlardan kamera ile okumak geliyor, buda çok sıkıntılı bir bir yöntem (Ekranda hep aynı yazılım açık kalmayabiliyor.)
Teşekkürler.
Otomasyon tarafında Plc programlarınıda yazan birisi olarak, plc kodlarınıda kendim yazdığım icin hangi adresde hangi datalar var biliyorum. Başkaları tarafindan yazilmış plc programında şifre yoksa programı çekerek veri adreslerini görebilirsin. Bu konuda biraz plc bilgisine ihtiyacınız olacak.
Cevap için teşekkürler.
İyi çalışmalar.
Yorumları: 701
Konuları: 74
Kayıt Tarihi: 20-12-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.626 Programcı
Selamlar,
Konu ile ilgili bir soruna denk geldiğim için buradan devam ettirmek istedim. OPC üzerinden haberleşme ile gerekli olan bilgileri okumada bir problem yaşanmayabiliyor ancak, oluşan alarmları direk PLC üzerinden TCPIP ile okumak gerekirse, bununla ilgili bir çalışma yapan, örnekleme verebilecek arkadaşlarımız varsa, yardımlarını rica ederim.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Yorumları: 151
Konuları: 1
Kayıt Tarihi: 31-08-2016
Rep Puanı: 5.549 Üstad
Merhabalar,
Özel mesaj ile sormuşsunuz buradan da cevabı verelim ki ihtiyacı olanlara fikir olsun.
Soruyu ve cevabı direk yapıştırıyorum.
Alıntı:wiseman Adlı Kullanıcıdan Alıntı:
Selamlar
PLC içinden oluşan alarmları okumamız mümkün müdür? Bununla ilgili bir çalışma yaptınız mı hiç?
Selamlar,
Alarm oluşması demek kısaca açıklayacak olursak,
Herhangi bir giriş değeri (sayısal veya logic) geldiğinde bir adresi set edip pc tarafından okumak demektir.
Yani sisteminizde bir motor ve bu motorun koruma termiği var diyelim. Motor aşırı akım çekince termik atar termiğin kontağı üzerinden geçen bağlantı plc ye
input sinyalı verir. Sizde bu sinyali gördüğünüzde plc içerisinde set edeceğiniz alarm bitini 1 yaparsınız.
Pc tarafından bu bitin durumunu sorgulamanız durumunda eğer 1 ise alarm oluşmuş demektir 0 ise alarm yok demektir.
İyi çalışmalar dilerim.
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...
Yorumları: 101
Konuları: 7
Kayıt Tarihi: 30-06-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 334 Acemi
(24-09-2020, Saat: 11:39)wiseman Adlı Kullanıcıdan Alıntı: Selamlar,
Konu ile ilgili bir soruna denk geldiğim için buradan devam ettirmek istedim. OPC üzerinden haberleşme ile gerekli olan bilgileri okumada bir problem yaşanmayabiliyor ancak, oluşan alarmları direk PLC üzerinden TCPIP ile okumak gerekirse, bununla ilgili bir çalışma yapan, örnekleme verebilecek arkadaşlarımız varsa, yardımlarını rica ederim.
Her markada hikaye değişir. OPC gibi bir ara katman kullanmak istemiyorsan, bu doğrudan PLC ile konuşmak istediğin anlamına gelir. Bu yüzden doğrudan PLC ile konuşacaksan onun haberleşme dili, metodu neyse onu öğrenmen gerekir. Yani bu sorunun cevabı PLC markasına göre değişir. Aslında OPC'nin de yaptığı tamamen bu, yani OPC PLC markasının kendi konuşma dilini biliyor konuşuyor o veriyi alıyor ve sana sunuyor.
Yorumları: 701
Konuları: 74
Kayıt Tarihi: 20-12-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.626 Programcı
Selamlar
Standart alarmalarda bir sorunum yok PLC den alarmları farklı bir DataBlock a yönlendirerek okuyorum zaten. Ancak benim merak ettiğim şey, PLC nin kendi sistem mesajlarını okuyabilmek. Örneğin: Batarya düşük, Bağlantı koptu, Reduandant sağlanamıyor gibi. Çünkü bu veriler PLC de tutulmadan direkt olarak OPC sunucusuna gönderiliyor.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Yorumları: 151
Konuları: 1
Kayıt Tarihi: 31-08-2016
Rep Puanı: 5.549 Üstad
Her plc nin special registers veya system registers diye registerları vardır.Örnek olarak (Clock pulse, first scan, cpu status, port busy - ready ... vb).
OPC sunucusuna gönderme diye bir şey olmaz. OPC sunucu haberleşme yapısı gereği bu sorguları otomatik sorup işler.
Sizde sorgulayarak alabilirsiniz veya bu register durumlarını başka bir registera yazarak ordan okuma yapabilirsiniz.
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...
Yorumları: 1
Konuları: 0
Kayıt Tarihi: 28-07-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 0 Başlangıç
28-07-2021, Saat: 10:53
(Son Düzenleme: 28-07-2021, Saat: 10:54, Düzenleyen: mehkamaci.)
(16-08-2020, Saat: 09:54)Milenyumotomasyon Adlı Kullanıcıdan Alıntı: SCADA sistemleri geniş alana yayılmış tesislerin tek bir merkezden bilgisayar, cep telefonu veya tablet gibi cihazlarla izlenebildiği bir sistemdir ve temel olarak bir yazılımdır.
Tek bir cihazdan kullanılabileceği gibi ağ bağlantılarıyla birden fazla bilgisayar ve taşınabilir cihazla kontrol ve izleme yapılabilir. Genel olarak endütriyel olduğu için otomasyon sektöründeki
firmaların arayüz hazırlamak için hazır tasarım programları vardır. Örneğin, Siemens WINCC, Schenıder CITECT, Beijer IX Developer gibi. Bunların haricinde sadece scada arayüz tasarım
programlarıda vardır. Lisans ücretleride tag (okunan bir data) başınadır ve 500 Eurolardan başlayıp 10.000 eurolara kadar çıkabilmektedir. Her tesis için yeniden lisans almanız gerekir.
Bunu yapmak istemiyorsanız benim gibi Delphi Lisansı alıp özgürlüğün tadını çıkartırsınız. Scada sistemlerinde scada operesyonu ve sistemi yönetmez, sadece kullanıcı ile sistemi yöneten
birim arasında veri girişi, izleme, veri yedekleme ve raporlama vb. gibi işleri yapar. Sistemi yöneten PLC ve Endüstriyel PC lerdir. Asıl yazılım bunların üzerindedir. Bu PLC ve PC ler
üzerine yazılım; 1: Ladder (Elektrikçi dili) 2: ST (Delphi ve C gibi programlama) 3: FBD (Fonksiyon Blok Diyagramı) 4: Lojik Fonksiyon. vb gibi dillerle yazılır.
Beckhoff PLC yazılımı Visual Studıo ile yapılır ve geneli Endüstriyel Pc dir. Yazılım yaparken 5 yazılım dilini iç içe kullanabilirsiniz. Değişken tanımlamaları ve ST yazılım Delphi kullanıcıları için çok kolay olacaktır.
Fatek PLC Winproladder ile yazılır Ladder dili kullanılır.
Delphi ile bunları haberleştirmek için PLC ler için Delphi Modbus TCP/IP kompenenti, Siemens Profinet için dll dosyapalrı, Beckhoff için ADS pas. dosyası kullanarak veya hazır kompenenti
vardır. Ben ağırlıklı olarak ADS pas. dosyasını kullanarak haberleştiriyorum. Veri okuma yazma işleminde PLC ler için adres, PC ler için hem adres hemde değişken adı kullanılarak okuma yazma
yapılabilmektedir. Uygulama resimleri yüklemeye çalıştım fakat dosya boyutu fazla geldi sanırım. Bu konularda daha fazla yardım isteyen arkadaş olursa bilgim ve vakit olduğunca yardımcı olmaya çalışırım.
Merhaba bu konu hakkında eğitim videoları mevcutmu?
|