Master/Slave komunikace RS485

tak jsem zase přemýšlel, a ještě bych potřeboval poradit:

Cíl zařízení: Slave zařízení, budou něco řídit a Master zařízení bude monitorovat stavy a měnit parametry. Slave zařízení 8bit nebo ARM Cortex M0, master zařízení ARM Cortex M0 nebo nějaký board s ARMem+Linux

Myšlenka: na každém Slave zařízení si staticky alokovat pamět (např pole bytů), všechny proměnné namapovat do tohoto pole. Obdobně to udělat i na Master zařízení ale vícekrát pro každý Slave. Když to shrnu, tak každé zařízení bude pracovat s proměnnými, které se budou namapovány v poli.

A teď zrovna přemýšlím, jak ty “pole” mezi Master a Slave zařízením synchronizovat. Když to přeženu 32 zařízení, Slave RAM 16KB, vzdálenost do 200m asi i do 100m.

Napadlo mě:

  1. přetáhnout celé pole v kuse- ale jelikož bude RS485 udělaná s UARTU a pokud se nepletu tak to je max 115200Bd (cca 14KB/s) tak to bych měl možná na MASTERU aktuální informace tak 2x za minutu v tom nejhorším případě, když pominu to že by to bylo pomalé, tak by to bylo asi i neefektivní…to mi příjde tak vhodné na začátku, kdy se zařízení zapne

  2. na MATER i SLAVE zařízeních mít frontu s požadavkama co se změnilo a postupně to vyřizovat, ale podle mě by to chtělo nějaký mechanismus, který by poznal že se změnila hodnota proměnné a na základě toho přidal požadavek do fronty…a tohle právě vůbec netuším jak udělat…jedině snad mít nějakou specialní funkci pro zápis dat, která by kontrolovala jestli, došlo ke změně nebo ne a když tak by se rovnou vytvořil požadavek na synchroniaci

  3. všechny zařízení budou MASTER, data do paměti budu zapisovat přes speciální funkci, která vyhodnotí jestli se data změnila nebo ne a v případě že ano, tak zařízení zahájí komunikaci a pošle aktualizující paket konkrétnímu zařízení, tohle mi příjde jednoduché na obsluhu, ale nejhorší na komunikační protokol

máte někdo nějaká tipy a rady? :slight_smile: