PLC ve Modbus TCP

Başlatan robikod, 15 Mart 2021, 16:36:14

robikod

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?

mufitsozen

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.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

magnetron

hocam konuyu dağıtmış olmıyim tcp modbus stackı için yararlandığınız kaynakları paylaşabilir misiniz ?
teşekkür

brandice5

Araya bir proxy uygulama yazarsan olur.

tunayk

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.

Endorfin35+

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.
"İşi bilen yapar, az bilen akıl verir, bilmeyen eleştirir, yapamayan çamur atar."

tunayk

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.

Endorfin35+

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?
"İşi bilen yapar, az bilen akıl verir, bilmeyen eleştirir, yapamayan çamur atar."

OG

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 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
diğerleri de SOL MENÜ'de
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

serdararikan

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

fahri-

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ı.

tunayk

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.


robikod

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?

robikod

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?

robikod

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?