Bilmek istediğin her şeye ulaş

VB 2010 ile ModBus Slave bir cihazın registerlerini nasıl okuyup yazmak istiyorum?

Ufak çaplı bir SCADA yapmak için sadece 1 PLC ile çalışmak için arayüz nasıl oluşturulur. Nereden başlamak gerek? Tavsiyelerinizi bekliyorum.Düzenle
Merhaba, PLC ile neyi kontrol etmek istediğine bağlı, fabrika otomasyonu (tavuk çiftliği mesela) , veya akıllı ev. Sonuçda girişlerin ve çıkışların var (discrete Output ve discrete input) , lamba aç-kapa, makina acık mı kapalı mı durumu gibi bilgiler. Ev için mesala sıcaklık, nem, magnetik alan yoğunluğu gibi bilgileri de ölçüp okursun, ışığın parlaklığını ayarlamak için değerler gönderebilirsin. İnput register lar ve holding (output) register ile bu değerleri kontrol edebilirsin. yani arayüz ne için kullanacağına bağlı olarak senin hayal gücüne göre değişir. (Modbus hakkında ne kadar bilginiz var, PLC yi siz mi tasarlayacaksınız. Ayrıca modbus ın bütün fonksiyonlarını da kullanmayacağınız için genel bir modbus oku-yaz fonksyonları yazmanız gerekmiyor. Modbus istek-cevap şeklinde çalışır. )
  • Paylaş
6

Enes doğan, Hamit bey Öncelikle zaman ayırıp cevap yazdığınız için teşekkür ederim.
Mesela benim elimde 1 adet dijital termostat var.. Bu dijital termostat rs485 modbus protokolünü kullanarak haberleşme imkanı sağlıyor.
Sizinde bildiğiniz gibi liselerimizde bu olaya değinilinmiyor ki!! Ben 2003 mezunu birisiyim ozamanda doğru dürüst kontaktörümüz bile yoktu.. Kaldıki PLC Felan..
Neyse lafı uzatmadan devam edeyim Ben Kendi imkanlarımla Visual basic Python C++ ve Pic programlamak için Pic basic vs vs gibi programları internettten bulduğum dökümanlarla öğrenmeye çalıştım. Şimdi Elhamdurillah bir seviyeye geldim.
Ama tıkandığım nokta Şu.
Modbus sizinde dediğiniz gibi Soru cevap şeklinde çalışıyor.
Mesela bu örnekte.
01 03 0001 0002 C40B

Where 01 is address of device
03 is readcommand
0001 is starting location
0002 is length of data which i want to read
& C40B is CRC

sorgu yapacağımız cihaz adresi. data okuma yapmak istediğimizi belirten komutumuz
Data adresi ve sonraki adaımda kaç data okumak istediğimiz yazıyor.
En sonunda ise benim bir diğer çıkmazım CRC olayı var.

Buraya kadar herşey tamam mantığını az çok anlayabildim.

Şimdi visual basic ile bir arayüz oluşturdum.
Socket nesnesini ekledim.
Baud rate vs vs gibi. Parametreleri ayarladım. Ve cihazı Pc min.
Seri portuna bağladım (RS485) . işim bundan sonrası
Bu formatı "01 03 0001 0002 C40B" Tek seferde porta nasıl ileteceğim.
ve karşıdan gelen cevabı nasıl okuyacağım Benim istediğim sadece bu inşallah bunu yapabilirsem geri kalan olaylara bu bakış açısıyla yaklaşabilir.
Kendim birşeyler katarak öğrenebilirim.Teşekkür ederim

Fatih Gündoğan, öncelikle modbus (? RTU/TCP) cihazınız ile haberleşmeyi deneyin. Yani yazdığınız program ile değil, hazır bir tool kullanarak. Google araması ile çeşitli toollar bulunuyor.

Cihazınızla, hangi adresten ne okuyacağınızı çözdükten sonraki kısmı PC ile cihazı VB ile haberleştirmek. Ama önce ne yapacağımızı, yaptığımız işin işe yarayıp yaramadığını bilmeliyiz. CRC gönderdiğiniz datanın cheksumudur, fakat sonraki mesele. ilgili adresten istediğiniz datayı çekebiliyormusunuz önceliği buna verin bence.

Enes doğan, Fatih bey Şu an hali hazırda yazılı olan tool ları kullanarak iletişim yapabiliyorum. Gerekli registerleri okuyup yazabiliyorum. Elimde Modbus TCP/IP yi destekleyen birkaç scada programı var bunlarla sıkıntım yok.
Zaten bağlandığım cihazın Manuelindede Data MAp'ı verilmiş hangi registerlerin okunur yazılır olduğu hangisinin ne olduğu yazılı. Burada sıkıntım yok. Hatta işi biraz daha ileriye götürüp irdelersek. Modbus ,OPC serverlar var.

Ama yapmak istediğim. İşe biraz daha benlik katmak.
Mesela elimde ENDA marka bir PLC var.
Bu PLC piyasada yeni (Türk malı) bir cihaz sayılır. Bu yüzden MEvcut skadalar desteklemiyor. Ama ben bu cihazıma bağlanıp. Küçük bir arayüz yaparak.
Ekranımda anlık olarak 1 ısı değerini görmek istiyorum.
1 word'luk bir datayı okumak istiyorum.

Hamit Yazgan, Kusura bakmayın biraz yoğunum. Öncelikle hangi yapıyı kullandığınıza bakmak lazım. Modbus_ASCII (LRC hesaplanır), Modbus_RTU(CRC hesaplanır), Mobus_TCP/IP, sizin örnekle anlattığınız RTU, oysa soket kullanmaktan bahsetmişsiniz.(Bu "soket?" VB de hazır bir paket sanırım , çünkü kodları siz yazmak istiyorsanız, kullandığınız dilin sadece seri haberleşme fonksiyonları gerekiyor ." WriteFile(....),ReadFile(....), gibi." bundan sonrası paketi hazırlarsınız seri porta gönderirsiniz.).

Seri haberleşme fonksiyonlarını kullanarak "01 03 0001 0002 C40B" veriyi gönderirsiniz, alırsınız, neresinde takıldınız anlayamadım. Zaten doğru veri gitmişse cevabını, hatalı veri gitmişse hata kodu döndürür (slave). .

CRC hesaplamasıyla uğraşmana gerek yok ki, hazır fonksiyonları kullanabilirsiniz. Yinede kağıt kalem alıp siz hesaplamak istiyorsanız anlatabilirim.

(En basit anlatımla PC->USB-485->PLC, veya PC->USB-232-485->PLC, bilgisayarınızda da bir seri port olacak, bir free seri port haberleşme programı ile bir paket gönderip cevap alabirsiniz,(sadece hex olup olmadığına dikkat edin, program ASCII karşılıklarını porta gönderiyorsa hatalı veri olur))

Enes doğan, Evet dediğiniz gibi yaptım hyper terminal kullanarak. Panasonic marka bir PLC'nin registerlerini okuyup yazdım.Ama kullandığım sistem PC- usb to rs 232 converter kullanrak yaptım.
Bu yapıda Tamam.

TCP/IP olayında nasıl bir mantık izlenmesi gerek!

yada söyle kabataslak sorayım.
TCP/IP ile Ethernet soketi kullarak MODBUS bir sorgu nasıl yapılır.
Olası Örnek bir sorgu cevap. şekli tanımlarmısınız?
Bunu yapmak için nereden başlamalıyım? Nasıl bir araştırma yapmam gerek?

Fatih Gündoğan, bence şu topikten başlayabilirsiniz... control.com/thread/1304602670

Sonraki Soru
HESAP OLUŞTUR

İstatistikler

849 Görüntülenme6 Takipçi1 Yanıt