Birden fazla PLC'den veri çekme

berkay411

Üye
Katılım
17 Tem 2023
Mesajlar
26
Puanları
1
Yaş
25
3 adet Mitsubishi marka plc'den ve 2 adet omron marka plc'den belirli aralıklar ile sayaç değerini okuyup sql server'a kaydetmek istiyorum. Plc'lere tek tek bağlanıp bunu C# üzerinden yapabilirim fakat istediğim her saat başı otomatik olarak bunu yapması bunun için her plc'ye 1 adet bilgisayar kurmak mı gerekiyor? bu plc'lere aynı ağ üzerinden kablosuz olarak bağlanıp yapılabilir mi? veya plc'lerin sql'e kaydetmek için kendi yazılımları var mı?
 
Üşendim ChatGPT ye sorayım dedim:

Bir forumda şöyle bir soru var sen cevap verebilir misin? 3 adet Mitsubishi marka plc'den ve 2 adet omron marka plc'den belirli aralıklar ile sayaç değerini okuyup sql server'a kaydetmek istiyorum. Plc'lere tek tek bağlanıp bunu C# üzerinden yapabilirim fakat istediğim her saat başı otomatik olarak bunu yapması bunun için her plc'ye 1 adet bilgisayar kurmak mı gerekiyor? bu plc'lere aynı ağ üzerinden kablosuz olarak bağlanıp yapılabilir mi? veya plc'lerin sql'e kaydetmek için kendi yazılımları var mı?




Evet, size yardımcı olabilirim. Verileri otomatik olarak okuyup SQL Server'a kaydetmek için her PLC için ayrı bir bilgisayar kurmanız gerekmeyebilir. Bu işlemi tek bir bilgisayar üzerinden de yapabilirsiniz. PLC'lere aynı ağ üzerinden kablosuz olarak bağlanıp yapılabilir, ancak güvenlik ve güvenilirlik açısından kablosuz bağlantıların bazı riskleri olabilir, bu nedenle kablosuz bağlantı kullanırken gerekli önlemleri almanız önemlidir.
Plc'lerin SQL Server'a veri kaydetmek için kendi yazılımları olmayabilir, genellikle bu işlemi C# gibi programlama dilleriyle dışarıdan yazılım geliştirerek gerçekleştirirsiniz. PLC üreticileri genellikle bu tür veri kayıt işlemleri için yazılım araçları sağlar, ancak SQL Server'a veri kaydetmek gibi özel bir işlem için kendi yazılımınızı geliştirmeniz gerekecektir.
İşlemi otomatikleştirmek için aşağıdaki adımları takip edebilirsiniz:
  1. C# veya başka bir programlama dilinde, PLC'lerin verilerini okumak için uygun bağlantı sürücülerini kullanarak iletişim sağlayın.
  2. Programınızı saat başı çalışacak şekilde zamanlayıcı ile düzenleyin. C# içinde Timer nesnesini kullanarak bu işi gerçekleştirebilirsiniz.
  3. Verileri okuduktan sonra, SQL Server'a kaydetmek için gerekli sorguları kullanarak verileri veritabanına aktarın. Verileri SQL Server'a yazmak için C#'ın ADO.NET veya Entity Framework gibi teknolojilerini kullanabilirsiniz.
  4. PLC'lere bağlantı yaparken, her bir PLC'nin IP adresini veya diğer iletişim bilgilerini doğru bir şekilde yapılandırmak için dikkat edin.
  5. Güvenlik ve hataya karşı önlemler alın. Verilerin güvenli bir şekilde iletilmesi ve işlenmesi için uygun güvenlik önlemlerini almak önemlidir.
Sonuç olarak, belirtilen PLC'lerden veri okuyup SQL Server'a kaydetmek için tek bir bilgisayar kullanabilir ve otomatikleştirmeyi C# veya başka bir programlama diliyle gerçekleştirebilirsiniz. Ancak bu işlemi gerçekleştirirken güvenlik ve doğruluk açısından dikkatli olmanız önemlidir.
Bu da örnek kod:

Omron ve Mitsubishi PLC için C# haberleşme örneği verebilir misin?




Tabii, burada size hem Omron PLC hem de Mitsubishi PLC için C# ile haberleşme için basit bir örnek vereceğim. Ancak unutmayın ki gerçek uygulamalarda, her iki PLC markasının modellerine ve haberleşme protokollerine göre farklı kütüphaneler veya sürücüler kullanmanız gerekebilir. Ayrıca, fiziksel bağlantı yapılandırması ve ağ ayarları da önemli olacaktır.
  1. Omron PLC ile C# Haberleşme Örneği (Ethernet üzerinden):
Omron PLC'ler için haberleşme için FINS (Factory Interface Network Service) protokolü yaygın olarak kullanılır. Bu protokol, Ethernet üzerinden haberleşmeyi sağlar.
Öncelikle NuGet Paket Yöneticisi'ni kullanarak FinsClient adlı paketi projenize ekleyin.
csharpCopy code
C#:
using System;
using System.Net.Sockets;
using Fins;

class Program
{
static void Main(string[] args)
{
try
{
// PLC'nin IP adresini ve port numarasını burada ayarlayın
string ipAddress = "192.168.0.1";
int port = 9600;

using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
// PLC'ye bağlan
client.Connect(ipAddress, port);

// FINS istemci nesnesi oluştur
FinsClient finsClient = new FinsClient(client);

// PLC'den veri okuma örneği
FinsNode finsNode = new FinsNode(1); // PLC node adresi
FinsMemoryArea memoryArea = FinsMemoryArea.DM; // Örnek olarak DM alanından veri okuyoruz
ushort address = 100; // Okunacak veri adresi
ushort length = 10; // Okunacak veri uzunluğu

byte[] data = finsClient.ReadWords(finsNode, memoryArea, address, length);
for (int i = 0; i < data.Length / 2; i++)
{
ushort value = BitConverter.ToUInt16(data, i * 2);
Console.WriteLine($"Address: {address + i}, Value: {value}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
}
}
  1. Mitsubishi PLC ile C# Haberleşme Örneği (Ethernet üzerinden):
Mitsubishi PLC'ler için haberleşme için MC Protocol (Melsec Communication Protocol) veya Modbus gibi protokoller kullanılabilir. Burada MC Protocol kullanacağız.
NuGet Paket Yöneticisi'ni kullanarak MelsecFx3u adlı paketi projenize ekleyin.
csharpCopy code
C#:
using System;
using System.Net.Sockets;
using Melsec.Fx;

class Program
{
static void Main(string[] args)
{
try
{
// PLC'nin IP adresini ve port numarasını burada ayarlayın
string ipAddress = "192.168.0.2";
int port = 6000;

using (var client = new TcpClient())
{
// PLC'ye bağlan
client.Connect(ipAddress, port);

// MC Protocol istemci nesnesi oluştur
McProtocol mcProtocol = new McProtocol(client.GetStream());

// PLC'den veri okuma örneği
ushort startAddress = 100; // Okunacak veri başlangıç adresi
ushort length = 10; // Okunacak veri uzunluğu

ushort[] data = mcProtocol.ReadDeviceBlock2("D", startAddress, length);
for (int i = 0; i < data.Length; i++)
{
ushort value = data[i];
Console.WriteLine($"Address: {startAddress + i}, Value: {value}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
}
}
Yukarıdaki örneklerde, her iki PLC'ye de Ethernet üzerinden bağlanarak veri okuyoruz. Kodları kendi ihtiyaçlarınıza göre düzenlemeniz gerekebilir. Ayrıca, Omron PLC için FinsClient ve Mitsubishi PLC için MelsecFx3u paketlerini kullanıyoruz, bu nedenle bu paketleri projenize eklediğinizden emin olun.
 
Üşendim ChatGPT ye sorayım dedim:

Bir forumda şöyle bir soru var sen cevap verebilir misin? 3 adet Mitsubishi marka plc'den ve 2 adet omron marka plc'den belirli aralıklar ile sayaç değerini okuyup sql server'a kaydetmek istiyorum. Plc'lere tek tek bağlanıp bunu C# üzerinden yapabilirim fakat istediğim her saat başı otomatik olarak bunu yapması bunun için her plc'ye 1 adet bilgisayar kurmak mı gerekiyor? bu plc'lere aynı ağ üzerinden kablosuz olarak bağlanıp yapılabilir mi? veya plc'lerin sql'e kaydetmek için kendi yazılımları var mı?




Evet, size yardımcı olabilirim. Verileri otomatik olarak okuyup SQL Server'a kaydetmek için her PLC için ayrı bir bilgisayar kurmanız gerekmeyebilir. Bu işlemi tek bir bilgisayar üzerinden de yapabilirsiniz. PLC'lere aynı ağ üzerinden kablosuz olarak bağlanıp yapılabilir, ancak güvenlik ve güvenilirlik açısından kablosuz bağlantıların bazı riskleri olabilir, bu nedenle kablosuz bağlantı kullanırken gerekli önlemleri almanız önemlidir.
Plc'lerin SQL Server'a veri kaydetmek için kendi yazılımları olmayabilir, genellikle bu işlemi C# gibi programlama dilleriyle dışarıdan yazılım geliştirerek gerçekleştirirsiniz. PLC üreticileri genellikle bu tür veri kayıt işlemleri için yazılım araçları sağlar, ancak SQL Server'a veri kaydetmek gibi özel bir işlem için kendi yazılımınızı geliştirmeniz gerekecektir.
İşlemi otomatikleştirmek için aşağıdaki adımları takip edebilirsiniz:
  1. C# veya başka bir programlama dilinde, PLC'lerin verilerini okumak için uygun bağlantı sürücülerini kullanarak iletişim sağlayın.
  2. Programınızı saat başı çalışacak şekilde zamanlayıcı ile düzenleyin. C# içinde Timer nesnesini kullanarak bu işi gerçekleştirebilirsiniz.
  3. Verileri okuduktan sonra, SQL Server'a kaydetmek için gerekli sorguları kullanarak verileri veritabanına aktarın. Verileri SQL Server'a yazmak için C#'ın ADO.NET veya Entity Framework gibi teknolojilerini kullanabilirsiniz.
  4. PLC'lere bağlantı yaparken, her bir PLC'nin IP adresini veya diğer iletişim bilgilerini doğru bir şekilde yapılandırmak için dikkat edin.
  5. Güvenlik ve hataya karşı önlemler alın. Verilerin güvenli bir şekilde iletilmesi ve işlenmesi için uygun güvenlik önlemlerini almak önemlidir.
Sonuç olarak, belirtilen PLC'lerden veri okuyup SQL Server'a kaydetmek için tek bir bilgisayar kullanabilir ve otomatikleştirmeyi C# veya başka bir programlama diliyle gerçekleştirebilirsiniz. Ancak bu işlemi gerçekleştirirken güvenlik ve doğruluk açısından dikkatli olmanız önemlidir.
Bu da örnek kod:

Omron ve Mitsubishi PLC için C# haberleşme örneği verebilir misin?




Tabii, burada size hem Omron PLC hem de Mitsubishi PLC için C# ile haberleşme için basit bir örnek vereceğim. Ancak unutmayın ki gerçek uygulamalarda, her iki PLC markasının modellerine ve haberleşme protokollerine göre farklı kütüphaneler veya sürücüler kullanmanız gerekebilir. Ayrıca, fiziksel bağlantı yapılandırması ve ağ ayarları da önemli olacaktır.
  1. Omron PLC ile C# Haberleşme Örneği (Ethernet üzerinden):
Omron PLC'ler için haberleşme için FINS (Factory Interface Network Service) protokolü yaygın olarak kullanılır. Bu protokol, Ethernet üzerinden haberleşmeyi sağlar.
Öncelikle NuGet Paket Yöneticisi'ni kullanarak FinsClient adlı paketi projenize ekleyin.
csharpCopy code
C#:
using System;
using System.Net.Sockets;
using Fins;

class Program
{
static void Main(string[] args)
{
try
{
// PLC'nin IP adresini ve port numarasını burada ayarlayın
string ipAddress = "192.168.0.1";
int port = 9600;

using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
// PLC'ye bağlan
client.Connect(ipAddress, port);

// FINS istemci nesnesi oluştur
FinsClient finsClient = new FinsClient(client);

// PLC'den veri okuma örneği
FinsNode finsNode = new FinsNode(1); // PLC node adresi
FinsMemoryArea memoryArea = FinsMemoryArea.DM; // Örnek olarak DM alanından veri okuyoruz
ushort address = 100; // Okunacak veri adresi
ushort length = 10; // Okunacak veri uzunluğu

byte[] data = finsClient.ReadWords(finsNode, memoryArea, address, length);
for (int i = 0; i < data.Length / 2; i++)
{
ushort value = BitConverter.ToUInt16(data, i * 2);
Console.WriteLine($"Address: {address + i}, Value: {value}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
}
}
  1. Mitsubishi PLC ile C# Haberleşme Örneği (Ethernet üzerinden):
Mitsubishi PLC'ler için haberleşme için MC Protocol (Melsec Communication Protocol) veya Modbus gibi protokoller kullanılabilir. Burada MC Protocol kullanacağız.
NuGet Paket Yöneticisi'ni kullanarak MelsecFx3u adlı paketi projenize ekleyin.
csharpCopy code
C#:
using System;
using System.Net.Sockets;
using Melsec.Fx;

class Program
{
static void Main(string[] args)
{
try
{
// PLC'nin IP adresini ve port numarasını burada ayarlayın
string ipAddress = "192.168.0.2";
int port = 6000;

using (var client = new TcpClient())
{
// PLC'ye bağlan
client.Connect(ipAddress, port);

// MC Protocol istemci nesnesi oluştur
McProtocol mcProtocol = new McProtocol(client.GetStream());

// PLC'den veri okuma örneği
ushort startAddress = 100; // Okunacak veri başlangıç adresi
ushort length = 10; // Okunacak veri uzunluğu

ushort[] data = mcProtocol.ReadDeviceBlock2("D", startAddress, length);
for (int i = 0; i < data.Length; i++)
{
ushort value = data[i];
Console.WriteLine($"Address: {startAddress + i}, Value: {value}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
}
}
Yukarıdaki örneklerde, her iki PLC'ye de Ethernet üzerinden bağlanarak veri okuyoruz. Kodları kendi ihtiyaçlarınıza göre düzenlemeniz gerekebilir. Ayrıca, Omron PLC için FinsClient ve Mitsubishi PLC için MelsecFx3u paketlerini kullanıyoruz, bu nedenle bu paketleri projenize eklediğinizden emin olun.
Yani aynı anda 5 plc'ye bağlı şekilde veri alabiliriz demek mi oluyor bu?
 
@molehiya 'nın bahsettiği gibi Kepware bunu yapıyor.Omron ve Mitsubishi için ayrı lisans ücreti gerekmekte.
Kepware'ın yaptığı işi yazılım ile kendin de yapabilirsin.Eş zamanlı kanallar oluşturup,bu kanallar içerisinde cihaz bağlantıları sağlayıp,bir zamanlayıcı tetiklemesi ile bu iş yapılabilir.
 
Siemens'in Böyle bir bloğu varmış(Database kayıt SQL) ben de yeni öğrendim. Birden fazla PLC var is ortak bir hat kullanmak daha iyi diye düşümüyorum. Hattan kastım MODBUS gibi ücretsiz bir protokol rs485 veya tcp/ip .Delta PLC lerde herzaman hazırda bir rs485 var(programlamak için de kullanılabiliyor).

Sözü fazla uzatmadan MODBUS RS485 veya TCP/IP kullanabilirsiniz(ücretsiz).Tabi bunu birde PC tarafında yazman için C# kullanabilirsiniz. Şahsen böyle haberleşmenin ve çeşitliliğin fazla olduğu yerlerde DELTA marka ethernetli HMI'ları tercih ediyorum. 7 inç ethernetli modelinde 1 adet rs232 2 adet rs485modbus için (255 istasyon herbiri) olmak üzere sahadan veriyi alıp ,Ethernet modülü ile de PC'de direkt olarak veritabanına,Excel'e veya ODBC Server a kaydetme özellikleri var(Ücretsiz ve Ücretli programlar).

C# ile Modbus RS485 kendi yazılımım ile PLC veya Panellerden veri çekebiliyorum(Basit bir denemesini buraya ekleyeceğim) Bilgisayar programcısı değilim fakat gereklilikler öğretiyor :)

Sonuç: Delta HMI geniş özellikleriyle OpenOffice gibi en sevdiğim HMI paneller ,Reklam yapmıyorum lütfen yanlış anlaşılmasın ama açık kaynak ve eğitim videoları ile bazı sömürücü markaları devre dışı bırakacaktır.

NOT: C# ta sıralı şekilde her bir PLC adresleri okuma işlemini bir Timer içerisine yazabilirsiniz.(Hat müsait oldukça)
 
arkadaşların hepsine teşekkür ediyorum çok değerli bilgiler paylaşmışlar . bende evvelden para vermemek için böyle c uğraşır dururdum çoğu zamanda işin içinden çıkılmaz bir hal alıyordu bende artıkın ucuz yollu bir scada alıyorum scada kendine bir data base kuruyor sql server bende o serverden alıyorum .. ama dikkat etmen gereken husu burda eğer hepsini tek bir sürücüde haberleştirebiliyorsan ki hepsinde rs485 haberleşme var tek bir scada sürücüsü ie bunları okuyabilirsin .. yada bir opc kurarsan arkadaşların dediği gibi keepware yada matrikon gibi gene aynı işi görür.
yanlız kablosuz ağ olayı az sıkıntılı olmaz değil olmaya olur ama onların ara aparatları astarı yüzünü 5 kat geçiyor bir sürü gateway alman gerekecek adreslenebilir swichlerin olması lazım o swichleri wifiye çevirmek için ekipmnaları alman gerekecek masraflı iş wifi ama modbus tcp kullanabilirsen olur bir kabloyla .. ha kablo çekemem diyorsan ozaman router alacaksın wifi gatavay alacaksın routerden plcye port açacaksın hepsine ayrı ayrı tapacaksın . masraf yani.. ama wifi dvp deye bir alet var delta ile mitsubishiye oluyor onu yapmışlardı gördüm .
https://aliexpress.ru/item/40012451...gatewayAdapt=glo2rus&sku_id=12000036975656844
bu arkadaşlarla temasa geç bence bu alet oluyor dediler ben bilmiyorum
yanlış anlaşılmaşın konuyu bildiğimden değil ama belki fikir olur . arkadaşlar sana olur olmaz derler bilemem ..
 

Forum istatistikleri

Konular
129,751
Mesajlar
929,662
Kullanıcılar
452,500
Son üye
atcaliali

Yeni konular

Geri
Üst