Migrating from Legacy Systems

Coûts : intégrateur LabVIEW ou Python interne

Comparez sur trois ans le coût d'un intégrateur LabVIEW et d'un ingénieur Python interne avec TofuPilot, avec un exemple à 5 postes et un modèle modifiable.

JJulien Buteau
intermediate9 min de lecture23 septembre 2026

Sur trois ans, une ligne de 5 postes coûte à peu près la même chose en trésorerie, qu'un NI Alliance Partner la construise en LabVIEW et TestStand ou qu'un ingénieur interne la construise en Python avec TofuPilot. La différence est dans la destination de l'argent : licences et taux journaliers d'un côté, un salaire de l'autre. Ce qui sépare les deux options, c'est tout ce qui n'est pas de la trésorerie, et c'est là que ce modèle consacre l'essentiel de son attention.

Les deux options, présentées honnêtement

L'option A, c'est LabVIEW plus un intégrateur. Vous conservez une ou deux licences LabVIEW et une licence de développement TestStand, payez une licence de déploiement par poste, et sous-traitez à un intégrateur certifié la construction des postes et le traitement des demandes de modification. Quelqu'un dans votre équipe coordonne le travail, rédige les exigences et réceptionne les livrables.

L'option B, c'est un ingénieur Python interne plus TofuPilot. Vous recrutez (ou réaffectez) un ingénieur qui écrit les postes en texte avec le TofuPilot Framework, les garde dans Git et pousse les résultats vers TofuPilot. Il n'y a pas de licence par poste, le CLI est gratuit et l'offre Lab de la plateforme est gratuite.

Les deux options produisent des postes qui fonctionnent. L'option A vous donne un spécialiste qui en a construit une centaine et que votre montage ne surprendra pas. L'option B vous donne quelqu'un qui est dans l'atelier quand le rendement chute.

Aucune des deux n'est mauvaise, et le reste de ce guide consiste à chiffrer l'arbitrage.

Les lignes de coût

Les chiffres sont des fourchettes typiques 2026 pour les États-Unis et l'Europe de l'Ouest. Les prix des licences viennent de le prix de LabVIEW : ce qu'il coûte vraiment. Les salaires et les taux journaliers varient avec la séniorité, le secteur (le médical et l'aéronautique paient plus) et la région.

LigneLabVIEW + intégrateurPython interne + TofuPilot
Licence LabVIEW4 300 à 5 500 $ par licence et par an (Full à Professional)0 $
Licence de développement TestStand2 500 à 3 000 $ par an0 $
Déploiement TestStand1 000 à 1 500 $ par poste et par an0 $
Taux journalier de l'intégrateur1 000 à 2 000 $ par jour, NI Alliance Partner certifiénon nécessaire
Construction d'un poste10 à 20 jours d'intégrateur par postetemps de l'ingénieur, inclus dans le salaire
Délai d'une demande de modificationde quelques jours à quelques semaines, facturé à la journéele jour même à quelques jours, sans facture
Salaire de l'ingénieuraucun, mais 0,1 à 0,2 ETP de coordination95 000 à 175 000 $ par an en coût chargé, 0,5 à 1,0 ETP sur le test
Montée en compétencel'intégrateur est productif dès le premier jour4 à 8 semaines avant que l'ingénieur ne soit responsable d'un poste
Plateforme de donnéesrapports TDMS ou CSV sur mesure, 10 à 30 jours d'intégrateur sur trois ansTofuPilot Lab, gratuit ; des offres payantes existent pour les équipes plus grandes

Deux lignes méritent une remarque. La fourchette de salaire Python est large à dessein : un ingénieur intermédiaire dans une usine d'Europe de l'Ouest se situe près du bas, un ingénieur senior chez un fabricant américain de dispositifs médicaux près du haut. Et un développeur LabVIEW ou TestStand de séniorité égale coûte typiquement bien au-dessus de cette fourchette, c'est pourquoi l'option A suppose que vous sous-traitez plutôt que de recruter.

Exemple chiffré : 5 postes sur 3 ans

Des fourchettes, pas des valeurs ponctuelles. Le bas suppose un produit simple, un intégrateur local et un ingénieur intermédiaire. Le haut suppose un produit lourd en montages, un intégrateur senior et un ingénieur senior dans une région chère.

Coût sur 3 ansLabVIEW + intégrateurPython interne + TofuPilot
Licences (1 à 2 LabVIEW, 1 TestStand développement)20 000 à 42 000 $0 $
Déploiement TestStand (5 postes)15 000 à 22 500 $0 $
Construction des postes (5 postes)50 000 à 200 000 $inclus dans le salaire
Demandes de modification (10 à 25 jours par an)30 000 à 150 000 $inclus dans le salaire
Rapports et plateforme de données11 000 à 60 000 $0 $
Coordination (0,1 à 0,2 ETP)30 000 à 90 000 $inclus dans le salaire
Ingénieur (0,5 à 1,0 ETP)aucun142 500 à 525 000 $
Montée en compétenceaucune10 000 à 25 000 $
Totalenviron 155 000 à 565 000 $environ 150 000 à 550 000 $

Les totaux se recouvrent presque entièrement. À 5 postes, la trésorerie ne tranche pas. Ce qui tranche, c'est que les plus grosses lignes de l'option A (constructions et demandes de modification) grandissent avec le nombre de postes, et que la plus grosse ligne de l'option B (le salaire) ne bouge pas.

Faites tourner le même modèle à 2 postes et l'intégrateur gagne en trésorerie. À 10 postes, l'ingénieur gagne avec une large marge.

L'autre chose que le tableau cache, c'est ce que l'ingénieur fait du reste de l'ETP. Les enquêtes de rendement, les réparations de montage, la formation des opérateurs et l'étalonnage des instruments n'apparaissent pas en jours d'intégrateur parce que personne ne les facture. Il faut quand même les faire.

Les coûts hors trésorerie

Personne n'a jamais mis « onze jours d'attente pour un changement de limite » dans une ligne budgétaire, et pourtant c'est le chiffre dont un responsable test se souvient.

Le délai d'un changement de limite. Avec un intégrateur, un changement de limite est une demande de modification : la rédiger, obtenir un devis, attendre un créneau, recevoir un build, le tester, le déployer. Des jours à des semaines, et la ligne tourne sur l'ancienne limite pendant ce temps. Avec un poste en texte, le même changement est une ligne dans procedure.yaml, une pull request et un redéploiement, le jour même.

Qui peut relire. Une modification d'un .vi est relue par quiconque a LabVIEW ouvert, ce qui dans la plupart des ateliers revient à l'intégrateur qui l'a écrite. Une modification d'une phase Python est relue par n'importe qui dans l'équipe qui lit Python, y compris l'ingénieur firmware et le responsable qualité. La relecture est dans le diff, et Git enregistre qui a approuvé quoi.

Ce qui se passe au départ. Quand la relation avec l'intégrateur prend fin, vous possédez des binaires, un contrat et une file de tickets de support. Trouver un autre NI Alliance Partner pour reprendre les VI de quelqu'un d'autre est possible et lent. Quand l'ingénieur interne part, vous possédez un dépôt Git que n'importe quel ingénieur Python peut ouvrir, et les résultats sont déjà dans TofuPilot, où l'équipe les lisait depuis le début.

L'arithmétique du facteur bus est dans le facteur bus en ingénierie de test.

Où vivent les données. Les rapports de l'option A sont des fichiers TDMS ou CSV sur le poste et un VI de rapport qui les met en forme. Les runs de l'option B atterrissent dans TofuPilot avec le FPY, le Cpk, les cartes de contrôle et l'historique par unité sur une page que n'importe qui peut ouvrir. Cet écart est difficile à chiffrer et facile à ressentir la première fois qu'un client demande l'enregistrement de test d'un numéro de série précis.

Quand la voie du sous-traitant reste la bonne

Trois situations où l'option A est la meilleure réponse, et où vous devriez la prendre sans vous excuser.

Un seul poste. Un poste unique, c'est 10 à 20 jours d'intégrateur. Recruter pour cela est absurde, et réaffecter un ingénieur qui n'a jamais construit de poste coûte plus en montée en compétence que la construction elle-même. Prenez l'intégrateur, gardez la source, et poussez les résultats vers TofuPilot via l'API REST pour que les données ne restent pas bloquées sur le poste.

Beaucoup de traitement du signal sur DAQ NI. Si le poste est surtout de l'acquisition multivoie synchronisée sur du matériel NI avec une synchronisation FPGA, LabVIEW est l'outil natif et l'intégrateur l'a déjà fait. Python peut piloter le même matériel, mais vous paieriez votre ingénieur pour redécouvrir ce que l'intégrateur sait déjà.

Contrats de support réglementaires. Certains clients du médical et de l'aéronautique exigent un fournisseur de support nommé avec un SLA signé pour l'équipement de test. Un intégrateur fournit cela sur le papier. Un ingénieur interne, non, même si le temps de réponse est meilleur.

Dans chaque cas, la comparaison honnête est dans Python ou LabVIEW pour le test de fabrication, et la réalité du recrutement derrière les hypothèses de l'option A est dans pourquoi les ingénieurs LabVIEW sont difficiles à recruter.

Un modèle de coût que vous pouvez modifier

L'exemple chiffré ci-dessus vient de ce script. Chaque entrée est une paire (bas, haut), et les deux totaux s'affichent en fourchettes. Changez d'abord le nombre de postes, c'est l'entrée qui fait bouger la réponse.

cost_model.py
55 lines
# Modèle de coût sur trois ans pour une ligne de test. Modifiez Inputs et lancez-le.from dataclasses import dataclassYEARS = 3@dataclassclass Inputs:    stations: int = 5    # Option A : LabVIEW + intégrateur    labview_seats: tuple = (1, 2)    labview_seat_per_year: tuple = (4_300, 5_500)    teststand_dev_seat_per_year: tuple = (2_500, 3_000)    teststand_deploy_per_station_year: tuple = (1_000, 1_500)    integrator_day_rate: tuple = (1_000, 2_000)    build_days_per_station: tuple = (10, 20)    change_days_per_year: tuple = (10, 25)    report_days_total: tuple = (11, 30)    coordination_fte: tuple = (0.1, 0.2)    coordinator_loaded_salary: tuple = (100_000, 150_000)    # Option B : Python interne + TofuPilot    engineer_loaded_salary: tuple = (95_000, 175_000)    engineer_fte_on_test: tuple = (0.5, 1.0)    ramp_up_cost: tuple = (10_000, 25_000)    tofupilot_per_year: tuple = (0, 0)  # offre Labdef labview_integrator(i: Inputs, k: int) -> float:    seats = i.labview_seats[k] * i.labview_seat_per_year[k] * YEARS    teststand = (        i.teststand_dev_seat_per_year[k]        + i.stations * i.teststand_deploy_per_station_year[k]    ) * YEARS    builds = i.stations * i.build_days_per_station[k] * i.integrator_day_rate[k]    changes = i.change_days_per_year[k] * YEARS * i.integrator_day_rate[k]    reports = i.report_days_total[k] * i.integrator_day_rate[k]    coordination = i.coordination_fte[k] * i.coordinator_loaded_salary[k] * YEARS    return seats + teststand + builds + changes + reports + coordinationdef inhouse_python(i: Inputs, k: int) -> float:    engineer = i.engineer_fte_on_test[k] * i.engineer_loaded_salary[k] * YEARS    return engineer + i.ramp_up_cost[k] + i.tofupilot_per_year[k] * YEARSif __name__ == "__main__":    inputs = Inputs()    for label, option in (        ("LabVIEW + integrator", labview_integrator),        ("In-house Python + TofuPilot", inhouse_python),    ):        low, high = option(inputs, 0), option(inputs, 1)        print(f"{label:28} ${low:>9,.0f} to ${high:>9,.0f} over {YEARS} years")

Le modèle laisse de côté ce que les deux options partagent : les instruments, les montages, le PC sur la paillasse et le temps de l'ingénieur produit sur les limites. Il laisse aussi de côté la valeur d'un changement de limite le jour même, parce que ce chiffre, vous le connaissez pour votre ligne et ce script non.

Commencez par un poste

Si vous êtes sur l'option A aujourd'hui, ne résiliez pas le contrat. Choisissez un poste, idéalement celui au plus gros volume ou celui que seul l'intégrateur peut ouvrir, et reconstruisez-le en Python avec le TofuPilot Framework. Faites-le tourner en parallèle de la version LabVIEW sur les mêmes unités pendant deux semaines, et vous aurez un vrai chiffre de montée en compétence et un vrai chiffre de demande de modification pour votre propre modèle, pas les fourchettes ci-dessus.

install-and-run.sh
# Installe le CLI, puis lance le poste en local (sans compte) ou avec upload.curl -fsSL https://www.tofupilot.app/install | shtofupilot run ./procedure.yamltofupilot run ./procedure.yaml --upload

Les étapes de reconstruction sont dans comment migrer de LabVIEW vers Python pour les tests de fabrication avec TofuPilot, et le framework est sur tofupilot.com/products/framework. L'offre Lab est gratuite, et tofupilot run fonctionne sans compte.

Plus de guides

Mettez ce guide en pratique