Relatorio Modbus - PAA

Embed Size (px)

DESCRIPTION

Este documento contém informações básicas sobre: comunicação de dados em série; acionadores de linha RS-322 e RS-485; como a transmissão de dados em modo diferencial melhora a imunidade a ruídos; topologia de redes; protocolo ModBus (básico); Configuração do Software Supervisório ScadaBr em conjunto com Arduino.

Text of Relatorio Modbus - PAA

Comunicao de Dados em Srie ou Serial - Notas de Aula1Autor: Manoel Gomes de Andrade e-mail: [email protected] ; Licena: Creative Commons

A comunicao de dados seriais assncrona (sem linha de Clock) aquela pela qual os bits de um dado (ex.: dado ou byte = 8 bits) so disponibilizados no terminal TxD (do microcontrolador) sequncialmente ou em srie, por um intervalo de tempo equivalente a 1/ ("baud rate") . O termo "baud rate" comumente traduzido por "Taxa de Transmisso". Um valor conservador para "baud rate" 9600 bps ("bits per seconds"), nesse caso o tempo de cada bit na figura abaixo seria de , aproximadamente 100 us (microsegundos).

https://wcscnet.com/wp-content/uploads/2014/11/Figure11.gif

Na Figura acima podemos notar o uso dos termos MARCA e ESPAO ("Mark" e "Space") para os nveis lgicos '1' e 0', respectivamente e 3 (trs) Campos distintos :

"Start Bit" : responsvel por "acordar/despertar" o dispositivo receptor alertando-o que uma transmisso est a caminho;

"Data Bits" : So os 8 (oito) bits do dado sendo transmitido. A transimisso comea pelo bit 0 (o bit menos significativo). Podendo ser 7 (sete) o nmero de bits mas, em desuso ;

["Parity Bit"] ; Esse campo no est representado na figura. Seria mais uma seo com pontilhados e o nmero 8 inscrito nela. Serviria para verificao da integridade dos bits anteriormente transmitidos (bits 0 a 7). Pode-se convencionar Paridade Par ou mpar ("Even" ou "Odd"). Se o convencionado fosse Paridade Par e o nmero de bits iguais a '1' no campo "Data bits" fosse 4 (par) o bit de paridade transmitido seria de nvel lgico '1', pois quatro um nmero par. A verificao da integridade consiste em contar o nmero de bits recebidos iguais a um ( se um nmero para ou mpar) e comparar com o "Parity Bits" computado pelo transimissor. Essa tcnica no cem por cento eficaz mas, agrega confiabilidade s comunicaes de dados. Para maiores explicaes consulte outras referncias [Parity].

"Stop Bit(s)": O bit de parada, isto , um bit de separao entre um dado transmitido e outro. Pode ser entendido como um tempo que dado ao receptor para armazenar a informao recm recebida. Pode se no total de 1 1,5 ou 2 "Stop Bits" (1,5 : [1/(baud rate)] * 1,5 ) .

A Figura abaixo demonstra como dois "Data Bits" so transmitidos sequencialmente

http://i.stack.imgur.com/FYkfN.png

Um Microcontrolador que contenha uma U(S)ART ["Universal (Syncrhonous) Asynchronous Receiver Transmitter"], ou um hardware especfico que seja capaz de emitir um "Start Bit", os oito bits de "Data Bits", um "Stop Bit" para cada Dado, o faz em nveis lgicos '0' e '1' ou em nveis digitais TTL/CMOS, conforme a tecnologia empregada.

Para a comunicao serial assncrona com um Computador Pessoal (originalmente denominado PC) via interface RS-232 necessrio a utilizao de "Line Drivers" e "Line Receivers" ou Circuitos Integrados (C.I.) capazes de converter o sinal digital em tenses especificadas pelo pelo padro RS-232. O padro RS-232 foi originalmente criado para comicao com Teleimpressoras e Modens.

Oportunamente, vale dizer que esse padro serve somente para comunicaes ponto-a-ponto ("peer-to-peer") no admitindo assim, nenhuma configurao de conexo em redes.Um Circuito Integrado (C.I.) clssico que contm "Line Drivers" e "Line Receivers" para RS-232 o componente MAX-232 da empresa Maxim. Na Figura abaixo um circuito tpico usando esse C.I. apresenta em seu lado esquerdo o conector "COM DB9" de um PC, o "MAX232" ao centro e do lado direito onde se l "TTL CMOS" o Microcontrolador

http://www.aquaphoenix.com/hardware/ledlamp/reference/max232_diagram.gif

O papel do do MAX232 o de converter os sinais MARCA para uma tenso negativa (-V) e ESPAO para uma tenso positiva (+V). Observe na Figura abaixo que o ESPAO de "Start Bit" foi convertido para uma tenso +V (no especificada mas, entre +3V e +15V) e que o "b0" (bit zero do "Data Bits") de nvel lgico '1' foi convertido para MARCA para uma tenso -V (entre -3V e -15V). Para deixar clara a utilizao do MAX232, o Microcontrolador tem seu pino TxD conectado ao pino 11 do MAX232 (entrada digital TTL/CMOS) e no pino 14 esses nveis lgicos so convertidos para as tenses positiva e negativa do padro RS-232, na outra extremidade de um cabo fica o conector DB-9 o qual conectado em um PC. Por outro lado, o pino 12 do MAX232 tras o sinal serial recebido e convertido para os nvies digitais TTL/CMOS.

http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Rs232_oscilloscope_trace.svg/722px-Rs232_oscilloscope_trace.svg.png

Nos Microcomputadores Arduino pode-se usar a Classe "Serial" e seus mtodos (funes membro da Classe) para inicializar, verificar, receber e transmitir "Data Bits[Begin]

1Serial.begin(speed, config);Inicializar USART

2Serial.begin(speed);Inicializar USART com SERIAL_8N1

3Serial.available();L o quantidade de bytes recebidos

4int Serial.read();L o prximo byte do buffer o -1 se buffer vazio

5Serial.write(val);Envia um byte ("val") pela interface serial

6Serial.write(str);Envia uma "string" ("str") pela interface serial

7Serial.write(buf, len);Envia a quantidade ("len") bytes contidos em um vetor ("buf")

8Serial.flush();Espera at que a quantidade de bytes no buffer sejam transmitidos

9Serial.print(val);"val" pode ser um nmero decimal, um caracter ou uma "string"

10Serial.print(val, format);"format" por indicar a base do parmetro "val" por: BIN, OCT, HEX ou DEC; ou no. casas decimais de "val".

As Taxas de Transmisso disponveis nos Microcomputadores Arduino especificadas pelo parmetro "speed" so (em bps): 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 e 115200 [Begin].

O parmetro opcional "config" pode definir por meio de constantes definidas no arquivo "HardwareSerial.h" pode ser um dos seguintes valores pr definidos:

1#define SERIAL_8N1 0x06E8 bits, No Parity, 1 Stop Bit

2#define SERIAL_8E1 0x268 bits, Even Parity, 1 Stop Bit

3#define SERIAL_8O1 0x368 bits, Odd Parity, 1 Stop Bit

A seguir demonstrado um exemplo extraido das referncias [Exemplo Serial] do Microcomputador Arduino. Nesse programa a interface serial programada para operar segundo a taxa de transmisso de 9600 bps com 8 bits de dados, sem o uso do bit de paridade ("No Parity") e um "Stop Bit".

1234567891011121314151617int incomingByte = 0; // varivel para byte que chega pela serial

void setup() {Serial.begin(9600);// inicializa porta serial //com baud rate 9600 bps default:SERIAL_8N1}void loop() {

// transmitir dados somente aps receber dadosif (Serial.available() > 0) {// l byte que chegouincomingByte = Serial.read();

// Mostra o que recebeuSerial.print("I received: ");Serial.println(incomingByte, DEC);}}

A forma de se testar esse programa pelo uso do "serial monitor" identificvel pelo smbolo a lente de aumento. Abaixo esto os "prints" dos valores transmitidos e dos recebidos.

b) valores digitados para transmisso:123[Enter]c) valores recebidos anexado a uma "string" e convertidos para decimal

Outro exemplo mostrado a seguir no qual o valor da tenso no terminal central de um potencimetro de lida pela funo "analogReg(0)" . O zero entre parnteses significa que o conector A0 est sendo usado.

123456789101112131415161718192021int analogValue = 0; // variable to hold the analog value

void setup() {// open the serial port at 9600 bps:Serial.begin(9600);}

void loop() {// read the analog input on pin 0:analogValue = analogRead(0);

// print it out in many formats:Serial.println(analogValue); // print as an ASCII-encoded decimalSerial.println(analogValue, DEC); // print as an ASCII-encoded decimalSerial.println(analogValue, HEX); // print as an ASCII-encoded hexadecimalSerial.println(analogValue, OCT); // print as an ASCII-encoded octalSerial.println(analogValue, BIN); // print as an ASCII-encoded binary

// delay 1000 milliseconds before the next reading:delay(1000);}

O esquema eletrnico relativo a programa dado abaixo:

As conexes implementados no padro RS-232 servem apenas para comunicao ponto-a-ponto e apresentam baixa imunidade a interferncia eletromagntica (rudo).

A forma de se aumentar ou a imunidade devido interferencias ou ruidos pelo emprego de amplificadores operacionais.

Considere que pela variao do campo magntico uma corrente seja induzida nas linhas da rede de comunicao. Essa corrente ao ser submetida impedncia da linha (componentes R, L e C : resistiva, indutiva e capacitiva) produz um rudo de tenso que adicionado ao sinal (informao) que trafegava pela rede.

Na Figura abaixo ilustrado este fenmeno. Note que o dispositivo transimissor ("Sender") deseja enviar um pulso de nvel lgico '1'. O transmissor usa um "Line Driver" diferencial o que possibilita o envio do sinal com polaridade negativa e positiva. A linha que conduz o sinal com polaridade negativa ser chamada de LB e a outra de LA. O rudo ("Noise") induzido igualmente nas duas linhas. Na outra extremidade, no receptor ("Receiver"), h um "Line Receiver" com entradas diferenciais, isto , amplificador operacional. Considerando o sinal eltrico na linha B como sendo -VS, o da linha A +VS e a tenso de rudo VN , as equaes abaixo demonstram a ao de cancelamento do rudo VN e a consequente restaurao do sinal fazendo VR = 2.VS.

http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/DiffSignaling.png/435px-DiffSignaling.png

Topologias de Redes

Redes de computadores podem ser implementadas em diversas topologias ou configuraes[Topologias de Rede], tais como: Anel , Estrela , Malha, rvore ou Barramento ("Bus" ou "Multi-point") . Uma das topologias mais comuns [Topologia RS485] para a implementao de uma rede RS-485 do tipo Barramento. Esse tipo de rede requer "Line Drivers" e "Line Receivers" apropropriados, tais como os da linha MAX485, cujas principais caractersticas so: possibilidade de operao at 2,5 Mbps ("Mega bits per second") e conexo de at 32 receptores na rede.

http://pt.wikipedia.org/wiki/Topologia_de_rede#/media/File:BusNetwork.svg

A topologia "Bus", Barramento ou Multiponto empregada nas redes RS-485.

http://www.lammertbies.nl/picture/rs485_network_topology.png

Na Figura acima, cada tem com a denominao "Node" corresponde a um Ponto ou N da rede. Como exemplo poderia-se considerar que o elemento "Node 1" fosse o Mestre ("Master") e todos os demais "Nodes" fossem Escravos ("Slaves"). Nesse exemplo o dispositivo Mestre deseja realizar uma comunicao com um dos Ns, assim ele deve tramitir um pacote ("packet") de dados ou um telegrama ("telegram") endereado ao N com o qual deseja-se comunicar-se. Dessa forma apenas o "Line Driver" do Mestre (o tringulo com a letra "S" nele inscrito) estaria apto ou habilitado ("enable") a transmitir; todos os outros "Line Drives" estariam desabilitados ("disable"). Por conseguinte, todos os "Line Receivers" dos Escravos estariam habilitados a receber dados exceto o do Mestre. Numa segunda etapa o Escravo endereado enviaria um telegrama ao Mestre com a informao requisitada.

Mais especificamente, pelo emprego do C.I MAX485 as entradas de controle para habilitar/desabilitar a transmisso so chamadas de DE ("Driver Output Enable") e para habilitar/desabilitar a recepo, /RE ("Receiver Output Enable") . Uma opo usada na prtica a de se deixar todos os dispositiovs (Mestre e Escravos) habilitados a receber dados (/DE = '0') e controlar os DE individualmente, estando apenas um habilitado por vez.

Para concluir as explicao a respeito do enlace fsico, considere o grfico abaixo no qual so representados os sinais u+ (VA) e u- (VB) . A indentificao do nvel lgico depende de um comparador de tenso alm do amplificador diferial. Para o padro RS-485

VR = '1' : VA - VB < - 0.2VVR = '0' : VA - VB > +0.2V

Mas para se aplicar essas regras deve-se estabelecer como os nveis '0' e '1' so convertidos para a tenso VS.

bit '0' : VA = -VS/2 e VB = +VS/2

assim: VA - VB =

bit '1' : VA = +VS/2 e VB = -VS/2

http://www.chipkin.com/articles/wp-content/uploads/2007/04/rs-485_waveform.png

Protocolo Modbus

O protocolo Modbus foi desenvolvido pela empresa Modicom em 1979 para uso particular mas posteriormente tornou-se um protocolo aberto e passou a ser usado amplamente em equipamentos que se comunicam em rede, principalmente para Redes Industriais de Computadores.

O protocolo Modbus opera sob uma rede de topologia de barramento onde h apenas um equipamento que atua como Mestre ("Master") e os demais como Escravos ("Slaves"). Todas a comunicaes se originam no Mestre, cabendo aos Escravos decodificar ("compreeder") os comandos nelas embutidas e responder ou realizar algum trabalho, quando for o caso.

O uso do termo "protocolo" implica no uso de regras e/ou procedimentos, tais quais os que so aplicados em cerimoniais (ex.: colao de grau, tribunal do juri, etc.) onde h uma ordem cronolgica para o desenvolvimento das aes (abertura; composio da mesa; discursos; etc.) ou mesmo no que acontece quando se atende ao telefone em uma empresa em que o funcionrio diz seu nome, departamento, faz uma saudao e se coloca a disposio. nesse sentido que usado o termo "protocolo" no que diz respeito a uma rede de computadores industriais. A ttulo de ilustrao, considere a Figura a seguir na qual o "Client" faz um pedido ao "Server". O "Server" realiza alguma operao interna e fornece a informao ao "Client". Que fique claro, o dispositivo que inicia a comunicao ("Client") o Mestre !

"- O Cliente tem toda a razo, dizem os bons comerciantes..."

O meio fsico no qual o protocolo Modbus deve ser implementado a rede RS-485 para a topologia de barramento. Pode-se usar uma rede Ethernet, cuja topologia em rvore, para a implementao de Modbus/TCP. Excepcionalmente, pode-se implementar uma rede ponto-a-ponto com apenas um Mestre e um Escravo. Neste caso uma rede RS-232 o bastante (ou USB no caso de um Computador Pessoal e um Arduino ). Na Figura abaixo pode-se verificar as diversidade de topologias que se aplicam ao protocolo Modbus.

O protocolo Modbus pode operar em dois modos: 1- ASCII ("American Standard Code for Information Interchange"); 2- RTU ("Remote Terminal Unit").

No modo ASCII os bytes so codificados usando-se sua respectiva tabela. Ex: 04h : 30h 34h Assim cada byte convertido em dois bytes (caracteres ASCII). Torna a comunicao um tanto quanto lenta. No modo RTU os bytes no sofrem modificao.

Estrutura do Protocolo Modbus/RTU

Modelo de Dados

Trata-se de uma abstrao ou de uma forma de se pensar nos dados ou informao. Uma maneira simples de se explicar uma abstrao de dados pode ser feita se nos reportar-nos aos "malotes" usados nas empresas. O "malote" fisicamente pode ser uma bolsa feita de tecido resistente como lona. Nela so colocados documentos, dinheiro e outros objetos. O "malote" vai da matriz para a filial transportando levando documentos e objetos e retorna com tantos outros ou mesmo vazio. O importante que esse meio ou canal nunca seja interrompido.

O protocolo Modbus tem seus "malotes", um para cada finalidade. Quando se deseja acessar tal finalidade usa-se o "malote" tal, tanto para enviar quanto para receber. Mais especificamente o protocolo Modbus usa o modelo de dados baseado em tabelas que do acesso a "Discrete Inputs", "Coils", "Input Registers" e "Holding Registers", respecitivamente: Entradas Digitais, Bobinas/contatores/reles, Registradores de Entradas e Registradores de Manuteno ou de uso gearal. Note na Figura abaixo o tipo do objeto ("Object type") e o tipo de ao que se pode realizar com ele ("Type of").

As comunicaes acontecem pela troca de Telegramas ("Telegrans"). Os intervalos de Pausa ("Pause") ou Silncia ("Silent") devem ser equivalentes ao tempo de 3,5 caracteres, ou o tempo que se levaria para transmitir 3 bytes e meio a uma dada taxa de comunicao ("baud rate").

A biblioteca Modbus ("SimpleModbusSlaveV10") para Arduino "simple-modbus " pode ser obtida on-line [1]. Esse pacote oferece duas bibliotecas para que se possa implementar o Protocolo Modicom Modbus RTU com Microcomputadores Arduino podendo ele desempenhar o papel de Mestre ("Master") ou de Escravo ("Slave") em uma rede. Essas bibliotecas so SimpleModbusMaster e SimpleModbusSlaver, respectivamente.

Na biblioteca SimpleModbusSlaveV10 so implementadas as funes 3 e 15

"SimpleModbus is a collection of Arduino libraries that enables you to communicate serially using the Modicon Modbus RTU protocol. Both SimpleModbusMaster & SimpleModbusSlave implements function 3 and 16 in addition SimpleModbusMaster implements function 1, 2, 4 and 15. Broadcasting is supported on both libraries for function 16 and 15 on the master. Both libraries share the exact same API. There are only two required functions modbus_update() and modbus_configure(). Both libraries have been tested extensively on commercial equipment like LS Industrial PLC's, Schneider equipment, Ascon equipment, Siemens PLC's, Selco alarm panels and various commercial panel meters and indicators. In addition to this SimpleModbusSlave has also been tested on LS InfoU SCADA system, Mango M2M SCADA, FreeSCADA 2, Modbus Poll, the free QModbus slave tester and the very handy modbus slave tester,Mtester "

123456789101112131415161718192021#define LED 9

// registers of your slave enum { ADC_VAL, // The first register starts at address 0PWM_VAL, HOLDING_REGS_SIZE // leave this one};

// function 3 and 16 register arrayunsigned int holdingRegs[HOLDING_REGS_SIZE];

void setup(){

modbus_configure(&Serial,\\ ponteiro para Classe Serial9600, \\ baud rateSERIAL_8N2,\\ 8 bit sem paridade 2 stop bit1, \\ Endereo do Escravo: slaveID2, \\ Pino para: PinTxEnablePinHOLDING_REGS_SIZE,\\ quantidade registrosholdingRegs \\ endereo do buffer reg.);

modbus_update_comms(9600, SERIAL_8N2, 1);

pinMode(LED, OUTPUT);}

void loop(){modbus_update();

// update data to be read by the master to adjust the PWMholdingRegs[ADC_VAL] = analogRead(A0);

// constrain adc value from the arduino master to 255analogWrite(LED, holdingRegs[PWM_VAL]>>2);

}

Supervisrio Control And Data Acquisition - SCADA

Para a implementao dos testes utilizando o protocolo Modbus ser usado o Programa ScadaBr [ScadaBr] por se tratar de uma implementao publicada sob licena OpenSource.

Logo aps sua instalao (requer Java Runtime Environment JRE 6 ) e ser lanado por meio de um "Web Browser" surge a tela de login.Observe o endereo, o nome do usurio e a senha .

http://localhost:8080/ScadaBR/login.htm

User id: adminPassword: admin

Logo aps o login surge a tela inicial a partir da qual, pelo icone "Data Sources" pode-se escolher qual o protocolo de comunicao que ser usado

A escolha pelo "Modbus serial", que deve ser adicionado clicando-se no icone destacado na Figura abaixo.

Nesta etapa uma conjuto e configuraes importantes so feitas.

Dentre elas destacam-se:

Esta seo moutrou o "Resultado: 1023" relativo leitura do holding register ao qual est associado o pontencimentro cuja leitura fora feita pela funo ...

Nesta seo so mostradas duas caixas. Na caixa da esquerda o Scadabr informa ter encontrado o "n 1" e na da direita mostrado o valor "03ff", isto , o valor 1023 lido do potencimetro/trim-pot.

Deve-se dar um Nome, tal como Arduino; deve-se clicar no "disquete" para salvar as configuraes.

Os prximos passos devem ser no sentido de se adiciona "data points" . Para isso dev-se clicar no bloco tipo "lego".

Todos os "data points" inseridos sero do tipo "holding register" visto que a biblioteca xxxx s implementa um subconjunto do protocolo modbus.Nas figuras a seguir so mostradas as inseres dos "data points" ADC_VAL e PWM_VAL (esses so os mesmos nomes que aparecem nas linhas nn e nn do programa exemplo. Isso no obrigatrio mas sim o nmero do ndice que os identificam). Note que no "data point" ADC_VAL foi desmarcada a opo "configurvel" por se tratar de uma entrada ou um "data point" de entrada e que para PWM_VAL foi marcado com "configurvel" pois por meio do ScadaBr pode-se enviar um valor para configurar o a largura de pulso do PWM do Microcontrolador no Arduino.

Ao final do processo de insereo de "data points" deve-se habilit-los clicando-se no icone do "cilindro"

Assim a cor do "lego" indicador de "Status" muda para "verde".

A fim de se verificar a comunicao entre ScadaBr e Arduino pode-se clicar no icone do "olho" cujo funo "Watch data point" ( assistir ou inspecionar o "data point") e pode-se interagir, via protocolo modbus, lendo o valor de ADC_VAL e escrevendo em PWM_VAL. Deve-se lembrar que ADC_VAL reflete a leitura analgica e um pontencimetro e que PWM_VAL varia a intensidade do brilho em um Led. O pequeno smbolo da "chave de boca" prximo a PWM_VAL indica que o usurio do ScadaBr pode alterar seu valor.

Os prximos passos devem ser dados no sentido de se definir a interface grfica do supervisrio (lembre-se "scada" = "supervisory control and data analys" / controle supervisrio e analise de dados).

Referncias

[1] https://code.google.com/p/simple-modbus/[Parity] http://en.wikipedia.org/wiki/Parity_bit[Begin] http://www.arduino.cc/en/Serial/Begin[] http://en.wikipedia.org/wiki/Serial_porthttp://en.wikipedia.org/wiki/Asynchronous_serial_communicationhttp://en.wikipedia.org/wiki/RS-232[] RS-485 LINE DRIVER] http://cds.linear.com/image/3111.png[Topologia RS485] http://www.lammertbies.nl/comm/info/RS-485.html[Topologia de Rede] http://pt.wikipedia.org/wiki/Topologia_de_rede[] http://www.siongboon.com/projects/2006-03-06_serial_communication/[ScadaBr] http://www.scadabr.com.br/