Pracuję z magistralą CAN i potrzebuję pomocy przy dekodowaniu danych wiadomości.
Oto próbka danych, które widzę na magistrali CAN.
root@petalinux:/var/volatile/tmp# /tmp/candump -n 10 can0 can0 4E5 [4] F0 16 00 00 can0 665 [8] 40 78 60 00 00 00 00 00 can0 5E5 [8] 4B 78 60 00 DB 00 00 00 can0 665 [8] 40 64 60 00 00 00 00 00 can0 5E5 [8] 43 64 60 00 E4 7D 5E 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 6C 60 00 00 00 00 00 root@petalinux:/var/volatile/tmp#
Nie mogę dowiedzieć się, jak prześledzić dane z powrotem do konkretnego CAN bus.
Moje urządzenie ma identyfikator węzła 101 (podstawa 10) i jest to silnik krokowy StepIM. Oto odniesienie do instrukcji – http://servotronix.com/wp-content/uploads/dlm_uploads/2015/05/stepIM_CANopen_fw0.0.2.85_Rev.1.3.pdf . Spróbujmy więc zdekodować ostatnią wiadomość z góry. To będzie „ can0 665 8 40 6C 60 00 00 00 00 00 „
Nie potrafię wymyślić, jak przetłumaczyć ciąg szesnastkowy„ * 40 6C 60 .. ”na polecenie, o którym wie dokument silnika krokowego …
Komentarze
- stepIM jest z protokołem CANopen, który jest wyższym protokołem opartym na magistrali CAN. Proszę wymienić tag CAN z CANopen.
Odpowiedź
Z wyjątkiem pierwszej wiadomości, jest to typowe SDO ( CANopen ), z parami żądanie / odpowiedź:
0x665 SDO request (range 0x600 - 0x67F, depending on the node ID) 0x5E5 SDO response (range 0x580 - 0x5FF, depending on the node ID)
W przypadku pierwszej pary martwą gratką jest 0x4B w pierwszym bajcie odpowiedzi. Oznacza to, że zwracane dane mają rozmiar dwa bajty (dla jednego bajtu i czterech bajtów są to odpowiednio 0x4F i 0x43). 0x40 w pierwszym bajcie żądania oznacza, że jest to żądanie odczytu (standard używa innego terminu ” Prześlij „, o znaczeniu odwrotnym niż w Internecie (pobieranie) – jest to z perspektywy adresowanego urządzenia).
Żądanie CAN ID to 0x600 + ID węzła. Odpowiedź CAN ID to 0x580 + identyfikator węzła. Tak więc:
665 A read request to the device with node ID 0x65 5E5 A read response from the device with node ID 0x65
W przypadku SDO indeks i podindeks CANopen znajdują się w drugim, trzecim i czwartym bajcie (najpierw najmniej znaczący bajt dla indeksu CANopen). W przypadku pierwszej pary, 40 78 60 00, żądający mówi: ” Urządzenie w węźle ID 0x65 (101), podaj mi swoją zapisaną wartość 6078sub0 ” .
W tym przypadku informacja płynie z adresowanego urządzenia do tego, kto wysłał żądanie (żądającego nie można zobaczyć z dziennika magistrali CAN, ale jest to zwykle centralny kontroler w systemie lub narzędzie serwisowe działające na komputerze (zwykle adapter USB-to-CAN)).
Zatem dla pokazanego ruchu żądania odczytu są wysyłane dla ( odpowiedź na ostatnią nie jest uwzględniona w opublikowanym dzienniku magistrali CAN):
6078sub0 (2 bytes, 0xDB00 = 219) 6064sub0 (4 bytes, 0x005E7DE4 - 6,192,612) 6041sub0 (2 bytes, 0x0227 - 551) 6041sub0 (2 bytes, 0x0227 - 551) 606Csub0 (?? bytes)
O dziwo, żądanie 6041sub0 jest powtarzane.
Ponadto, mimo że SDO są zwykle przeznaczone tylko do informacji konfiguracyjnych, zakres indeksu CANopen 0x6000 do 0x6FFF jest zwykle używany do informacji niezwiązanych z konfiguracją, takich jak zmierzone ilości lub stan.
Zagłębianie się w instrukcję
Indeksy / subindeksy SDO można przejrzeć w instrukcji (ja h zawiera rzeczywiste wartości z przykładowego dziennika magistrali CAN):
6078sub0 Motor current, 219 mA 6064sub0 "Position Actual Internal Value" is 6,192,612 6041sub0 Statusword, 0x0227 = 0000 0010 0010 0111, meaning: "ready to switch on", "switched on", "operation enabled", "quick stop" "remote" 606Csub0 "Velocity Actual Value". The value is not included, but it is a 32-bit signed integer.
Pierwsza wiadomość
Zakładając, że pierwsza wiadomość to także CANopen, 4E5 F0 16 00 00: Dla wszystkich wiadomości CANopen CAN identyfikator to czterobitowy kod funkcji (0-15), po którym następuje siedmiobitowy identyfikator węzła. W tym przypadku 0x4E5 = 1001 1100101b. Zatem kod funkcji to 1001b = 9, co oznacza ” PDO4, transmituj „. Kierunek przepływu informacji dla PDO (pomimo, że w tym przypadku ” transmituje „) jest kwestią definicji (zależy od aplikacji ). Identyfikator węzła to 1100101b = 0x65.
Identyfikator węzła dla PDO jest taki sam jak dla SDO.
Informacje w tym PDO, ” Transmit PDO 4 „, znajduje się w SDO 0x1A03, ” Transmit PDO Mapping Parameter 4 „. Jeśli nie zmieniono wartości domyślnej, dane w PDO są takie same jak SDO 0x60FAsub0, 32-bitowa liczba całkowita ze znakiem:
kontrolka wysiłek jako wyjście pętli sterowania położeniem. W funkcji kontroli pozycji notacja siły sterującej jest zależna od trybu i dlatego nie jest określona.
Wniosek
Urządzenie silnikowe z identyfikatorem węzła 0x65 wysyła wysiłek kontrolny (prawdopodobnie w regularnych odstępach czasu) za pomocą PDO .
Sterownik lub okno monitora czasu rzeczywistego w narzędziu serwisowym odczytuje i wyświetla inne zmierzone wielkości / stan z tego samego urządzenia silnikowego przy użyciu SDO .
Komentarze
- Pracuję z tego rodzaju CAN dane autobusów codziennie, więc jest to łatwo rozpoznawalne. Jednak dokładna interpretacja / znaczenie zależy od informacji o danym systemie. Pomyślałem, że to pytanie zasługuje na wyczerpującą odpowiedź.
Odpowiedź
Nie wyjaśniłeś, co dokładnie przedstawia Twój wpis, ale może być identyfikatorem wiadomości, po którym następuje liczba bajtów danych w nawiasach, a następnie rzeczywiste bajty danych. Nic nie wydaje się jednoznacznie określać, czy identyfikatory mają 11 czy 29 bitów. Być może po prostu używając 3 cyfr szesnastkowych jako identyfikatora to listing wskazuje 11-bitowe identyfikatory. Jeśli tak, to pokaże 8 cyfr szesnastkowych dla 29-bitowych identyfikatorów.
W związku z tym każda linia (wygląda na to) pokazuje jeden komunikat CAN. Nie ma nic więcej do zdekodowania zrozumieć komunikat CAN. Zostało to wyraźnie pokazane.
Na przykład, ostatnia linia mówi, że widziano komunikat o identyfikatorze 665h (1637 dziesiętnie), że ten komunikat miał 8 bajtów danych i że bajty danych to (w formacie HEX) 40, 6C, 60, 0, 0, 0, 0 i 0. Pierwsze trzy to 64, 108 i 96 dziesiętnie.
Jeśli chodzi o znaczenie tej wiadomości odnosi się do dowolnego urządzenia, które ją stworzyło lub ma na niej działać, to jest coś musisz zajrzeć do dokumentacji konkretnych urządzeń. To „warstwa powyżej CAN.
Moje urządzenie ma identyfikator węzła 101
Brak węzła ID w CAN, tylko ID wiadomości. Jeśli twoje urządzenia używają koncepcji ID węzła, jest to coś szczególnego dla warstwy protokołu powyżej CAN. Standard CAN nie może ci w tym pomóc. Musisz zapoznać się z dokumentacją konkretnego urządzenia, która może odnosić się do protokołu wyższego poziomu używanego powyżej CAN, prawdopodobnie w osobnym dokumencie.
Komentarze
- To ' nie jest podstawowym CAN, to CANopen, jak widać w instrukcji.
- Omówiłem to w moja odpowiedź .
Odpowiedź
Urządzenie używa Protokół CANopen . CANopen to system komunikacji oparty na CAN. Zawiera protokoły wyższych warstw i specyfikacje profili.
Jest używany w automatyzacji. Istnieje kilka analizatorów protokołów, które pozwalają określić całą komunikację. System automatyki wykorzystujący CANopen jest architekturą master / slave. Znajdziesz trochę informacji na temat CANopen na Wikipedii, ale nie są one tak trywialne, jak sam CAN zorientowany na wiadomość.
Komentarze
- Tak, to jest poprawne. To jest CANopen.
Odpowiedź
Aby zdekodować komunikację, musisz znać motor CANopen Object Dictionary. Wygląda na to, że TPDO i ich zawartość zależy od komunikacji i mapowania obiektów.
Aby zrozumieć protokół, należy zapoznać się z następującymi terminami z CANopen. – Słownik obiektów – Obiekty danych procesowych (PDO) – Parametry komunikacji – Parametry mapowania