07-12-2012, 09:46 PM
On bussi peakontroller koos oma alluvate kontrolleritega. Side @115kb, RS485, minu oma protokoll, toimib.
Probleemse alluva kontrolleri küljes on 3 sidekanalit:
- sidesiin peakontrolleriga @115kb, päringuid esitab PK kõigile seadmetele järjest ja kui mõni neist keeldub vastamast, loetakse ta ajutisel koolnuks ning võetakse ette järgmine. Tulemusena jäävad eksinu mõned väljundid juhtimata (kui on muutusi);
- tööstuslik kontrolleriplokk koos puldiga. Minu plaat istub nende kahe vahel ja vahendab päringuid nagu parasjagu vaja on. Side @9600bd, pakett 8 baiti, iga baidi vahel kohustuslik >=3ms paus. Päringud tulevad masterilt siis ja nii kui ta tahab. Alati peab vastama või tuleb oodata ca 1s (lubamatu). Master (see tööstuslik) ei kuula esimest paketti mis tuleb peale timeout'i (kui ma ei jõua talle vastata). Timeout'i korral laseb ta kõik oma 1-e seatud väljundid lõdvalt 0-i (turvakaalutlustel ?);
- tööstusliku masteri pult @9600bd (juhtme otsas), ei ole kriitiline aga sama 8-baidise paketi baitide vahele nõutakse sama pausi ca 3ms.
Päringuid esitab minu kontroller aga selleks napib aega (tänu nendele kohustulikele viidetele).
Probleem: ma ei saa kuidagi rahuldada kõigi suhtlemisevajadusi korraga. Kui vastan katkestuse kestel peakontrolleri kõigile pakettidele viisakalt, tekib ajuti master-neegriga sideprobleem ja ta seab kõik väljundid nulli. Kui aga pean sidet temaga prioriteetseks, jäävad vahele peakontrolleri paketidd ning tulemusena juhitakse ainult master-neegri väljundeid 1-3, teiste puhul jõuab kätte timeout ja küsitlev kontroller jäetakse 1-ks viskeks vahele.
Peakontrolleri kood on minu mätcitud, saan muuta (nt. teha tea vähem pirtsakaks side suhtes aga siis võib viga siirduda lihtsalt järgmise väljundi juurde). Tolle "tööstusneegri" koodi ma muuta ei saa.
Mul pole ühtegi head ideed, kuidas probleemi lahendada või kas see üldse võimalik on.
Any ideas?
Probleemse alluva kontrolleri küljes on 3 sidekanalit:
- sidesiin peakontrolleriga @115kb, päringuid esitab PK kõigile seadmetele järjest ja kui mõni neist keeldub vastamast, loetakse ta ajutisel koolnuks ning võetakse ette järgmine. Tulemusena jäävad eksinu mõned väljundid juhtimata (kui on muutusi);
- tööstuslik kontrolleriplokk koos puldiga. Minu plaat istub nende kahe vahel ja vahendab päringuid nagu parasjagu vaja on. Side @9600bd, pakett 8 baiti, iga baidi vahel kohustuslik >=3ms paus. Päringud tulevad masterilt siis ja nii kui ta tahab. Alati peab vastama või tuleb oodata ca 1s (lubamatu). Master (see tööstuslik) ei kuula esimest paketti mis tuleb peale timeout'i (kui ma ei jõua talle vastata). Timeout'i korral laseb ta kõik oma 1-e seatud väljundid lõdvalt 0-i (turvakaalutlustel ?);
- tööstusliku masteri pult @9600bd (juhtme otsas), ei ole kriitiline aga sama 8-baidise paketi baitide vahele nõutakse sama pausi ca 3ms.
Päringuid esitab minu kontroller aga selleks napib aega (tänu nendele kohustulikele viidetele).
Probleem: ma ei saa kuidagi rahuldada kõigi suhtlemisevajadusi korraga. Kui vastan katkestuse kestel peakontrolleri kõigile pakettidele viisakalt, tekib ajuti master-neegriga sideprobleem ja ta seab kõik väljundid nulli. Kui aga pean sidet temaga prioriteetseks, jäävad vahele peakontrolleri paketidd ning tulemusena juhitakse ainult master-neegri väljundeid 1-3, teiste puhul jõuab kätte timeout ja küsitlev kontroller jäetakse 1-ks viskeks vahele.
Peakontrolleri kood on minu mätcitud, saan muuta (nt. teha tea vähem pirtsakaks side suhtes aga siis võib viga siirduda lihtsalt järgmise väljundi juurde). Tolle "tööstusneegri" koodi ma muuta ei saa.
Mul pole ühtegi head ideed, kuidas probleemi lahendada või kas see üldse võimalik on.
Any ideas?