sn75176 RS485 Haberleşme mesafe sorunu

Başlatan jackal183, 10 Ocak 2012, 21:55:30

enrique_iglesias

Sorun çözüldümü çözülmedimi bilmiyorum ama ilk mesajınızdan okuduğum kadarıyla tamamen yazılılımsal bir hata var ortada!!! Daha 4 hafta önce kurduğum bir sistemde 24 adet slave bağlantıda 4 adet en uzak nokta yaklaşık 1100 metre diğerleri 200 ile 600 metre arası değişiyor ve 120r ve 2x 2k2r direnç kullanılarak yapıldı. veri göndermeden önce 100ms bekleme yapıyorum tx enable high yapıyorum ve preamble yaptıktan sonra kendi oluşturduğum bir protokolle veri paketimi gönderiyorum , 100ms bekledikten sonra tx enable low yapıyorum.. Verileri tek tek göndermek ve almak konusunda bir kaç tecrübem oldu en iyisi tek pakette göndermek, tek tek olunca bazen tekteye uğrayabiliyor. Ayrıca belirtmek istiyorum 24 adet slave cihazımın hepsi farklı güç kaynağı kullanıyor, hatta kimisi işin ucuzuna kaçılarak nokia şarj cihazı tabi çin malı olunca zırt pırt patlayanlarıda olmuyo değil. Buna rağmen 4 haftadır bir kez olsun ters bir veri veya sekteye uğrayan bir iletişim gerçekleşmedi. Kurduğum sistem test aşamasında olduğu için internet tabanlı olarak kontrol edebiliyorum ve şuan elektrik kesintileri dışında bir sıkıntı gözükmüyor maaşallah :) Ama dediğim gibi yazılım konusunda ufak bir test yazılımı yaparak master cihazınla slave cihazları tek tek dahil ederek denemeni tavsiye ederim.

jackal183

Alıntı yapılan: enrique_iglesias - 05 Şubat 2012, 01:11:53
Sorun çözüldümü çözülmedimi bilmiyorum ama ilk mesajınızdan okuduğum kadarıyla tamamen yazılılımsal bir hata var ortada!!!


Verileri tek tek göndermek ve almak konusunda bir kaç tecrübem oldu en iyisi tek pakette göndermek, tek tek olunca bazen tekteye uğrayabiliyor.

sorunu çözdüm kardeş, son mesajımda da yazdım. sorun yazılımsalmış.

peki verileri paket halinde nasıl gönderiyoruz? öğrenmek için soruyorum

enrique_iglesias

#47
paketten kasıt belli komut dizisi, yani bir protokol demek daha uygun olur..

Mesela kendimden örnek vereyim ben slave cihazlara hatta olup olmadıklarını öğrenmek için sürekli ping atıyorum ;


MASTER İÇİN :

master_no var byte
cihaz_no var byte
komut var byte

master_no =  1' bu değişken sistemimizde bağlı olan master cihazımınızın numarasını taşır örn.1
cihaz_no =  ' bu değişken yazılımı yüklediğimiz slave cihazın numarasını belirler her slave numarası farklıdır örn.4
komut =  ' bu değişken slave cihazın ne yapmasını istediğimiz 0 dan 255'e kadar olan komut dizisi
                örn: 1- ping döndür
                       2- bilgi gönder
                       3- akım bilgisi gönder
                       4- ısı bilgisi gönder
                       5- pil bilgisi gönder
                       6- hepsini gönder
                       v.s.........
basla :
komut=1
cihaz_no=4
preamble  'dataların karşı tarafa sağlıklı ulaşabilmesi için data göndermeden önce hattı uyandırıyoruz.
hserout ["STX-" & cihaz_no & "-" & master_no & "-" & komut & "-ETX"]
goto basla

veri şu şekilde paket halde gidecektir;  STX-4-1-1-ETX
paketi türkçeleştirirsek :
START TX "hey 4 numaralı slave sana diyorum" "konuşan 1 numaralı master" "bana ping gönder" "END TX" 


SLAVE İÇİN :

master_no var byte
cihaz_no var byte
komut var byte

master_no =  ' bu değişken sistemimizde bağlı olan master cihazımınızın numarasını taşır örn.1
cihaz_no =  4 ' bu değişken yazılımı yüklediğimiz slave cihazın numarasını belirler her slave numarası farklıdır örn.4
komut =  ' bu değişken slave cihazın ne yapmasını istediğimiz 0 dan 255'e kadar olan komut dizisi
                örn: 1- ping döndür
                       2- bilgi gönder
                       3- akım bilgisi gönder
                       4- ısı bilgisi gönder
                       5- pil bilgisi gönder
                       6- hepsini gönder
                       v.s.........

basla:
hserin [wait ("STX-"),gelen_cihaz_no,gelen_master_no,gelen_komut]
if gelen_cihaz_no=cihaz_no  then
     master_no=gelen_master_no
     komut=gelen_komut
     if komut=1 then
           preamble  'hattı uyandırıyoruz
           hserout ["STX-" & master_no & "-" & cihaz_no & "-" & komut & "-ETX"]
     end if
end if
goto basla

veri şu şekilde paket halde mastera gidecektir : STX-1-4-1-ETX
paketi türkçeleştirirsek
START TX "hey 1 numaralı master" "konuşan 4 numaralı slave" "bana ping atmıştın alsana ping" END TX



Komutları direk buraya yazdım compile etmediğim için ufak tefek kusurları olabilir ama genel mantık böyle... Umarım anlatabildim ben tüm iletişimlerimde bu ve buna benzer birçok karmaşık protokol oluşturuyorum ve çok rahat bir komut yapısına sahip oluyor bunu prensip edinmenizi tavsiye ederim....


jackal183

sağolasın kardeş ben de zaten bunları yaptım da çözdüm sorunumu, hatta crc_checksum yöntemini kullandım, son olarak.

benim paket halinde göndermekten kastım ise verileri byte byte göndermek değil de bir diziyi tamamen göndermek. printf() fonksiyonunun yaptığı şekilde göndermekten bahsediyorum yani. CCS C de ki printf fonksiyonu "/n" i görene kadar stringe koyup "/n" i gördüğü anda bu stringi mi gönderir. helpinde öyle yazıyor ama ben başarılı olamadım. hatta help kısmında puts() fonksiyonundan bahsediyor paket halinde gönderebilmek için ama ben bunları da denedim, fakat dediğim gibi başarılı olamadım. veriyi putc() ile gönderdim ama puts() ile gönderemedim.

ogunduru

Bir çok ustanın yorumundan sonra ben de bir not ekleyeyim.
5 yıldır RS485 ile haberleşen otomasyon uygulamaları yapıyorum. Hiçbir sorun yaşamıyorum. Kullanılacak doğru kablonun cat6 değil LIY(ST)CY kodlu kablo olduğunu belirteyim. 4 telli veya 2 telli rs485 tercihinize göre, bu kabloyu 5*0,11 veya 3*0,11 (bir tel yedek) seçebilirsiniz. Toplam kablo boyu 500-600 metre üzerindeyse 0.22'ye çıkmanızda fayda var. Kablo yolu üzerinde veya yakınında manyetik alan oluşturan elektrik motorlarları vb. etkiler olduğu durumunda, hatta gönderdiğiniz data paketlerinde bozulmalar oluşacaktır. Kablo yolu üzerinde bu etkiler çok fazla ise cihaz ile iletişim tamamen kesilebilir.
Matematik Mühendisi bir hobi elektronikçi

Klein

Alıntı yapılan: ogunduru - 15 Şubat 2012, 21:33:40
Bir çok ustanın yorumundan sonra ben de bir not ekleyeyim.
5 yıldır RS485 ile haberleşen otomasyon uygulamaları yapıyorum. Hiçbir sorun yaşamıyorum. Kullanılacak doğru kablonun cat6 değil LIY(ST)CY kodlu kablo olduğunu belirteyim. 4 telli veya 2 telli rs485 tercihinize göre, bu kabloyu 5*0,11 veya 3*0,11 (bir tel yedek) seçebilirsiniz. Toplam kablo boyu 500-600 metre üzerindeyse 0.22'ye çıkmanızda fayda var. Kablo yolu üzerinde veya yakınında manyetik alan oluşturan elektrik motorlarları vb. etkiler olduğu durumunda, hatta gönderdiğiniz data paketlerinde bozulmalar oluşacaktır. Kablo yolu üzerinde bu etkiler çok fazla ise cihaz ile iletişim tamamen kesilebilir.
Merhaba! Forumumuza hoşgeldin.

Rs485 gibi diferansiyel hatlarda burgulu çift kablo kullanmak , burgusuz kablo kullanmaya göre daha yüksek emc bağışıklığı sağlar.
Önerdiğiniz kabloyu incelemedim. Şöyle bir resmine baktım , bana hiç burgulu gibi gelmedi. eğer burguluysa kablo seçimi doğru ama 1 yedek meselesi hatalı.
Eğer kablo içinde yedek bırakılacaksa 1 tane değil 2 tane bırakmak ve kablonun birinde bir kopma olursa  iki hattı birlikte yedek burgulu hatta geçirmek gerekir.  Eğer utp kabloda emc sorunları yaşanırsa STP kablo kullanılabilir.

gibi2

arkadaşlar sizden bir ricam olacak sn75176nın pin bağlntılarını paylaşabilirmisiniz???oydugunuz resimler hep yarım:)))

OG

Alıntı yapılan: gibi2 - 06 Mart 2012, 16:10:47
arkadaşlar sizden bir ricam olacak sn75176nın pin bağlntılarını paylaşabilirmisiniz???oydugunuz resimler hep yarım:)))
http://www0.fh-trier.de/~berres/Datenbl%E4tter/TEXAS/75176.pdf
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ibrahim96

Konuyu uyandırabilirmiyiz?
Şema arıyorum.

dumansiz


ibrahim96

Master ve slave kısmnda verdiginiz şema daki pinler baglantı yapılacak ve örnek bi haberleşme kodu verebilirmisiniz?

dumansiz

Paylaşacak örnek bir kodum yok. Sizin yaptığınız, çalışmayan veya anlayamadığınız bir kod varsa burada paylaşın, anlayamadığınız yerleri belirtin. Bu şekilde daha fazla yardım eden olacaktır.

ibrahim96

Şu anda üzerine çalıştım kod tam anlamıyla yok anahtar kodlar olsa işimi görecek .
ccs c kullanıyorumm misal
Veriyi en saglıklı hangi kodla gönderip alabilirim?
Veri geldinde kesme ile mi almalıyım?
Masterda Rx pinni 485 ro ına girip slave dede ro a mı girilmeli yim

dumansiz

-Kesme kullanmanız sizin yararınıza.
-Master da olsa, Slave de olsa, işlemci ile MAX485 arasındaki bağlantı değişmez. Şekildeki gibi olacak.

ibrahim96

Kesme ile yaptımda takılmalar oluyor kesme kullanmadımda takılmıyor
Örnek bir kodu olan var ise paylaşabilirmi?