{"id":545,"date":"2018-04-03T20:28:54","date_gmt":"2018-04-03T20:28:54","guid":{"rendered":"http:\/\/hayperek.pl\/?p=545"},"modified":"2018-04-03T20:28:54","modified_gmt":"2018-04-03T20:28:54","slug":"diagnostyka-obd-cz-1","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/04\/03\/diagnostyka-obd-cz-1\/","title":{"rendered":"Diagnostyka OBD &#8211; cz.1"},"content":{"rendered":"<p>Zdecydowana wi\u0119kszo\u015b\u0107 samochod\u00f3w, kt\u00f3re interesuj\u0105 nas w ramach projektu, posiada interfejs diagnostyczny w standardzie OBD. Umo\u017cliwia on po\u0142\u0105czenie z ka\u017cdym istotnym sterownikiem wchodz\u0105cym w sk\u0142ad instalacji elektrycznej, odczyt podstawowych warto\u015bci pomiarowych, zarejestrowanych kod\u00f3w usterek, itp. Komunikacja odbywa si\u0119 za pomoc\u0105 protoko\u0142u KWP1281 lub KWP2000. S\u0105 one charakterystyczne dla pojazd\u00f3w grupy VAG.<br \/>\nNie b\u0119d\u0119 w tym miejscu opisywa\u0142 szczeg\u00f3\u0142\u00f3w samego protoko\u0142u &#8211; jest to temat bardzo obszerny i nie spos\u00f3b zamkn\u0105\u0107 go w jednym tylko artykule. Zainteresowanych odsy\u0142am do <a href=\"https:\/\/www.blafusel.de\/obd\/obd2_kw1281.html\">strony<\/a>, kt\u00f3ra bardzo przyst\u0119pnie przedstawia najwa\u017cniejsze elementy protoko\u0142u KWP1281. Postaram si\u0119 za to bardziej skupi\u0107 na jego logicznej strukturze i aspektach zwi\u0105zanych z jego obs\u0142ug\u0105 po stronie naszego urz\u0105dzenia, cz\u0119\u015bciowo w oparciu o <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Model_OSI\">model OSI<\/a>.<br \/>\nPrzyjrzyjmy si\u0119 kolejnym warstwom:<\/p>\n<h6>Warstwa fizyczna<\/h6>\n<p>Szeregowa transmisja odbywa si\u0119 w spos\u00f3b asynchroniczny, zbli\u017cony do <a href=\"https:\/\/pl.wikipedia.org\/wiki\/RS-232\">standardu RS-232<\/a>. Magistrala sk\u0142ada si\u0119 z jednego przewodu, s\u0142u\u017c\u0105cego do dwustronnej komunikacji &#8211; jest to wi\u0119c interfejs half-duplex. Stan wysoki &#8222;1&#8221; reprezentuje napi\u0119cie oko\u0142o 12V, niski &#8222;0&#8221; &#8211; zbli\u017cone do potencja\u0142u masy. Nieco wi\u0119cej szczeg\u00f3\u0142\u00f3w mo\u017cna znale\u017a\u0107 w innym moim artykule: <a href=\"http:\/\/hayperek.pl\/en\/2018\/03\/29\/interfejsy-can-i-obd\/\">Interfejsy OBD i CAN<\/a>.<\/p>\n<h6>Warstwa \u0142\u0105cza danych \/ sieciowa<\/h6>\n<p>Od strony topologii, sie\u0107 sk\u0142ada si\u0119 z jednego urz\u0105dzenia nadrz\u0119dnego (master, kt\u00f3re inicjuje ka\u017cde po\u0142\u0105czenie) oraz wielu urz\u0105dze\u0144 slave (identyfikowanych adresami z zakresu 1-255). W czasie trwania pojedynczego po\u0142\u0105czenia tylko jeden slave mo\u017ce by\u0107 aktywny. Komunikacja mi\u0119dzy nim, a masterem odbywa si\u0119 za pomoc\u0105 kilkubajtowych ramek danych zwanych datagramami. <\/p>\n<h6>Warstwa transportowa \/ sesji<\/h6>\n<p>Ka\u017cdy datagram identyfikowany jest numerem sekwencyjnym oraz identyfikatorem. Okre\u015bla on jaki rodzaj danych zawiera pakiet. Cz\u0119\u015b\u0107 z nich mo\u017ce by\u0107 fragmentowana i podzielona na kilka pakiet\u00f3w.<\/p>\n<h6>Warstwa prezentacji<\/h6>\n<p>Dane zawarte w pakietach s\u0105 interpretowane jako: pomiary, kody usterek, informacje o sterowniku, itp.<\/p>\n<h6>Warstwa aplikacji<\/h6>\n<p>Przechowuje zinterpretowane dane i udost\u0119pnia je aplikacjom.<\/p>\n<p>Spr\u00f3bujmy prze\u0142o\u017cy\u0107 struktur\u0119 warstw OSI na szkic architektury podsystemu diagnostyki w projektowanym urz\u0105dzeniu. Od strony sprz\u0119towej, warstwa fizyczna b\u0119dzie sk\u0142ada\u0107 si\u0119 transceiver\u00f3w oraz peryferi\u00f3w procesora (UART, GPIO). Po stronie oprogramowania reprezentowa\u0107 j\u0105 b\u0119dzie driver, zawieraj\u0105cy w sobie abstrakcj\u0119 sprz\u0119tu. Zadaniem warstwy fizycznej jest odbieranie i wysy\u0142anie strumieni bajt\u00f3w &#8211; st\u0105d abstrakcyjny interfejs jaki musi zapewni\u0107 driver mo\u017cna sprowadzi\u0107 do dw\u00f3ch metod: send() oraz receive(). Ze wzgl\u0119du na \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119, warstwy \u0142\u0105cza danych i sieciowa zostan\u0105 umieszczone w jednym bloku, zawieraj\u0105cym w\u0142a\u015bciw\u0105 implementacj\u0119 protoko\u0142u KWP1281. Interpretowanie danych oraz ich przechowywanie, czyli zadania warstwy prezentacji delegowane s\u0105 do us\u0142ugi diagnostyki. Podobnie wszelkie interakcje z zewn\u0119trznymi aplikacjami, obs\u0142uga zapyta\u0144 i udost\u0119pnianie danych. Daemon staje si\u0119 w ten spos\u00f3b centralnym punktem, przez kt\u00f3ry przechodz\u0105 wszystkie \u017c\u0105dania. Dzi\u0119ki temu mo\u017cna zapewni\u0107 dost\u0119p wielu niezale\u017cnym klientom do informacji pochodz\u0105cych z diagnostyki. Z drugiej strony us\u0142uga dba o nawi\u0105zanie i utrzymanie po\u0142\u0105czenia, zwalniaj\u0105c z tego obowi\u0105zku kod aplikacji.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1.png\" alt=\"\" width=\"844\" height=\"734\" class=\"aligncenter size-full wp-image-551\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1.png 844w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1-600x522.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1-300x261.png 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/04\/kwp_1-768x668.png 768w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/a><\/p>\n<p>Jutro zajmiemy si\u0119 praktyczn\u0105 implementacj\u0105 i spr\u00f3bujemy po raz pierwszy nawi\u0105za\u0107 po\u0142\u0105czenie diagnostyczne. Zapraszam \ud83d\ude42<\/p>","protected":false},"excerpt":{"rendered":"<p>Zdecydowana wi\u0119kszo\u015b\u0107 samochod\u00f3w, kt\u00f3re interesuj\u0105 nas w ramach projektu, posiada interfejs diagnostyczny w standardzie OBD. Umo\u017cliwia on po\u0142\u0105czenie z ka\u017cdym istotnym sterownikiem wchodz\u0105cym w sk\u0142ad instalacji elektrycznej, odczyt podstawowych warto\u015bci pomiarowych, zarejestrowanych kod\u00f3w usterek, itp. Komunikacja odbywa si\u0119 za pomoc\u0105 protoko\u0142u KWP1281 lub KWP2000. S\u0105 one charakterystyczne dla pojazd\u00f3w grupy VAG. Nie b\u0119d\u0119 w tym [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":565,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-545","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=545"}],"version-history":[{"count":3,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/545\/revisions"}],"predecessor-version":[{"id":564,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/545\/revisions\/564"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/565"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}