none
TCP ile Modbus Üzerinden Register Yazma RRS feed

  • Soru

  • Merhabalar,

    Bir süredir bir proje için modbus haberleşmesi ile uğraşıyorum.

    projede sadece tcp bağlantısı yapıldıktan sonra bağladığım cihaza modbus protokolü ile 24. registerın valuesu bu 25. registerın bu 26. registırın valusu bu demek kaldı bağlantıyı yaptım ancak şu register olayına henüz bir çözüm bulamadım. Bu konudu bir hayli tecrübesiz olduğumdan örnek veya yapmam gereken adımlar konusunda desteklerinizi rica ediyorum.

    Teşekkürler. İyi Çalışmalar. 


    • Düzenleyen Durak.AnilEmre 5 Mart 2020 Perşembe 09:23 Sorun Çözümü
    4 Mart 2020 Çarşamba 08:34

Yanıtlar

  • Bu alana çözümüde Bırakıyorum belki birinin işine yarar ;

    öncelikle Nuget paketlerinden " NModbus4 " adlı paketi yükledim daha sonra da aşağıdaki kodları kullanarak işlemleri tamamladım. Not : startRef = 22 ve noofRefs = 24 olması benim ihtiyaç duyduğum adres aralığıdır siz kendi ihtiyaçlarınıza göre ayarlaya bilirsiniz startRef başlangıç registerı noofrefs ise bitiş yani aralık belirtmiş olduk.

    KOD 

    using System;
    using System.Net.Sockets;
    using System.Net;
    using Modbus.Device;
    using System.IO.Ports;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace modBUSS
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("İstek İşleniyor Bağlantı: Ok");
                string ipAddr = "192.168.1.213"; // hedef İp Adresi
                int tcpPort = 502; // Port Numarası
    
                // Tcp Client oluşturup cihaz ile bağlantı kurduk
                TcpClient tcpClient = new TcpClient();
                tcpClient.BeginConnect(ipAddr, tcpPort,null,null);
    
                // TCP istemcisinde modbus ana aygıtını oluşturduk.
                ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient: tcpClient);
    
                ushort startRef, noOfRefs;            
                startRef = 22; // başlangıç register ı
                noOfRefs = 24; // bitiş register ı
                bool[] dOutputs = master.ReadCoils(startRef, noOfRefs);            
                master.WriteMultipleCoils(startRef, new bool[] { true, false, true, true, true });            
                bool[] dInputs = master.ReadInputs(startRef, 1);
                string inputStr = String.Join(" | ", dInputs);
                Console.WriteLine("Giriş " + inputStr);            
                ushort[] outputRegisterData = master.ReadHoldingRegisters(startRef, noOfRefs);
                master.WriteMultipleRegisters(startRef, new ushort[] { 80, 31, 23, 12, 8 });
                ushort[] inputRegisterData = master.ReadInputRegisters(startRef, noOfRefs);
                string registerStr = String.Join(" | ", inputRegisterData);
                Console.WriteLine("Girş Kayıtları -- " + registerStr);
    
                Console.WriteLine("Çıkmak İçin Enter'a basın");
                Console.ReadLine();
            }
    
            private static ModbusIpMaster CreateIp(TcpClient tcpClient)
            {
                throw new NotImplementedException();
            }
        }
    }
    

    • Yanıt Olarak İşaretleyen Durak.AnilEmre 5 Mart 2020 Perşembe 09:23
    5 Mart 2020 Perşembe 09:23