Deploying to gh-pages from @ Klipper3d/klipper@2c441b4502 🚀
This commit is contained in:
@@ -1479,7 +1479,7 @@ queue_step oid=7 interval=11717 count=4 add=1281
|
||||
<p>Ez az oldal magának a Klipper üzenetküldő protokollnak a magas szintű leírását tartalmazza. Leírja az üzenetek deklarálását, bináris formátumú kódolását (a séma "tömörítését") és továbbítását.</p>
|
||||
<p>A protokoll célja, hogy hibamentes kommunikációs csatornát tegyen lehetővé a gazdagép és a mikrovezérlő között, amely alacsony késleltetésű, alacsony sávszélességű és alacsony bonyolultságú a mikrovezérlő számára.</p>
|
||||
<h2 id="mikrovezerlo-interfesz">Mikrovezérlő interfész<a class="headerlink" href="#mikrovezerlo-interfesz" title="Permanent link">¶</a></h2>
|
||||
<p>A Klipper átviteli protokoll egy <a href="https://en.wikipedia.org/wiki/Remote_procedure_call">RPC</a> mechanizmusnak tekinthető a mikrovezérlő és a gazdagép között. A mikrovezérlő szoftver deklarálja azokat a parancsokat, amelyeket a gazdagép meghívhat, az általa generált válaszüzenetekkel együtt. A gazdagép ezeket az információkat arra használja fel, hogy parancsot adjon a mikrokontrollernek a műveletek végrehajtására és az eredmények értelmezésére.</p>
|
||||
<p>A Klipper átviteli protokoll egy <a href="https://hu.wikipedia.org/wiki/Remote_procedure_call">RPC</a> mechanizmusnak tekinthető a mikrovezérlő és a gazdagép között. A mikrovezérlő szoftver deklarálja azokat a parancsokat, amelyeket a gazdagép meghívhat, az általa generált válaszüzenetekkel együtt. A gazdagép ezeket az információkat arra használja fel, hogy parancsot adjon a mikrokontrollernek a műveletek végrehajtására és az eredmények értelmezésére.</p>
|
||||
<h3 id="parancsok-deklaralasa">Parancsok deklarálása<a class="headerlink" href="#parancsok-deklaralasa" title="Permanent link">¶</a></h3>
|
||||
<p>A mikrokontroller szoftvere deklarál egy "parancsot" a DECL_COMMAND() makró használatával a C kódban. Például:</p>
|
||||
<div class="highlight"><pre><span></span><code>DECL_COMMAND(command_update_digital_out, "update_digital_out oid=%c value=%c");
|
||||
@@ -1530,7 +1530,7 @@ DECL_ENUMERATION_RANGE("pin", "PC0", 16, 8);
|
||||
<p>A hosszbájt tartalmazza az üzenetblokkban lévő bájtok számát, beleértve a fejlécet és a követőbájtokat (így az üzenet minimális hossza 5 bájt). Az üzenetblokk maximális hossza jelenleg 64 bájt. A szekvencia bájt egy 4 bites szekvencia számot tartalmaz az alacsony rendű bitekben, a magas rendű bitek pedig mindig 0x10-et tartalmaznak (a magas rendű bitek későbbi használatra vannak fenntartva). A tartalmi bájtok tetszőleges adatokat tartalmaznak, és formátumukat a következő szakasz ismerteti. A crc bájtok tartalmazzák az üzenetblokk 16 bites CCITT <a href="https://en.wikipedia.org/wiki/Cyclic_redundancy_check">CRC</a> értékét, beleértve a fejlécbájtokat, de kivéve az üzenetbájtokat. A szinkronizálási bájt 0x7e.</p>
|
||||
<p>Az üzenetblokk formátumát a <a href="https://en.wikipedia.org/wiki/High-Level_Data_Link_Control">HDLC</a> üzenetkeretek ihlették. A HDLC-hez hasonlóan az üzenetblokk opcionálisan tartalmazhat egy további szinkronizálási karaktert a blokk elején. A HDLC-vel ellentétben a szinkronizálási karakter nem kizárólagos a keretben, és jelen lehet az üzenetblokk tartalmában.</p>
|
||||
<h3 id="uzenetblokk-tartalma">Üzenetblokk tartalma<a class="headerlink" href="#uzenetblokk-tartalma" title="Permanent link">¶</a></h3>
|
||||
<p>Minden egyes, a gazdagépről a mikrokontrollernek küldött üzenetblokk tartalma nulla vagy több üzenetparancsból álló sorozatot tartalmaz. Minden parancs egy <a href="#variable-length-quantities">Változó hosszúságú mennyiség</a> (VLQ) kódolt egész számú parancs azonosítóval kezdődik, amelyet az adott parancsra vonatkozó nulla vagy több VLQ paraméter követ.</p>
|
||||
<p>Minden egyes, a gazdagépről a mikrokontrollernek küldött üzenetblokk tartalma nulla vagy több üzenetparancsból álló sorozatot tartalmaz. Minden parancs egy <a href="#valtozo-hosszusagu-mennyisegek">Változó hosszúságú mennyiség</a> (VLQ) kódolt egész számú parancs azonosítóval kezdődik, amelyet az adott parancsra vonatkozó nulla vagy több VLQ paraméter követ.</p>
|
||||
<p>A következő négy parancsot például egyetlen üzenetblokkba helyezhetjük:</p>
|
||||
<div class="highlight"><pre><span></span><code>update_digital_out oid=6 value=1
|
||||
update_digital_out oid=5 value=0
|
||||
@@ -1593,7 +1593,7 @@ get_clock
|
||||
<p>A gazdagépről a mikrokontrollerhez küldött üzenetparancsok hibátlanok. A mikrokontroller ellenőrzi a CRC-t és a sorszámokat minden egyes üzenetblokkban, hogy biztosítsa a parancsok pontosságát és sorrendiségét. A mikrokontroller mindig sorrendben dolgozza fel az üzenetblokkokat. Ha a sorrendtől eltérő blokkot kap, akkor azt és a többi sorrendtől eltérő blokkot is elveti, míg helyes sorrendű blokkokat nem kap.</p>
|
||||
<p>Az alacsony szintű gazdagép kód egy automatikus újraküldési rendszert valósít meg a mikrokontrollerhez küldött elveszett és hibás üzenetblokkok esetében. Ennek megkönnyítése érdekében a mikrokontroller minden egyes sikeresen fogadott üzenetblokk után egy "ack üzenetblokkot" küld. Az állomás minden egyes blokk elküldése után időkorlátot állít be, és ha az időkorlát lejár anélkül, hogy a megfelelő "ack" üzenetet megkapta volna, akkor újraküldi. Ezen túlmenően, ha a mikrokontroller hibás vagy rendellenes blokkot észlel, a gyors újraküldés megkönnyítése érdekében egy "nak üzenetblokkot" küldhet.</p>
|
||||
<p>Az "ack" egy üres tartalmú (azaz 5 bájtos) üzenetblokk, amelynek sorszáma nagyobb, mint az utolsó fogadott gazdagép sorszáma. A "nak" egy üres tartalmú üzenetblokk, amelynek sorszáma kisebb, mint az utolsó fogadott gazdagép sorszáma.</p>
|
||||
<p>A protokoll megkönnyíti az "ablakos" átviteli rendszert, így a fogadó egyszerre több függőben lévő üzenetblokkal rendelkezhet. (Ez azon a sok parancson kívül, amelyek egy adott üzenetblokkban jelen lehetnek.) Ez lehetővé teszi a sávszélesség maximális kihasználását még átviteli késedelem esetén is. Az időkorlátozás, az újraküldés, az ablakozás és az ack mechanizmus a <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol">TCP</a> hasonló mechanizmusai alapján készült.</p>
|
||||
<p>A protokoll megkönnyíti az "ablakos" átviteli rendszert, így a fogadó egyszerre több függőben lévő üzenetblokkal rendelkezhet. (Ez azon a sok parancson kívül, amelyek egy adott üzenetblokkban jelen lehetnek.) Ez lehetővé teszi a sávszélesség maximális kihasználását még átviteli késedelem esetén is. Az időkorlátozás, az újraküldés, az ablakozás és az ack mechanizmus a <a href="https://hu.wikipedia.org/wiki/Transmission_Control_Protocol">TCP</a> hasonló mechanizmusai alapján készült.</p>
|
||||
<p>A másik irányban a mikrokontrollerről a gazdagéphez küldött üzenetblokkokat úgy tervezték, hogy hibamentesek legyenek, de nincs biztosított átvitelük. (A válaszok nem lehetnek hibásak, de előfordulhat, hogy eltűnnek.) Ez azért történik, hogy a mikrokontrollerben egyszerű legyen a megvalósítás. Nincs automatikus újraküldési rendszer a válaszok számára. A magas szintű kódtól elvárható, hogy képes legyen kezelni az esetenként hiányzó válaszokat (általában a tartalom újrakérdezésével vagy a válaszküldés ismétlődő ütemezésének beállításával). Az állomásnak küldött üzenetblokkok sorszámmezője mindig eggyel nagyobb, mint az utolsó, az állomásról kapott üzenetblokkok sorszáma. Nem a válaszüzenetblokkok sorrendjének nyomon követésére szolgál.</p>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user