Você está na página 1de 14

MODBUS COM ARDUINO

Vamos fazer um Atmega328P comunicar-se com o ScadaBR. Eu testei esse programa


com um Arduino Uno e funcionou muito bem. Para obter mais praticidade reso!"i uti!izar o
Proteus para simu!ar o arduino Uno. A comunica#$o com o ScadaBR "ai fazer uso do
protoco!o %odbus "amos precisar tamb&m de um emu!ador de porta seria! - o Virtua!
Seria! Port Emu!ator ou outro e'ui"a!ente no meu caso criei um par de portas seriais
()%* e ()%2. A ()%* ficou sendo uti!izada pe!o componente ()%P+% do Proteus e a
()%2 ficou sendo uti!izada pe!o ScadaBR.
,a te!a abai-o temos o Virtua! Seria! Port Emu!ator apresentado o par de portas
rec&m-criadas.
Agora precisamos criar um pe'ueno circuito no Proteus com os componentes
e-ibidos abai-o. .e"emos ter c/a"es e potenci0metros para simu!ar sensores e !ig1-!os
aos pinos digitais e 2s entradas ana!3gicas bem como !igar !eds para simu!ar as cargas
'ue desa4amos acionar. ) nosso circuito ser1 capaz de !5 o estado !3gico de 6 c/a"es !5
www.mundoarduino.com
a tens$o presente em 7 entradas ana!3gicas e acionar 6 cargas. 8amb&m n$o de"emos
es'uecer de adicionar o componente ()%P+% respons1"e! pe!a comunica#$o seria! com
o ScadaBR. 9a#amos as !iga#:es conforme a figura abai-o;
(!icando no Atmega328P podemos configurar o micro para e-ecutar o ar'ui"o /e-
respons1"e! pe!a imp!ementa#$o do protoco!o %odbus. Voc5 pode fazer o do<n!oad do
ar'ui"o no site <<<.mundoarduino.com.
www.mundoarduino.com
) componente ()%P+% de"er1 ser configurado conforme a figura abai-o

www.mundoarduino.com
) ScadaBR ficar1 respons1"e! pe!a e-ibi#$o dos estados das c/a"es !eitura das
portas ana!3gicas e pe!a atua#$o das cargas no nosso caso as cargas s$o apenas !eds.
Supondo 'ue "oc5 41 ten/a o ScadaBR insta!ado de"emos criar um .ata Sources
para ser"ir de fonte de dados para o ScadaBR. Vamos adicionar um .ata Sources do tipo
%odbus Seria!.
(!icando no =cone do Data Sources e depois se!ecionando tipo Modbus Serial
podemos testar a comunica#$o com o Proteus. .e"emos nos assegurar 'ue o %odbus
Seria! este4a uti!izando a porta seria! e "e!ocidade correta. Se a simu!a#$o no Proteus
esti"er rodando ao c!icarmos em Pesquisar por ns>desabi!ite o .ata Sources antes de
eecutar a pes'uisa? ser1 !oca!izado o escra"o * 'ue & o atmega328P rodando no
Proteus. (!icando em Ler dados se se!ecionarmos a 9ai-a de registros apropriada -
Registrador olding! bem como o n@mero de registradores 'ue estamos uti!izando no
nosso caso *6 registradores; A6 para as pinos digitais 7 para as entradas ana!3gicas e 6
para as cargas n3s teremos acesse direto ao "a!ores atuais dos registradores conforme
"emos na figura abai-o;
www.mundoarduino.com
%as isso n$o & tudo n3s de"emos criar .ata um .ata Points para cada registrador
.,o e-emp!o abai-o criamos um .ata Point para !5 a entrada ana!3gica do Atmega328P.
www.mundoarduino.com
Buando c!icarmos em adicionar ponto estaremos preparando um Data Point para
o ScadaBR para !5 a entrada A.(A >pino 23? do Atmega328P. Se dese4armos !5 outra
entrada ana!3gica de"emos da mudar o campo O""set#baseado e$ %& para * e assim
sucessi"amente at& o "a!or C 'uando ent$o estaremos !endo todas as entradas
ana!3gicas do Atmega328P.Ve4a na figura abai-o a configura#$o do data Point para !5 a
entrada ana!3gica. Para as entradas ana!3gicas podemos inserir um fator mu!tip!icati"o e
assim !ermos as tens:es presentes nos pinos "ariando de AV a CV e n$o de A a*A23.
(!icando em Watch List Detalhes do Data Point Editar data Point poderemos
atribuir uma m1scara e um sufi-o para a grandeza 'ue estamos medindo.Ve4a a figura
abai-o;
www.mundoarduino.com
Vamos discutir mais sobre o c3digo 'ue roda no micro em outra oportunidade mas
uma boa o!/ada no trec/o abai-o d1 a compreens$o necess1ria para estabe!ecer o
O""set necess1rio para configurar os .ata Points tanto para as entradas digitais
ana!3gicas bem como as rotinas necess1rias para escre"er nos pinos do Atmega328P e
atuar cargas.) programa comp!eto pode ser bai-ado na +nternet D pes'uise no goog!e
Emodbus s!a"e arduinoF e encontrar1 faci!mente o ar'ui"o .pde 'ue imp!ementa o
protoco!o modbus. ) trec/o de c3digo abai-o cont5m a parte rea!mente importante com
as modifica#:es necess1rias para traba!/a com o Atmega328P.
enum G
%BHSIAVE J * KL modbus s!a"e id LK
MN
KL s!a"e registers e-amp!e LK
enum G
%BHREOA
%BHREO*
%BHREO2
%BHREO3
%BHREO6
%BHREOC
www.mundoarduino.com
%BHREO7
%BHREOP
%BHREO8
%BHREOQ
%BHREO*A
%BHREO**
%BHREO*2
%BHREO*3
%BHREOS

KL tota! number of registers on s!a"e LK
MN
int regsR%BHREOSSN KL t/is is t/e s!a"eTs modbus data map LK
"oid setup>?
G

KL %odbus setup e-amp!e t/e master must use t/e same ()% parameters LK
KL **C2AA bps 8,* t<o-de"ice net<orU LK
configureHmbHs!a"e>*Q2AA TnT A?N
boo!ean c/a"eAJ*3N
boo!ean c/a"e*J*2N
boo!ean c/a"e2J**N
boo!ean c/a"e3J*AN

KKboo!ean re!eAJQN
KKboo!ean re!e*J8N
KKboo!ean re!e2JPN
KK boo!ean re!e3J7N


pin%ode>*3+,PU8?N
pin%ode>*2+,PU8?N
pin%ode>**+,PU8?N
pin%ode>*A+,PU8?N

pin%ode>Q)U8PU8?N
www.mundoarduino.com
pin%ode>8)U8PU8?N
pin%ode>P)U8PU8?N
pin%ode>7)U8PU8?N


M
"oid !oop>?
G
KL 8/is is a!! for t/e %odbus s!a"e LK
updateHmbHs!a"e>%BHSIAVE regs %BHREOS?N

regsR%BHREOASJana!ogRead>A?N
regsR%BHREO*SJana!ogRead>*?N
regsR%BHREO2SJana!ogRead>2?N
regsR%BHREO3SJana!ogRead>3?N
regsR%BHREO6SJana!ogRead>6?N
regsR%BHREOCSJana!ogRead>C?N
regsR%BHREO7SJdigita!Read>*3?N
regsR%BHREOPSJdigita!Read>*2?N
regsR%BHREO8SJdigita!Read>**?N
regsR%BHREOQSJdigita!Read>*A?N
s<itc/ > regsR%BHREO*AS? G
case *;

digita!Vrite>QW+OW?N
breaUN
case A;
digita!Vrite>QI)V?N
breaUN
defau!t;
digita!Vrite>QI)V?N
M



s<itc/ > regsR%BHREO**S? G
case *;
www.mundoarduino.com

digita!Vrite>8W+OW?N
breaUN
case A;
digita!Vrite>8I)V?N
breaUN
defau!t;
digita!Vrite>8I)V?N
M




s<itc/ > regsR%BHREO*2S? G
case *;

digita!Vrite>PW+OW?N
breaUN
case A;
digita!Vrite>PI)V?N
breaUN
defau!t;
digita!Vrite>PI)V?N
M




s<itc/ > regsR%BHREO*3S? G
case *;

digita!Vrite>7W+OW?N
breaUN
case A;
digita!Vrite>7I)V?N
breaUN
defau!t;
digita!Vrite>7I)V?N
M
www.mundoarduino.com
Ve4a o e-emp!o de configura#$o de um .ata Point para !5 uma c/a"e com o Atmega328P.
E abai-o a configura#$o de um .ata Point para escre"er no Atmega328P um "a!or bin1rio
e assim poder comandar cargas.
www.mundoarduino.com
) prob!ema ent$o se resume em ter o cuidado de atribuir o n@mero do escra"o
)ffset tipo de dados ade'uados corretos aos .ata Points e para fazer tudo isso basta
obser"ar bem o trec/o do c3digo postado nesse tutoria!. )b"iamente "oc5 tamb&m & !i"re
para bai-ar da internet a bib!ioteca %odbus para Arduino e a!ter1-!a para atender suas
necessidades.
www.mundoarduino.com
Por fim c!icando em Watch list "oc5 poder1 acrescentar todos os .ata Points para
"isua!izar aos "a!ores ne!es armazenados bem como a!terar o n="e! !3gico dos pinos
configurados como sa=da e acionar as cargas a e!es !igadas. Ve4a a figura abai-o;
www.mundoarduino.com
www.mundoarduino.com

Você também pode gostar