Bir çok otomasyon projesinde Modbus Rtu / Tcp Ip ile haberleşme gereksinimi ortaya çıkar. Modbus Rtu / Tcp Ip Haberleşme interface’i olarak kullanabileceğiniz. Modbus Rtu / Tcp Ip ActiveX esnek yapısı ile projelerinizde kullanabilirsiniz. Modbus Rtu / Tcp Ip ActiveX company lisans ile satılır. Lisans sahipleri bu activeX'i her hangi bir sınır olmaksızın kullanabilirler. Modbus Rtu / Tcp Ip ActiveX .Net frame work 3.5 kullanılmıştır. Bu ActiveX son derece yüksek bir iletişim hızına sahiptir. Bir word boyundaki data saniyede 75 defa okunabilir.
ActiveX kullanıcılarının programlarına kolaylıkla ekleyebilmeleri ve programın muhtemel diğer ihtiyaçlarının kolaylıkla karşılanabilmesi düşünülerek hazırlanmıştır. Bu amaçla sıradan ActiveX'lerde olmayan proje kayıt,kayıt getirme fonksiyonları dahi ActiveX'e eklenmiştir. Böylece projenizin Modbus haberleşme ile alakalı tüm işlemlerini bir kaç dakikada bitirebilirsiniz.






shape
MODBUS RTU PIC SOURCE CODE

shape
Modbus Rtu Vb 2005-2008 Example Project.
Genel Açıklama: Modbus Rtu ActiveX uygulamalarınıza kolaylıkla adapte edilebilir. Program kullanıcılarının Modbus Rtu haberleşme ile alakalı ihtiyaç duyabilecekleri tüm ayarlar activex üzerinden yapılabilir. Bu ayarlar tercihinize göre sizin programınızdan da yapabilirsiniz. Activex ayarlarından bu fonksiyonları devre dışı bırakabilirsiniz. Daha fazla bilgi edinmek için Vb2005 ve Vb 2008 için hazırladığımız örneği inceleyiniz.
ActiveX .net framework 3.5 kullanılarak hazırlanmıştır. Program demosu 10 dakika çalışacak şekilde yapılmıştır. ActiveX Tag sayısı ile ilgili bir kısıtlama yoktur.

Activex'i 4 ana grupdan oluşur.
ToolStrip: File menü butonları ve connect,disconnect butonlarının bulunduğu bu buton grubu tercihiniz doğrultusunda görünür veya gizli olabilir. Butonların fonksiyonlarını uygulamanız içerisinde activex property'lerini kullanarak da yapabilirsiniz.
File Menu: Activex üzerindeki tüm bilgileri silmeye,yüklemeye ve kaydetmeyi sağlayan butonların bulunduğu menü'dür.
New(Yeni),Open(Aç),Save(Kaydet),SaveAs(Farklı kaydet) butonları bulunur.
Connect Menu: Connect ve Disconnect butonlarının bulunduğu menüdür.

StatusStrip: ActiveX alt bölümünde yer alan bilgi grubudur. Bu grup içerisindeki ilk bilgi Tag sayısıdır. Daha sonra "Good" hatasız olarak yapılan haberleşme sayısıdır. "Bad" başarısız olan haberleşme sayısıdır.
Query Byte Count: Bu bölümdeki en önemli bilgidir. Girilen değişken adres bilgilerine göre activex otomatik olarak mpi sorgusunu hesaplar ve plc'ye gönderir. Hesaplanan sorgu neticesinde plc'nin göndermesi gereken byte sayısını burada görebilirsiniz. Bu sayı ne kadar büyük olursa paket sayısıda o kadar az olacaktır. Modbus Rtu protokolünde paket büyüklüğünden ziyade paket sayısı daha önemlidir. Performansı artırmak için paket sayısını düşük tutmak gereklidir.
Error:  Bu kısımda plc'den gelen hata mesajlarını görebilirsiniz.

Rtu Network Menu: Ağaç görüntüsündeki bu menünün ilk öğesi Rtu Network öğesidir. Ağaç görüntüsünde ikinci öğe istasyon son öğe ise grup'dur. Her öğe seçildiğinde sağ taraftaki tag listesi o ögenin tagları ile doldurulur.
Rtu Network: Pc port ayarları ve Rtu net. ayarlarını bu alanda görebilirsiniz. Bu alanda sağ click yaptığınızda işlem menüsü açılır.  Rtu network ayarlarında en önemli parametre pool.interval parametresidir. Bu parametre ile plc'ye gönderilen sorguların periyotunu ayarlayabilirsiniz. Plc'ye bilgi yazılacağı zaman bu verinin bir önemi yoktur. Yazma komutu alındığında bekleme yapılmaksızın plc'ye bu bilgi transfer edilir.
Station: Bu alanda istasyon bilgilerini girmelisiniz.
Adress: Plc modbus adresini buraya girmelisiniz. Her istasyonun adresi bir birinden farklı olmalıdır.
File Repeated Queries: Haberleşme hatasında sorgu tekrar sayısını buraya giriniz.
Function Code 6 Enable-Disable: Bazı plc'ler bilgi yazma işleminde fonksiyon kodu 6'yı kullanmazlar. Bunun yerine aynı görevi yerine getirecek olan fonksiyon kodu 16 kullanılır.
Discrate Max. Block Size: Modbus protokolünde 8 ila 2000 bit tek seferde okunabilir. Fakat bazı plc'lerde bu paket daha küçük olabilir. Bu parametre ile maksimum paket boyunu ayarlayınız.
Analog Max. Block Size: Modbus protokolünde 1 ila 125 registers tek seferde okunabilir. Fakat bazı plc'lerde bu paket daha küçük olabilir. Bu parametre ile maksimum paket boyunu ayarlayınız.

Group: ActiveX'in en önemli olaylarındandır. Tüm seri haberleşme yöntemleri sınırlı kapasiteye sahiptir. Bu kapasiteyi en iyi şekilde kullanmak için farklı gruplar oluşturulabilir. Grubun "cycle" paremetresi ile bazı grupları her saykılda bazı grupları ise daha seyrek olarak okuyabilirsiniz. Böylece plc değerlerinin bir kısmını hızlı bir kısmını daha yavaş okuyabilirsiniz. Uygulanabilir grup sayısı 128 tanedir. Grupların bir diğer faydasıda daha sonraki bölümde geniş olarak anlatılacak olan sorgu byte sayısını ayarlamaya yardımcı olmasıdır. Ayrıca çok fazla veri iletişimi olduğunda verilerin izlenmesinde kolaylık sağlar.

Tag List: Tagların oluşturulduğu,değerlerinin izlendiği ve yeni değerlerin yazıldığı tablodur. Bu tablo üzerinde işlem yapılabilmesi için sol tarafta grup seçili olmak zorundadır. Grup seçili değil ise yapılabilecek tek işlem set değeri yazmaktır. Grup seçildiğinde bu listede sadece bu grupta bulunan taglar gözükür. istasyon veya network seçildiğinde ise seçili öğeye ilişkin tüm taglar listelenir.
Adress: Tag'ın plc içerisindeki adresini bu sütuna yazmalısınız. Bu alana hex değer girebilirsiniz. Bunun için sayının başına "h" harfi koymanız yeterlidir. 
Tag Name: Her yeni tag eklendiğinde sistem otomatik olarak tag listesinde bulunmayan yeni bir isim verir daha sonra bu ismi siz belirleyebilirsiniz. Tüm Tag isimleri bir birinden farklı olmak zorundadır.
Value Type:  Gösterilen sayı tipleri :Boolean, Usigned int16, Signed int16, Bcd, Usigned int32, Signed int32, Floatpoint, Long Bcd, Time Of Day, Date. Bazı sayı tipleri için extra açıklama yapılmasına gerek duyuyoruz. Floatpoint bu sayı tipi single olarakta isimlendirilir. Date tipi word olarak ifade edilen gün sayısıdır. Tarihin başlangıç değeri "1.1.1990" dır.
Read Value: Plc'den okunan değerler bu sütunda gösterilir.
Write Value: Bu sütuna yazdığınız değer ilk olarak hatalı olmadığı test edilir ve hatalı değil ise plc'ye gönderilir. Plc'ye bilgi giriş işlemleri önceliklidir. Diğer işlemlerin sırası beklenmeden aktif sorgu biter bitmez yazma işlemi aktif edilir.

En iyi performans'ı elde etmek için dikkat edilmesi gereken hususlar: ActiveX aynı grup içerisindeki tüm tagları tek seferde
okumaya çalışır. Tag listesine girdiğiniz adres bilgisine göre gönderilecek sorguyu hesaplar. Eğer girilen adresler birbirlerini takip eden adresler ise tüm listeyi tek seferde okumayı gerçekleştirir. Tek seferde okunacak byte sayısı 250 ile sınırlıdır. ActiveX hesapladığı sorgu boyunu Statusstrip'de bulunan "Query byte count" ile bildirir. Hesapladığınız sorgu boyundan farklı bir sayı görüyorsanız, muhtemelen bir hata yaptınız demektir.
Konuyu bir kaç örnekle açıklayalım. Aşağıda bazı sorgu örnekleri ve toplam byte uzunlukları verilmiştir.
FULTEK MODBUS RTU SERVER

shape
Rtu ActiveX kullanım kılavuzu
40001        Uint 16
40002        Sint 32
40004        Float.
40006        Sint 16
40005        Uint 32

Query byte count:
1.sorgu: 16 byte
40001        Uint 16
40002        Sint 12
40004        Float.
30006        Sint 16
30005        Uint 32

Query byte count:
1.sorgu: 4 byte
2.sorgu: 4 byte
3.sorgu: 6 byte
40001        Uint 16
40002        Sint 12
40004        Float.
40006        Sint 16
40005        Uint 32

Query byte count:
1.sorgu: 4 byte
2.sorgu: 10 byte
Modbus Rtu Propert:
Public AutoStart_ As Boolean False kapalı True açık demektir. Plc'nin kapalı olduğunda veya başka sebeplerden dolayı plc bağlantısı sağlanamadığında haberleşme başlatılamayacaktır. Bu seçenek True olarak seçildiğinde activex sürekli bağlanmayı deneyecektir. Böylece plc hazır olduğunda haberleşme başlayacaktır.
Property Value_(ByVal TagId As UInt32) As String Set değeri yazmak veya aktuel değeri okumak için kullanabilirsiniz. TagId Tag listesindeki satır numarasıdır.
Public FileName_ As String Aktif olan dosya adını bu variable'dan okuyabilirsiniz.
Property LoadSettings_() As String Dosya yolunu bu propertye verdiğinizde otomatik olarak dosyayı açar. Bu property'nin dönen değeri dosya yoludur.
Public Sub SaveSettings_(ByVal value As String) Mevcut bilgileri vereceğiniz dosya adıyla kaydeder. Dosya adı dosya yolunuda içermelidir.
Property Connect_() As Boolean Bu property'i True yaptığınızda plc'ye bağlanır False yaptığınızda bağlantıyı keser. Bağlantı durumunuda bu property'den sorgulayabilirsiniz. Plc'ye bağlanmayı denediği durumlarda da True olarak sonuç bildirecektir. Gerçek durum aşağıdaki variable'dan alabilirsiniz.
Public Connection_ As Boolean Bağlantı durumunu bu variable'dan okuyabilirsiniz. Bağlantı sağlandıktan sonra True olacaktır.
Property PcBaudrate_() As UInt32 Pc Baudrate değerini sorgulayıp değiştirebilirsiniz.
Property ComPort_() As String Pc Seri port adını sorgulayıp değiştirebilirsiniz.
Property PcParity_() As String Pc Parity tipini sorgulayıp değiştirebilirsiniz.
Property PcStopBit_() As UInt16 Pc Stop bit sayısını sorgulayıp değiştirebilirsiniz.
Property PcFlowCon_() As String Pc Flow kontrol tipini sorgulayıp değiştirebilirisiniz.
Property PollInterval_() As UInt16 Poll.Interval değerini sorgulayıp değiştirebilirsiniz.
Property TimeOutTime_() As UInt16 Timeout zamanını sorgulayıp değiştirebilirsiniz.
Property StationAdress_(ByVal StationName As String) As UInt16 Plc adresini sorgulayıp değiştirebilirsiniz.
Property FailRepeatedQueries_(ByVal StationName As String) As UInt16 Hata durumunda sorgu tekrar sayısını sorgulayıp değiştirebilirsiniz.
Property FunctionCode6EnbDis_(ByVal StationName As String) As Boolean Fonksiyon code 6'nın devrede olup olmadığını sorgulayıp değiştirebilirsiniz.
Property CoilBlockSize_(ByVal StationName As String) As UInt16 Coil maksimum paket boyutunu sorgulayıp değiştirebilirsiniz.
Property DiscInpBlockSize_(ByVal StationName As String) As UInt16 Discrate Input maksimum paket boyutunu sorgulayıp değiştirebilirsiniz.
Property HoldingBlockSize_(ByVal StationName As String) As UInt16 Holding maksimum paket boyutunu sorgulayıp değiştirebilirsiniz.
Property AnInpBlockSize_(ByVal StationName As String) As UInt16 Input maksimum paket boyutunu sorgulayıp değiştirebilirsiniz.
Function TagList_() Bu fonksiyon çalıştırıldığında tag listesinin tamamını Array olarak döndürür.
Function TagListErr_() Bu fonksiyon tag listesinde hatalı değer varsa False yoksa True sonucunu döndürür.
Public Sub NotAvailableTagName(ByVal TagName As Array) Projenizde birden çok Rtu ActiveX kullandığınızda veya bu activeX haricinde taglarınız bulunduğunda mevcut tag listesini bu fonksiyon ile activex'e yazabilirsiniz. Böylece activex içerisindeki tag'ların adını kontrol ederken bu listeyi de kontrol eder. Böylece tag adının benzersiz olması hem bu listede hemde diğer taglarınızda kontrol edilmiş olur.
Property GroupCycle_(ByVal GroupName As String) As UInt16 Adı girilen grubun saykıl değerini döndürür veya değiştirir.
Property FileMenu_() As Boolean File menü butonlarının görünür görünmez durumları ayarlanır veya öğrenilir.
Property ConnectButton_() As Boolean Connect ve Disconnect butonlarının görünür görünmez durumları ayarlanır veya öğrenilir.
Property ToolStrip_() As Boolean ToolStrip görünür görünmez durumları ayarlanır veya öğrenilir.
Property StatusStrip_() As Boolean StatusStrip görünür görünmez durumları ayarlanır veya öğrenilir.
Property TreeviewMenu_() As Boolean Rtu Network ağaç görüntüsünde mouse sağ click ile açılan menüleri yasaklar veya izin verir.
Property DataGridMenu_() As Boolean Tag listesinde mouse sağ click ile açılan menüleri yasaklar veya izin verir.

Event:
Event MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Event MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Event MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Event KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Event Connected_(ByVal sender As Object, ByVal Status As Boolean) Bağlantı sağlandığında ve bağlantı kesildiğinde interrupt olarak ana programa durum bilgisi iletir.
Event ReadValue_(ByVal sender As Object, ByVal TagId As UInt32, ByVal Value As String) 
Plc'den okuma gerçekleştiğinde okunan değer önceki değerden farklı ise bu interrupt ana programa Tag listesindeki sıra numarası ile birlikte Tag değerini gönderir. Haberleşme ilk başlatıldığında tüm tag değerleri bir kez gönderilir.
Event ReadErr_(ByVal sender As Object, ByVal TagId As UInt32) 
Plc'den yapılan okuma işlemlerinde oluşan hatalar tag listesindeki satır numarası ile ana programa bildirilir.
Event SetErr_(ByVal sender As Object, ByVal TagId As UInt32) 
Set değerleri uygun olmadığı veya plc'ye yazılamadığı durumlarda hata tag listesindeki satır numarası ile ana programa bildirilir.
Event TimeOut_(ByVal sender As Object, ByVal StationName As String)
Plc ile bağlantı sağlanamadığı durumda timeout olan activex durumu ana programa bildirir.
Event GenericErr_(ByVal sender As Object, ByVal Message As String) 
Bir çok hata durumu bu interrupt ile ana programa bildirilir. Bu interrup hata mesajınıda içerir.
Modbus ActiveX
Modbus Software
Rtu ActiveX
Rtu Software
Modbus Server
Modbus Remote
Modbus Slave
Modbus Master
Modbus .Net
Modbus Vb.
Modbus VisualBasic
Modbus Visual Basic
100 Usd.
Modbus Rtu ActiveX
English