Dokładnie. CRC niesie ze sobą zbyt małą ilość informacji, żeby dało się korygować przesyłane dane. CRC umożliwia jedynie wykrycie wystąpienia błędów w bloku danych i w efekcie wygenerowania żądania retransmisji.
Poniżej przedstawiam działającą procedurkę jaką sobie napisałem do obliczania CRC16 w komunikacji po ModBusie z falownikami. Nie wiem tylko pojęcia czy algorytm obliczania dla ModBus jest jednakowy np z tym dla czujników dallasa z 1-wire ale CRC to CRC :) ;crcl, crch - zmienne zdefiniowane w wewnętrznej RAM ;-----obliczanie CRC16----r0, r1, acc----...
Czy ktoś mi może wytłumaczyć dlaczego dla CRC-16 w sieci mogę znaleźć trzy wielomiany generujące: 0x8005 / 0xA001 / 0xC002. Przecież wielomianem generujący tak jest opisany: x^16 + x^15 + x^2 + 1 Wydawać by sie mogło, że temu wielomianowi odpowiada tylko 0x8005, ale licząc różnymi kalkulatormi otrzymuje różne wyniki. To jak to wkoncu jest z tym wielomianem?
Odwróciłeś bajty wyniku, do tego też była jakaś reguła. Ale według wszystkich kalkulatorów CRC wynik powinien wynosić 3F59. Być może algorytm jest źle skonstruowany.
(at)Mat_91 Nie ma sprawy. (at)Atom Spróbuj poniższy kod CRC16 dla wielomianu x^16 + x^15 + x^2 + 1 wartość inicjująca CRC16=0xffff. W przypadku gdyby algorytm wykonywał się tyćko za długo można zastosować wersję z podręczną tabelą ale zabiera to trochę pamięci. Kod wzięty z bilbioteki AVR LIB http://www.nongnu.org/avr-libc/user-manu...
Cześć, siedzę już dość długo nad pewnym probemem, otóż próbuję przesłać z xmegi ramkę danych z obliczonym CRC16 i następnie obliczyć CRC po stronie PC korzystając z tego samego algorytmu. Oto algorytm po stronie uP: [syntax=c]uint16_t ModbusCRC(char * buf, int size) { uint16_t crc = 0xffff; int i; while(size) { crc ^= *buf; buf++; for(i=0; i<8; i++)...
Witam. Borykam się ostatnio ze zmianami zapisanych wartości. Postanowiłem więc wykorzystać algorytm ECC do korekcji błędów. Z obserwacji wynika że samoistne zmiany to 1bit/1bajt. Póki co udało mi się znaleźć i zaimplementować kod Hamminga. Więc taki algorytm spokojnie wystarczy do korekcji danych. Jednak napisana aplikacja testowa wykazała, że kod Hamminga...
" 0,2% prawdopodobieństwo niezauważenia uszkodzenia danych jest akceptowalne" Możesz wyjaśnić jak dla CRC16 wyszło 0,2% Mając pakiet n bajtów + CRC16, musisz zmienić 16 bitów aby CRC16 ponowienie się zgadzało, więc jest 1/ 2^16 więc prawdopodobieństwo niewykrycia jest : 0,0015% Przecież CRC16 oparty na wielomianie, nie jest prymitywną sumą danych czy...
Tak myślałem. Do tej pory próbowałem sam napisać obsługę opartą na przerwaniach od UATR'u i liczniku, ale dojechałem do chyba martwego punktu - odpytywanie pojedyńczego modułu działa bez problemu, natomiast problem jest z kilkoma modułami, tzn. jak odpytuję kilka modułów odpowiada tylko jeden... Algorytm po krótce wyglądał tak, może ktoś zobaczy błąd...
to d6 ( u mnie FD ) to wynik iteracyjnego obliczania sumy CRC16 w/g reguł opisanych w kodzie. Podałeś źródła dla C/C++ ale na platformę Windows. Ja mam Linux i muszę to przeportować, aby się kompilowały. Różnica w wartości checksum-y u Ciebie i u mnie wynika zapewne ze sposobu obsługi słowa maszynowego przez obie platformy (Lin / Win). To mi nasuma...
Czy ktoś może się podzielić działającym algorytm obliczania CRC16_MCRF4XX w C/C++? Ten, który próbowałem zaadaptować działa... ale niestety tylko do czasu, gdy w tablicy znajdzie się wartość 0xFF lub zbliżona. Nie wiem o co chodzi, ale w takiej sytuacji drugi bajt wynikowego CRC mam zanegowany np. 1010 1110 zamiast prawidłowego 0101 0001. ¯\\\_(ツ)\_/¯...
za pomocą CRC można sprawdzać strumień o dowolnej długości. CCITT. Czyli odnosząc to do tego schematu to wszystkie dane poddajemy algorytmowi (kazda dana wejsciowa ma wpływ na wynik końcowy) i końcowy wynik CRC jest w rejestrze S0..S4 => dana wejsciowa np 100 bitowa poddana algorytmowi CRC16 jako wynik da 16 bitów (czyli to co zostało na końcu w rejestrze).?
Widziałem kilka takich kalkulatorów, ale każdy ma kilka opcji dodatkowych. Ja nie wiem jaki typ CRC16 zastosowano w Modbusie poza tym opisem algorytmu. Opis ten jest dokładnie taki jak powyżej (skopiowany z .pdf). A jak wyglada funkcja tworzenia takiej sumy z tablic?
Zczytaj pamięć ze znanym stanem licznika. Następnie daj mu popracować by licznik się zwiększył. Zczytaj ponownie i porównaj dane bajt po bajcie. Zrób nawet kilka razy i analizuj. Zazwyczaj jest to któryś z popularnych algorytmów CRC np. CRC16. Wpisuj do kalkulatorów dane licznika i porównaj ze zmianami jakie nastąpiły. Mogą to być dane dziesiętne ,hex,...
Szukajc sprzetowych info o tych sterownikach, ponownie trafiłem na temat CRC16_MCRF4XX . Zerknij [url=http://www.elektroda.pl/rtvforum/vi... do postu 84.
Jest klika, kilkanaście stosowanych algorytmów. Często inicjowane typowymi wartościami ale są też nie typowymi. Ja próbował bym tak, ręcznie sprawdzić typowe CRC8, CRC16, CRC32, xor, add . Jeśli nic to nie da, to bym napisał niewielki programik który sprawdzałby różne algorytmy z różnymi wariacjami. Albo jeśli dostęp jest do kodu aplikacji, w która...
Trochę jest gorzej. Do końca nie jestem pewien czy dobrze kombinuję. Powinienem na początku spytać, czy jeśli jakąś część pliku potraktujemy jako "czarną skrzynkę" o określonej sumie crc, to czy jeśli dokonamy zmian wewnątrz tej "czarnej skrzynki" ale "skompensujemy" uzyskując taki jak przed zmianami crc, to czy zmieni się crc całego pliku? Mam na myśli...
I jest to informacja taka, że klucz nie jest daną dla jakiegoś CRC32, którego wyjściem są dane w HEX. To, że nie jest to jakiekolwiek CRC zbudowane na operacjach XOR, sprawdziłem już dawno - pisałem na poprzedniej stronie. Z tego co zrozumiałem, Kolega liczył w tą stronę: CRC16(F6 CF 4F 08) => 1105 Ja mówiłem o drugiej stronie, tzn CRC32(1105) => F6...
Potrzebuje emulator DS18B20 na atmega8 - mam na PC program do odczytu temp i chciałem w tym programie dodac inne parametry ( np wilgotnosc ) ale nie zmieniajac programu - w scrachpadzie bede wisyłał inne dane nie temperature. ( w bajtach temperatury lub bajtach uzytkownika wolnych 2szt) Aktualnie używam "lampomitari" , ale napisalem przeróbke programu...
Witam. Mam pytanie potrzebuje obliczyć CRC dla mojej paczki danych. W tym celu znalazłem sobie kilka kodów między innymi ten : CRC16: unsigned short TForm1::ModbusCRC(unsigned char buf) { unsigned short crc = 0xffff; int i; crc ^= buf; for(i=0; i<8; i++) { if(crc & 1) { crc >>= 1; crc ^= 0xA001;...
CRC też pozwala na rekonstrukcję danych, ale zazwyczaj się tego nie wykorzystuje, stąd mała ilość materiałów na ten temat. No i oczywiście CRC16, czy CRC32 odpada, trzeba zastosować dłuższy kod, o CRC były artykułu w EP, nawet chyba coś mętnie wspomniano o rekonstrukcji, ale jako takiego algorytmu nie podali, o ile dobrze pamiętam, no ale jest dobrze...
Dlatego, że CRC ma taką właściwość, że jeśli podasz początkowe CRC takie samo jak CRC bloku z którego CRC liczysz, to w efekcie dostajesz 0 lub same Fy. W efekcie tak jest prościej. CRC można też umieścić w zabezpieczanym bloku, co w efekcie daje ten sam efekt. Co do algorytmu - sposobów na wyliczanie CRC jest kilkanaście. Także musiałbyś określić co...
Nie wydaje mi sie ,ze cos z tym zdzialasz ... wiesz chociaz typ sumy kontrolnej jest liczony (pewny jestes ,ze to crc16,crc32 - po za tym skoro wiesz gdzie ona jest to wiesz ile bajtow zajmuje)? predzej zaczal bym od inedntyfikacji pliku (na jakim sprzecie pracuje, cos o tworcy - moze stosuje taki sam algorytm dla innych swoich produktow,czy wczesniej...
Witam, posiadam tablice elektromagnetyczną 21x12. Robię sterownik do sterowania nimi z komputera i ostatni element układanki który mi został to najprawdopodobniej (?) suma CRC. Przykładowe ramki wraz z wyświetlanym tekstem to: 22DDA 0 3 63 0FF0FF0C00C00FF07F00007E0FF0CB0CB0FB07A0... 018C 22DDA - numer tablicy 0 3 63 - za każdym razem...
Komunikuje się z urządzeniem po protokole modbus. Mam problem z obliczeniem sumy kontrolnej. Znalazłem taką funkcję: [syntax=delphi] function TForm1.CRC16(str:string):string; var crc: word; n,i: integer; b:byte; temp,by:string; begin crc := $FFFF; for i:=0 to (length(str) div 2) - 1 do begin by := str[i*2+1]+str[i*2+2]; Memo1.Lines.Add(by); b:=Byte(hextoint(str));...
No przyznam że nie dokładnie przyjrzałem się tym wielomianom ... bo tylko na crc16 zwróciłem uwagę ... a to standardowy wielomian. Jako że mi się nieco nudzi to zapytałem googlownicę w twoim imieniu raz jeszcze: http://www.zorc.breitbandkatze.de/crc.ht... http://www.pckurier.pl/archiwum/artykuly... http://www.algorytm.org/index.php?option...
Zapomniałem dodać ,że mam także wersję tablicową ( szybszą ale zajmuje więcej miejsca w programie ). Oto ona : /* static prog_char auchCRCHi UWAGA - miałem problemy z działaniem tej wersji algorytmu CRC, po porównaniu z tablicami jakie opublikował Modicon w "Modbus over serial line specyfication" i znalazłem 3 błedy. Prawidłowa tablica powinna wyglądać...
Interpreter 1-wire sterowany przez rs232 Ponieważ posiadana płytka testowa z wyświetlaczem LCD 2x16 i 4 przyciskami nie zapewniała możliwości wygodnego testowania układów 1-wire powstał interpreter wykorzystujący standardowy komputer jako urządzenie wyj/wej i komunikujący się przez port RS232 przy pomocy kabla null modem. Hardware : Interpreter został...
Cześć. Pracuję nad takim małym systemem komunikacji pomiędzy kilkoma urządzeniami pomiarowymi a PC. Pomiędzy urządzeniami a PC jest coś w rodzaju hub'a, co sam zaprojektowałem i wykonałem - ogólny schemat jest taki: http://obrazki.elektroda.pl/5939738300_1... Wspomniane przeze mnie urządzenia pomiarowe nie są pierwszej nowości, więc...
Natomiast jeśli chcesz mieć oprócz programowania również debuggowanie to musisz się zaopatrzyć w JTAGICE Mk.II lub JTAGICE 3, a to już jest koszt rzędu 400-500 PLN. (Atmel Studio ma symulator również dla XMEGA, więc w większości przypadków można się obejść bez debuggera). Tylko małe sprostowanie, JTAG i możliwość debugowania w układzie można uzyskać...
Witam! Mam pewnien problem. Mianowicie muszę wysłać ramkę MODBUS RTU do sterownika w postaci mniej wiecej takiej: (pierwsze dwa pola to kolejno adres sleva i funkcja, drugie dwa to adres pamieci w sterowniku, kolejne dwa do ilośc adresów pamieći o które pytamy, no i ostatenie dwa to suma kontrolna-bez nawiasów oczywiście;). Niestety programista ze mnie...
Oj, chyba nieuważnie przeczytałeś: zoptymalizowany kod jest w bibliotece, a ten pokazany jest tylko ilustracją - prostym sposobem uzyskania tego samego wyniku. Chyba raczej Ty nieuważnie przeczytałeś. Algorytm funkcji - nawet pomimo tego że jest w assemblerze: - dalej jest wolny, ponieważ dla każdego bajtu wykonywane jest 8 obiegów pętli, - dalej jest...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
Chodzi o skonfigurowanie 4-ro kanałowego przetwornika analogowo cyfrowego DS2450 firmy Maxim-Dallas Angielski znam zbyt słabo i nie jestem w stanie w jakiś sensowny sposób zrozumieć opisu w pdf-ie w tabelce na str.10: READ-OUT CONTROL (CONVERSION COMMAND) Figure 7b. Algorytm jest narysowany na str. 9 pdf-a: FUNCTION COMMAND FLOW CHART Figure 6 (continued)....
Interpreter 1-wire sterowany przez rs232Ponieważ posiadana płytka testowa z wyświetlaczem LCD 2x16 i 4 przyciskami nie zapewniała możliwości wygodnego testowania układów 1-wire powstał interpreter wykorzystujący standardowy komputer jako urządzenie wyj/wej i komunikujący się przez port RS232 przy pomocy kabla null modem. Hardware : Interpreter został...
crc16 modbus crc16 tablica algorytm obsługa algorytm naprawa
znikają kanały sharp słuchawki bluetooth laptop świeca grzać odpalić silnik
Kody błędów przy uszkodzonej grzałce w pralce Miele Różnice między matrycami VES400UNDS-2D-N11 a N12