makel & köhler sayac okuma rs485 python3 ?

Başlatan mertlinux, 16 Mart 2023, 17:41:49

mertlinux

merhabalalar elimde 4 adet rs485 haberleşmeli makel  t600.2251  ve köhler ael.tf.22 marka   elektrik sayacı   mevcut  ,

rs485 çıkış portundan data'ları okumak istiyorum , fakat sadece ismini söylüyorlar , diğer aşamaya geçemedim ,

formda eski bir konu var  https://www.picproje.org/index.php?topic=28282.0   bu linkde   orayada bakdım fakat bir sonuça varamadım.

aşağıdaki kod sayacın adını veriyor , fakat bir sonraki aşamaya geçemiyorum Aktif enerji vs okuyamıyorum
 obis kod yolladım olmadı , baudrade 9600 çektim denedim yine olmadı ,
yardımcı olursanız çok sevinirim sağolun.



import serial

ser = serial.Serial('/dev/ttyUSB0', 300, 7, 'E', 1,timeout=1)  # seri haberleşme portu açılır

ser.flush()

response2 = bytes()
time.sleep(0.5)
# sayacın verilerini okumak için gerekli komutlar

ser.write(('/?!\r\n').encode())
time.sleep(0.5)

response = ser.readline().decode()

print(response)





 

volkanunal

#1
Sayaçlar konusunda çalışırken hazırladığım ve faydalı olabileceğini düşündüğüm linkleri bırakıyorum.

Yine okuma yapamazsanız tekrar bakabiliriz.

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

ESP32 ile okuma örneği : https://github.com/volkanunal/esp32-iec62056-component

STM ile okuma örneği : https://github.com/volkanunal/IEC62056-21

kimlenbu

Ben 10 sene kadar önce optik porttan makel, köhler, luna gibi sayaçlar için okuma uygulamaları yaptım. İlk önce 300 baudda başlayıp arkasında istediğin bauda geçmek için gerekli komutları uygulaman gerekiyor. Ne yazık ki köhler dışında standartlara uyan yok. Hepsini deneme yanılma yoluyla çözmüştüm. Bazısı tekli data okuma isteklerini yoksayıyor, toplu okumaya izin veriyor. Oldukça zahmetli bir süreç.

Ben geliştirme sürecinde üreticilerin kendi okuma programlarını kullanıp usart sniffer ile verileri çözerek başarmıştım. Her sayaca destek vermek istiyorsan bütün sayaçlardan satın alıp üreticinin kendi programları ile iletişimini çözmen gerekiyor.

Ayrıca STM32 kullanacaksan 300baud'da çalıştırması zor, dinamik olarak clock ayarlarını değiştirmen gerekebiliyor, çoğu mcu'da maksimum clock'ta 300baud desteklenmiyor. O sıralarda hal library olmadığı için std peripheral library baya eziyet çektiriyordu. Ben esp12 kullanmıştım.

Kodlar eski makinamda, vaktim olursa arayıp buraya eklerim. (Rafa kaldırılan ticari bir projeydi)

mertlinux

#3
volkan bey merhaba , bu yazınızı önceden incelemiştim , ve beni bilgilendirmişti , fakat sorunum devam etmekde ben cihaza python


import serial
ser = serial.Serial('/dev/ttyUSB0', 300, 7, 'E', 1,timeout=1)  # seri haberleşme portu açılır
ser.flushInput()
ser.flush()

response2 = bytes()
time.sleep(0.5)
# sayacın verilerini okumak için gerekli komutlar
ser.write(('/?!\r\n').encode())
time.sleep(0.5)
response = ser.readline().decode()

ser.flush()
ser.flushInput()
print(response)

buraya kadar tamam  cihaz bana  /MSY5<1>T600.2251      böyle bir response dönüyor bu dogru marka model buradan sonrası için denemediğim döküman kalmadı , aktif vs değerleri alamıyorum yardımcı olabilirmsiniz ?


17 Mart 2023, 11:47:20
Alıntı yapılan: kimlenbu - 17 Mart 2023, 11:41:23Ben 10 sene kadar önce optik porttan makel, köhler, luna gibi sayaçlar için okuma uygulamaları yaptım. İlk önce 300 baudda başlayıp arkasında istediğin bauda geçmek için gerekli komutları uygulaman gerekiyor. Ne yazık ki köhler dışında standartlara uyan yok. Hepsini deneme yanılma yoluyla çözmüştüm. Bazısı tekli data okuma isteklerini yoksayıyor, toplu okumaya izin veriyor. Oldukça zahmetli bir süreç.

Ben geliştirme sürecinde üreticilerin kendi okuma programlarını kullanıp usart sniffer ile verileri çözerek başarmıştım. Her sayaca destek vermek istiyorsan bütün sayaçlardan satın alıp üreticinin kendi programları ile iletişimini çözmen gerekiyor.

Ayrıca STM32 kullanacaksan 300baud'da çalıştırması zor, dinamik olarak clock ayarlarını değiştirmen gerekebiliyor, çoğu mcu'da maksimum clock'ta 300baud desteklenmiyor. O sıralarda hal library olmadığı için std peripheral library baya eziyet çektiriyordu. Ben esp12 kullanmıştım.

Kodlar eski makinamda, vaktim olursa arayıp buraya eklerim. (Rafa kaldırılan ticari bir projeydi)


merhaba raspberry pi 4 kullanıyorum ,  makel marka cihaz bana adını veriyor readout yapamıyorum  boş cevap geliyor , kendi programını kullandıgımda cevap veriyor.

volkanunal

#4
Sayaç size cevap verdikten sonra, aşağıda bulunan mesajı gönderdikten sonra baudrate'i 9600'ı çekmelisiniz. Çünkü aşağıda bulunan '\x35' ifadesi ile sayaca, göndereceğin readout baudrate'i 9600 olsun diyorsunuz.

\x06 -> ACK
\x30 -> Protokol Kontrol
\x35 -> Baud Ayarı
\x30 -> Protokol Mod
'\x0D', '\x0A -> \r \n'ye karşılık geliyor


const  unsigned char Readout_Message_b9600[7] = {'\x06', '\x30', '\x35', '\x30', '\x0D', '\x0A'};

Python karşılığı olarak aşağıda bulunana karşılık geliyor aslında ascii çevrimi ile beraber.

bytes(f'\x06050\r\n', 'ascii')

Bu pattern'i gönderikten sonra baudrate 9600'a setlemeniz gerekiyor.

Şöyle bir video kaydetmişim zamanında
https://www.youtube.com/watch?v=kz4SxZw0UqY