8/16/2019 CSC Proiect Victor Bojica Ilie Radu
1/24
Universitatea Tehnică “Gheorghe Asachi” din IaşiFacultatea de Automatică şi CalculatoareDomeniul: Ingineria sistemelor Specializarea: Automatică şi Informatică AplicatăAnul universitar 2015 / 2016
Proiect
Comunicaţii în sisteme de conducere
Tema 3
tudenti! Gru"a!
#o$ica %ictor &'(
Ilie )adu*Iulian &'(
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
2/24
CUPRINS
1 !ema proiectului"2 #rezentarea resurselor $ar%&are si soft&are folosite'" #rotocolul (aster)Slave10' #rogramul principal125. #regătirea mesa*elor pentru transmisie156 !ransmisia mesa*elor 1++ ,ecep-ia mesa*elor . %escriere sc$ema logică şi implementare1
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
3/24
&+ Tema "roiectului
Folosind microsistemul MicroPac 515C să se implementeze un protocol decomunicaţie serială de tip master-slave, având următoarele caracteristici:
1 Port COM !"#-$%5&
Parametricomunicaţie
115'', (, ), 1
Formatul Mesa*ului +dresă nod destinaţieCod uncţie: ' sau 1/estinatia sau sursa mesa*ului, după caz0unime date/ateCod detectare erori 2 0"C !3&
$ Codi4care mesa* +#C 6e7
Formatul mesajelor:
+dresadestinatie
Coduncţie
#ursă !master&/estinaţie !slave&
0unime /ate #uma decontrol
1 octet 1 octet 1 octet 1 octet 0unime 1 octet
Obs.:
8 Câmpul adresă destinaţie va conţine adresa nodului care va recepţionamesa*ul.8 Câmpul cod funcţie poate 4, după caz:o ' 2 mesa* de interoare !lunime date 9 '& 2 transmis de master către unnod slave sau deslave către master, n lipsa altui mesa* util
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
4/24
o 1 2 mesa* de date 2 mesa* care conţine un te7t +#C8 Câmpul sursă/destinaţie va indica:o pentru un mesa* de tip 1 transmis de nodul master 2 sursa mesa*uluio pentru un mesa* de tip 1 transmis de un nod slave 2 destinaţia 4nală amesa*ului
8 Câmpul lungime reprezintă numărul de octeţi al câmpului de date;8 Octetul din câmpul suma de control va 4 calculat ca suma aritmetică atuturor octeţilor dincâmpurile anterioare !cu neli*area !cu e7cepţia câmpuluiadresă destinaţie& ?i transmise, octet cu octet, portului serial COM !dee7emplu octetul $=6 va 4 transmis ca doi octeţi: @$A9B$6 ?i @=A9$56, naceastă ordine.
Etape de proiectare:
1. Prezentarea etapelor proiectului, a modului de desă?urare ?i evaluare aactivităţii la proiect, repartizarea temei.. Prezentarea resurselor 6ardare !microsistemul MicroPac 515C& ?isotare !Deil EisionB ?i C51& ?i a acilităţilor de dezvoltare a proramelor!driverele de interaţare cu tastatura ?i a4?a*ul 0C/&.B. #ta
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
5/24
,+ Pre-entarea resurselor hard.are si so/t.are /olosite
Fig. 1 Placa principală a microsistemului
(icro#ac 515 este un sistem %e %ezvoltare ce folose te un microcontrolerș In/ineon C0&0C
Caracteristici tehnice ale microcontrolerului C0&0C
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
6/24
Fig. 2 Structura microcontrolerului C515C
• variantă m3unătă-ită a microcontrolerului SA4 0515A compati3il (S 51• memorie program internă %e pnă la 6'7octe-i 8cu e9cep-ia variantei C0&0C*1
utilizată şi %e sistemele (icro#ac 515 %in la3orator• interfa-ă pentru memoria program %e 6'7octe-i• 256 octe-i %e memorie ,A( internă• 2 7octe-i %e memorie ;,A( internă• interfa-ă pentru memorie %e %ate e9ternă %e pnă la 6'7octe-i
ar$itectură internă compati3ilă (S 51 cu registre D#!, n loc %e unul singur• frecven-ă %e tact %e pnă la 10(
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
7/24
• port serial sincron SS 8compati3il S#I . Serial #erip$eral Interface• mo%ul A 8ontroller Area et&orB integrat complet implementat• 1+ surse %e ntrerupere organizate pe ' niveluri• ceas %e gar%ă• ' mo%uri %e consum re%us 8Slo& Do&n I%le (o%e SC /
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
8/24
mapa-i regiştrii %e interfa-ă ai mo%ulului A @tilizarea acestor facilită-i suplimentare se poate
selecta e9plicit n configura-ia microcontrolerului 8;(A#0H0 n S, SJSE
Fig. 4. Special Function Register la microcontrolerele Infineon C515C
Dacă ;(A#0H1 8aşa cum se ntmplă %upă resetare accesul la memoria ;,A( internă şi laregiştrii mo%ulului A este in$i3at n spa-iile %e a%resă respective fiin% FvăzuteG loca-iilecorespunzătoare %in ca%rul memoriei e9terne %e %ate 4itul ;(A#0 nu poate fi setat prin program ci numai o%ată cu resetarea microcontrolerului pentru a se preveni revali%areaacci%entală a accesului la memoria e9ternă %e %ate
Atunci cn% ;(A#0H0 accesul la memoria ;,A( internă şi la regiştrii A poate fi făcutvizi3il şi n e9terior prin ;(A#1H1 care vali%ează liniile porturilor 0 şi 2 precum şi semnalele%e control ,D şi C,
on-inutul memoriei ;,A( nu este afectat %e resetarea microcontrolerului %ar se pier%e la
oprirea alimentării şi se pozi-ionează aleator la realimentare
Caracteristici ale "lăcii de de-voltare uPac C0&0C
Inter/e e de comunca ie serială i asincronăț ț ș
K E(0 8,S)2"2 ) @A,! 515 . portul serial al microcontrolerului 515K E(1 8,S)2"2 E(2 8,S)'5 . un circuit e9tern D@A,! #$ilips
S26L2 cu %ouă canale in%epen%ente full %uple9
K E(" 8,S)2"2 ) @A,! A!L2051 ) portul serial al coprocesoruluiA!L2051
K #orturile seriale pot lucra n mo%ul asincron cu 10 sau 11 3i-i/caracter şi cu rate%e comunica-ie %e pnă la 2"0' 73ps
Inter/a ă CA4ț
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
9/24
515 integrează pe cip un mo%ul A 8ontroller Area et&orB care implementează n
$ar%&are versiunea 204 a protocolului A
I56 digitale
K 11 linii I/? programa3ile %e nivel !!K linii %e ieşire %e curent mare 8500mAK ' linii %e intrare şi " linii %e ieşire !! situate pe circuitul D@A,! #$ilipsK iniile %e intrare A/D pot fi %e asemenea folosite ca intrări %igitaleK Atunci cn% coprocesorul A!L2051 nu este instalat mai rămn %isponi3ilencă 6 linii I/? %e nivel !!
Intrări A57
K intrări multiple9ate conectate la convertorul intern A/D cu rezolu-ia %e 10 3i-iK %urata unei conversii este %e L6 =s 810' 7eşantionări / sec
Ieşiri 75A
K ' canale %e ieşire D/A implementate cu un convertor e9tern AD+226 cu ' canaleK rezolu-ia ieşirilor D/A este %e 3i-iK Interfa-ă D ) permite controlul oricărui afişa* cu cristale lic$i%e 3azat pe controlerele
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
10/24
Fig. 5. Interfata programului oIC!51
#rogramul 8%ision9 permite compilarea si $e9)e%itarea programelor ce vor fi incarcate
ulterior pe placa cu a*utorul oI? #entru utilizare vom creia un proiect in care vom intro%uce
ca li3rarii fisierele: mp515.c lc""r#.c cop"r#.c cir$ue.c mmio.a51 şi startup.a51 avan% astfel
acces la functii pre%efinite
Sistemul (icro#ac 515 %ispune %e ' porturi seriale:K C23( ) #ortul serial UA)T C0&0C . ec$ipat cu un a%aptor %e linie ,S)K C23& şi C23, ) %ouă canale seriale furnizate %e interfa-a e9ternă 7UA)T Phili"s
C,:C;, E(1 este ec$ipat cu un a%aptor ,S)2"2 iar E(2 este ec$ipat cu %ouă
a%aptoare ,S)'5K C239 ) #ortul serial UA)T AT
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
11/24
K sim"le= . comunica-ie ntr)un singur sens cu un singur flu9 %e %ate: un no% %oar
transmite 8sursă iar celălat %oar primeşte %ate 8%estina-ieK du"le= . comunica-ie n am3ele sensuri cu %ouă flu9uri %e %ate in%epen%ente: no%urile
pot transmite şi primi %ate simultan 8am3ele no%uri pot fi att sursă ct şi %estina-ie
K hal/*du"le= ) comunica-ie n am3ele sensuri cu %ouă flu9uri %e %ate ntre-esute:no%urile pot transmite şi primi %ate %ar nu simultan 8un no% poate fi la un moment %at fie
sursă fie %estina-ie
9+ Protocolul 3aster*lave
#entru a forma o retea %e comunicatie este nevoie %e o placa 8no% care sa gestionezeflu9ul %e mesa*e %intre restul placilor conectate Astfel no%ul master %e-ine controlul re-elei şi
acor%ă no%urilor slave pe rn% permisiunea %e a transmite %ate %ealungul retealei o%urile
slave au ca responsa3ilitate să citească mesa*ele %e la master pentru a afla cn% au %reptul %e a
transmite %ate Avanta*ul acestei organizări este acela că no%urile slave pot primi mesa*e numai
%e la master şi nu vor tre3ui să citească răspunsurile celorlalte no%uri slave
!e$nica master / slave este o te$nică %e acces la me%iu cu control centralizat este
specificat atunci can% unul %intre no%uri poate transmite %ate şi momentul cn% poate face acestlucru Dreptul %e acces este acor%at %e către master pe rn% n mo% ciclic fiecărui no% slave
printr)un mesa* a%resat acestuia a primirea unui mesa* un no% slave ştie că poate transmite la
rn%ul lui un mesa* %ar numai către no%ul master Astfel %reptul %e acces revine sistematic la
no%ul master care trece la următorul no% slave %in lista circulară
a avanta*e ale acestei meto%e putem enumera:• fiecare no% primeşte %reptul %e acces n re-ea ntr)un timp finit in%iferent %e numărul %e
mesa*e pe care le au %e transmis no%urile• pe termen lung fiecare no% are aceleaşi şanse %e a transmite %ate n re-ea• %eterminism . fiecare no% primeşte %reptul %e acces ntr)un timp pre%icta3il
a %ezavanta*e ale acestei meto%e putem enumera:• no%ul master are o ncărcare mult mai mare %ect no%urile slave cu sarcini %e
comunica-ie• un mesa* %e la un no% slave pentru un alt no% slave apare n re-ea %e %ouă ori
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
12/24
• că%erea no%ului master %etermină 3locarea comunica-iei
'+Programul "rinci"al
#rogramul principal are ca i sc$elet următoarea figurăș
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
13/24
Fig. %. Sc&ema logica a programului principal
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
14/24
#entru nceput n func ia principală vomț face cteva ini ializări necesare flo&)ului %e transmisieț . recep ie a %atelor cum ar fi:ț
• Ini ializăm D . folosit pentru afi area %atelor transmiseț ș• Ini ializăm coprocesor tastatură i comunica ia cu acestaț ș ț• Ini ializăm portul serialț• Ini ializăm timer)ul !0ț• Ini ializăm 3ufferele pentru mesa*e pentru toate no%urile cuprinzn% : ini ializareț ț
cmpuri a%resă %e către master ini ializare cmpuri a%resă %e către slave precum iț ș punerea primului caracter n 3uffer)ele ASII F : G
On continuare tot flo&)ul programului principal se va %esfa ura ntr)o 3uclă infinitășOncă %e la nceput vom verifica %aca no%ul pe care ruleaza programul este master / slave Daca
no%ul este master si %aca nu e9ista un mesa* ASII %e transmis catre slave i atunci se va folosiun mesa* %e introgareDupă aceasta etapa se va calcula suma %e controlse va face conversia 3inar)ascii %upa care
transmite mesa*ul catre slave)ul i Slave)ul i va raspun%e cu un mesa* si va realiza conversia
ascii)3inarE%ata apelate cele 2 functii %e !9(esa*8 respectiv ,9(esa*8 se va apela o functie %e afisare a
mesa*ului receptionat in cazul nostru AfisarePmesa*8 %upa care va trece la urmatorul no% slave
Daca in sc$im3 no%ul pe care ruleaza programul este slave atunci se va %uce pe ramura QelseG
in care se vor parcurge urmatoarele etape:• Se asteapta un raspuns %e la master 8,9(esa*8 un%e se va realiza si conversia ascii)
3inar• Se cauta un mesa* %e transmis in 3ufferele %e transmisie sare peste propriul 3uffer 8%e
receptie iar %aca nu a fost gasit niciun mesa* %e transmis va iesi %in 3ucla QforG• Daca este gasit un mesa* ASII %e transmis se va apela ca si functie #regatirePmesa*8
un%e se va calcula suma %e control si conversia 3inar)ascii• !ransmite mesa*ul cu %estinatia no%ul i 8prin interme%iul masterului
Daca nu s)a transmis niciun mesa* %e %ate atunci se va transmite un mesa* %e interogare %upacare se vor apela functiile %e #regatirePmesa*8 )R in care se calculeaza suma %e control siconversia 3inar) ascii !9(esa*8 . transmite mesa*ul %e interogare catre masterIn cazul in care primim un mesa* se va afisa folosin% functia AfisarePmesa*8
#erio%ic vom verifica %aca s)a apasat o tasta iar %aca s)a efectuat atunci vom trata coman%atransmisie mesa* Dupa cateva a%aptari vor intervine cateva verificari privin% 3uffer)ul (ai
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
15/24
precis ne vom intre3a %aca 3uffer)ul este plin / sau nu In caz afirmativ se va afisa un mesa*Q4uffer #linG si totul va continua cu refacerea meniului comenzi
5. Pregătirea mesa$elor "entru transmisie
#entru urmatoarele referinte vom avea ca si suport sc$eletul in lim3a* pseu%oco% %in figuraurmatoare
Fig. '. Sc&ema logica a functiei "e pregatire a mesa(ului
Dupa cum stim functia Pregatire>mesa$?@ reprezinta una %intre cele " functii pe care le avem %eimplementat pentru functionarea corecta a sistemului %e comunicatie
Aceasta functie va avea ca si tinta alcatuirea mesa*ului ce va fi trimis prin retea %e la un no% laaltul si tre3uie respectate anumite reguli pentru a putea fi interpretat si utilizat corect %e functiile
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
16/24
%e receptie si transmisie
onform figurei %e mai sus tre3uie sa tinem cont %e urmatorii pasi pentru realizareameto%ei Pregatire>mesa$?@+
• Merificarea printr)un #E a tipului %e %ate ce tre3uie pregatit: %ate / interogare
In cazul in care este %e interogare mesa*ul ce va tre3ui prelucrat va reprezenta suma %e control ano%ului egala cu a%resa no%ului
ontrar se va construi suma %e control tinan%u)se seama %e a%resa no%ului co%ul functieilungimea %atelor si %atele ce tre3uie trimise
Atasat mai *os este functia Pregatire>mesa$?@ in conformitate cu sc$ema pseu%oco% a proiectului
void Pregatire_mesaj(int i){ // pregatire mesaj pentru transmisie catre nodul iunsigned char sc, *ptr;int j;if(retea[i].bufbin.functie==POLL)// daca este un mesaj de interogare (POLL=0)
retea[i].bufbin.sc = retea[i].bufbin.adresa; // atunci suma de control este egalacu adresa HW a nodului destinatie
else{sc = retea[i].bufbin.adresa; // initialieaa !" cu adresa HW a nodului destinatiesc+=retea[i].bufbin.functie; // ia in calcul codul functieisc+=retea[i].bufbin.destsrc; // ia in calcul adresa nodului destinatie sau sursa a
mesajuluisc+=retea[i].bufbin.ln; // ia in calcul lungimea datelorfor(j=!;j"retea[i].bufbin.ln;j++)
sc+=retea[i].bufbin.date[j#$ // ia in calcul datele
retea[i].bufbin.sc=sc; // stocheaa suma de control #
ptr = retea[i].bufasc; // pune in %ufasc codul functiei*ptr++=retea[i].bufbin.adresa+$!$;bin%ascii(retea[i].bufbin.functie, ptr);ptr+=%;
if(retea[i].bufbin.functie==&'){ // daca este un mesaj de date (&'!)bin%ascii(retea[i].bufbin.destsrc, ptr); // pune in %ufasc destsrcptr+=%;bin%ascii(retea[i].bufbin.ln, ptr); // pune in %ufasc lng dateptr+=%;for(j=!;j"retea[i].bufbin.ln;j++){ // pune in %ufasc datele
bin%ascii(retea[i].bufbin.date[j], ptr);ptr+=%;
# #bin%ascii(retea[i].bufbin.sc, ptr); // pune in %ufasc !"ptr+=%;*ptr++=!!d; // pune in %ufasc " *ptr=!!a; // pune in %ufasc L
#
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
17/24
:+ Transmisia mesa$elor
Dupa cum ne putem %a seama functia %e transmisie a mesa*elor reprezinta a 2)a meto%a cetre3uie implementata in ca%rul procesului %e comunicatie a si suport pentru implementarea co%ului respectiv a %escrierii functionalitatii vom aveasc$ema pseu%oco% %in figura %e mai *os
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
18/24
Fig. ). Sc&ema logica a functiei "e trimitere a mesa(elor
!ransmisiePmesa*8 este folosit pentru a trimite mesa*ul %in 3uffer)ul i
o%ul %e mai *os reprezinta implementarea functiei %e Transmisie>mesa$?@void *+&esaj(int i){ // transmite mesajul din %ufferul i
unsigned char *ptr;er-/-eset(O&%,/0L102,/0L102); // resetare soft,are a transmitatorului si
receptoruluierettatus(O&%, &3L21P-O0-'0); // configureaa "O&- pentru a transmite octeti de
tip adresaer-/'nable(O&%,/0L102,141502); // validare transmitator. inhi%are receptor$
eret4ands6a7e(O&%,OP2-0&11'); // valideaa emitatorul de linie !1
ptr=retea[i].bufasc; // transmite adresa HW 2!"33 a nodului destinatieerend58te(O&%,*ptr,9); // asteapta receptia adresei transmise pe linie
if(er-ecei:e58te(O&%,9)=*ptr){eret4ands6a7e(O&%,OP-''P21'); // inhi%a emitatorul de linieLetpos(iune); // renunta. daca s4a detectat o coliiuneela8(9!!!);
#else{erettatus(O&%,&3L21P-O020); // configureaa "O&- pentru a transmite si
receptiona datedo{
er5loc7end(O&%,*(++ptr)); // transmite codul functiei# ,hile(*ptr = !!a); // slave4ul considera acum ca a transmis mesajulif(0-O=&02'-){
retea[i].full=!;#
,hile(erone(O&%)==!); // asteapta terminarea transmisieieret4ands6a7e(O&%,OP-''P21'); // inhi%a emitatorul de linie
##
+ )ece"ţia mesa$elor B descriere schema logică şi im"lementare
,eceptiePmesa*8 reprezinta ultima parte ce tine %e implementare un%e putem spune caeste si cea mai comple9a functie
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
19/24
Implementarea respectiv scrierea co%ului au avut ca si suport sc$ema in pseu%oco% %in figura%e mai *os
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
20/24
Fig. *. Sc&ema logica a functiei "e receptie a mesa(elor
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
21/24
Fig. *. Sc&ema logica a functiei "e receptie a mesa(elor
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
22/24
o% sursa :
void +&esaj(int i){ ?? receptie @esaj in bufferul i
unsigned char j, c6, sc, screc, destsrc, ln, functie, *ptr, *ptrbin;
eret4ands6a7e(O&%, OP-''P21');er-/-eset(O&%, /0L102, /0L102);erettatus(O&%, &3L21P-O0-'0);if(0-O==&02'-){
c6=er-ecei:e2&O(O&%, 9!!!);if(ti@eout){
error(2i@eout nod );LPutc6ar(i+$!$);return;
#else{
retea[i].full=!;if(c6 = 0-O + $!$){
error('roare adresa);ela8(9!!!);
return;#
##else{
do{c6=er-ecei:e58te(O&%, 9);
# ,hile(c6 = 0-O + $!$);#
er-/'nable(O&%, 141502, /0L102);erettatus(O&%, &3L21P-O020);
ptr = retea[i].bufasc;
*ptr = 0-O + $!$;
do{*(++ptr) = er-ecei:e2&O(O&%,A);if(ti@eout){
error(2i@eout nod );LPutc6ar(i+$!$);return;
## ,hile(*ptr = !!0);
ptr = retea[i].bufasc;screc = *ptr++ B $!$;functie = ascii%bin(ptr);ptr+=%;
if(functie C= %){error('roare cod functie);return;
#screc += functie;if(functie = &'){
sc = ascii%bin(ptr);if( sc == screc){ return; #else{
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
23/24
error('roare ); #
#else{
destsrc = ascii%bin(ptr);ptr += %;screc += destsrc;
if(0-O==&02'-){if(retea[destsrc].full == 9){
error('roare de suprapunere);return;
##
ln = ascii%bin(ptr);ptr += %;screc += ln;
if(0-O==&02'-){retea[destsrc].bufbin.functie = functie;retea[destsrc].bufbin.destsrc = i;
retea[destsrc].bufbin.ln = ln;
for(j=!; j " retea[destsrc].bufbin.ln; j++){retea[destsrc].bufbin.date[j] = ascii%bin(ptr);ptr += %;
screc += retea[destsrc].bufbin.date[j];#
sc = ascii%bin(ptr);if(sc == screc){
retea[destsrc].full = 9 ;return;
#else{
error('roare );return;#
#else{
retea[0-O].bufbin.functie = functie;retea[0-O].bufbin.destsrc = destsrc ;retea[0-O].bufbin.ln = ln ;
for(j=!; j " retea[0-O].bufbin.ln; j++){retea[0-O].bufbin.date[j] = ascii%bin(ptr);ptr += %;screc += retea[0-O].bufbin.date[j];
#
sc = ascii%bin(ptr);
if(sc == screc){retea[0-O].full = 9 ;return;
#else{
error('roare );return;
##
8/16/2019 CSC Proiect Victor Bojica Ilie Radu
24/24
##