Makel Sayaç Okuma

Başlatan Mucit23, 07 Şubat 2024, 18:04:06

Mucit23

Selamlar

Makel Sayaçların Endeks bilgilerini okumaya çalışıyorum. Bunun için Makel'in Sayaç okuma yazılımını kullanmak istedim başlangıç olarak. Optik port olarak da Tensenin OP-232 kodlu ürününü satın aldım.

USB RS232 dönüştürücü ile bağlantıları yapıp sayaç le haberleşmeye çalışıyorum ama sayaç bir türlü cevap vermiyor. Yazılım \?! dataları ile sorgu yapıyor. Osiloskop ile RS232 hattını inceledim. Fakat optik port ile sayaç arasında problem var.

Makel için bu veriler yanlış olabilir mi? Acaba optik port mu bozuk ona da emin olamadım. IR ledlerin kamerada yandığı görülebiliyordu. Kamera ile optik portun ledlerine baktığımda veri gönderimi esnasında ledlerde bir ışık göremiyorum.

Fikir verebilecek olan var mı?

wanted0035

Usb rs232 çeviriciden emin misiniz? Digitus mu? Başka markaysa güveniyor musunuz? Genelde com porttan enerji alarak çalışan cihazlar çevirici seçerler.

Sayaca  "/?CRLF" gönderirseniz (emin olmamakla 300 baud hızında yollayacaksınız) optik portu açıp cevap verir ve sonraki sorgulara yanıt alırsınız. Ayrıca sayaç optik portu açtığı zaman ekranda da bunu gösterir.

Mucit23

Elimdeki USB RS232 dönüştürücü arızalı olabilir diye TTL dönüştürücü çıkışına MAX3232 bağlayarak kendim yaptım. Data gönderimi sırasında RS232 çıkışındaki voltaj seviyelerini kontrol ettim Olması gerektiği gibi. USB-RS232 kısmında sorun yok. Optik port için aldığım OP-232 aygıtında şüphelendim. Elimde iki tane var ikiside sıfır gerçi ama yarın diğerini bağlayıp deneyeceğim.

wanted0035

Konuyu sapıtmak istemiyorum ama bir ihtimal diye yazıyorum.

Piyasadaki çoğu rs232-usb çevirici de rs232 tarafında sadece 3 pin bağlı olur, bunlar gnd, rx, tx. Çoğu durumda bunlar yeterli oluyor.

Ancak kimi cihazlar da rs232 haberleşme için yukarıdaki gnd, rx, tx'in yanında rts cts gibi diğer pinler de kullanılıyor. Bu durumda yukarıda ki basit tip usb-rs232 çevirici kullanıldığında cihaz çalışmıyor.

Sizin elinizde ki tenseye ait cihazda da rs232 haberleşmede gnd-rx-tx'in dışında diğer pinler kullanılıyor olabilir ve elinizde ki çeviricide de diğer pinler bulunmuyorsa cihaz çalışmaz.

------------------------------------------------
Gnd-rx-tx pinleri sadece haberleşme amaçlı kullanılır, diğer pinler de haberleşmenin yanında bağlı cihazı beslemek için kullanılabiliyor.



kimlenbu

Önceden makel, luna, köhler gibi sayaçların uzaktan okunması için kibrit kutusu kadar direkt sayaca yapışan bir cihaz tasarlamıştım. Kodlar şahsi makinamda olduğundan bakamıyorum şu an, aşağıdaki dökümanı buldum maillerimde. Makel'in kendi okuma programını bulduysanız ben de oradan iletişimini inceleyerek çözmüştüm.

300Baud ile başlayıp 9600baud'a çıkmanız gerektiğini biliyorsunuzdur herhalde.

Ayrıca STM32 ile proje yapıyorsanız kristal seçiminizi ona göre yapmanız gerekiyor, ne yazık ki standart kristaller ile 300 baud elde etmek zor, frekans kayıyor, jitter error oluşuyor.




Mucit23

#5
Hocam NodeMCU ile deneme yapacağım. 300Baud ile haberleşmede sorun olacağını sanmıyorum. Ama tekrardan bi deneme yapayım.

Şimdi haberleşme yapabildim aslında. Yine anlamadığım bir şekilde RS232 dönüştürücüde sorun çıktı. Değiştirince sayaç ile haberleşmeye başladım.

Haberleşme sonucunda aldığım veriler bu şekilde.



Bu verileri Parse etmek için bir yöntem varmıydı acaba?

Okuma işinden anladığım şudur.
İlk başta 300bps ile "/?CRLF" gönderiyoruz. Daha sonra sayaç bize yine aynı baud ile seri numarasını gönderiyor. Daha sonra 9600bps ile "STK50CRLF" gönderiyoruz. Sonra Sayaç tüm verisini gönderiyor. Bu verileri parse etmek için hazır bir yöntem yada kütüphane varmı? ESP32 ve arduino editörü kullanıyorum şuanda.

Mucit23

@kimlenbu Arduino platformunda debug imkanı olmadığı ve NodeMCU nun yavaş programlandığından dolayı STM32 ile bir geliştirme ortamı kurdum. Gerçekten STM32 de ki UART donanımı 1200bps altında düzgün çalışmıyor. Olmadı. Terminal yazılımı çıkan dataları anlayamıyor. 1200bps üstü sorun yok. Bunu kolaylıkla çözmek pek mümkün değil sanırım. 

Mucit23

STM32 lerde düşük baudrate için oluşan bu hataları gidermenin bir yolu var mı? Fosc frekansını düşürmek çözüm olabilir mi ?

engerex

Alıntı yapılan: Mucit23 - 08 Şubat 2024, 15:57:09@kimlenbu Arduino platformunda debug imkanı olmadığı ve NodeMCU nun yavaş programlandığından dolayı STM32 ile bir geliştirme ortamı kurdum. Gerçekten STM32 de ki UART donanımı 1200bps altında düzgün çalışmıyor. Olmadı. Terminal yazılımı çıkan dataları anlayamıyor. 1200bps üstü sorun yok. Bunu kolaylıkla çözmek pek mümkün değil sanırım. 

Sanırım "Arduino IDE 2.3.0" 'te debug varmış.

kimlenbu

Alıntı yapılan: Mucit23 - 08 Şubat 2024, 19:31:19STM32 lerde düşük baudrate için oluşan bu hataları gidermenin bir yolu var mı? Fosc frekansını düşürmek çözüm olabilir mi ?

Selamlar,

Prescale katsayıları ile oynayarak inebilmiştim, benim uğraştığım zamanlarda CubeMx ve HAL Library yoktu, Excel'de ST Microelectronics'in hesaplayıcısı vardı, oradan kurcalaya kurcalaya çözmüştüm. Ama işlemci maksimum clock'ta çalışamıyor, saçma sapan bir frekansa ayarlamıştım.


volkanunal

#10
Alıntı yapılan: Mucit23 - 08 Şubat 2024, 13:33:06Daha sonra 9600bps ile "STK50CRLF" gönderiyoruz.

Şu adım yanlış olabilir hocam, 300 baud ile gönderiyorsunuz bu veriyi ve bu veri içerisinde 5 ifadesi readout verisini 9600 baud ile tarafınıza gönderilmesini talep ediyorsunuz. Bu istek sonrasında sizde 9600'a çekmelisiniz haberleşme baud değerinizi.

Esp32 için bir örnek hazırlamıştım faydalı olabilir belki

https://github.com/volkanunal/esp32-iec62056-component

STM32 içinde bir örnek hazırlamıştım, onun linkini de ekliyorum

https://github.com/volkanunal/IEC62056-21

https://engineeringvolkan.wordpress.com/2020/02/10/5a-evinizin-elektrik-tuketimini-takip-etmek/


Primum nil nocere

Mucit23

Hocam ESP32 ile yapsam işim kolay olacak ama ilk testleri STM32 ile yapmak istiyorum. Debug imkanları çok geniş Fakat STM32'de 300 baudlarda haberleşme sağlanmıyor. STM32F401 ve STM32F103 de deneme yapıyorum. Bir türlü çözemedim düşük baudrate işini. USART TX çıkışına doğrudan USB TTL okuyucu bağlıyorum. Bir türlü düzgün veri okunamıyor. Siz STM32F7 serisinde yapmışsınız. STM32F401 de FOC frekansını düşürmeyi de denedim. Olmadı bir türlü. 

volkanunal

Örnek F7 serisinden sanırım evet, ama f4 üzerinde de yaptığımı hatırlıyorum şirketin kartları f4 üzerineydi zamanında. Sorun yaşadığımızı hatırlamıyorum açıkcası.
Primum nil nocere

dnacikaya

#13
@Mucit23 Sanırım SPBRG veya BRGH register değeri baud hızı için yüksek %lik hata veriyor. Linkte hızlıca frekans ve spbrg değerinize göre hata payınız hesaplayabileceğiniz program ve örnek bir hesaplama formülü var. Ayrıca online hesap araçları için linkte var.

https://www.elektroinfo.org/2020/03/usart-sprg-hesaplama-programi.html

Not: Verdiğim registerler PIC için kullanılabilir. STM32 için USART_BRR registerini inceleyebilirsiniz linkte Baud Rate başlığı altında ayrıntılı açıklanmış:

Örneğin 16mhz için 9600 baud hızdaki brr değeri için şu kod satırı kullanılabilir, frekans/baud sonucu hex olarak brr registerine yükleniyor. Burada 300 baud için uygun değeri hesaplamanız gerekiyor.

USART1->BRR = 0x683; //USARTDIV=16Mhz/9600?

https://micromouseonline.com/2009/12/31/stm32-usart-basics/

Mucit23

#14
Şuan sayaç ile ilgili haberleşme problemim kalmadı. STM32 ile düşük baudrate problemini çözemeyince mecbur arduino gibi bir platformda denedim.

Sayaçdan okuduğum veriler bu şekilde
\x020.0.0(21644440)
96.95(60301248)
0.9.1(15:45:39)
0.9.2(24-02-13)
0.9.5(2)
1.8.0(000000.000*kWh)
1.8.1(000000.000*kWh)
1.8.2(000000.000*kWh)
1.8.3(000000.000*kWh)
1.8.4(000000.000*kWh)
1.6.0(000.000*kW)(00-00-00,00:00)
96.1.3(21-11-05)
96.2.5(21-11-05)
32.7.0(231.18*V)
31.7.0(000.00*A)
34.7.0(50.50*Hz)
!\x03

Burada verileri parse etmek için kullandığınız bir algoritma varmı? Parantez içindeki verileri çekmek için strtok ile birşeyler yapmayı planlıyorum.