R485 kodu

Başlatan fzf, 13 Mart 2021, 21:56:03

fzf

Slm arkadaşlar pıc 16f877 rx tx çıkışı olan p6ve p7 pimlerini kullanarak invertere frekans bilğisi göndermek istiyorum bu konuda yaklaşık iki haftadır araştırma yaptım yapıyorum pıcbasıc kodu olarak araştırdım sonuç olarak bunu yapabilmek için donanım olarak max 485 entegresi kullanmak yazılım olarakda hserin komutunu eger yanlış öğrenmediysem kullanmak gerekiyor bıraz kendim bileyler yazarak yapmayı denedim olmadı forumdakş ve digersitelerdeki ornekleri konuları okudum komutları kafamda biryere oturtamadım bu arada kod yazmada uzman biri değilim herkez farklı farklı şekilde anlatmış veya uygulama yapmış o yüzden kafam çok karıştı kısaca şunu sormak istiyorum bu hserin komutunu kodları nasıl yazılıyor mesela imverter kısmında bautred 9600 adres 1 8n1 şeklinde ayarlı pıc kısmına hserin komutunu yazarken 9600 neresine adresi neresine  stop bitini neresine yazacağız bu konuda yardımcı olcak arkadaşlardan yardım bekliyorum

aRci

merhaba bunun için pic basic yardım lısmında örnek kodlar bulabilirsin

hserin ve hserout donanımsal haberleşme pinlerini kullanılır.16f877 de POrtc.7 ( RX ) portc.6 (TX) pinlerini kullanabilirsiniz.

haberleşme hızı ayarı için alttaki kodu pic çalışma frekansı 4mhz de 9600 baud rate hızı için gereken kodlardır. çalışma frekansı yada iletişim hızı değiştirmek istediğinde bu komutlardaki değerlerde değişir PicMultiCalc adında bir program var onun ile basitce gereken kodları bulabilirsiniz.

invertör ile haberleşme için forumdaki arkadaşlardan dönüş gelebilir.

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

fzf


fzf

Slm arkadaşlar sanırım konuya cevap bulamıyacagım yapmak istegim şu İnverter kullanma kitapcıgında şu bilgiler verilmiş



Sadec ordaki o komut dizisini hserout komutuyla invetere bir anlık yollamak
Bir türlü başaramadım plc bağladımda haberleşme oluyor fakat bilimmeyen digerek veri alışı olmuyor yardım ve yorumlarınızı bekliyorum

aRci

burda gönderilecek olan değerler hex olarak gönderilmeli siz verileri nasıl gönderiyorsunuz.

fzf

Alıntı yapılan: aRci - 16 Mart 2021, 00:12:40burda gönderilecek olan değerler hex olarak gönderilmeli siz verileri nasıl gönderiyorsunuz.

nasıl gönderecegimi çözemedim
Hserout [01,06,2000,0001,4226] şeklinde yolluyorum olmuyor sizce yazmalıyım

aRci

tam emin olamasamda bu şekilde deneyin

HSEROUT[HEX 01,HEX 06,HEX 20,HEX 00,HEX 00,HEX 01,HEX 42, HEX 26]

Yan yana 4 rakam olanları bölerek denedik eğer olmazsa tek seferde denersiniz. HEX 2000 şeklinde
sonucu paylaşırsanız sevinirim.

ete

Açıklamada bir komut formatı verilmiş. Bu formata göre;
İnverter Adresi :$03
Yazma Komutu    :$06
Parametre Adresi:$20 00
Forward Running :$00 01
CRC             :$42 28

Bu durumda HSEROUT komutu şöyle olmalı;
HSEROUT [$03,$06,$20,$00,$00,$01,$42,$28]

Bu inveretrin adresi $03 değilde $01 midir? siz o şekilde vermişsiniz..
Ayrıca CRC ye dikkat edin doğru olması gerekir. Acaba o klavuzda CRC hesabına ait bir bilgi verilmişmidir? En azından bir polinomu olması gerekir onu belirtmiş olmalılar.

ete

a.zorba

#8
anladıgım kadar delta ınvertere modbus ile çalıştırma ve frekans degiştirme yapacaksın
ilk önce invertere gonderme den formatın dogrumu diye

modbus slave programı ile dogru şekilde gönderiliyormu onu kontrol edelim.

gönderme hex olmalı
0x2000 registeri ile çalıştırma yön vs kontrol ediliyorken
0x2001 de frekans bilgisi gider

crc hesab lamaz isen verilerin dogru gitmez 50hz için CRC :$42 28 dogru oldugu kabul edersek başka frekanslarda gitmez muhakkak crc hesablanmalı .
modbus slave programın da aldıgın verilerin ekran görüntusu paylaşırsan fikir yürütülebilir.



a.zorba

delta inverter için
 02 00   04 (rs485 ile çalıştırma)
 09  ile ilgili ayarları n proton ile uyumlu olmasını kontrol edelim.

fzf

Alıntı yapılan: a.zorba - 16 Mart 2021, 11:51:06anladıgım kadar delta ınvertere modbus ile çalıştırma ve frekans degiştirme yapacaksın
ilk önce invertere gonderme den formatın dogrumu diye

modbus slave programı ile dogru şekilde gönderiliyormu onu kontrol edelim.

gönderme hex olmalı
0x2000 registeri ile çalıştırma yön vs kontrol ediliyorken
0x2001 de frekans bilgisi gider

crc hesab lamaz isen verilerin dogru gitmez 50hz için CRC :$42 28 dogru oldugu kabul edersek başka frekanslarda gitmez muhakkak crc hesablanmalı .
modbus slave programın da aldıgın verilerin ekran görüntusu paylaşırsan fikir yürütülebilir.



Cevabınız için tşk ederim inverter nl1000 ama adresler aynı dediğiz hex olarakta yolladım yine sonuç alamadım dediniz gibi crc olayıyla ilgili oldugunu düşünüyorum artık crc ne oldugunu nasıl çalıştıgını bilmiyorum siz yardımcı olursanız sevinirim

fzf

Alıntı yapılan: ete - 16 Mart 2021, 09:18:51Açıklamada bir komut formatı verilmiş. Bu formata göre;
İnverter Adresi :$03
Yazma Komutu    :$06
Parametre Adresi:$20 00
Forward Running :$00 01
CRC            :$42 28

Bu durumda HSEROUT komutu şöyle olmalı;
HSEROUT [$03,$06,$20,$00,$00,$01,$42,$28]

Bu inveretrin adresi $03 değilde $01 midir? siz o şekilde vermişsiniz..
Ayrıca CRC ye dikkat edin doğru olması gerekir. Acaba o klavuzda CRC hesabına ait bir bilgi verilmişmidir? En azından bir polinomu olması gerekir onu belirtmiş olmalılar.

ete
cevabınız için tşk ederim crc hesabı dediğiniz acaba bumudur

ete

CRC hesabı bu olmalı mantığını pek anlayamadım detay göremediğimden olsa gerek.
Ama nasıl hesaplandığına dair bir açıklama olsa daha iyi anlaşılırdı. Kod parçasındanbir anlam çıkarmak zor en azından benim için.

Ete

a.zorba


Burak

Alıntı yapılan: fzf - 16 Mart 2021, 21:46:08cevabınız için tşk ederim crc hesabı dediğiniz acaba bumudur


Evet bu CRC16-Modbus hesabı için oluşturulmuş bir hesaplama fonksiyonu .
Ω Gens Una Sumus Ω

Powered by EzPortal