Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Convertir labview en C ?

Résolu !
Accéder à la solution

Bonjour,

Que peut on faire avec

https://www.ni.com/fr-fr/support/downloads/software-products/download.labview-c-generator-module.htm... 

LabVIEW C Generator Module

LabVIEW C Generator Module vous aide à créer du code C à partir de VIs LabVIEW pour des cibles spécifiques.
LabVIEW C Generator Module est un complément logiciel que vous pouvez utiliser pour porter des algorithmes créés avec LabVIEW sur des cibles telles que les plates-formes Windows, les bibliothèques statiques ou les applications ARM. De plus, vous pouvez créer du code C ANSI à partir de vos VIs LabVIEW, afin de l’intégrer aux chaînes d’outils de tiers. LabVIEW C Generator Module est compatible avec les microprocesseurs 8, 16 et 32 bits.
 
Peut on convertir un projet labview en C ?
Merci
0 Compliments
Message 1 sur 8
1 450 Visites

@thib_fr wrote:
Peut on convertir un projet labview en C ?

Non.

0 Compliments
Message 2 sur 8
1 420 Visites

Donc seulement des .vi alors ?

et il faudra tout reconstruire et débuger derrière...avec ChatGPT😆

0 Compliments
Message 3 sur 8
1 386 Visites

Bonjour,

 

Ce module est obsolète désormais. Pour refaire rapidement l'histoire, LabVIEW avait un module for DSP, il convertissait le code LabVIEW en code textuel envoyé à la chaîne de compilation pour des DSP spécifiques. Avec le développement de LabVIEW RT et FPGA, l'intérêt de se module a diminué. L'usage des DSP aussi.

Il a existé un module LabVIEW Embedded for ARM. Basé sur ce même principe, le code labVIEW était convertit en C pour l'envoyer à la chaîne de compilation Keil µvision pour compilier le code sur ARM.

 

Ce module a été abandonné par NI. Non compatible avec le business modèle de NI, Si n programme des cibles matériels non NI avec LabVIEW, NI ne touche pas d'argent sur les matériels vendus.

 

Avec l'abandon de ces modules, est resté le module C code Generator, qui sur le papier converti du code labVIEW en COde C qu'il faut intégrer manuellement dans une chaîne de compilation dédiée.

 

Ce module n'était disponible que pour les personnes déjà utilisant le module avant son arrêt. Le prix était important >10k€, les fonctionnalités supportées limitées. Et l'intérêt applicatif limité. C'est du code convertit qu'il faut retoucher pour s'assurer qu'il soit fonctionnel et compilable pour le matériel cible. Si on a cette problématique, soit on utilise du matériel NI + LabVIEW soit on prend des développeurs C spécialisés. Sachant par exemple qu'il existe les System On Module pour faire de la programmation LabVIEW avec hardware custom.

En conclusion, je dirais, ca existe ou du moins ca a existé. Est ce que c'est une bonne idée non 🙂

 

Cordialement

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

Message 4 sur 8
1 366 Visites

Bonjour,

J'aurai bien fait un essai pour voir, avec "2017CGenerator.exe" mais il faut avoir LabView 2017☹️

 

0 Compliments
Message 5 sur 8
1 340 Visites

Vérifie tes messages privés 🙂

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

Message 6 sur 8
1 323 Visites
Solution
Accepté par l'auteur du sujet thib_fr

Bonjour Maxime,

Encore merci pour le lien.

j'ai essayé de convertir un petit programme de sauvegarde que j'avais sous la main.

Il y a beaucoup de chose qui ne sont pas supportées, pour ne pas dire qu'il n'y a pas grand chose de supportée ☹️


The following block diagram objects are unsupported:
- Attendre un multiple de ms: Function not supported by the LabVIEW C Generator
- Composer un chemin: Function not supported by the LabVIEW C Generator
- Chaîne en chemin: Function not supported by the LabVIEW C Generator
- Sous-VI 'NI_LVConfig.lvlib:Close Config Data.vi': SubVI not supported by the LabVIEW C Generator
- Fil de liaison: Type not supported by the LabVIEW C Generator
- Date et heure en secondes 'Date et heure en secondes': Function not supported by the LabVIEW C Generator
- Date et heure en secondes: Function not supported by the LabVIEW C Generator
- Sous-VI 'Simple Error Handler.vi': SubVI not supported by the LabVIEW C Generator
- Chemin en tableau de chaînes: Function not supported by the LabVIEW C Generator
- Tableau de chaînes en chemin: Function not supported by the LabVIEW C Generator
- Créer un dossier: Function not supported by the LabVIEW C Generator
- Sous-VI 'Check if File or Folder Exists.vi': SubVI not supported by the LabVIEW C Generator
- Décomposer un chemin: Function not supported by the LabVIEW C Generator
- Copier: Function not supported by the LabVIEW C Generator🙂

et juste pour une addition x+y

add.png ...

 

 

/****************************************************************************************
 *	LabVIEW (TM) Code Generator 17.0.1
 *	(C) Copyright 1997-2011 by National Instruments Corp.
 *	All rights reserved.
 *	Delimited VI name: test_gen_c.vi
 *	Generated from: C:\Users\thib_fr\Desktop\sauv\2017\sauvegarde\test_gen_c.vi
 *  Generated UI: false
 *  Generated Debug Info: false
 *  Generated Serial Only: true
 *  Generated Stack Variables: false
 *  Generated Guard Code: true
 *  Generated Interrupt Code: false
 *  Generated C Function Calls: true
 *  Generated Integer Only : false
 *  Generated Expression Folding : true
 *  Generated memory model: dynamic
*****************************************************************************************/
#define LV_MAIN
#include "LVCGenIncludes.h"
#include "test_gen_cLib.h"
#if CGEN_VERSION != 17000
#error CGenerator version mismatch
#endif
/* VI heap data */
struct _test_gen_c_heap { 
	float64 n_x;
	float64 n_y;
	float64 n_Additionner_x_y;
} _DATA_SECTION __test_gen_c_heap; /* heap */

static struct _test_gen_c_heap _DATA_SECTION *heap = &__test_gen_c_heap; /* heap */



/****** Clean Up Uninitialized Left Shift Registers before program exits to prevent memory leaks **********/


void _TEXT_SECTION test_gen_c_CleanupLSRs(void);
void _TEXT_SECTION test_gen_c_CleanupLSRs(void) {
}


/****** Add Sub VI Instance Data to global list **********/


void _TEXT_SECTION test_gen_c_AddSubVIInstanceData(void);
void _TEXT_SECTION test_gen_c_AddSubVIInstanceData(void) {
}


/****** Allocate VI Constants  **********/


void _TEXT_SECTION test_gen_c_AddVIGlobalConstants(void);
void _TEXT_SECTION test_gen_c_AddVIGlobalConstants(void) {
}


/****** VI Constant Initialization function **********/


void _TEXT_SECTION test_gen_c_InitVIConstantList(void);
void _TEXT_SECTION test_gen_c_InitVIConstantList(void) {
}


/****** Block diagram code **********/


float64 test_gen_c_in_1_y_44_init_ = 0.0000000000000000000E+0 ;
static float64* test_gen_c_in_1_y_44 = &test_gen_c_in_1_y_44_init_;
static DataType dttest_gen_c_in_1_y_44 = doubleDataType;
float64 test_gen_c_in_0_x_62_init_ = 0.0000000000000000000E+0 ;
static float64* test_gen_c_in_0_x_62 = &test_gen_c_in_0_x_62_init_;
static DataType dttest_gen_c_in_0_x_62 = doubleDataType;
float64 test_gen_c_out_0_x_y_80_init_ = 0.0000000000000000000E+0 ;
static float64* test_gen_c_out_0_x_y_80 = &test_gen_c_out_0_x_y_80_init_;
static DataType dttest_gen_c_out_0_x_y_80 = doubleDataType;
extern eRunStatus test_gen_c_Run(	)
{
	Boolean bRunToFinish = true;
	int32 nReady = 1;
	test_gen_c_InitVIConstantList();
	{
		heap->n_y = *test_gen_c_in_1_y_44;
		heap->n_x = *test_gen_c_in_0_x_62;
		/**/
		/* Additionner */
		/**/
		PDAFltBinop( &heap->n_x, doubleDataType, &heap->n_y, doubleDataType, opPlus, &heap->n_Additionner_x_y, doubleDataType);
		*test_gen_c_out_0_x_y_80 = heap->n_Additionner_x_y;
		return eFinished;
	}
}
/****** Main Entry Point for VI **********/

TextPtr test_gen_c_VIName = "test_gen_c.vi";

eRunStatus test_gen_c_Start(subVIInstanceDataPtr viInstanceData, Boolean bShowFrontPanel, Boolean bRunToFinish, ArgList* argsIn, ArgList* argsOut, Boolean *pause);
eRunStatus test_gen_c_Start(subVIInstanceDataPtr viInstanceData, Boolean bShowFrontPanel, Boolean bRunToFinish, ArgList* argsIn, ArgList* argsOut, Boolean *pause){
	test_gen_c_AddSubVIInstanceData();
	return test_gen_c_Run();
}


/****** Library interface **********/


float64 test_gen_c(float64 y,
float64 x)
{
	float64 retVal;
	int32 i;
	LVCGenRTInit();

	/* Init globals */
	for (i=0;i<sizeof(globTable)/sizeof(InitFPTermsFunc);i++) {
		(*(globTable[i]))(NULL, false);
	}

	/* Init VI Constants */
	for (i=0;i<sizeof(globConstInitTable)/sizeof(VoidFn);i++) {
		(*(globConstInitTable[i]))();
	}

	test_gen_c_AddSubVIInstanceData();
	test_gen_c_InitVIConstantList();

	test_gen_c_in_1_y_44 = &(y);
	test_gen_c_in_0_x_62 = &(x);
	/* Call top level VI main function */
	test_gen_c_Run();

	/* Cleanup VI Constants */
	for (i=0;i<sizeof(globConstCleanupTable)/sizeof(VoidFn);i++) {
		(*(globConstCleanupTable[i]))();
	}

	/* Cleanup globals */
	for (i=0;i<sizeof(globCleanupTable)/sizeof(VoidFn);i++) {
		(*(globCleanupTable[i]))(false);
	}

	for (i=0;i<sizeof(lsrCleanupTable)/sizeof(VoidFn);i++) {
		(*(lsrCleanupTable[i]))();
	}

	LVCGenRTEnd();
	return retVal;
}



/****** End of generated code **********/

 

Bref, je ne vais pas persévérer dans mon exploration 😉

0 Compliments
Message 7 sur 8
1 281 Visites
Solution
Accepté par l'auteur du sujet thib_fr

De rien et merci du retour.

 

Dans les fonctions non supportées, il y en a de souvenirs qui sont beaucoup plus problématiques que celles de cette liste, comme les files d'attentes par exemple.

 

le code généré est un codé généré. Il n'est pas vraiment fait pour servir de base pour un autre programme à modifier à la main. D'ailleurs le processus ne serait pas vraiment efficace. Code LabVIEW>>Code C>>Modification C>> Compile C. Si on remodifie le Code LabVIEW, on risque de casser les modifications en dessous.
Le code LabVIEW qui doit être généré doit pouvoir être directement compilé, cet outil n'est intéressant que pour supporter une autre chaîne de compilation que celle de LabVIEW. A partir de ce moment là, on arrive aux limites et on sort complètement du Business model de NI.

 

Mais je vois qu'au final tu as eu à peu près le même nivau de curiosité que moi sur le sujet et la même conclusion 🙂

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

0 Compliments
Message 8 sur 8
1 271 Visites