Merhaba, C# Modbus Bağlantısı Yapmak ve Veri Okumak TCP yazım ile modbus konusunun son yazısını yazmış oluyorum. Son yazısı çünkü daha detayları bizlerin ile otomasyoncuların işine giriyor. Eğer bu sistemi öğrenmek istiyorsanız o tarz işleri yapan bir şirkette çalışmaya başlamak durumdasınız. Dışarıdan bir yere kadar öğrenebilirsiniz çünkü bu gibi işlerde kullanılan cihazlar ve hazırlanan panoların ücretleri çok büyük olabiliyor. Kişisel olarak bir PLC panosu toplamak pek mümkün değil.
Modbus Nedir? Modbus Ne İşe Yarar? yazısına gitmek için bağlantıya tıklayabilirsiniz.
C# Modbus Bağlantısı Yapmak ve Veri Okumak TCP
Bu yazıda sizlere kurulmuş ve aktif olarak veri göndermeye başlamış bir modbus’a nasıl bağlanıp veri okuyabileceğinizi anlatmaya çalışacağım.
İlk olarak Visual Studio ‘da Tools – Nuget Package Manager > Manage Nuget Packages for Solution’a geliyoruz. Açılan ekranın sol üst kısmından Browse kısmına geliyoruz ve arama alanına EasyModbus yazıyoruz. EasyModbusTCP by Stefan RoBmann olan paketi buluyoruz ve projemize kurulumunu yapıyoruz.
Kurulumu tamamladıktan sonra PLC sistemini kuran yada makinadaki ilgili cihazlar ile ModBus bağlantısını yapan kişi ile görüşüp Modbus ‘un IP adresini, port numarasını (standartta 502’dir) ce cihazın adres numarasını vermesi gerekiyor.
Elinizde şu şekilde bir bilgi olması gerek.
ModBus TCP Adresi : 192.168.10.10
ModBus TCP Port NO : 502
Cihazın Adresi : 40501 (Yandaki sayı yerine 40500, 501, 500 de kullanılabiliyor.)
PLC sistemini hazırlayan kişi size 40501 vermiş ise direk bu sayıyı maalesef kullanamıyorsunuz. Nedenini detaylıca bilmemekle birlikte çözümü 40501’i 501 olarak kullanabilirsiniz. Yani başındaki 40 ibaresini kullanmayabilirsiniz.
Bu bilgileri aldıysanız işleme başlayabiliriz.
private static ModbusClient client; public static void Start(string ip, int port) { client = new ModbusClient(ip, port); } public static void Connect() { if (!client.Connected) { client.Connect(); } }
Bu kodlar ile artık ModBus’a TCP ile bağlanmış olduk. Birde bağlantıyı kapatma kodlarını verelim.
public static void Disconnect() { client.Disconnect(); }
NOT: Bağlantı açma ve kapatma işleminde bağlantıyı sürekli açıp kapatarak kullanmayın. Yani bağlantıyı aç, veriyi oku, bağlantıyı kapat döngüsünde kullanamayın. Bir sebepten ötürü bağlantıyı kapatamadığında ve bağlantı açıkken tekrar tekrar bağlantı açmaya çalıştığınızda kilitlenme yaşanıyor ve modbus cihazını kapatıp açmanız gerekiyor. Bu sebeple örneğin form açıldığında bağlantıyı açıp, form kapanırken bağlantıyı kapatma şeklinde kullanmanızı tavsiye ediyorum.
Şimdi Verileri okumaya hazırız.
/// <summary> /// Tek bir değer alınmak istese bu metodunu kullanın. /// </summary> /// <param name="ip"> Modbus device ip </param> /// <param name="port"> Modbus device port </param> /// <param name="baslangic_deger"> Okunacak modül adresi </param> /// <returns></returns> public static object Baglan_DegeriOku(int baslangic_deger) { object Sonuc = client.ReadHoldingRegisters(baslangic_deger, 1)[0].ToString(); return Sonuc; }
Burada başlangıç değer dediğimiz değişken, yukarıda PLC sistemini hazırlayan kişiden alacağınız adrestir.
Burada tek bir modülden değer okuma işlemi verilmiştir. En azından benim kullandığım yöntem bu şekildeydi.
Sistemin tüm detayları ile işlendiği açık kaynak projelerini indirip denemek isterseniz bu bağlantıya tıklayabilirsiniz. Burada indireceğiniz projede Modbus Advanced Client ve Modbus Simple Client şeklinde iki ayrı proje vardır. Bende bu projeleri inceleyerek okumayı yapabildim.
C# Modbus Bağlantısı Yapmak ve Veri Okumak TCP yazım bu kadardı arkadaşlar. Diğer yazılarımda görüşmek üzere. Aşağıdaki linklerden eğitim seti sayfasına ve github projesine ulaşabilirsiniz.
C# Eğitim Seti sayfasına gitmek için tıklayınız. Hazırladığım projeleri yüklediğim Github Profilime buradan ulaşabilirsiniz… Hazırladığım içerikleri faydalı buluyorsanız yorum atarak ve yazılımla ilgilenen arkadaşlarınızla paylaşabilirseniz çok mutlu olurum. Discord’a katılmayı unutmayın.
Sağlıcakla ve kodla kalın….
1den çok plc ye bağlanacaksak
Yeni bağlantılar türetip kullanarak yapabilirsiniz. Ek olarak bu bağlantıları yönetecek bir ara yüz gelitşriebilirsiniz. easymobdus olarak aratırsanız örnek app ler vardı.
selam hocam, eline sağlık, kaynak kodu zip içinde yok maalesef, projeyi paylaşma imkanın var mı?
Teşekkürler.
Selamlar. Teşekkürler. Proje maalesef artık elimde değil. Asıl kaynaklar yazıda verdiğim linkte. Eğer orada da yoksa maalesef elden bir şey gelmez.
https://sourceforge.net/projects/easymodbustcp/#focus