Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Kablosuz veri trafiği

Başlatan enrique_iglesias, 17 Kasım 2017, 21:25:41

enrique_iglesias

Arkadaşlar merhaba;

bir proje üzerinde çalışıyorum bir noktada takıldım çünkü birden fazla yöntem mevcut, kafamda bulandı biraz tavsiye almak istiyorum eğer yardımcı olursanız..

1 Master ve 150 Slave cihazım var. Bunlar 433mhz üzerinden haberleşebiliyorlar.
Master üzerine öyle bir rutin yazmalıyım ki bu 150 slave cihazın durum bilgilerini okuyabileyim ve bu realtime olmalı (+-5sec)

Master ile for içinde 150 slave cihaza işaret gönderip durumunu mu beklemeliyim?
Profesyonel sistemler bu şekilde mi çalışıyor?
Veri trafiğini en performanslı şekilde nasıl sağlayabilirim?





tunayk

Endüstriyel bus yapılarda ( Profibus, Modbus vb.) çevrimsel olarak master taraf sorgulama yapar. Önemli olan Slave cihazların çevrim hızı.  Yani bir sorguya en geç ne kadar sürede dönüş yapıyor?  Zincirin zayıf halkası burası. Rx ve Tx ayrı bandlarda çalışan full duplex yapı olursa ve her Slave farklı bir ID ile cevap verirse oldukça hızlı olabilir. 

enrique_iglesias

Alıntı yapılan: tunayk - 18 Kasım 2017, 01:02:47
Endüstriyel bus yapılarda ( Profibus, Modbus vb.) çevrimsel olarak master taraf sorgulama yapar. Önemli olan Slave cihazların çevrim hızı.  Yani bir sorguya en geç ne kadar sürede dönüş yapıyor?  Zincirin zayıf halkası burası. Rx ve Tx ayrı bandlarda çalışan full duplex yapı olursa ve her Slave farklı bir ID ile cevap verirse oldukça hızlı olabilir. 


Slave sorguma yapmama müteakip veri uzunluğuna bağlı 10ms ile 20ms arasında cevap alabiliyorum. Eğer rf üzerinde parazit olursa bir slave üzerinde cevap alana kadar (timeout süresi kadar> 1000ms) bekleme yapıyor. Bunu for döngüsüne sokarsam biraz vakit alabiliyor. Bende her çevrimde bir slave sorgusu yaptırıyorum. Ama ne kadar doğru yaptığım bilemedim. Bir kaynak bulamadım eğer sizin dediğiniz gibi master sürekli sorgu yapıyorsa yaptığım doğru.

OptimusPrime

bu sorun aslinda telekomünikasyonda basa bela olan konulardan ve birden cok cozumu var. her cozumunde kendine gore artilari eksileri var. tabiki bu cozumleri boyle basit bir sistem icin kodlamak da mantikli olmayabilir.

bahsettigin yontem eger aliciya ulasamiyorsan sistemde ciddi gecikmelere neden olacaktir. en kotu ihtimal olarak dusunursen tum alicilardan timeout yediginde sistemin 150 saniye icinde eli bos geri doner. ayrica master herbir slave e ayrica ulasip halini hatirini sormasi ise ayri bir zaman kaybi.

biraz telekom uygulamasina da yakin olarak soyle bir sistem onerebilirim:

master tum slaveler icin broadcast yapsin ve desinki benim suanki zamanim su sistemde su kadar da slave var. bu mesaji alan her slave bu zamana kendini senkron etsin ve kendisinin ne kadar surede bir konusmasi gerektigini ID numarasina gore hesaplasin. bundan sonra mastera sadece gelen mesajlari dinlemek kaliyor ki gelen mesajlar bu duurmda zaman bolmeli oluyor. bu durumda time out derdi de kalmiyor. slave den cevap alinmazsa bir sonraki cevrimde veya sonrakilerde eger ki kapsama icerinde ise mutlaka mesaj gelecektir. master yine arasira broadcast yapip zaman senkronuna devam edebilir yeni acilan slaveler veya ilk mesaji alamayan slaveler icin.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

E-x8

Alıntı yapılan: OptimusPrime - 19 Kasım 2017, 03:41:02
bu sorun aslinda telekomünikasyonda basa bela olan konulardan ve birden cok cozumu var. her cozumunde kendine gore artilari eksileri var. tabiki bu cozumleri boyle basit bir sistem icin kodlamak da mantikli olmayabilir.

bahsettigin yontem eger aliciya ulasamiyorsan sistemde ciddi gecikmelere neden olacaktir. en kotu ihtimal olarak dusunursen tum alicilardan timeout yediginde sistemin 150 saniye icinde eli bos geri doner. ayrica master herbir slave e ayrica ulasip halini hatirini sormasi ise ayri bir zaman kaybi.

biraz telekom uygulamasina da yakin olarak soyle bir sistem onerebilirim:

master tum slaveler icin broadcast yapsin ve desinki benim suanki zamanim su sistemde su kadar da slave var. bu mesaji alan her slave bu zamana kendini senkron etsin ve kendisinin ne kadar surede bir konusmasi gerektigini ID numarasina gore hesaplasin. bundan sonra mastera sadece gelen mesajlari dinlemek kaliyor ki gelen mesajlar bu duurmda zaman bolmeli oluyor. bu durumda time out derdi de kalmiyor. slave den cevap alinmazsa bir sonraki cevrimde veya sonrakilerde eger ki kapsama icerinde ise mutlaka mesaj gelecektir. master yine arasira broadcast yapip zaman senkronuna devam edebilir yeni acilan slaveler veya ilk mesaji alamayan slaveler icin.

Web üzerinde haberleşme protokolum var dediginiz yöntemi optimizasyon için kullanmayı düşünüyorum.
Dediginiz yapıyı tam olarak şu şekilde mi çalışıyor?
1master 7slave cihaz olsun. Bu slaveler içine ID numaralarını programa gömelim ve bu ID numaraları 1den 7ye kadar int olsun.
Master tüm slaveler e bir işaret mesajı yollasin
Slaveler bu mesajı aldıktan sonra (150ms)×ID sı kadar bekledikten sonra kendi durum bilgilerini göndersin.
Yukarıdaki formüle göre master mesajı gönderdikten sonra  ilk üç slave 150, 300, 450ms gecikme sonrasında kendi durumlarını bildirebilir.
Timeout sıkıntısı gerçekleşmez ve default süre küçültülerek uygulama hizlandirilabilir.

Önerdiğiniz yapı bu şekilde mi?

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

E-x8

Yararlı bilgi için teşekkür ederim. :)

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

enrique_iglesias

Alıntı yapılan: OptimusPrime - 19 Kasım 2017, 03:41:02
bu sorun aslinda telekomünikasyonda basa bela olan konulardan ve birden cok cozumu var. her cozumunde kendine gore artilari eksileri var. tabiki bu cozumleri boyle basit bir sistem icin kodlamak da mantikli olmayabilir.

bahsettigin yontem eger aliciya ulasamiyorsan sistemde ciddi gecikmelere neden olacaktir. en kotu ihtimal olarak dusunursen tum alicilardan timeout yediginde sistemin 150 saniye icinde eli bos geri doner. ayrica master herbir slave e ayrica ulasip halini hatirini sormasi ise ayri bir zaman kaybi.

biraz telekom uygulamasina da yakin olarak soyle bir sistem onerebilirim:

master tum slaveler icin broadcast yapsin ve desinki benim suanki zamanim su sistemde su kadar da slave var. bu mesaji alan her slave bu zamana kendini senkron etsin ve kendisinin ne kadar surede bir konusmasi gerektigini ID numarasina gore hesaplasin. bundan sonra mastera sadece gelen mesajlari dinlemek kaliyor ki gelen mesajlar bu duurmda zaman bolmeli oluyor. bu durumda time out derdi de kalmiyor. slave den cevap alinmazsa bir sonraki cevrimde veya sonrakilerde eger ki kapsama icerinde ise mutlaka mesaj gelecektir. master yine arasira broadcast yapip zaman senkronuna devam edebilir yeni acilan slaveler veya ilk mesaji alamayan slaveler icin.




Hocam çok mantıklı teşekkür ederim. Çok farklı bakmışsınız..  Şimdi böyle bir rutine girişeyim sonucu paylaşırım....

erdcan

@OptimusPrime hocam tecrübeniz için teşekkürler. Sormak istediğim bir durum var cevaplarsanız memnun olurum; Master, slave cihazları dinlerken örneğin 7 cihazlı sistemde 3 nolu cihazın o an kapsama dışında olduğunu farzedelim. Master 1,2,_,4,5,6,7 şeklinde gelen cevapları okuyor diye düşünüyorum. Bir sonraki çevrimde bu eksik veri trafiği karışır mı? Bir sonraki çevrim de slavelerden 2 ve 3 kapsama alanı dışına çıktığında kimden hangi veriyi aldığını nasıl takip edebilir? Master her broadcast yaptıktan sonra  yukardaki örnekteki gibi; 150 ms bekleyip,  bu süre zarfında veri alırsa bunu 1. cihazdan, 150-300 ms arasında veri alırsa bunu 2. cihazdan... aldım şeklinde mi sistemi düşün meliyiz?

OptimusPrime

@erdcan
2 turlu alabilirsin.
1. mademki master herkezi senkron etti o zaman senkron dinler. her slave in konusma araligi belli oldugundan sesin kimden geldigini anlarsin.
2. hic senkron dinlemezsin ama her slave in datasi kendisine ait ID si ile birlikte gelir. dolayisi ile kiminle konustugunu bilirsin.

bence en guzeli 2. secenek. bu durumda her slave in mesajinda ID ve datasi olacak. bunun yaninda birde checksum olursa tabi datanin basina yolda birsey gelip gelmediginide anlarsin.

gelen giden veri paketleri ihtiyaca gore modifiye edilebilir tabi. mesela gonderen snr datasi gonderip linkin kalitesini aliciya bildirebilir. veya master zamaninda gelen/gelemeyen cevaba bakarak ne kadar paket kaybolmus gibi istatistiksel veriler cikartabilir. alici verici modulun guc modlari varsa bu veriye dayanarak senin duyamiyorum daha yuksek sesle konus da diyebilir.

her turlu fantaziye acik bir sistem. uydur uydur kodla.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

erdcan

Teşekkürler açıklamanız için.2. Yöntemin benzerini 1 master 2 slave cihaz için kullanmıştım. Veri trafiğini senkron sağlamak nedense hep bi yerde patlayacakmış gibi geliyor.

OptimusPrime

mcu nun ic osilatorunu kullanarak yaparsan kesin patlar emin olabilirsin.  :D
bunun disinda konusma sureleri bir sonraki slave nin konusma suresine sarkmadigi ve senkronu bozmadigin surece sikinti olmayacaktir.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

ahmet_zxc

Alıntı yapılan: erdcan - 21 Kasım 2017, 19:53:04
@OptimusPrime hocam tecrübeniz için teşekkürler. Sormak istediğim bir durum var cevaplarsanız memnun olurum; Master, slave cihazları dinlerken örneğin 7 cihazlı sistemde 3 nolu cihazın o an kapsama dışında olduğunu farzedelim. Master 1,2,_,4,5,6,7 şeklinde gelen cevapları okuyor diye düşünüyorum. Bir sonraki çevrimde bu eksik veri trafiği karışır mı? Bir sonraki çevrim de slavelerden 2 ve 3 kapsama alanı dışına çıktığında kimden hangi veriyi aldığını nasıl takip edebilir? Master her broadcast yaptıktan sonra  yukardaki örnekteki gibi; 150 ms bekleyip,  bu süre zarfında veri alırsa bunu 1. cihazdan, 150-300 ms arasında veri alırsa bunu 2. cihazdan... aldım şeklinde mi sistemi düşün meliyiz?

Master 1,2,_,4,5,6,7 şeklinde gelen cevapları okuduktan sonra 3 gelmemişse, 3 nireyesun diyebilir. normalde 150ms beklerken bunda 300ms bekleyebilir.
3 kere yada 10 kere(nasıl bir sistem kurduğun da önemli tabii) aynı dallamalığı yapan 3, bizden değildir diye kapı dışarı edilip. sana; bak bu 3 ün kulağını çek diye haber verebilir.
diğer cevaplar zaten verilmiş. crc mutlaka kullan. olmadı rc kullan.