Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Plc, Scada, Operatör Paneller => Konuyu başlatan: robikod - 15 Mart 2021, 16:36:14

Başlık: PLC ve Modbus TCP
Gönderen: robikod - 15 Mart 2021, 16:36:14
Hiç hakim olmadığım bir konuda fikirlerinize ihtiyacım var.
Modbus master olarak kendi yazılımımı kullanıyordum, bunun yerine PLC'ye geçiş yaparsam,
PLC ile modbus TCP üzerinden data alıp gönderme işlevlerinde, yani PLC'yi modbus TCP master olarak kullanırken, slave olan bir cihaza sorgu yaptığımızda. PLC den slave cihaza giden pakete müdehale edebilir miyiz?
Bir modbus paketini PLC tarafında hazırladım ve TCP ile gönderirken o noktada müdehale etmek istiyorum ne yapabilirim? Yapılabilir mi?
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: mufitsozen - 15 Mart 2021, 17:35:32
Alıntı yapılan: robikod - 15 Mart 2021, 16:36:14Hiç hakim olmadığım bir konuda fikirlerinize ihtiyacım var.
Modbus master olarak kendi yazılımımı kullanıyordum, bunun yerine PLC'ye geçiş yaparsam,
PLC ile modbus TCP üzerinden data alıp gönderme işlevlerinde, yani PLC'yi modbus TCP master olarak kullanırken, slave olan bir cihaza sorgu yaptığımızda. PLC den slave cihaza giden pakete müdehale edebilir miyiz?
Bir modbus paketini PLC tarafında hazırladım ve TCP ile gönderirken o noktada müdehale etmek istiyorum ne yapabilirim? Yapılabilir mi?
vaktiniz az ise yapilamaz.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: magnetron - 15 Mart 2021, 17:46:57
hocam konuyu dağıtmış olmıyim tcp modbus stackı için yararlandığınız kaynakları paylaşabilir misiniz ?
teşekkür
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: brandice5 - 15 Mart 2021, 17:52:31
Araya bir proxy uygulama yazarsan olur.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: tunayk - 15 Mart 2021, 19:52:07
Alıntı yapılan: robikod - 15 Mart 2021, 16:36:14Hiç hakim olmadığım bir konuda fikirlerinize ihtiyacım var.
Modbus master olarak kendi yazılımımı kullanıyordum, bunun yerine PLC'ye geçiş yaparsam,
PLC ile modbus TCP üzerinden data alıp gönderme işlevlerinde, yani PLC'yi modbus TCP master olarak kullanırken, slave olan bir cihaza sorgu yaptığımızda. PLC den slave cihaza giden pakete müdehale edebilir miyiz?
Bir modbus paketini PLC tarafında hazırladım ve TCP ile gönderirken o noktada müdehale etmek istiyorum ne yapabilirim? Yapılabilir mi?

Kullanacağın PLC ye göre, frame'in neresine müdahale edeceğine göre değişir.  Slave ID ve Data ile oynayacaksan yapılabilir. Ancak Header ve CRC kısmına müdahale genellikle kapalıdır. Aksi PLC nin doğasına uygun düşmez zati.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: Endorfin35+ - 15 Mart 2021, 21:04:22
Konuyu gorunce bende bir ikisey merak ediyorum.


1. Plclerin kullandigi modbus ascii mi oluyor?

2. Modbus u ogrenmek hakim olmak icin en uygun fiyatli nasil bir donanim tavsiye edersiniz?

Dwin hmi kullaniyorum. Dwin derki benim protokolum modbus ascii uyumlu. Ben dwin in protokollerine hakim oldum. Simdi modbusmu ogrenmis oldum merak ediyorum. Belki konunun buyuk kismina hakim oldum ama modbuslu bir cihaz kullanmadigim icin resmin tamamini goremiyorum.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: tunayk - 15 Mart 2021, 22:40:44
Bazı PLC ler hem ASCII hem de RTU protokokünü destekler. Bazıları sadece RTU 'yu. Aslında mantık aynıdır. Sadece giden paket ve CRC hesabı farklıdır.

Modbus'a hakim olmak için donanım şart değil. PC ortamında da pekala işi öğrenebilirsiniz. Şanal Com port programları ile iki port tanımlarsınız. Birinden gönderip birinden alırsınız.

İllaki plc ile yapayım derseniz Delta  ucuz bir çözüm olabilir. Siemens S7-1200 de TCP + RTU için iyi olur.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: Endorfin35+ - 15 Mart 2021, 23:08:12
Ben mcu veya pc den uart uzerinden  hex kodu gondererek hmi ile iletisim kuruyorum.

2 bayt header + 1 bayt paket uzunlugu + 1 bayt komut + 2bayt adres + data +crc

Seklinde bir yapı kullaniyorum. Bu yapı modbus midir?

Bugune kadar plc ile hic calisma firsatim olmadı. Plc ile bu sekilde data duzenleyip gonderebilirmiyim.

Delta plc de bu işi yapacak uygun  fiyatli bir model tavsiyeniz olurmu?
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: OG - 16 Mart 2021, 03:15:16
Yakın zamanda benim de sorduğum sorular

1 Master var, 1 veya 1 den fazla slave var
Slave lerin adresi var
İlgilisine Request (istek) yapılır
istek, şunu oku bildir veya şuna şu değeri yaz
şeklindedir
ilgilisi gerekeni yapar, Response (cevap) verir
olay bu

data akışı genelde basit 485 hatları üzerindedir
ancak PLC'lerin çoğunda TCP protokolunde modbus haberleşme vardır
TCP protokolunde dataya bazı ön eklemeler yapılır, CRC ise eklenmez.

-----------

Bu arkadaş modbus konusunu net ve uzatmadan anlatmış
https://simplymodbus.ca/FAQ.htm

RTU 'ya yönelin, ASCII pek kullanılmıyor.

TCP üzerinden gönderiliyorsa
https://simplymodbus.ca/TCP.htm

FCode (Function Code) bu (https://simplymodbus.ca/FAQ.htm) sayfanın sol menüsünde fc01 ~ fc16

Function Code,
oku (sendekini bana ver)
veya
yaz (şu değeri yaz)
komutları.

Bazıları "bit" içerikli komutlar (Coil Status)
bazıları "byte" (genelde 2 byte) içerikli komutlar (Holding Registers)

Adres,
modbus standartında 1 byte boyutunda (1~247 arası değerde) ancak, üreticisi, 2 byte gibi bazı özel dizaynlar yapmış olabilir, protokol de ona göre düzenlenmeli.

Master, slave'e bir istekte bulunur (Request),
istek bilgisi slave'in adresini de içerir (doğal olarak, aynı hat üzerinde çok sayıda cihaz)

İlgili slave isteği cevaplar (Response)

bu istek ve cevaplar data paketleri halindedir, formatı basittir.
hat üzerinde data gönderiminin bittiği en az 3,5 x 1 paket süresi data gelmemesinden anlaşılır
1 paket süresi, gönderim hızı ile değişecektir, 9600 de şu 19200 de bu gibi.
bu süre boyunca data yoksa gönderenin gönderimi bittiğinden emin olunur (çakışmayı önlemek için)

Slave adresi tamam, peki;
Oku veya yaz
komutları
neyi okuyacağım, nereye yazacağı konusu,
bunlar registerlerdir,
registerlerin adresleri vardır (doğal olarak)
istenen veya cevaplanan registerlerin adres bilgileri de data paketinde bulunur.

İletimin doğruluğunu sağlamak için, data paketlerine, gereken bilgiler (adres, register vs) sonrası
bütün paketin CRC hesabı (16 bit, yani 2 byte) yapılıp sonuna eklenir
Dikkat,
Modbus'da dataları gönderirken 16 bit (2 byte) verilerin önce Highbyte'ı sonra LowByte'ı gönderilir,
ancak CRC için ters.

CRC hesabı için algoritmanın akışı şuradaki gibi
https://www.picproje.org/index.php/topic,25294.msg169976.html#msg169976

yaptığınız hesapların doğruluğunu buradan kontrol edebilirsiniz
https://www.lammertbies.nl/comm/info/crc-calculation

------

Slave cihazın, sizin imal ettiğiniz bir ölçüm (voltaj, sıcaklık vs)  olduğunu düşünelim
Master cihaz sizden ölçüm sonuçlarını isteyecek

Master herhangi bir istek yaparken üstte bahsedilen bir fonksiyon kodu ile istemek zorundadır

Bir ölçüm (voltaj, sıcaklık vs) cihazının değerini istemek genelde FC3 fonksiyon kodu ile olur
FC3, Read Holding Registers demektir, holding registerin içeriğini bana oku..

Benim yaptığım cihazda holding register falan yok kardeşim dememeniz için önce işi isteyen ile anlaşacaksınız
voltaj için şu register adresi (bunu adı holding register oluyor)
sıcaklık için bu adresi (hemen 1 sonraki değer)
kullanacağız diye siden sorgulayacak kimse ile önceden anlaşmanız gerek.

voltaj için holding register adresi 7 olsun
sıcaklık için holding register adresi de bir sonrası yani 8

Slave adresiniz de 2 olsun

Master istiyor, 2 nolu slave, holdreg 7 ve 8 'in içeriğini ver;
FC3 fonk uygun, analog degeri read yap ver

02 03 00 07 00 02 crc_L crc_H   (hex formatında göstereceğim)

02 = slave adres
03 = fon. code
00 = sorgulanan register ilk adres H byte
07 = sorgulanan register ilk adres L byte
00 = toplam kaç register H byte
02 = toplam kaç register L byte

üsttekilerin 16 bit modbus CRC hesabı yapalım (CRC-16 (Modbus))
crc_H = F9
crc_L = 75

CRC'nin önce gidecek byte'ı ters kullanılır demiştik 
yerine koyalım
02 03 00 07 00 02 75 F9
işte master'dan slave gidecek data

data geldi, min 3,5 paket de sukunet oldu

Slave ölçmüş
Voltaj = 02F4 (attım)
Sıcaklık = 0027 (attım)
cevap verir

02 = ben slave 02 adres
03 = fon. code olarak cevabımdır
04 = sana 4 byte gelecek (hemen peşinden 2 byte Voltaj , 2 byte sıcaklık)
02 = gelecek dediğim 1. byte bu ( Voltaj HighByte )
F4 = gelecek dediğim 2. byte bu ( Voltaj LowByte )
00 = gelecek dediğim 3. byte bu ( Sıcaklık HighByte )
27 = gelecek dediğim 4. byte bu ( Sıcaklık LowByte )
C9 = crc_L (üsttekilerin topundan hesapladım, çıkan sonucun LowByte'ı)
63 = crc_H HighByte'ı


02 03 04 02 F4 00 27 C9 63
slave'den master'a şutla gitsin

FC3 burada (https://simplymodbus.ca/FC03.htm)
diğerleri de SOL MENÜ'de (https://simplymodbus.ca/FC03.htm)
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: serdararikan - 16 Mart 2021, 09:48:56
Alıntı yapılan: Endorfin35+ - 15 Mart 2021, 21:04:22Konuyu gorunce bende bir ikisey merak ediyorum.


1. Plclerin kullandigi modbus ascii mi oluyor?

2. Modbus u ogrenmek hakim olmak icin en uygun fiyatli nasil bir donanim tavsiye edersiniz?

Dwin hmi kullaniyorum. Dwin derki benim protokolum modbus ascii uyumlu. Ben dwin in protokollerine hakim oldum. Simdi modbusmu ogrenmis oldum merak ediyorum. Belki konunun buyuk kismina hakim oldum ama modbuslu bir cihaz kullanmadigim icin resmin tamamini goremiyorum.
Modpoll
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: fahri- - 16 Mart 2021, 10:19:27
Eğer pahalı olmayacaksa Modbus TCP master cihazı ile RS485 portlu slave cihazınız/cihazlarınız arasına 1 adet modbus gateway cihazı takarsanız gateway paketleri ayarlıyor . Geçen sene 350 TL almıştım modbus gateway cihazını.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: tunayk - 16 Mart 2021, 13:07:01
Alıntı yapılan: Endorfin35+ - 15 Mart 2021, 23:08:12Ben mcu veya pc den uart uzerinden  hex kodu gondererek hmi ile iletisim kuruyorum.

2 bayt header + 1 bayt paket uzunlugu + 1 bayt komut + 2bayt adres + data +crc

Seklinde bir yapı kullaniyorum. Bu yapı modbus midir?

Bugune kadar plc ile hic calisma firsatim olmadı. Plc ile bu sekilde data duzenleyip gonderebilirmiyim.

Delta plc de bu işi yapacak uygun  fiyatli bir model tavsiyeniz olurmu?

Yanlış değilsem DVP-14SS2 en ucuz üründü. RS485 portta hem Ascii hem RTU çalışır. Sarı sitede 2. El cihazlar da var ucuza.  Oraya da bakabilirsiniz.

Modbus'ı çoğu kez full olarak implemente etmenize gerek  yoktur. Pek çok endüstriyel cihaz da sadece gerekli kısmı destekler.

Başlık: Ynt: PLC ve Modbus TCP
Gönderen: robikod - 16 Mart 2021, 17:20:06
Alıntı yapılan: brandice5 - 15 Mart 2021, 17:52:31Araya bir proxy uygulama yazarsan olur.

Proxy uygulamasını biraz detaylandırır mısınız?
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: robikod - 16 Mart 2021, 17:21:27
Alıntı yapılan: tunayk - 15 Mart 2021, 19:52:07Kullanacağın PLC ye göre, frame'in neresine müdahale edeceğine göre değişir.  Slave ID ve Data ile oynayacaksan yapılabilir. Ancak Header ve CRC kısmına müdahale genellikle kapalıdır. Aksi PLC nin doğasına uygun düşmez zati.


Modbus TCP olduğu için Slave ID ve CRC olmuyor.
Length ve data kısmına müdehale edip araya bir algoritma yazmak gerekiyor. Ara bir program ve yazılım mümkün müdür PLC ile birlikte çalışması için?
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: robikod - 16 Mart 2021, 17:23:47
Alıntı yapılan: fahri- - 16 Mart 2021, 10:19:27Eğer pahalı olmayacaksa Modbus TCP master cihazı ile RS485 portlu slave cihazınız/cihazlarınız arasına 1 adet modbus gateway cihazı takarsanız gateway paketleri ayarlıyor . Geçen sene 350 TL almıştım modbus gateway cihazını.
Yanlış anlamadıysam gateway PLC ve Slave cihazı arasına koyacağım. Bu gateway e nasıl müdehale edebilirm peki yazılımla?
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: fahri- - 17 Mart 2021, 09:48:40
Gateway'e müdahale edemessin.

Senin konfigürasyon şöyle mi?

PC (tcp/ip) -> PLC (rs485) -> Slave (rs485)
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: brandice5 - 17 Mart 2021, 09:57:44
Alıntı yapılan: robikod - 16 Mart 2021, 17:20:06Proxy uygulamasını biraz detaylandırır mısınız?

Şu bağlantı yerine;

PLC ==> Slave Cihaz

araya bir TCP Server/Client uygulaması yazacaksın ve bağlantı şöyle olacak;

PLC ==> Proxy App ==> Slave Cihaz

Yani PLC direkt cihaza değil Proxy App'e bağlanacak. Sen proxy app içinde TCP paketinin istediğin yerlerini değiştirip cihaza göndereceksin. Yani cihaza bağlantı kuran direkt PLC değil proxy app olacak.

Buradaki önemli nokta, PLC çalıştığı sürece proxy app de çalışıyor olması lazım, yoksa cihaz ile bağlantı kesilir.
Bu sürekli bağlantıyıda iki şekilde yapabilirsin.

1. Eğer ağda sürekli çalışan bir PC veya server varsa proxy app onun üzerinde çalışabilir.
2. Sürekli çalışan bir PC veya server yoksa, ucuz yollu bir raspberry pi alıp onu ağa bağlarsın. Proxy app'i de rpi üerinde geliştirirsin. Bence rpi daha iyi çünkü PC veya server kullanıcı tarafından resetlenebilir. Rpi ortalıkta görünmeyen bir yerde 7/24 çalışabilir.
Başlık: Ynt: PLC ve Modbus TCP
Gönderen: byka - 09 Şubat 2022, 01:54:27
buraya bakın arkadaşlar,

DWIN Akıllı TFT HMI Ekran Programlama
https://www.youtube.com/channel/UCmKDZcSrVJvItC5U_1qOd7Q

DWIN TFT HMI Dokunmatik Ekran PLC modbus master Bağlantısı
https://www.youtube.com/watch?v=ADsmDT-6Bvk&t=5s

DWIN Dokunmatik Ekran /PLC bağlantısı modbus slave
https://www.youtube.com/watch?v=TveFjeJAGpk&t=2s

eğer Proton Plus (şimdiki yeni Positron)kullanıyorsanız örnek kod için yardımcı olmaya çalışırım.