RS485 formatında haberleşme

Başlatan XNHCX, 04 Ocak 2003, 23:43:59

XNHCX

8)Merhaba  Arkadaşlar,
PC'den gönderdiğimiz ON/OFF bilgileri ile uzak noktalardaki birbirlerinden farklı kurulumdaki röleleri açıp kapatma uygulaması.

***  http://www.turkengineers.com/metin.php?metin=50&PHPSESSID=0170a10f200c940a6fd15af2bc47ecd4

sahinsahin

Merhaba arkadaşlar RS485  ile bir tane ana modül ve 4 tane kart arasında haberleşme yapılacak. Her bir yardımcı kartan alınan veriler farklı yerlerde saklanacak.
Bu yardımcı kartlar veri okuyup ana modüle gönderecektir. Yardımcı kartlar 1000 tane arasından herhangi 4 tanesi seçilecektir. Bu kartlar 1'den 1000'e kadar adresler verilecektir.
Yardımcı kartlar ana modüle bağlandığında modülün glcd bu kartların adreslerini görmek istiyorum. Modül adres bilgisini istediğinde 4 tane yardımcı aynı anda adres bilgilerini gönderecekler. Ve karışılık olup adres bilgileri alınamayacaktır.
Bu sorunu nasıl çözebilirim?

İki tane yol denedim pek verimli değiller.
1. yol her kart adres bilgisi istendiğinde rand()%60  ile bir sayı üretiyor sonra bu kadar saniye bekleyip adres bilgilerini gönderiyorlar.
   Burada adres isteme işlemlerinin yarısında başarısız olunuyor. Kartların adreslerini alamıyorum.
2. yol her kar kendi adresi kadar saniye bekliyor ve adres bilgisini gönderiyor. Buradaki sorun; seçilen kartın adres numarası eğer 900 civarı olursa bu defa modülden adres bilgisini görmek için 15 dakika beklemek gerekecek.
   15 dakika çok uzun bir zanam. Max 5 dakika zaman almasını istiyorum.

  Ayrıca her bir kartın bilgisini gönderme süresi 1 saniye civarı 800 ms yeterli gelmiyor.

Yardım ve fikirleriniz için şimdiden teşekkürler...

OG

Doğru anladı isem,

1000 modulu tek RS485 hattında çalıştırmak zor. Bölmek gerek. Mesela 100'erli guruplar şeklinde.
Bu durumda 10 grup olur. Her grubun bir yoneticisi olur.
Yoneticinin 2 adet RS485 yolu olur. Birisi gruptaki modullere uzanır diğeri ANA MODUL'e uzanır.

Yöneticiler kendisini ilgilendiren adresler için yapılacak haberleşmeye duyarlı olur, diğerlerini dikkate almaz.
1. yönetici 1. grubu yönetir,    1-100 arası adresler için ANA MODUL ile aracı konumu sağlar.
2. yönetici 2. grubu yönetir, 101-200 arası adresler için ANA MODUL ile aracı konumu sağlar.
.
.
10. yönetici 10. grubu yönetir, 901-1000 arası adresler için ANA MODUL ile aracı konumu sağlar.

----

ANA MODUL 185 numara söyle bakayım dediğinde bu bilgi yanlızca yönetici modullere ulaşır, 185. adresin yöneticisi hangisi ise ( burada 2. yönetici ) hemen dikkate alır ve gruplara uzanan RS485 hattına yonelerek aynı soruyu o yöne gönderir. 185. modul cevap verir. Yönetici bu cevabı diğer RS485 hattından ana module gonderir.

İletişim bu şekilde olur.

Bütün adresleri tarama işi de yine parçalanmış olur ve yoneticiler kendi içinde tarama yapıp ANA Module rapor verir. Aynı şekilde yeni takılmış cihazın sorgulama işlemi de yönetici module yuklenmiş olur.

---
Bilginin gonderme süresi 1sn demişsiniz, kaç byte bu bilgi? Ayrıca haberleşme hızı nedir? 1sn çok uzun bir süre.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

sahinsahin

Öncelikle teşekkür ederim. Burada 1 tane ANA MODÜLe sadece 4 tane  yardımcı kart bağlanacaktır. Ancak 1000 tane yardımcı kart arasından bu 4 tanesi seçilecektir. Çünkü 250 ANA MODÜL üretilecektir. ANA MODÜLlerin hepsine aynı kod atılacak ve yardımcı kartların her birisine 1'den 1000'e kadar adres bilgeleri verilecek. Sonra bu 250 ANA MODÖL ve 1000 tane yardıncı kart kullanıcıya verilecek. Kullanıcı kafasına göre herhangi 1 modül ve 4 tane yardıncı kartı birbirine bağlayacak. 9600 bound hızında haberleş yapılıyor. putc() ve getc() fonksiyonlarıyla 19 tane veri gönderiliyor. Denemeyi şöyle yaptım 3 tane yardımcı kart seçtim. Modül adres bilgisini istediğinde ilk kart 1 saniye ikinci kart 2 saniye üçüncü kart 3 saniye bekliyor. Bu şekilde adres sorgulama işleminde sıkıntı oluşmadı. 1 saniye yerine 800 milisaniye yapınca adres göndermede sorun oluşuyor. Bir kart daha adres bilgisini göndermeyi bitirmeden ikinci kart adres yolamaya başladığı için veriler karışıyor.. Bu bekleme sürelerini adres numarasına göre yapınca bu defa bekleme çok oluyor. rand() kullandığımda ise yaptığım denemelerin yarısından fazlasında sorunlar yaşıyorum.