İçindekiler
Seri Cihazlar ile Ethernet Cihazları Arasında Modbus Protokol Dönüşümü
Modbus protokolü, birçok otomasyon uygulamasında ve seri tabanlı Modbus RTU protokolünü destekleyen birçok cihazda yaygın olarak kullanılmaktadır. Bu cihazlar genellikle RS-232 veya RS-485 seri ara yüzünü destekler, ve bağlantı için DB-9 konektör veya terminal blok kullanır. Modbus RTU cihazlarının kurulumu son derece kolay, sorun gidermesi ise son derece düşük masraflı olduğundan, Modbus RTU oldukça popüler bir protokol haline gelmiştir. Öte yandan endüstriyel uygulamalarda daha karmaşık bir ağ yapısı ihtiyacı nedeniyle gittikçe yaygınlaşan Ethernet kullanımı sonucunda, artık kontrol odasında, SCADA sunucusu üzerinde birçok sistem Modbus TCP kullanmaktadır.
Seri ve Ethernet tabanlı cihazların farklı tür Modbus protokolü kullanması, Modbus RTU ile Modbus TCP protokolleri arasında dönüşüm ihtiyacı ortaya çıkarır. Aşağıda listelenen “sıkça sorulan sorular” ve cevapları, Modbus dönüştürücü kullanırken en yaygın olarak karşılaşılan sorunların tespitini kolaylaştırmayı ve bunları önlemeyi amaçlamaktadır.
Bu konuda sıkça sorulan başlıca sorular şunlardır:
- Modbus RTU seri cihazlarını bir Ethernet ağına bağlamak için spesifik bir Modbus dönüştürücü ağ geçidi mi gerekir? Yoksa bir seri cihaz sunucusu da aynı işlevi görür mü?
- Eğer bir ağ geçidinin farklı seri portlarına bağlı birden çok Modbus RTU cihazımız var ise, TCP haberleşme altyapısını nasıl planlamak gerekir? Tek bir bağlantı kullanılabilir mi, yoksa her seri port için ayrı bir bağlantı mı kullanmak gerekir?
- Çok sayıda SCADA sunucusunun aynı Modbus RTU cihazlarına aynı anda erişebilmesi için ağ geçidini nasıl kullanmak gerekir?
- Çalışır durumda iki Modbus master cihazımız var (PLC veya HMI). Bu iki sistem arasında veri alış verişi nasıl sağlanır?
- Sorgulanması gereken çok sayıda Modbus RTU cihazımız var. Tüm kayıtlı verileri okumak için birden fazla Modbus komutu kullanılabilir, ama bu çok fazla zaman alır. Ağ geçidinin veriyi aktif olarak alması ve tek bir yere kaydetmesi, böylece de tek Modbus komutuyla tüm veriyi almak mümkün olur mu?
Soru 1: Modbus RTU seri cihazlarını bir Ethernet ağına bağlamak için spesifik bir protokol dönüştürücü ağ geçidi mi gerekir? Yoksa bir seri cihaz sunucusu da aynı işlevi görür mü?
Cevap: Bu soruya cevap vermeden önce, SCADA sunucusundaki hangi Modbus sürücüsünü kullanmak istediğinize karar vermeniz gerekir. Burada dört seçenek vardır:
- Modbus TCP sürücüsüne sahip SCADA sunucusu
- Modbus RTU sürücüsüne sahip SCADA sunucusu – dâhili seri portlu
- Modbus RTU sürücüsüne sahip SCADA sunucusu – dâhili seri portsuz
- “Ethernet Encapsulation” sürücüsüne sahip SCADA sunucusu
(1) Modbus TCP sürücüsüne sahip SCADA sunucusu
Bunun için protokol dönüştürücü bir ağ geçidi (gateway) kullanın. Ağ geçidi yardımıyla, Modbus RTU cihazlarla haberleşebilmek için Modbus TCP protokolünü kullanabilirsiniz (Şekil 1).
Otomasyon piyasasında Modbus TCP slave cihazları için Modbus TCP haberleşmesini etkinleştiren birçok “Modbus ağ geçidi” çözümü bulunur. Ağ geçidi Modbus TCP talebini aldığında, bu paketi Modbus RTU paketine dönüştürür ve derhal Modbus RTU cihazlarına gönderir.
(2) Modbus RTU sürücüsüne sahip SCADA sunucusu – dâhili seri portlu
Eğer sadece mevcut SCADA sunucunuz ile Modbus RTU cihazlarınızı bir Ethernet ağına bağlamak istiyorsanız bu seçeneği tercih edin. Eğer asıl SCADA sunucunuzda bir seri port varsa, bu sorunu çözmek için bir çift ağ geçidi kullanabilirsiniz.
Şekil 2’deki topolojide de gösterildiği gibi, ağ geçidi Modbus RTU paketlerini Modbus TCP paketine, ve sonra tekrar Modbus RTU paketine dönüştürebilir. Öte yandan eğer SCADA sunucunuzda halihazırda seri port yoksa, bu sizin için doğru bir çözüm olmaz. Bunun yerine 3. çözümü tercih edin.
(3) Modbus RTU sürücüsüne sahip SCADA sunucusu – dâhili seri portsuz
Eğer mevcut SCADA programınız ve cihazlarınızı kullanmak istiyorsanız, ancak SCADA sunucunuzun halihazırda bir seri portu yok ise, seri cihazlarınıza bağlanmak üzere bir “seri cihaz sunucusu (serial device server)” kullanarak, cihazın üzerinde bir “sanal COM port” oluşturun. Bu konfigürasyon, zaten halihazırda bir COM portu varmış gibi, uzak seri cihazlarınıza seri cihaz sunucusu üzerinden erişebilmenizi sağlar (Şekil 3).
Seri cihaz sunucusu, SCADA sunucusunda bir “sanal COM port” oluşturmak için, “sanal COM port sürücüsü”nü kurar. Sanal COM portu etkinleştirmek için ise seri cihaz sunucusu “sanal COM (virtual COM)” modunda yapılandırılmalıdır. Bu sanal COM porta gönderilen tüm veri, seri cihaz sunucusunun uzak seri portlarına aktarılır. Modem sinyaline gönderilen tüm komutlar da aynı biçimde ele alınır. Bir sanal COM portu fiziki bir yerel COM port gibi kullanabildiğinizden, aynen fiziki bir COM porta yapacağınız gibi, Modbus RTU talebini de COM porta doğrudan gönderebilirsiniz.
(4) “Ethernet Encapsulation” sürücüsüne sahip SCADA sunucusu
Eğer SCADA sunucunuzda bir seri port yoksa, ancak “sanal COM port” kurmak da istemiyorsanız, “Ethernet Encapsulation” sürücüsünü tercih edebilirsiniz (Şekil 4). Öte yandan bunun için SCADA yazılımınızın “Ethernet Encapsulation” sürücüsünü desteklemesi gerekir ki, bu her SCADA yazılımı için geçerli değildir. Genelde “Ethernet Encapsulation” sürücüleri, seri ve TCP/IP haberleşmeye dair derin bilgiye sahip olunduğunda tercih edilir.
Bu seçenek için “raw socket mode” veya “tunnelling mode” destekleyen bir seri cihaz sunucusu gerekir. Bu, SCADA sahadaki cihazlara Modbus RTU paketleri gönderdiğinde SCADA sunucusu ile seri cihaz sunucusu arasındaki bağlantının, herhangi bir protokolden bağımsız transparan TCP/IP veya UDP bağlantısı olduğu anlamına gelir. Modbus RTU, paket sonlarının tespiti için interval timeout kullandığından, seri cihaz sunucularının doğru yapılandırılması gerekir. Eğer Modbus RTU paketleri iki ya da daha fazla TCP/IP veya UDP paketlerine bölünüyorsa, sorunlarla karşılaşabilirsiniz. Şayet seri bağlantılar ile Ethernet ağları arasında paket aktarımlarını nasıl ele almanız gerektiği konusunda emin değilseniz, ağ geçidi çözümünü (2. seçenek) veya sanal COM sürücüsü çözümünü (3. seçenek) tercih etmeniz daha iyi olabilir.
Seri cihaz sunucuları da Modbus RTU cihazlarını Ethernet ağlarına bağlayabilse de, ağ geçidi çözümü (2. seçenek) neredeyse tüm sistem gereksinimlerini karşılayabilir. Sunucunuzun Modbus TCP bağlantılarını desteklemesi gerekir, ki Modbus TCP’nin popülerliği ve çok yaygın olarak destekleniyor oluşu sayesinde bu çoğunlukla bir sıkıntı teşkil etmez. Belli bir ağ geçidi çözümü gerektirecek birkaç durumlara bazı örnekler aşağıdaki gibidir:
1. Çoklu master veya yedeklilik
Ethernet bağlantıları uzak erişim olanağı sunmakla kalmaz, aynı zamanda çoklu bağlantılara erişim de sağlar. Çoğu ağ geçidi 32’ye kadar bağlantı destekler, yani Modbus RTU cihazlarını aynı anda 32’ye kadar SCADA sunucusu sorgulayabilir (Şekil 5). Bu durumda, seri cihaz sunucularının ağ yedekliliği sağlaması, çoğu seri cihaz sunucusu çoklu master desteklemediğinden zor olsa da, bir ağ geçidi kullanıldığında böyle bir sorun olmaz.
2. Çok sayıda Modbus RTU cihazı için tek bir bağlantı
Bazen farklı seri portlara bağlı birden çok Modbus RTU cihazını, SCADA sunucusu üzerinde tek bir bağlantı kullanarak sorgulamak isteyebilirsiniz (Şekil 6). Bu durumda, yönlendirme mekanizmasını işleme alabilecek tek çözüm, ağ geçididir. Birden çok seri portlu ağ geçitleri kullanılıp ve yapılandırılarak Modbus sorgusu doğru seri porta, benzersiz slave ID’ler yoluyla gönderilebilir. Bir seri cihaz sunucusu, bu kadar karmaşık bir gereksinimi karşılayamaz.
3. Eski Modbus RTU HMI ve yeni Modbus TCP SCADA için eş zamanlı cihaz erişimi
Ethernet bağlantıları kurulumu kolay uzak erişim sağlasa da, yerel HMI bağlantılarınızı da kullanmaya devam etmek isteyebilirsiniz. Buradaki sorun, cihaz üzerindeki seri port hâlihazırda ağ geçidine bağlı olduğundan, HMI bağlantısında kullanılabilecek seri port kalmamasıdır. Bu durumda, bu tarz bir sorunu aşmak için bazı ağ geçitleri “seri yeniden yönlendirici (serial redirector)” sunabilir. Seri yeniden yönlendirici fonksiyonu, ağ geçitlerinin sorguyu slave ID’ye göre farklı seri portlar arasında aktarabilmesi nedeniyle, router’lara oldukça benzerdir (Şekil 7).
Sonuç
Seri – Ethernet haberleşme için birçok farklı çözüm bulunur. Bu çözümler seri ve Ethrenet portlar arasında transparan bir veri aktarımı kadar basit olabilse de, bir ağ geçidi Modbus gibi farklı endüstriyel protokollerin de kullanıldığı uygulamalar için genellikle çok daha iyi bir çözümdür. Ağ geçitleri, en başta daha yüksek tutarlı bir yatırım gerektirse de, uzun vadede daha istikrarlı haberleşme sağlar, ve tüm paketleri doğru idare edebilmek için Modbus paketlerini teşhis edebilir.
Soru 2: Eğer bir ağ geçidinin farklı seri portlarına bağlı birden çok Modbus RTU cihazımız var ise, TCP haberleşme altyapısını nasıl planlamak gerekir? Tek bir bağlantı kullanılabilir mi, yoksa her seri port için ayrı bir bağlantı mı kullanmak gerekir?
Cevap: Çoğu ağ geçidi, farklı seri portlara bağlı birden fazla Modbus RTU cihazı için gerekli TCP haberleşme altyapısını planlamak için esnek çözümler sağlar. Genel olarak, yönlendirme mekanizmasına dayalı kullanılabilecek üç farklı yöntem vardır.
- Seri portu benzersiz TCP porta bağlayın
- Seri portu benzersiz IP adresine bağlayın
- Yönlendirme (routing) tablosu kullanın
(1) Seri portu benzersiz TCP porta bağlayın
Bu, ağ geçidi topolojisini planlamada kullanılan en popüler yöntemdir. Ağ geçidi konfigürasyonlarında her seri port benzersiz bir TCP port tarafından tanınır. Örneğin seri port 1 için 4001, seri port 2 için 4002, vb (Şekil 8). Eğer seri port 1 üzerinden Modbus RTU cihazlarıyla haberleşmek isteniyorsa, 4001’e bir Modbus TCP bağlantısı kurulmalıdır. Ağ geçidi, Modbus paketini TCP port 4001 ve seri port 1 arasındaki TCP bağlantısı üzerinden aktaracaktır. Bu topolojide SCADA sürücüsünün birden çok Modbus TCP bağlantısı kurması gerekir.
(2) Seri portu benzersiz IP adresine bağlayın
Bu, 1. seçeneğe oldukça benzer bir çözümdür. Tek farkı, ağ geçidinin farklı seri portları tanımak için farklı IP adresleri kullanmasıdır. Örneğin seri port 1 için 192.168.2.1, seri port 2 için 192.168.2.2, vb (Şekil 9). Eğer Modbus RTU cihazlarıyla seri port 1’den haberleşmek istiyorsanız, TCP port 502 ile 192.168.2.1 arasında bir Modbus TCP bağlantısı kurmanız gerekir. Ağ geçidi Modbus paketini 192.168.2.1:502 ve seri port 1 arasındaki TCP bağlantısından aktarır. Bu topolojide SCADA sürücüsünün birden çok Modbus TCP bağlantısı da kurması gerekir. Topoloji birden çok IP adres gerektirse de, bazı Modbus TCP istemcileri yalnızca TCP port 502’yi destekler. Eğer böyle bir durum varsa, 1. seçenek yerine bu seçenek tercih edilmelidir.
(3) Yönlendirme (routing) tablosu kullanın
Bu topoloji, birden çok cihazla haberleşmek için sinyal bağlantısı kullanır. Sorgunun doğru seri porta aktarıldığından emin olmak için, hem ağ geçidi hem de yönlendirme yolu doğru yapılandırılmalıdır. Örneğin, seri port 1 slave ID’si 1’den 10’a kadar olan tüm Modbus paketlerini, seri port 2 slave ID’si 11’den 20’ye kadar olanları, vb. idare eder (Şekil 10).
Bu topoloji tek bir bağlantı kullandığından, 1. ve 2. seçenekten daha yavaş bir çözüm olacaktır. Ancak, bütçesel kısıtlarınız varsa ve bu çözümden alınan performans zaten ihtiyacınızı karşılıyorsa, tek bir bağlantı da yeterli bir çözüm olabilir.
Not: Tek bir seri porta birden fazla cihaz bağlarsanız, veya birden fazla seri portu tek bir TCP bağlantısına aktarırsanız, Modbus sorgulama süresi uzar. Öte yandan, sorgulama hızını artırmak isterseniz, birden fazla TCP bağlantısı gerekebilir ve bunun SCADA masraflarını artırmayacağını teyit etmek gerekir.
Soru 3: Çok sayıda SCADA sunucusunun aynı Modbus RTU cihazlarına aynı anda erişebilmesi için ağ geçidini nasıl kullanmak gerekir?
Cevap: Ağ geçidi bunu doğru yönetebilecek olsa da, seri port bant genişliğinin sabit kalacağını unutmamak gerekir. Dolayısıyla çoklu sorgular aynı seri port üzerinden alınırsa, ağ geçidi sorguları sıraya koyarak işleme alacağı için bir gecikme yaşanması mümkündür. Bu nedenle, eğer çok sayıda master cihazının aynı Modbus RTU cihazına, aynı anda erişimini etkinleştirmek istiyorsanız, gerekli sorgulama süresini hesaplamanız gerekir.
Örneğin, bir sorgu 100 ms alıyorsa, beş çoklu bağlantı bir sonraki sorguyu göndermeden önce en az 100 ms x (5-1) = 400 ms beklemenizi gerektirir. Bu da her SCADA sunucusunun 400 ms’yi (artı bırakılacak ek payı) sorgulama döngüsü süresi olarak alması gerekeceği anlamına gelir.
Ancak üstteki yöntem, tek çözüm değildir. Bazı ağ geçitleri, bağlı cihazlardan aktif ve sürekli olarak veri toplanan bir “aracı” modunu destekler. Güncellenen veri, dâhili bir hafızada depolanarak sunucu sorgularını cevaplamada kullanılır. Bu çözüm daha hızlı ve verimli olsa da, alınan veri gerçek zamanlı en son veri olmayabilir.
Soru 4: Çalışır durumda iki Modbus master cihazımız var (PLC veya HMI). Bu iki sistem arasında veri alış verişi nasıl sağlanır?
Cevap: İki Modbus master cihazı arasında veri alışverişi için master-master modunu destekleyen bir ağ geçidi gerekir. Bu modda ağ geçidi her iki taraf için de slave görevi görür. Bir master, ağ geçidinin dâhili hafızasına veri yazarken diğer master bu veriyi ağ geçidinden alarak alışverişi tamamlayabilir. Kullanılan ağ geçidine bağlı olarak, her iki taraf da Modbus RTU ve Modbus TCP kullanıyor, veya bir taraf yalnızca Modbus RTU kullanırken diğer taraf ise Modbus TCP kullanıyor olabilir.
Soru 5: Sorgulanması gereken çok sayıda Modbus RTU cihazımız var. Tüm kayıtlı verileri okumak için birden fazla Modbus komutu kullanılabilir, ama bu çok fazla zaman alır. Ağ geçidinin veriyi aktif olarak alması ve tek bir yere kaydetmesi, böylece de tek Modbus komutuyla tüm veriyi almak mümkün olur mu?
Cevap: Ağ geçidinin aktif olarak birden çok Modbus RTU cihazından veri çekerek bu verileri tek bir kayda alabilmesi için, verileri dâhili hafızasında depolayabilecek bir aracı ağ geçidi gerekir. Ağ geçidinin her Modbus RTU cihazına tek tek bir Modbus komutu da göndermesi gerekir. Tek bir Modbus okuma komutuyla alınabilmesi için tüm veri, ağ geçidinin dâhili hafızasında tek bir veri öbeği halinde düzenlenir.
SÖZLÜK
Seri Cihaz Sunucusu (Serial Device Server)
Bir “seri cihaz sunucusu”, en az bir Ethernet portu ve bir veya daha fazla seri portu bulunan bağımsız bir cihazdır. Seri cihaz sunucuları, gömülü bir ağ işletim sistemiyle donatılmış olup, bilgisayarların seri cihazlara bir ağ üzerinden erişebilmesini sağlar. Bir seri cihaz sunucusu veriyi seri ara yüz ile Ethernet ara yüzü arasında transparan biçimde aktarabilir. Bunu yaparken tüm seri veri Ethernet protokollü haberleşme için çevrilirken, tüm Ethernet verisi ise seri protokollü haberleşmeye uygun biçimde çevrilir.
Günümüzde seri cihaz sunucuları, ek bir seri porta sahip olmayan sunucu bilgisayarlar için bir “sanal COM port” da sağlar. Bunu, aslında bir Ethernet portu COM porta dönüştürerek yapar. Temel fonksiyonlarının yanında daha sofistike seri cihaz sunucuları seri ağlarda PPP, veya Ethernet ağlarında Telnet protokollerine kadar destekleyebilir. Bir seri cihaz sunucusu konsol yönetimi için (bu nedenle bazı üreticiler bu cihazlara “console server/konsol sunucusu” da diyebilir), veya eski bankacılık sistemlerinin uzak terminal uygulamalarında bile kullanılabilir (bu nedenle cihazlara “terminal server/terminak sunucu” da denebilir).
Sanal COM Port (Virtual COM Port), Sanal COM Port Sürücüsü
Bir “sanal COM port”, sunucu bilgisayarda gerçek (bir başka deyişle, fiziki) bir COM port değildir. Bunun yerine, bir “sanal COM port sürücüsü” yerel bir COM portun davranışlarını tamamiyle taklit etmesi için Windows altında sunucu bilgisayara kurulabilir. Sürücü, seri cihaz sunucularının sunucuyu TCP/IP ağa bağlayan portları için kullanılır. Bu durumda uzak seri cihaz sunucusu üzerindeki seri port, yerel bir COM port gibi davranacaktır. Sanal COM port, seri cihaz sunucusu ile bağlantı sağlamak üzere yapılandırılır. Örneğin, COM3, uzak bir seri cihaz sunucusu üzerindeki, IP adresi 192.168.2.1. olan seri port 1’dir. Dolayısıyla bu porta veri gönderileceği zaman, tüm veri sanal COM port sunucusu yoluyla “192.168.2.1@serial port 1″e gönderilir. Bu sanal COM porta gönderilen tüm sorgular, “192.168.2.1@serial port 1”e yönlendirilir. Daha yeni sunucu bilgisayarlarda genellikle seri port bulunmadığından bu “sanal COM portlar” endüstriyel otomasyonda eski donanımları bağlamak için paha biçilmez bir araçtır.
Transparan Ağ Geçidi (Transparent Gateway)
“Transparan ağ geçidi”, bir Modbus dönüştürücü kullanmanın en temel yoludur. Modbus RTU da, Modbus TCP de aynı PDU’ya (Protocol Data Unit) sahip olduğundan, ve tek fark adres kısmı olduğundan, bir ağ geçidinin Modbus RTU ve Modbus TCP arasında veri aktarması kolaydır (Şekil 12). Dolayısıyla ağ geçidi Ethernet ağından bir Modbus TCP paketi aldığında, ağ geçidinin yalnızca adres kısmını Modbus RTU adreslemesine uydurarak paketi seri porta göndermesi yeterlidir. Ağ geçidi Modbus RTU cihazlarından bir cevap aldığında ise, Modbus TCP istemcisine cevap verir.
Aracı Ağ Geçidi (Agent Gateway)
“Aracı ağ geçidi”, Modbus TCP ile Modbus RTU arasında veri aktarımında Modbus ağ geçidini kullanmak için farklı bir yol sunar. Aracı ağ geçidi, veriyi geçici olarak depolamak için kendi dahili hafızasına sahiptir, ve bağlı cihazlardan sürekli veri toplar. SCADA sürücüsünden bir sorgu geldiğinde, ağ geçidi sorguya hafızasında depolanmış bulunan veriyle cevap verir. Böylece, ağ geçidi cihaz verilerinin aktif sorgulanması için bir aracı görevi görür. Bu özellik aşağıdaki durumlarda protokol dönüşümü için kullanılabilir:
- Her iki protokol farklı paket yapılarına sahiptir. Örneğin; PROFIBUS, Modbus, EtherNet/IP, PROFINET, vb.
- Her iki protokol farklı döngü sürelerine sahiptir. PROFIBUS, PROFINET ve EtherNet/IP gibi bazı protokoller veri alışverişini çok kısa döngülerde gerçekleştirir, ki “transparan ağ geçitleri” bu süreyi kaldıramaz.