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));...
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...
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...
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ł...
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ć...
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...
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...
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ć...
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
testy akumulatorów polar kropla lodówka rozszczelnienie ściany
magnetofon koncert spust płynu chłodniczego
Instrukcja obsługi traktorka jednoosiowego Honda F50 Gdzie naprawić ciśnieniomierz Braun?