Kapitola 7
Poznámky k implementaci
V této kapitole jsou soustředěny poznatky, které vznikly z dosavadních zkušeností. Některé položky v konfiguraci jsou často nesprávně pochopeny, ale podrobný popis výše by zhoršoval čitelnost textu. Proto jsou tyto postřehy uvedeny ve zvláštní kapitole.
- Někdy je potřeba číst/zapisovat hodnotu, která nejde namapovat do PDO.
Protože zvolená koncepce umožňuje předávat do výkresu jen hodnoty
z lokálního „object dictionary“ a nikoliv volat SDO, je potřeba hodnoty
z jiné stanice nějak přečíst. Za tím účelem byly do struktury SDO
client parameters (tj. do objektů 0x1280 až 0x12FF) přidány od subindexu
6 další parametry. Musí být typu UNSIGNED64 nebo SIGNED64 kde (od
nejvyšších bitů):
UNSIGNED16 perioda čtení/zápisu v milisekundách UNSIGNED16 index lokálního objektu UNSIGNED16 index objektu na vzdálené stanici UNSIGNED8 subindex lokálního objektu na vzdálené stanici UNSIGNED8 subindex objektu na vzdálené stanici S každou stanicí lze takto vyměňovat až 250 objektů pomocí SDO. Perioda je vlastně „ihibit time“, tj. dotazy se nevysílají častěji. Pokud je perioda krátká a dotazů hodně, bude skutečná perioda delší. Formát objektu/subindexu na vzdálené stanici se předpokládá stejný jako v lokálním objektu/subindexu.
- Pokud je potřeba konfigurovat PDO po síti (tj. nastavovat objekty 0x1400 až 0x1BFF) je potřeba vždy nejprve stanici přepnout do PREOP režimu, pak zakázat PDO(tj. v MessageID nastavit bit31), dále nastavit délku pole (tj. subindex 0) na 0, a pak změnit další prvky objektu. Nakonec nastavit správnou délku objektů a MessageID. Postup se může mírně lišit podle výrobce, ale pokud do těchto prvků (případně i jiných) nejde zapisovat, tak příčina je pravděpodobně jedna z výše uvedených.
- Implementace CANopen v systému REX nepodporuje TIME_SYNC (tj. přesnější synchronizaci) a nepodporuje multiplexed-PDO. SYNC packet je vysílán v každé periodě ovladače CanDrv . Režim Slave je podpořen, ale synchronizace na SYNC packet je jen přibližná (zprávy se vyčítají z komunikační karty s periodou, která je nastavena pro ovladač v systému REX a to je tedy i nepřesnost zasynchronizování).
- V případech, kde více objektů slouží ke stejnému účelu, se musí vždy použít první objekt z dané skupiny. Vždy tedy musí být použita dvojice 0x1800/0x1A00 pro odchozí PDO, 0x1400/0x1600 pro příchozí PDO, 0x1200 pro serverovská SDO a 0x1280 pro klientská SDO. Toto drobné omezení zjednodušuje implementaci.
- Zdá se, že pokud vyslanou zprávu žádná stanice nepřijme komunikační karta přejde do chybového stavu a za určitých okolností se již nevzpomatuje. Toto nastává pokud se připojují zařízení na sběrnici CAN „pod napětím“ popřípadě se každé zařízení zapíná a vypíná nezávisle. Podobná chyba také vzniká při různých komunikačních rychlostech. V takovém případě je nutné vše vypnout a zapnout pokud možno najednou nebo Master stanici jako poslední.
- V linuxu jsou podporovány 3 typy ovladačů:
raltime-char-device je podporovan jen v jadru s rozsirenim XENOMAI; pokud je spravne nainstalovan, zobrazuje se jeho název v /proc/rtdm/ (např. pcan0) a stejný náyev napíšeme do parametru NetAdapter v konfiguračním souboru char-device pokud je spravne nainstalovan, zobrazuje se jeho název v /dev/ (např. pcanpci0); do parametru NetAdapter jej píšeme s celou cestou (tj. např. /dev/pcanpci0); pokud není nainstalováno royšíření XENOMAI, lze psát i bez cesty (tj. např. pcanpci0). net-device pokud je spravne nainstalovan, zobrazuje jej příkaz ipconfig nebo ip link; do parametru NetAdapter píšeme zobrzený název (tj. např. can0) a navíc je v parametru NodeMode nastavit čtvrtý bit (přičíst 8). POZOR v závislosti na verzi kernelu v tomto režimu se nenastaví správně bitrate a je to potřeba z příkazové řádky před suštěním RexCore (příkaz má tvar ip link set can0 type can bitrate 125000 restart-ms 1000)
[Předchozí] [Na začátek] [Výše] [Další]