Host ile Smart Display Arasında Modbus Haberleşmesi
Geliştiricilerin WINSTAR Smart Display ürünlerini daha kolay kullanmaya başlamalarını ve çalışma prensibini daha iyi anlamalarını sağlamak amacıyla, farklı uygulama senaryolarını kapsayan pratik demo projeleri sunmaya devam ediyoruz. Bu makalede, hem yeni başlayanların hem de deneyimli geliştiricilerin Modbus haberleşmesinin temel prensiplerini hızlı bir şekilde kavramalarına yardımcı olacak başka bir Modbus demo uygulamasını ele alıyoruz.
Modbus, endüstriyel otomasyonda çeşitli cihaz ve sensörlerle haberleşmek ve bunları kontrol etmek için yaygın olarak kullanılan bir protokoldür. Bu uygulamada Arduino kartı, sistem entegrasyonu için host kontrolcü olarak görev yapar. Arduino, Modbus üzerinden çeşitli sensörler ve Toggle Button ile birlikte çalışarak Smart Display, Gauge, Indicator ve LED'leri kontrol eder. Bu demo uygulamasında, Smart Display ile Modbus üzerinden haberleşmek için RS485 shield ile birlikte Arduino Mega 2560 kullanılmaktadır.
Program, sensör değerlerinin Modbus register'ları üzerinden nasıl okunacağını, ekran sayfaları arasında nasıl geçiş yapılacağını ve sensör değerlerine göre LED'lerin nasıl kontrol edileceğini göstermektedir.

Sistem Blok Diyagramı
Bu uygulama için aşağıdaki bileşenler gereklidir:
- Modbus destekli 7 inç Smart Display
- Arduino Mega 2560
- Arduino Mega 2560 için RS485 Modbus Shield
- Arduino IDE v2.0.4
- Modbus RS485 Dongle
- Fiziksel buton
- Değişken dirençli döner açı sensörü (Variable Resistor / Rotary Angle Sensor)
- LED
- GUI Builder v0.4.2 veya üzeri
Demo uygulaması üç aşamadan oluşmaktadır:
- GUI Builder'da demo projesini tasarlamak.
- Projeyi derlemek ve yüklemek.
- Arduino host'u programlamak.
GUI Builder'da Demo Projesini Tasarlama
İlk olarak GUI Builder'ın güncel bir sürümünü açın ve yeni bir proje oluşturun. Proje adını girin ve varsayılan olarak otomatik seçilen proje klasörünü kontrol edin. Ardından bu demo uygulamasında kullanılan 7 inç Smart Display'e uygun cihaz tipini ve haberleşme protokolünü seçin. Ekran yönünü varsayılan yatay modda bırakın, UI Template bölümünde « Blank » seçeneğini belirleyin ve son olarak aşağıda gösterildiği gibi « Create » düğmesine tıklayarak yeni projeyi oluşturun.

Proje oluşturulduktan sonra aşağıdaki sayfa görüntülenir.

Demo senaryosuna göre ikinci bir sayfanın eklenmesi gerekir. Bunun için « Page » düğmesine ve ardından « + » düğmesine tıklayın.

Resource panelinden özel bir arka plan seçilebilir.

Arka plan stili Page bölümünden de doğrudan seçilebilir.

Ardından ilk sayfaya dönün ve Controls bölümüne geçin. Demo senaryosuna göre Toggle Button'ı seçerek sayfa yerleşim alanına sürükleyip bırakın. Gauge ve Indicator widget'larını eklemek için de aynı işlemi uygulayın.

Projeyi Derleme ve Yükleme
Önceki adımlar tamamlanıp iki ayrı sayfa oluşturulduktan ve ilk sayfaya Toggle Button, Gauge ve Indicator widget'ları eklendikten sonra proje derlenip Smart Display'e yüklenebilir. Page Info bölümüne gidin, « Device » düğmesine tıklayın ve « Device Properties » seçeneğini belirleyin. Yapılandırılan protokolü kontrol edin, COM portunu seçin ve baud rate değerini ayarlayın. Ardından « Connect to device » düğmesine tıklayarak Smart Display ile bağlantı kurun. Son olarak, aşağıda gösterildiği gibi « Upload » düğmesine tıklayarak projeyi yükleyin ve yükleme işleminin tamamlanmasını bekleyin.

Proje yükleme işlemi tamamlandıktan sonra aşağıda gösterildiği gibi « OK » düğmesine tıklayın.

Yükleme işlemi tamamlandığında aşağıda gösterilen başlangıç ekranı görüntülenir.

Başlangıç ekranının ardından Smart Display otomatik olarak projenin ilk sayfasına geçer. Böylece projenin GUI Builder üzerinden derlenmesi ve Smart Display'e yüklenmesi tamamlanmış olur.

Arduino Host'u Programlama
Aşağıdaki şekilde Arduino IDE programında kullanılan gerekli register adresleri ve temel tanımlamalar gösterilmektedir. Program ilk olarak fiziksel butonun, değişken dirençli döner açı sensörünün ve LED'lerin pinlerini tanımlar. Ardından ModbusMaster kütüphanesi kullanılarak Modbus haberleşmesi başlatılır. Ayrıca ekran sayfasını değiştirmek ve Indicator, Gauge ve Toggle Button widget'larını kontrol etmek için gerekli Modbus register adresleri tanımlanır.

Haberleşme sürecini daha ayrıntılı incelemek için GUI Builder'daki haberleşme günlüğünün Test Device veya Simulator bölümüne bakabilirsiniz. Bu bölümde host cihaz ile Smart Display arasındaki Modbus RS485 haberleşmesinin nasıl gerçekleştiği görülebilir.
Aşağıdaki şekilde « Toggle Button » widget'ına ait haberleşme günlüğü verileri gösterilmektedir. Bu veriler, Smart Display üzerindeki widget'a erişmek için kullanılan adresin belirlenmesini sağlar. Data Byte alanının ikinci byte'ında 00 06 hexadecimal değeri bulunur. Bu değer Toggle Button'ın adresini temsil eder ve decimal sisteme dönüştürüldüğünde 6 değerine karşılık gelir. Bu adres widget'a veri yazmak için kullanılabilir. Ancak bu uygulamada Toggle Button, Smart Display'den veri okumak amacıyla kullanılmaktadır. Bu nedenle Toggle Button'ın durumunu okumak için « 7 » register adresi kullanılır.

Peki Toggle Button'ın durumunu okumak için neden « 7 » register adresi kullanılır? Register adreslerinin kullanımı ve haberleşme süreci hakkında daha ayrıntılı bilgi için Modbus Smart Display veri sayfasına başvurabilirsiniz. Aşağıdaki veri sayfası görüntüsünde ilk nesne (widget) olan Toggle Button için kullanılan adresler gösterilmektedir.

Aşağıdaki şekilde « Gauge » widget'ına ait haberleşme günlüğü verileri gösterilmektedir. Bu veriler üzerinden Gauge widget'ının adresi belirlenebilir. Data Byte alanının ikinci byte'ında 00 6A hexadecimal değeri bulunur. Bu değer Gauge adresini temsil eder ve decimal sisteme dönüştürüldüğünde 106 değerine karşılık gelir. Bu adres Gauge widget'ına veri yazmak için kullanılabilir.

Aşağıdaki şekilde « Indicator » widget'ına ait haberleşme günlüğü verileri gösterilmektedir. Bu veriler üzerinden Indicator widget'ının adresi belirlenebilir. Data Byte alanının ikinci byte'ında 00 CE hexadecimal değeri bulunur. Bu değer Indicator adresini temsil eder ve decimal sisteme dönüştürüldüğünde 206 değerine karşılık gelir. Bu adres Indicator widget'ına veri yazmak için kullanılabilir.

ADC_REF sabiti 5 V olarak tanımlanmıştır ve ADC'nin (analog-dijital dönüştürücü) referans gerilimini ifade eder. GROVE_VCC sabiti 5 olarak tanımlanmıştır ve devrede kullanılan Grove arayüzünün VCC gerilimini temsil eder. FULL_ANGLE sabiti ise 300 olarak tanımlanmıştır ve bu uygulamada kullanılan döner açı sensörünün derece cinsinden maksimum dönüş açısını ifade eder.

Ardından gerekli değişkenler ve bunlara ait veri tipleri tanımlanır ve başlangıç değerleri sıfır olarak ayarlanır.

Sonraki adımda fiziksel buton ve LED gibi harici bileşenler için pin modları ve gerekli ayarlar yapılandırılır. Ayrıca seri haberleşme için baud rate değeri aşağıda gösterildiği gibi ayarlanır.

Aşağıdaki şekilde « ChangePageFunction » fonksiyonunun tanımlanması gösterilmektedir. Verilerin ilgili Modbus register'ına yazılması için « writeSingleRegister » fonksiyonu kullanılır.

Aşağıdaki şekilde değişken dirençli döner açı sensöründen (Variable Resistor / Rotary Angle Sensor) alınan değerin nasıl işlendiği gösterilmektedir. Arduino host, sensör değerindeki değişikliği algıladığında bu değeri Modbus üzerinden Smart Display'e göndererek Gauge değerini günceller. Gauge değeri 120'nin altındaysa pin 13'e bağlı LED kapalı kalır ve Indicator yeşil olarak görüntülenir. Değer 120'ye ulaştığında veya 120'nin üzerine çıktığında LED yanar ve Indicator kırmızıya döner.

Aşağıdaki şekilde fiziksel butonun durumunun nasıl işlendiği gösterilmektedir. Arduino host, buton durumunda bir değişiklik algıladığında ilgili değeri Modbus üzerinden Smart Display'e göndererek görüntülenen sayfayı değiştirir.

Aşağıdaki şekilde Arduino host'un Toggle Button durumunu Modbus üzerinden Smart Display'den nasıl okuduğu gösterilmektedir. Alınan değere göre pin 12'ye bağlı LED açılır veya kapatılır.

Programın önemli bölümlerinden biri « writeSingleRegister » ve « readHoldingRegisters » fonksiyonlarının kullanılmasıdır. « writeSingleRegister » fonksiyonu Smart Display register'larına veri yazmak için, « readHoldingRegisters » fonksiyonu ise Smart Display'den veri okumak için kullanılır. Gauge gibi aktif widget'larla haberleşirken Modbus işlemleri arasında uygun bir gecikme süresinin bırakılması da önemlidir. Bir istek gönderilip ilgili yanıt alındıktan sonra bir sonraki işlem gerçekleştirilebilir. Bu nedenle programda okuma ve yazma işlemleri arasında gerekli gecikmeler uygulanır.

Program Arduino IDE üzerinden başarıyla doğrulanıp Arduino'ya yüklendikten sonra demo senaryoları uygulanabilir. Toggle Button OFF durumundayken pin 12'ye bağlı harici LED de kapalı kalır. Toggle Button ON durumuna getirildiğinde ise LED aşağıda gösterildiği gibi hemen yanar.

Bu demo senaryosunda Gauge, değişken dirençli döner açı sensörü tarafından kontrol edilir. Gauge değeri 120'nin altındaysa Indicator yeşil olarak görüntülenir ve pin 13'e bağlı LED kapalı kalır. Değer 120'ye ulaştığında veya 120'nin üzerine çıktığında Indicator kırmızıya döner ve pin 13'e bağlı LED yanar.

Bu demo senaryosunda fiziksel buton kullanılarak sayfalar arasında geçiş yapmak da mümkündür. Butona ilk kez basıldığında Smart Display ikinci sayfaya geçer. Butona tekrar basıldığında ise ilk sayfaya geri döner.

Böylece 7 inç Smart Display için hazırlanan demo projesi tamamlanmış olur. Bu örnekte fiziksel bir buton kullanılarak ekran sayfaları arasında geçiş yapmak ve Gauge, Indicator ile harici LED'leri kontrol etmek için çeşitli sensörler ve LED'ler kullanılmaktadır. Programı indirmek ve demo projesi hakkında daha fazla bilgi edinmek için GitHub demo programına başvurabilirsiniz.
Not: Bu demo projesinde kullanılan Modbus RS485 Shield hakkında daha fazla bilgi için Modbus RS485 Shield dokümantasyonuna bakabilirsiniz. Gerçek donanım kurulumu aşağıda gösterilmektedir.

Sonuç
Genel olarak bu program, bir Arduino kartı ve Modbus protokolü kullanılarak Smart Display ile nasıl haberleşileceğini ve sistemdeki farklı bileşenlerin nasıl kontrol edileceğini uygulamalı olarak göstermektedir. Örnekte sensör değerlerinin okunması, ekran sayfaları arasında geçiş yapılması ve Modbus register'ları üzerinden Indicator ile LED'lerin kontrol edilmesi ele alınmaktadır. Böylece proje, hem Modbus haberleşmesine yeni başlayan geliştiriciler hem de Smart Display entegrasyonu konusunda bilgilerini geliştirmek isteyen deneyimli geliştiriciler için pratik bir örnek sunmaktadır.