PMR2300_Comucomunica§£o Serial

  • View
    212

  • Download
    0

Embed Size (px)

DESCRIPTION

Como fazer comunicação através da porta serial

Text of PMR2300_Comucomunica§£o Serial

  • 1Comunicao Serial Java Configurao da Porta Serial

    Abre porta serial:SerialPort sp;

    String PortID = com1;

    String AppName = Aplicacao Jtest;

    int timeOut = 1000;

    sp=(SerialPort)CommPortIdentifier.getPortIdentifier(PortID).open(AppName,timeOut);

    Configura Porta Serial:sp.setSerialPortParams(115200,

    SerialPort.DATABITS_8,

    SerialPort.STOPBITS_1,

    SerialPort.PARITY_NONE);sp.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

    Comunicao Serial Java Enviando Dados

    Obtem stream de sada de uma porta serial:OutputStream os = sp.getOutputStream();

    Prepara dados para envio:Byte[] arranjoBytes = new Byte[20];arranjoBytes[0]= 0x0f;arranjoBytes[1]= 0xef; ....arranjoBytes[19]= 0x00;

    Envia dados:os.write(arranjoBytes,0,arranjoBytes.length);os.flush();os.close();

  • 2Comunicao Serial Java Recebendo Dados

    Para receber dados atravs de uma porta serial devemos tratar eventos da porta serial.

    Para tanto a nossa classe deve implementar a interface :SerialPortEventListener

    public class JTest implements SerialPortEventListener {....

    } Devemos tambm registrar a porta serial para que seus eventos sejam

    monitorados:sp.addEventListener(this);

    Devemos habilitar a notificao quando h dados no buffer de receposp.notifyOnDataAvailable(true);

    Comunicao Serial Java Recebendo Dados

    Na ocorrncia de um evento da porta serial, a funo de callback serialEvent(SerialPortEvent spe) chamada.

    O cdigo da tarefa que trata os dados recebidos devem ser inseridos nesta funo.

    public void serialEvent(SerialPortEvent serialPortEvent) {...

    }

  • 3Comunicao Serial Java o Mtodo serialEvent

    Obter a stream de entrada da porta serial:

    InputStream is = sp.getInputStream();

    Procurar pelo evento de chegada de dados:

    switch(serialPortEvent.getEventType()){case SerialPortEvent.DATA_AVAILABLE:

    System.out.println("PL: DataAvailable");//recebe dadosbreak;

    default:}

    Comunicao Serial Java o Mtodo serialEvent

    Recebe dados:

    Byte [] readBuffer = new Byte[300];int numBytes;if(is.available()>0)

    numBytes = is.read(readBuffer);System.out.println("Bytes Received:" + numBytes);is.close();

  • 4Comunicao Serial Java Encerrando educadamente

    Ao terminar o uso de uma porta de comunicao devemos encerrar sua utilizao removendo o listener e fechando a porta.

    try{sp.removeEventListener();sp.close();

    }catch (Exception e){}

    RS232 Apenas a camada fsica...

    Como podemos observar, o padro RS232 define apenas a camada fsica do modelo OSI:

    Sinalizao (sinal de tenso)

    Conexo fsica (cabos e conectores)

    Codificao para sincronizao (bits adicionais)

    Handshake Baudrate

  • 5MODBUS

    Protocolo de Aplicao (camada 7 do modelo OSI) Criado em 1979 pela Modicon. Master-slave/Client-server Padro aberto largamente difundido (protocolo muito simples)

    >7Milhes de dispositivos ModBus.

    Aplicao: Monitorao e programao de dispositivos. Comunicao entre dispositivos inteligentes, sensores e atuadores. Monitorao de equipamentos de campo por PCs e HMIs.

    MODBUS

    MODBUS um protocolo posicionado na camada 7 do modelo OSI

    MODBUS um protocolo de requisio/resposta e oferece servios especificados por function codes.

    Pode ser utilizado com: TCP/IP em Ethernet. Transmisses seriais assncronas:

    cabos : EIA/TIA-232-E, EIA- 422, EIA/TIA-485-A; Fibra optica RF

  • 6MODBUS Mensagem

    Function Code: apenas um byte (1-255)Data: tamanho varivelAdditional address: server address (1 byte) (RS232)Error check: 2 bytes (Cyclic Redundancy Check)

    MODBUS Troca de mensagens bem sucedida

  • 7MODBUS Troca de mensagens com erro

    MODBUS Representao de dados - BigEndian

    Dados de 16 bits so compostos por 2 bytes, sendo que o mais significativo sempre enviado antes (BigEndian):

    Primeiro enviamos o primeiro byte: 0xFE Depois enviamos o segundo byte: 0xAB

    0xFEAB16 bitsValorRegistrador

  • 8MODBUS Modelo de Dados

    MODBUS Dispositivo ModBus Tpico

  • 9MODBUS Funes bsicas

    MODBUS Funes bsicas Read Coils (0x01)

  • 10

    MODBUS Funes bsicas Read Discrete Inputs (0x02)

    MODBUS Funes bsicas Read Holding Registers (0x03)

  • 11

    MODBUS Funes bsicas Read Input Register (0x04)

    MODBUS Funes bsicas Write Single Coil (0x05)

  • 12

    MODBUS Funes bsicas Write Single Register (0x06)

    MODBUS RTU

    Utiliza RS232/485 (camada fsica) ModBus (camada de aplicao) Define a camada de enlace (camada 2 do modelo OSI):

    Endereamento Verificao de erros

    ModBusModBus-RTU

  • 13

    MODBUS RTU RS232

    MODBUS RTU CRC

    Dispositivo que envia a mensagem gera e envia 2 bytes de CRC. Dispositivo que recebe a mensagem, gera 2 bytes de CRC a partir da

    mensagem recebida e verifica se igual aos bytes de CRC enviados. O CRC16 o resto da diviso dos bytes da mensagem por um polinmio

    de ordem 16, logo, o resultado deve ter ordem no mximo 15, ou seja, 16 elementos.

    O polinmio utilizado : 1 + X2 + X15 + X16

    Bytes que entram no clculo do CRC

  • 14

    MODBUS RTU Gerando CRC161. Carrega em um registrador de 16 bits o valor 0xFFFF2. Realiza um XOR com o primeiro byte da mensagem e guarda no registrador3. Faz um shift de um bit para a direita, preenchendo o espao aberto com 0.4. Se o bit descartado for 0 volta para o passo 3, seno:

    Realiza um XOR do registrador de CRC com o valor 0xA0015. Repete passos 3 e 4 at que 8 deslocamentos tenham sido realizados6. Repete passos 2 at 5 para o prximo byte da mensagem. Continuar at que

    todos os bytes da mensagem sejam processados.7. O contedo final do registrador o valor do CRC

    MODBUS RTU Gerando CRC (0x02 0x07)

  • 15

    MODBUS RTU Gerando CRC (0x02 0x07)