1

Téma: R485 - přepínání linky

Jak přesně funguje přepínání linky RS485? Je linka v klidu (nečte se ani nevysílá) na vysílání nebo příjmu?

Potřebuji komunikovat se zařízením na RS485 jako master. Vyšlu polling dotaz pomocí SDS_serial_write - mám pak okamžitě zahájit příjem pomocí SDS_serial_read v nějaké časová symčce (timeout), abych vynutil přepnutí funkcí read a nepřišel o data? Nebo mám čekat nějakou dobu, až se smyčka přepne sama a pak zahájit příjem?
Jde mi o to, abych příjem nezahájil příliš brzy (linka není přepnutá) nebo příliš pozdě (přeplní se vstupní buffer), protože sám přepínání neovládám.

2

Re: R485 - přepínání linky

Tohle zcela plně automaticky řeší SDS, má interní FIFO pro oba směry, a automaticky aktivuje vysílání - v klidu je vždy na příjmu. Bez obav používejte tyto funkce, bez nutnosti řešit časování na straně FC programu.

SDS zahájí odesílání ihned po zavolání příslušné funkce, a linku uvolní (pro příjem) v okamžiku odeslání posledního bajtu.

Nejčastější zdroje problémů jsou: nesprávně nastavená linka (rychlosti, parita), odeslání nesprávné zprávy (např. zapomenutá data, tzn. na straně FC programu).

Přijatá data jsou uložena ve FIFO a není zde časový limit, kdy se pomocí příslušné FC funkce mají vyzvednout. Limitem je pouze velikost FIFO.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3 Naposledy upravil: absolonj (2022-09-21 10:20:33)

Re: R485 - přepínání linky

V zásadě to tak funguje a opravdu se nemusím o nic starat. Narazil jsem ale na jeden problém.

Komunikuji se čtečkou připojenou na RS485, komunikace je formou pollingu, takže "neustále" posílám dotazy a čtečka odpovídá (má data / nemá data). Z výroby je čtečka nastavena na rychlost 115200. Při této rychlosti se mi ztrácely odpovědi v poměru cca 5:1, tedy až každá pátá odpověď přišla, zbývající mizely. Totéž jsem viděl při monitoringu, když jsem data na lince odchytával pomocí převodníku na PC (dotaz se odeslal celý, ale odpověď nepřišla). Když jsem ale dotaz odeslal z PC, odpověď přišla vždy.

Postupnými pokusy jsem se dostal až k tomu, že jsem před každý dotaz vložil ještě jeden byte (0x00, ale je to jedno). Voilà, odpověď pak přišla vždy. Neměli jsme čas pohrát si s tím a zkusit to napojit na analyzátor, ale připadá mi to tak, že SDS přepíná linku někde "na hraně", takže někdy to projde, jindy ne. Možná je čtečka jinak citlivá na délku startbitu (který je při té rychlosti dost krátký) nebo něco takového, protože převodník na PC přijímá vše.

Snížení rychlosti na 19200 pomohlo, jiné jsem nezkoušel. Takže zůstáváme na 19200, pro naše účely zcela vyhovující.

Je možné, že je problém někde u nás, až bude čas, tak se tomu můžeme věnovat víc. Taky může být jinak citlivý HW kus od kusu, tak to beru jen jako námět, jestli je čekání na přepnutí směru dostatečné.

4

Re: R485 - přepínání linky

Problém bude nejspíše s klidovým stavem linky, tedy HW.
Viz https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_RS485
To platí pro desky BIG rev1, nové desky už to mají interně vyřešené (chybějící rezistor integrován).
Nevím jakou revizi máte, ale je možné že rev1 a toto může být tou příčinou.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: R485 - přepínání linky

SoC-ARM REV1 100Mbit DF15, rezistor tam máme. Ale jak jsem říkal, ještě zkusíme poměřit.