plc - visual c# haberleşmesi?

Başlatan mir_as82, 22 Mart 2013, 12:01:39

mir_as82

Arkadaşlar elimde siemens marka plc var, ben bu plc ile visual c# programını haerleştirmek istiyorum. PLC de rs485 modül var ve plc  Modbus RTU protokolünü destekliyor.

Sorum şu:
Benim laptopum var ve laptopda seriport yok. Acaba normal bir seriport - usb çevirici alsam seri port ucunu plc ye, usb ucunu da laptopuma taksam, c# ile bu şekilde haberleşebilir miyim?
Yoksa özel modbus rtu-usb çevirici mi almalıyım?

semih

Ben usb rs232 çevirici ile pic- c# haberleşmesi yapıyorum. PLC ile de olur heralde.

Salih

USB -> RS485 dönüştürücü alman gerekir. Seri port RS232'dir.  Onu alırsan ayrıca RS-232 -> RS-485 almak zorunda kalırsın.

mir_as82

peki hocam ben çeviriciyi alıp laptopa takıp driver ı yükleyince, serialport olarak görüyor mu aygı yöneticisinde?

adem89

Alıntı yapılan: mir_as82 - 22 Mart 2013, 17:23:50
peki hocam ben çeviriciyi alıp laptopa takıp driver ı yükleyince, serialport olarak görüyor mu aygı yöneticisinde?
usb bilgisayarda seri port olarak tanınacak c# ile seri port nesnesi ile direk olarak yapabilirsin

Salih

Alıntı yapılan: mir_as82 - 22 Mart 2013, 17:23:50
peki hocam ben çeviriciyi alıp laptopa takıp driver ı yükleyince, serialport olarak görüyor mu aygı yöneticisinde?

Evet USB -> RS485 dönüştürücüyü taktığında, windows ona bir COM numarası atar.
Bu numarayı aygıt yöneticisine girip görebilirsin.
Daha sonra PLC'nin haberleşme ayarları ile (Baud rate, bit sayısı, Parity gibi) senin com portu ayarlarını
aynı yapacaksın.

mir_as82

Peki arkadaşlar ,

PLC ile PC arasındaki veri alış verişini test edebileceğim bir yazılım var mı? pc master olacak plc nin bazı registerlerine veri yazacak ve okuyacak. Bunu nasıl test ederim? Elimde rs 485 seri dönüştürücü var. Plc ye verileri word olarak yazarsam visual c# ta yazdığım word lerin birebir aynısını görebilir miyim? Örneğin 40001 adresinde de 10000 verisi olsun word tipinde. Bunu c# tan aynı şekilde nasıl okurum? okuduğum değişkeni int16 mı tanımlamam gerekir?

semih

Alıntı yapılan: mir_as82 - 29 Mart 2013, 10:47:22
Peki arkadaşlar ,

PLC ile PC arasındaki veri alış verişini test edebileceğim bir yazılım var mı? pc master olacak plc nin bazı registerlerine veri yazacak ve okuyacak. Bunu nasıl test ederim? Elimde rs 485 seri dönüştürücü var. Plc ye verileri word olarak yazarsam visual c# ta yazdığım word lerin birebir aynısını görebilir miyim? Örneğin 40001 adresinde de 10000 verisi olsun word tipinde. Bunu c# tan aynı şekilde nasıl okurum? okuduğum değişkeni int16 mı tanımlamam gerekir?

Seri port terminal programları var. Bunlar işini görür.

mir_as82

peki rs 485 ile gönderilen veri, benim kullandığım rs 485- seri (usb bağlantı uçlu) ile rs 232 formatına mı çevriliyor?

peki plc den veri okumak istendiğinde nasıl yapılacak? çünkü plc slave olacak. benim bildiğim kadarıyla slave cihazın adreslerinden veri okunabiliyor. plc nin 40001 adresini seriport simule programı ile nasıl okuyabiliriz?

Salih

#9
Öncelikle;

PLC'ye RS232 ile bağlanacaksan, PC'ne USB -RS232 dönüştürücü bağlamalısın.
PLC ile RS485 üzerinden haberleşeceksen, PC'ne USB -> RS485 dönüştürücü bağlayacaksın.
RS232 ile RS485 uyumlu değildir. Birlikte kullanılamaz.

Haberleşmek istediğin PLC Modbus protokolünü destekliyor ise sadece PLC manuelinden okumak istediğin
yerlerin Modbus adreslerini öğrenip Modbus kuralları ile okuma veya yazma yapacaksın.
Eğer PLC modbus desteklemiyor ve kendine ait bir protokol kullanıyor ise yine ilgili mauelinden
yararlanıp işini göreceksin.

Alıntı Yapplc nin 40001 adresini seriport simule programı ile nasıl okuyabiliriz?

Yine modbus kuralları veya özel protokol ne gerekiyorsa öyle bir veri paketi göndereceksin.

mir_as82

peki modbus poll diye bir program var. Bu programla deneyebilir miyim?

Ben plc de 10 elemanlı dizi tanımladım word olarak. ilk 5 tanesine c# tan veri yazmak son beş tanesini de okumak istiyorum. 40001-40005 yazılacak
40006-40010 arasından da okuma yapılacak. Bunun ile ilgili örnek kod var mı? örneğin 40001 den itibaren 5 registere "123" yazmak istesem nasıl bir kod yazmalıyım? ve 40006 dan itibaren 5 tane registeri okumak istesem bunu nasıl yaparım? PLC trafındaki veriler word.

Salih

#11
ModBus Yapısı

Slave adresi(1 Bayt) + Fonksiyon Kodu(1 Bayt) + Okunacak Bellek dizisinin ilk adresi(2 Bayt) + Okunacak veri adedi(2 Bayt) + CRC16

40006 Adresinden 5 adet veri okumak için örnek paket oluşturalım.
Slave adresi 01 kabul edelim.

CRC16 = C895 hesaplanır. Low Bayt + High Bayt sırasıyla yazılır.

01 + 03 + 0005 + 0005 + 95C8  Bu sayı dizisini gönderirsen sana cevap olarak şöyle bir format gelecek.
Dikkatli olalım, gönderirken ASCII  karakter olarak göndermeyelim. Gerçek sayı değerlerini gönderelim.

01 + 03 + 05 + (1.word) + (2.word) + (3.word) + (4.word) + (5.word) + CRC16

Not : Modbus RTU ile değilde ASCII ile uygulama yaptığım için. Adresi Hatalı yazmışım düzelttim

Önce okumayı yapalım. Başarılı olursak. Yazmayı yapalım.

Güzel bir link var faydalı olabilir.

http://www.simplymodbus.ca/FC03.htm

mir_as82

Teşekkür ederim hocam. En yakın zamanda denerim

cetinkaya