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)
- byte - bude obsahovat hodnotu 32 + 3 = 35
- 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í)
- byte - bude obsahovat hodnotu 32 + 1532 MOD 224 = 32 + 188 = 220
- 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.