RS485 de hat canlı mı değil mi?

Başlatan jackal183, 14 Aralık 2012, 13:30:37

jackal183

arkadaşlar selamlar. şu anda sahada çalışan bol miktarda 485 üzerinden haberleşen cihazlarım var. haberleşme yöntemi 1 master n sayıda slave şeklinde. hat üzerinde kimin konuşacağına da master karar verir. gider 1. cihaza sorar bir değişiklik var mı diye, 1. cihaz yok der, 2 ye sorar, 3 e sorar, n inciye sorar, sonra geri başa döner. buraya kadar herşey çok iyi. ancak cihaz sayısı artınca haberleşmede sıkıntı meydana geliyor. 20 adet cihaz var diyelim. her biri ile haberleşmek 500 ms den toplamda 10 saniye sürer. bu durumda da cihaz üzerinde bir değişiklik olduğunda maksimum 10 saniye içinde cevap alır. cihaz sayısı 50 ye çıkınca 25 vs... şeklinde devam eder. hat üzerinde sorgu cevabı kaldırayım dedim, ancak bu sefer de datalar birbirine karışır, çünkü cihazlar çok aktif çalışıyor, aynı anda data gönderme-alma isteği çok fazla olacaktır. benim merak ettiğim konu şu ki, slave cihazlar hat üzerinde o anda veri göndermek isteyen var mı yok mu nasıl anlar?

OG

Alıntı Yaphat üzerinde sorgu cevabı kaldırayım dedim
Bunu kaldırırsanız her şey birbirine girer.


Hız yükseltme ve zone lara bölme gibi bir yöntem uygulanabilir.
100 cihaz var diyelim 4 e bölünür, 4 zone yapılır, Her zone a 25 cihaz düşer. Her zone'nun bir kontrolcusu olur. Cihazlarla bu kontrolcu haberleşir, cihazlarının datalarını bu kontrolcu saklar, merkez de bu kontrolculerle haberleşir.

Alıntı Yapslave cihazlar hat üzerinde o anda veri göndermek isteyen var mı yok mu nasıl anlar?
Hat Low ise birileri aktiviteye başlamış demektir. Veya hatta problem var demektir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

frederic

Her slave için 500 ms yüksek bir değer doğrusu,kaç adet data okuduğunuzu merak ettim.Ayrıca baudrate hızınız da burda önemli tutupta 9600 veya 19200 gibi bir hızla haberleşiyorsanız sorun olur.57600 hızlarına kadar çıkmanızı öneririm.

camby

Alıntı yapılan: jackal183 - 14 Aralık 2012, 13:30:37
1. cihaza sorar bir değişiklik var mı diye, 1. cihaz yok der, 2 ye sorar, 3 e sorar, n inciye sorar, sonra geri başa döner.

Eğer bu şekilde ise yüksek hızda sorun çıkmaması lazım. Slave 'in cevap olarak yolladığı değişiklik yok paketinin uzunluğu nedir ?

jackal183

data paketinin uzunluğu master ve slave için 15 bytedan fazla değil. her aşamada 3 işlem gerçekleşir. master sorar cevap alır tekrar cevap atar. yani her aşamada 45 byte gönderilir. baud rate 1200. 45 bytelık veri 1200 baud ratede 300 ms de gider. txen durumlarında da biraz bekleme koyulur. üstüne işlemcilerin veriyi alıp işlemesi, cevabı oluşturması gibi süreleri de eklenince 500 ms olur. baud ratei çok yüksek hızlara çıkaramam, 1 km haberleşme mesafesi var. yüksek hızlara çıkardığımda gürültü ve veri kaybı faktörleri de var. 9600 den yükseği sıkıntı çıkarmaya başlıyor. bu hesapları hiç düşünmedik diyelim. süreyi 100 msye indirdik diyelim. hat üzerinde 100 tane cihaz olduğunda 100 ms den yine 100ms * 100 cihaz = 10 saniye eder ki 10 saniyede geç bir süre benim için. ben diyorum ki slave cihazlar hattı kontol etsin, hat üzerinde o anda canlı veri yoksa verisini göndersin, canlı veri varsa da bitmesini beklesin. olmaz mı böyle ?

Klein

Can bus donanımı tam istediğiniz şeyi yapıyor. Ama RS485 donanımında malesef bu sorun var.
Aklıma gelen en kolay çözüm şu.
RS485 çipinnin RX enable pini rürekli Low olur. Bu sayede hattı her zaman dinleyebilirsiniz. Verinin sonunda tüm paketin bittiğini gösterir bir işaret olur.  Herhangi bir istasyın bu işareti aldığında sayacını sıfırlar ve adresi oranında bir bekleme yapar.  Örneğin 1 numaralı istasyoon 1mS ,100 numaralı istasyon 100mS gibi.  Veya mesaj önceliği atayabilirsiniz. Örneğin istasyonun göndereceği veri 1. öncelikli ise 1mS, öncelik sırası 10 ise, 10mS gibi.
Bu durumda sadece Aynı önceliğie sahipmesajı olan istasyonlar aynı anda hatta çıkmaya çalışır. 
Alma hattınız sürekli açık olduğu için , kendi mesajınızı da dinlersiniz. Eğer alınan mesaj gönderilen mesajdan farlı ise, hatta giren tüm aygıtlar hattı boşaltır.   

OG

#6
Diğer öneriler + bence hızı biraz yükselt.
Veri kaybı için basit doğrulama metodları kullanabilirsin, her gönderim sonunda sana 1 byte fazlalık ilave yükü olur.

En basit yöntem XOR lamak.

10 veri gidecek diyelim,
dim veri_1 as byte
dim veri_2 as byte
dim veri_3 as byte
dim veri_4 as byte
dim veri_5 as byte
dim veri_6 as byte
dim veri_7 as byte
dim veri_8 as byte
dim veri_9 as byte
dim veri_10 as byte

dim crc_word as word
dim crc_byte as byte

crc_word = 0
crc_word = crc_word ^ veri_1
crc_word = crc_word ^ veri_2
crc_word = crc_word ^ veri_3
crc_word = crc_word ^ veri_4
crc_word = crc_word ^ veri_5
crc_word = crc_word ^ veri_6
crc_word = crc_word ^ veri_7
crc_word = crc_word ^ veri_8
crc_word = crc_word ^ veri_9
crc_word = crc_word ^ veri_10

crc_byte = crc_word Mod 255

10 veri + crc_byte gidecek

Karşı taraf da 10 veriyi XOR yapar , 11. olan crc_byte ile eşitmi diye kontrol eder.

Anlaşılması için adım adım yazdım

mesaj birleştirme:: 14 Aralık 2012, 20:30:36

Uzun mesafe için ilave öneri, Çıkış sinyalini 10V'lar gibi değerlere yükselten bir sürücü ilave edebilirsiniz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

jackal183

#7
xorlama gibi yöntemleri aktif olarak ve iyi bir şekilde kullanıyorum zaten, data iletimindeki veri formatım çok sağlam, asla ama asla bozulmayacak şekilde. hız konusunda şöyle söyleyeyim hocam, mesafe artınca sıkıntı başlıyor. aslında kullanılan kablo LIYCY kablo olsa hızı yine de artırabilirim ama cat5/cat6 hatta bazen 0.75 kablo kullananlar oluyor. ve adamlara derdni anlatamıyorsun. satıyorum ürünü, sattığım adam sen kablo yapma diyor, ben yaparım diyor. tamam diyorum ama kablolama yapacak ekip başlamadan önce beni arasın ve kılavuzu iyice okusun. aradan zaman geçiyor, pat diye telefon, sistemin çalışmıyor deniyor. Kablolamayı kim yaptı abi diyorum, ben ahmete verdim diyor, ahmeti arıyorum, o da diyor ki ben de mehmete verdim, mehmeti arıyorum, o da diyor ki 2 tane çırağım vardı dükkanda onlar yaptı, onlar da şimdi burda yok. ne şekilde kablo çektin hattı nerden götürdün, yıldızz bağlantı oldu mu olmadı mı, hangi tip kablo kullandın. bunların hiç biri belli değil. sonra adam dönüp diyor ki banane kardeşim, senin sistemin çalışmıyor, gel yap. tamam ben gelir yaparım ama kablo kaynaklı problem ise servis ücreti alırım diyorum. o da banane diyor geçen hafta çalışıyordu diyor, ama şimdi çalışmıyor diyor. adama anlatmazsın ki rs485 böyle birşeydir, onun istediğini yapmazsan kafasına göre takılır diyemiyorsun. mecburen servise çıkıyorsun. bu  sefer genel müdür geliyor,bu servis nereden çıktı hem de ücretsiz, sen nasıl mühendissin gibi lafları ima etmeye çalışıyor. neyse içimde kalmış herhalde bunlar, konuyu dağıtmayalım. 

klein hocam, sizin anlattığınızın tıpatıp aynısını düşünüyordum ama bu durumda yine de çakışma olabileceği ihtimali var. şöyle ki; kullandığın bütün işlemcileri bütün entegreleri hatta kristalleri aynı paketten çıkarıp kullansan bile, aralarında hız farkı oluşabiliyor. sizin dediğiniz sistemde, istasyonların hepsinin aynı salınımda olması gerekli ki bütün bu anlık 1,2,3.. ms beklemeler hepsİ için aynı olsun, 1 us dahi sapma olmasın. ama sonuç olarak böyle bir yöntem düşünüyorum, küçük bir yerde(5-6 cihazlık) deneyip göreceğim sonucu.

OG hocam sizin söylediğini datayı 10 volta çıkarmak, a-b uçlarını mı 10 volta çıkarmak, yoksa rx-tx uçlarını 10 volta mı çıkarmak. ya da direk rs485 entegresini mi 10 volta çıkarmak. burda aklıma şöyle bir soru geliyor rs485 hattının vccsi kaç volt ise, data a- data b uçlarında çıkan gerilimler +vcc -vcc arasında mı olur, yoksa +vcc/2 -vcc/2 arasında mı olur.

skara1214

#8
valla hocam şöyle birşey deneyin değişiklik varmı diye yollayın 1. cihaz hemen cevap versin ikinci cihaz 3 ms sonra 3. cihaz 6 ms sonra (tabi data gecikmelerini hesaba katın) bu şekilde tüm cihazlardan cevap alırsınız.toplamda da 300 ms sonra tüm cihazlar cevap verir bu araya koyduğum delayleri siz deneyip ayarlayabilirsiniz.
edit
klein hocanın yazdığını okumamışım mantık olarak aynı şeyi söylüyoruz...
Herkes ölür ama herkes gerçekten yaşamaz

lazkoapt29

Arkadaşım anladığım Kadarıyla aradığın şey
[url=http://www.delcomrf.com]www.delcomrf.com[/url]
adresinde bulabilirsin  ;)

OG

Alıntı YapOG hocam sizin söylediğini datayı 10 volta çıkarmak, a-b uçlarını mı 10 volta çıkarmak, yoksa rx-tx uçlarını 10 volta mı çıkarmak. ya da direk rs485 entegresini mi 10 volta çıkarmak. burda aklıma şöyle bir soru geliyor rs485 hattının vccsi kaç volt ise, data a- data b uçlarında çıkan gerilimler +vcc -vcc arasında mı olur, yoksa +vcc/2 -vcc/2 arasında mı olur.
Yeni gördüm,
TX den sonra ki var olan sinyal seviyesi 0-5V arası. Bunu 10V gibi yapın demiştim.

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.