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)
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
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)
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:20Alı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.
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