quarta-feira, 16 de outubro de 2019

Simulink para C -- Parte 2

Untitled
O mesmo procedimento tem de ser realizado para a saída e também para o bloco de ganho do sistema, de forma a ter-se um casamento de informações no âmbito de variáveis
  • Após essa preparação inicial, precisa-se preparar a lógica do sistema de embarque de forma que o código gerado em C/C++ pelo Simulink seja efetivamente disponibilizado na forma própria do embarque. Para tal, clique no item Model Configuration Parameter
  • Será aberta a janela de configurações, conforme Figura abaixo:
  • Na aba Code Generator > Target Selection > Browser, selecione a opção ert.tlc – Embedeed Coder . A linguagem utilizada para o embarque será o C.
  • A tela de configuração se alterará de maneira sutil de forma que fique conforme Figura abaixo:
  • Clique em Set objectives… na aba Code Generation Advisor, conforme Figura abaixo:
  • Adicione o item Traceability e clique OK.
  • Na aba Code Generator > Report selecione os itens conforme Figura abaixo. Aperte OK.
  • No bloco Simulink, clique o com botão direito sobre o bloco G e em seguida clique em Build This Subsystem, conforme Figura abaixo.
  • Aparecerá a seguinte tela. Clique em Build.
  • Após a geração de código pelo Simulink/Matlab, algumas pastas e arquivos de interesse aparecerão na pasta onde se encontra o arquivo base Simulink.
  • Os arquivos os quais serão utilizados no programa em C/C++ são aqueles do tipo .h e .c, selecionados na pasta Arquivos de Interesse. Nela é possível perceber que o arquivo ert_main.c é o arquivo principal o qual deverá chamar as demais rotinas.
  • A partir de agora será chaveado para o ambiente Eclipse, de forma que se consiga rodar o programa recém-criado. Rodo ele como se administrador fosse.
  • Já no ambiente Eclipse, clica-se em File > New > C++ Project
  • Em seguida, dê um nome para o projeto (no caso, será chamado de Main) para um Hello World C++ Project e o compilador de interesse (no caso, o MinGW GCC). Em seguida, clique em Finish.
  • A IDE Eclipse criará a seguinte pasta Includes e a pasta src. Em princípio, não se mexe na pasta Includes, sendo necessário que toda e qualquer modificação será realizada dentro da pasta src.
  • Clicando no arquivo Main.cpp, a vista do que se tem é o respectivo programa. O mesmo não será utilizado.
  • Copia-se os arquivos da pasta Arquivos de Interesse (passo 23) para a pasta src no ambiente Eclipse, resultando na seguinte configuração:
  • Copia-se todo o conteúdo em C do arquivo ert_main.c para o arquivo Main.cpp (deletando, obviamente todo o Hello World!!! do Main.cpp).
  • Como pretende-se rodar um programa em C++ utilizando-se de bibliotecas criadas para C, é importante que se ajuste o programa Main.cpp para levar em consideração todas as bibliotecas herdadas do C. Esse procedimento é detalhado na Figura abaixo, por meio de chamadas do tipo extern para as bibliotecas.
  • Olhando atentamente a função main do programa (Figura abaixo), percebe-se a existência 5 pontos principais:
  • G_initialize()
  • rt_OneStep() – a qual está comentada.
  • printf
  • while
  • G_terminate()
O G_initilize() é imprescindível que esteja presente para a inicialização das variáveis e o bom funcionamento do programa como um todo. A função rt_OneStep() é o coração do programa. Temos de chamar ela (isso ficará para um próximo passo). As funções printf e while não são importantes para este programa e a função G_terminate() funciona como um destrutor (então, é melhor deixar).
  1. Para rodar o programa do jeito que ele está, realize a seguinte sequência:
  • Clique em Build All na aba Project
Caso não ocorra nenhum problema, aparecerá algo da seguinte forma no Console.
  • Após criar o seu projeto, clique em Run
  • O resultado do programa rodando está na Figura abaixo, que nada mais é do que o printf() em ação.
  1. Para roda o programa recém-criado no ambiente Simulink no ambiente Eclipse, realizar-se-á o seguinte:
  • Deletar a função printf() original do arquivo herdado do Simulink;
  • Deletar a função while() original do arquivo herdado do Simulink;
  • Setar valores para as variáveis de entrada;
  • Chamar a função rt_OneStep();
  • Coletar o valor da variável de saída; e
  • imprimir o resultado na tela.
  • Após rodar o programa, o resultado obtido encontra-se na Figura abaixo.

Nenhum comentário:

Postar um comentário