Komunikační protokol

Cílem návrhu komunikačního protokolu bylo dosáhnout co nejmenšího objemu dat při posílání informací do kontroléru aby bylo dosaženo co nejmenšího zpoždění (latence) při požadavku vystavení serva do polohy. Samozřejmě byl požadavek na jednoduchost dekodování datového paketu a snadná kontrola v případě chybného přenosu. Kontroléry se řídí datovými pakety, které se skládají ze čtyřech byte. První z nich je číslo adresovaného registru, další dva byte obsahují hodnotu (parametr), kterou do registru posíláme. Poslední čtvrtý je Enter (asc =13), který paket ukončuje a zajišťuje synchronizaci. Zároveň všechny tři datové byte jsou posunuty +32. 

 

 Registr                    Parametr                Enter

1b. registr 2b. msb 3b. lsb 4b. Enter

  

Příklad:  do registru 3 posíláme číslo 1532 (to znamená pro servo 3 nastavuji délku pulsu na 1532us)

 

  1. byte - bude obsahovat hodnotu 32 + 3 = 35
  2. byte - bude obsahovat hodnotu 32 + 1532 \ 224 = 32 + 6 = 38 (obrácené lomítko je ve většině programovacích jazyků celočíselné dělení)
  3. byte - bude obsahovat hodnotu 32 + 1532 MOD 224 = 32 + 188 = 220
  4. byte - bude obsahovat 13

 

Registr může nabývat hodnot 0 až 223 , parametr 0 až 50175

 

Jak to vypadá ve VisualBasicu ? Nejlépe si nadefinovat funkci , například takto :

 

Private Function xconvert(ByVal register As Integer, ByVal xval As Integer) As String

    xconvert = Chr(32 + register) + Chr(32 + (xval \ 224)) + Chr((32 + xval Mod 224)) & vbCr

End Function

 

Funkce xconvert(3,1532) pak vrátí string , který vypadá takto: #7\ a "Enter" který se nezobrazuje.

 

A následujícím příkazem pošlete data po seriové lince: 

SerialPort1.Write(xconvert(3, 1532))

 

Co a kam poslat se dozvíte v tabulkách registrů konkrétního ovladače. Tabulka registrů Mini 8x je zde.

Vyhledávání

Kontakt

Jiří Ježerský

Anketa

Je pro Vás lepší MiniSSC protokol ?

Ano (38)
78%

Ne (11)
22%

Celkový počet hlasů: 49