Pergunta

Aqui está qual é o objetivo ideal.

Temos um modelo simulink e enquanto ele está em execução queremos que todos os valores dos resultados sejam enviados para nosso aplicativo vb.net.

Acho que encontrei algumas maneiras, mas antes de mergulhar gostaria de algumas sugestões.Eu não usei matlab ou simulink no passado, o que torna isso mais difícil do que é.

Existe um objeto COM para matlab, mas que não permite acesso em tempo real às variáveis ​​​​enquanto o simulink está em execução.O Simulink apenas despeja seus dados no matlab depois de concluído.

Opção 1:Ligar de volta?Estive lendo e parece que consigo adicionar um retorno de chamada aos blocos para que os valores sejam enviados ao matlab com base em um cronômetro.Eu teria então que fazer chamadas constantes para o matlab do vb para obter esses valores.Isso não parece eficiente e provavelmente consumiria muitos recursos com o simulnk rodando ao mesmo tempo?Como obtenho dados de um bloco Simulink em uma GUI do MATLAB?

Opção 2:Encontrei um 'Simulink Coder' no site da mathworks e parece ser a solução ideal, mas gostaria de alguns esclarecimentos se alguém aqui o usou.Solicitei um teste, mas ainda tenho mais alguns obstáculos para resolver antes de consegui-lo.

Parece-me que o codificador pegaria o modelo simulink e criaria o algoritmo em código C/C++?Isso significa que posso criar um aplicativo C e usar esse código como fonte?Então, em vez de executar o simulink com meu aplicativo, eu apenas executaria o código e inseriria os parâmetros para nos fornecer a variável de saída.

Também tenho lido algumas informações sobre a saída de DLLs ou mux do matlab?então pode ser usado com aplicativos .net?

Qualquer contribuição/opinião será apreciada :)

Foi útil?

Solução

Na verdade, não há uma resposta simples para sua pergunta, com a abordagem melhor/correta dependendo da funcionalidade que você precisa.

Em primeiro lugar, em relação ao Simulink Coder:sim, ele converterá um modelo Simulink em código C; nesse ponto, você poderá usar esse código C da mesma maneira que qualquer outro trecho de código C que possa escrever.

Nesse ponto, você não usará mais o Simulink e não precisará de licença para isso.O que pode ser útil para implantar seu aplicativo.

Mas existem restrições.Você está (geralmente) limitado a solucionadores de etapas fixas.Você não pode converter funções S de código M.Você não pode definir funções coder.extrinsic em blocos de funções MATLAB.Você só pode alterar parâmetros e entradas do modelo.Você não pode alterar a topologia, ou seja,número e interligação de blocos (sem regenerar o código).Ver Limitações do codificador para uma lista um pouco mais abrangente.

Usar objetos de tempo de execução (mencionados no link fornecido) não é ideal e, às vezes, não é muito bem dimensionado (ou seja,pode ser problemático se você tiver muitos sinais que deseja visualizar), mas é realmente a única maneira de obter dados de um modelo durante a simulação.(Existem event_listeners que podem ser anexados a blocos, mas também não são bem dimensionados.)

Observe que a limitação COM mencionada não é uma limitação do Simulink.Por razões de eficiência, o Simulink só despeja dados quando o modelo é pausado ou parado.Isso não tem nada a ver com a própria API MATLAB-COM.

Você também mencionou a geração de DLLs e mux do MATLAB [presumivelmente você quer dizer mex aqui].Observe que existem diferentes mecanismos de geração de código do MATLAB (ou seja,código m) do que do Simulink.Somente o Simulink Coder será útil para você, não o MATLAB Coder ou o MATLAB Compiler.Mex (supondo que foi isso que você quis dizer) é o mecanismo para chamar o código compilado do MATLAB e não terá nada a ver com o que você está perguntando aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top