T

Elektrik Sayacından bilgi okuma

Başlatan turhan42, 06 Haziran 2013, 14:59:24

turhan42

merhaba Arkadaşlar, Ben elektrik-elektronik mühendisliğinde okuyorum. Benim bir sorum olacak.
Bende makel marka kombi bir sayaç var. Bu sayaçta 2 adet rs 485 bağlantı ucu var. Ben bu bağlantı uçları ile pic e bilgi almak istiyorum ve aldığım bilgileri de ekranda yazdırmak istiyorum. Bunun için pici direk sayaca bağlarsam bilgi okuyabilir miyim. Araya max 485 gibi bir entegre koymam gerekir mi? Bunun için devre şeması olan var mı? Teşekkürler...

mustafa

Max 485 mutlaka koymalısın. Bunun yanında sayaca gönderilecek sorgu kodunu da bilmen gerekir. Eğer datasheet gibi bir şey varsa orda  hangi kodu gönderdiğinde hangi bilgiyi alacağın yazmalı.

turhan42

pic zaten rs 485 ile haberleşmiyor mu? Koymamızın mantığı nedir?

ete

Pic , RS232 ile haberleşir. Sen RS485 entegresini devrene ilave edersen o zaman sistem RS485 e dönebilir. Buradan da şunu anlamalısın. RS485 ile haberleşecek her ünitenin kendi ne ait bir 485 entegresi olması gerekir. Arkadaşların koy dedikleri bu olsa gerek.
Ete

umiter

Alıntı yapılan: turhan42 - 06 Haziran 2013, 14:59:24
merhaba Arkadaşlar, Ben elektrik-elektronik mühendisliğinde okuyorum. Benim bir sorum olacak.
Bende makel marka kombi bir sayaç var. Bu sayaçta 2 adet rs 485 bağlantı ucu var. Ben bu bağlantı uçları ile pic e bilgi almak istiyorum ve aldığım bilgileri de ekranda yazdırmak istiyorum. Bunun için pici direk sayaca bağlarsam bilgi okuyabilir miyim. Araya max 485 gibi bir entegre koymam gerekir mi? Bunun için devre şeması olan var mı? Teşekkürler...

Merhaba,

Öncelikle sayaç ile haberleşmenizi sağlayacak mikrodenetleyici destekli devrende bir Rs-485 kullanmak gerekir, picbasic/proton basic/picC lerden birini yada birkaçını bildiğini varsayarak sayaç ile haberleşebilmek için sayaç haberleşmesi IEC 62056-21 standardına göre uyumlu olup olmadığını bilmeniz gerekiyor, eğer bu standart çerçevesinde ise haberleşme genelde 4 adımda gerçekleşir.

Bunlar;

1. Sayac ID/Kimlik Bilgisi sorgulama
2. Hız ayarları
3. OBIS kodlarının kullanılması
4. Oturum sonlandırma.

Kısaca..
1. Sayaç sorgulama genelde 7E1 dir. 1-wire bağlantıda hangi sayaç olduğu bulunur
2. Sorgulama hangi hızda yapılacağı belirlenir, örneğin  9600 baud
3. Sayaca ait OBIS kod listesini alman lazım. Bu biraz uğraştırıcı çünkü firmaların argesine ulaşman gerekiyor, fakat yardımcı olurlar.
4. Adı üstünde sayaçtan bilgili alıp oturumu kapat.

Buraya kadar olan kısmı mikrodenetleyici - sayaç kısmı, sonrasında istersen mikrodenetleyici ile aldığınız bilgileri bilgisayar yazılımına RS-232 üzerinden ( temel bilinen yöntem ) alabilir, veritabanında tutabilir, veriler ile şema veya grafikler üretebilirsiniz.


NOT : Ben kullandığınız marka değilde piyasa da başka bir markanın ürünü bu konularda daha yardımcı.

Saygılarımla.


Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

turhan42

arkadaşlar verdiğiniz bilgiler için teşekkür ederim. Birkaç sorum daha olacak.
Sayın ete; Pic , RS232 ile haberleşir demişsin. Benim çözemediğim nokta şu. Pic i bilgisayarla haberleştirmek için max232 entegresi kullanılıyor. Kitaplarda diyor ki; 'bilgisayarın seri portu rs 232 ile haberleştiği için picten gönderilen bilgiler bu entegre ile rs 232 e çevriliyor.'  Ben burdan anlıyorum ki pic rs 232 ile bilgi alıp göndermiyor. Bu konuda beni aydınlatırsanız sevinirim.

Sayın umiter; Benim elimde makel var ama başka markada temin edebilirim. Hangi marka kullanırsam daha kolay çözebilirim bu işi. Ben mikro c de yazmayı düşünüyorum. Sizin elinizde örnek yazılım veya şema varmı paylaşabileceğiniz?
Teşekkürler...

ete

RS232 bir haberleşme standardıdır. Bu standart içinde hepsi aynı mantıkla çalışmakla birlikte 5V civarında besleme voltajı ile çalışan Pic serisi TTL seviye kullanır. Yani Pic ve benzeri işlemcilerde HIGH=5V , LOW=0V (GND) seviyesindedir.
PC de durum farklıdır. PC de HIGH=-10V (eskiden bu -12V idi şimdilerde -7V seviyelerine kadar düşürdüler)
LOW=+10V (buda eskiden +12V idi şimdilerde bu +7V seviyelerine kadar düşürüldü.)
Hal böyle olunca PC nin HIGH diye nitelendirdiği sinyali pic anlamayacaktır. Yada PC nin LOW diye yolladığı sinyali Pic anlamayacaktır. Elbette bunun terside geçerli Pic'in yolladığı HIGH yada LOW sinyalleri PC tarafından çözülemiyecektir.
Bu sorunu gidermek için MAX232 entegresini geliştirmişler. Bütün yaptığı farklı ortamların bir birlerini anlayabilmeleri için gerekli dönüşüm işlemini yapmaktır. Dolayısıyla PC den gelen sinyali bu entereye girince ,
- (-7V) olan HIGH sinyali Pic tarafına +5V olarak aktarılır
- (+7V) olan LOW sinyali ise yine Pic tarafına 0V olarak aktarılır. Böylece PC nin yolladığı her sinyal Pic tarafından algılanır.

Bu açıklamalarımdan şunu anlamalısın. Iki PC RS232 sistemi ile haberleşirken araya çevirici kullanmak gerekmez. Birinin ne dediğini diğeri kolaylıkla anlar.
İki adet pic kendi aralarında RS232 kullanarak haberleşirken yine çeviriciye ihtiyaç duymazlar. Ama PC ile Pic haberleşirken arada bir tercüman gerekiyor ki oda MAX232 entegresidir.
Yine anlaman gereken bir şey varsa oda PC de Pic de aslında RS232 sistemini kullanıyorlar. Ama sinyal seviyeleri farklı çalıştığı için bir birlerini anlamıyorlar. Yoksa RS232 sisteminde temel mantıkları aynıdır.

Şimdi bu açıklamalara birde RS485'i ekleyelim. RS232 gibi bir sistem var iken neden birde RS485 çıkartmışlar.
RS232 sisteminde yalnızca 2 ünite bir biri ile haberleşebilir. Birden fazla üniteyi aynı hatta bağlarsan gerek empedans uyuşmazlığı gerekse sinyal seviyesinin bozulması nedeni ile haberleşme anında kesilir.  İşte bu sıkıntıdan kurtulmak için insanlar düşünmüşler ve sisteme bir entegre daha ilave edelim sinyal seviyesini düzeltsin empedans uyuşmazlığı olmasın demişler ve Max485 yada SN75176 entegrelerini üretmişler. Bu entegreler aynı hatta birden fazla ünitenin bağlanmasına imkan tanırlar. Üstelik haberleşme mesafeside 1200 m ye kadar çıkabilir. Bu sistem aslında RS232 nin devamıdır. Yani sen normal haberleşmeni RS232 ile yaparsın RS232 çıkışını Max485 e girersin ve çıkışı diğer sisteme yönlendirirsin.
Diğer sistem sinyal uyumunu sağlamak amacı ile gelen sinyali yine bir max485 entegresi ile alır ve onun diğer yöne olan çıkışı artık direk RS232 sinyali şeklinde olduğundan onu kullanır. Böylece çoklu ortam sorunu ile mesafe sorunları halledilmiş olur.
Max485 sisteminde yalnızca kontrol pinleri (RE-DE) birleştirilerek kullanılmalıdır. Bu birleşmiş uç LOW da ise sistem bilgi alma konumunda dır. Bilgi yollar iken bu birleşik uç HIGH yapılmalıdır. Hepsi bu kadar.
Umarım artık olayı anlamışsındır.

Ete

turhan42

Çok teşekkür ederim verdiğiniz bilgiler için. O kadar araştırma yapmama rağmen bu kadar net bir bilgi bulamamıştım. çok faydalı oldu.
Son olarak şunu sormak istiyorum. Pic ile sayacı (rs 485 ile haberleşiyor)  haberleştirme yaparken sadece picin çıkışına max485 entegresi koymam yeterli olurmu? yoksa sayacın çıkışına da max485 entegresi koymalı mıyım?
teşekkürler... :)

umiter

#8
Alıntı yapılan: turhan42 - 08 Haziran 2013, 23:19:30
Çok teşekkür ederim verdiğiniz bilgiler için. O kadar araştırma yapmama rağmen bu kadar net bir bilgi bulamamıştım. çok faydalı oldu.
Son olarak şunu sormak istiyorum. Pic ile sayacı (rs 485 ile haberleşiyor)  haberleştirme yaparken sadece picin çıkışına max485 entegresi koymam yeterli olurmu? yoksa sayacın çıkışına da max485 entegresi koymalı mıyım?
teşekkürler... :)

Sayaç çıkışana rs-485/487 koymanıza gerek yok, standarta uygun ise sayaç sizin devrenizle haberleşecektir. Burada dikkat etmeniz gereken nokta sayacın ID sini alabilmeniz çünkü bu tür sayaçlar ekranlarına bu ID verilmiyor, elektrik sayaçlarında TEDAŞ onayı arayınız. Bu sayaçlarda buton basma kademesinde ID yi görebilirsiniz.

ETE hocamız PC-rs232 haberleşmesini detaylı bir şekilde ifade etmiş, kısaca;

PC(rs232) > Mikrodenetleyici+RS232+RS485 > kablo < Sayaç RS485/487 portu buna göre;

Mikrodenetleyici rs232-rs485/487 forumda bolca mevcut, yalnız buradaki forumdaki kodlar ağırlıkla PicBasic dolayısıyla bu kodu bilmiyorsanız üzerinde çalışmanız gerekecek, sayaç için ise firmaların standarta uyumu ile ilgili bir durum var onu incelemeniz gerekir yoksa haberleştirmeniz oldukça karmaşık olacaktır. Bu sebeple size bir şema veremiyorum.

Adım adım ilermenizi öneriyorum, çünkü sayaçtan alacağınız veriler ( güç nekadar, iki zaman arası tüketim vb vb )  OBIS kodları ile olduğu için bir marka ısı değerini AL diyor diğer AL1 ikiside aynı standarta tabi fakat komutlar farklı, bir kere çözdünüzmü gerisi kolay gelir.

Bu tür çalışmalarda makinızda rs232/485/487 pci express kart kullanırsanız, bu tür haberleşen cihazları hyper terminal gibi yazılımlarla OBIS için bir test ortamı kurabilirsiniz.

Saygılarımla.





Bilgi elde edilmesi zor,  tüketilmesi kolay bir bulamaçtır.

ete

Sürekli vurgulamaya çalışıyorum. İki ünite RS485 ile haberleşecek ise ikisinde de RS485 entegresi olması gerekir. Sayac içinde bunun olması gerektiğini düşündüğümüzden ikinci bir rs485 entegresi koymaya gerek yoktur diyoruz. Zira standart cihazlarda bu entegre olmalı. Hepsinde varmıdır bilmiyorum ama cihaz rs 485 ile haberleşir deniliyor ise mutlaka olması gekir.
Ete

turhan42

devreyi yaptım ancak SN65176B entegresi enerji verdiğimde ısınmaya başlıyor.Acaba picin enerjisi ile bu entegrenin enerjisi ayrı kaynaklardan mı beslenecek?

ete

Entegre Sn75176 olması gerekir yanlış bir şey almadın umarım. Zira Sn65176 yazmışsın.
Pic ve bu entegre aynı kaynaktan beslenecek her ikiside 5v dur.
Ete

turhan42

Entegre ismini yanlış yazmışım. Kullandığım entegre Sn75176b. Isınma olayını hallettim. Ayaklar arasında kısa devre varmış :(
programı CCS C de yazmaya karar verdim. rda kesmesi yaptım. Ancak A ve B uçlarına sayaç bağlamama rağmen pic devamlı rda kesmesine gidiyor. Acaba bu entegrenin A ve B uçlarına direnç üzerinden +5 volta veya şaseye bağlamam gerekirmi?

ete

Normalde A ve B uçlarına pullup veya pull down bağlaman gerekmiyor. Kablo boyuna bağlı olarak ve özellikle kablo tipine göre bağlanabilir ama bağlanmadan sistemini en azından 300 m ye kadar çalıştırabilmen gerekir. Kesme oluşmasının bir sebebi olabilir. Yada kesme bayrağını sıfırlamıyorsundur böylece program sürekli kesmeye giriyordur.

Ete

turhan42

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#include <lcd.c>
#use rs232 (baud=300, xmit=pin_C6, rcv=pin_C7, parity=E, stop=1, bits=7,FORCE_SW, STREAM=PORT_1)
int metin1[3]={0x2F,0x3F,0x21};//,0x0D,0x0A};
int gelen[25];
int i=0;
void main ( )
{

   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

puts(metin1);
lcd_init();
while(kbhit())
{
gelen=fgetc();
output_low(pin_a1);
printf(lcd_putc,"\f%s",gelen);
i++;
}
}

kesmeyi iptal ettim. Sayaçla pic bağlantılarını yaparken bilgisayarada rs232 dönüştürücü üzerinden bağlanarak hattı takip ettim.
Yukarıdaki program çalıştığında sayaca bilgi yolluyor ve sayaçta cevap yolluyor. ama gelen=fgetc(); komutunda program bekliyor. yani
gelen bilgiyi pic okuyamıyor.

Powered by EzPortal