{
    "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\/pl_pl\/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\/pl_pl\/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>",
        "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\/pl_pl\/wp-json\/wp\/v2\/posts\/545",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=545"
            }
        ],
        "version-history": [
            {
                "count": 3,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/545\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 564,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/545\/revisions\/564"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/565"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=545"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=545"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=545"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}