costi002 Postat Septembrie 15, 2016 Partajează Postat Septembrie 15, 2016 Salut, Doresc ca implementez o retea multimaster, daca pot sa ii spun asa. Este vorba de aprox 60 de unitati, interconectate pe o magistrala RS422/485. Fiecare unitate, este capabila la o anumita comanda data de un utilizator, sa transmita pe aceasta magistrala undeva intre 20-30 de caractere ascii la o viteza de 1200BPS. Device-ul este capabil ca atunci cand transmite, sa puna la masa o linie comuna intre device-uri (linia e trasa la vcc cu rezistente de pull-up), astfel incat fiecare device sa o vada daca este Hi cand nu transmite nimeni sau Low cand unul din device-uri are o transmisie in curs. De asemenea, fiecare device, are o adresa unica. Intrebare: ce sanse sunt sa apara coliziune pe magistrala, in ideea ca 2 device-uri vor sa transmita in acelasi timp? Cu alte cuvinte: caz1 - 2 useri actioneaza in acelasi timp, 2 module vad linia libera si ambele o trag la gnd si incep sa transmita, rezultand , cel putin in mintea mea, coliziune. caz2 - un modul transmite, tine linia jos. Intre timp, inca 2 useri actioneaza. Aceste 2 module din urma, asteapta eliberarea liniei. Cand s-a eliberat, ambele incep sa transmita, rezultand iarasi coliziune. Ca evitare, ma gandeam la un delay, care nu este identic la 2 device-uri, sa ma folosesc cumva de adresa unica. Daca, ma refer, strict la cazul 2, device 1 transmite, tine linia ocupata. device 2 si 3 asteapta eliberarea. cand o vad libera, fiecare mai asteapta/testeaza inainte de a o trage jos, un anumit timp (care nu este egal la device-ul 2 si 3) dupa care incepe sa transmita. Ce este mai sus, pare plauzibil, dar ce se intampla cand mai vine inca un device, cu timp de asteptare mai mic decat 2 si 3? In capul meu, e o ceata totala, nu stiu de unde sa incep, nu stiu cum sa abordez. Un alt detaliu, nu stiu daca este important, nici un device nu stie ce transmite celalalt, doar ca tine linia ocupata. Daca aveti macar o idee, nu ezitati, va rog, sa o expuneti. Toate bune. Link spre comentariu
mars01 Postat Septembrie 15, 2016 Partajează Postat Septembrie 15, 2016 De ce nu te folosesti de CAN bus? Dar te poti inspira si de aici (gasit la o cautare rapida pe Google): https://forum.arduino.cc/index.php?topic=293478.0 Link spre comentariu
costi002 Postat Septembrie 16, 2016 Autor Partajează Postat Septembrie 16, 2016 Interesant ce spune el acolo, in special ascultarea a ceea ce transmite. Din pacate, eu am comunicare full duplex, deci, nu se aplica. Toate datele ajung la un server, care valideaza ceea ce primeste si raspune adresei care a transmis daca este ok sau nu ceea ce a primit, daca nu este ok, retransmiterea se face manual (asa au fost cerintele). Deci, ma gandesc ca degeaba imi bat capul daca nu imi este permisa retransmiterea automata. Cat despre CAN Bus, nu se pune problema acum, modulele au fost deja instalate, nu se pot aduce modificari hardware. Link spre comentariu
Mircea Postat Septembrie 17, 2016 Partajează Postat Septembrie 17, 2016 Ideea de baza e ca sistemul (toate aparatele conectate) sa aiba ceasul (ora:min:sec) sincronizate. Astfel, se stie cand se poate transmite fara coliziuni.In trecutul meu tineresc am lucrat cu statii de achizitii, transmiterea era prin radio la un dispecerat. Date periodice si alarme. Pentru regii autonome, baraje, rauri, etc. Deci locatii importante. Toate statiile erau sincronizate cu ceas. Niciodata nu se suprapuneau. Comunicatia era un handshake. Odata ocupata "linia", pana nu se termina transmisia nu intra alta statie in transmisie.Nu conta pentru alte statii ce transmitea cea de ocupase linia. Doar masterul. E adevarat, era un simplex. Nu duplex. Link spre comentariu
costi002 Postat Septembrie 17, 2016 Autor Partajează Postat Septembrie 17, 2016 Multumesc de idei. Pana la urma, daca clientul va simti nevoia de update, voi transforma toate unitatile in slave iar in capatul liniei, intre magistrala si server voi pune un master care sa faca interogarea ciclic. Daca un slave are un cod de transmis la server, master-ul il va transmite, asteapta raspunsul serverului si il trimite inapoi la slave. Toate bune. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum