Fréquence maximal générée par sbrio-9631 et carte de sorties analogiques NI-9263

Bonjour,
Je suis relativement nouveau au concept de programmation LabView. Voici donc mon problème. J'essai de générer une onde sinus variable en fréquence de 100 à 500 kHz. Je suis partie d'un exemple fourni avec le kit d'évaluation SBRIO NI9631 que j'ai modifié selon mes besoins particuliers. La partie du FPGA fait appel à un générateur d'onde sinus dans une boucle. J'obtiens une belle forme sinusoïdal que j'envoie conjointement avec un autre signal dans une pile FIFO pour traitement ultérieur dans le HOST. Tout va bien jusque-là mais, lorsque ma demande (en periodes/tick) dépasse 10kHz, la fréquence actuelle commence à diminuer pour atteindre 0Hz pendant que la demande de fréquence est de +/-20kHz (mesure prise à l'aide d'un oscilloscope extérieur) et ainsi-de-suite pour toute la gamme de fréquence demandée sans jamais dépasser 10kHz. Est-ce la limitation du kit d'évaluation? Quelqu'un a une idée?
Pièces jointes :
AO_FPGA.jpg ‏257 KB

Bonjour,
Lorsque vous dépassez 10kHz, la génération sur AO0 et AO1 se passe bien ? (si vous mesurez à l'oscilloscope).
J'ai modifié votre code coté RT, car vous n'aviez pas spécifié de buffer pour les FIFOs DMA coté RT. De plus, il ne faut pas que vous preniez 1024 points à chaque tour de boucle, sinon la FIFO va être pleine.
Coté FPGA, j'ai modifié le remplissage de la FIFO DMA. Pouvez vous vérifier que vous n'avez pas de TimeOut ? Si vous avez un TimeOut, vous essayez d'écrire dans une FIFO pleine, et vous perdez des points.
Vous trouverez le code en pièce jointe. Dites moi si il y a du changement.
Cordialement,
PS: Je ne comprends pas à quoi sert le code pour attendre une IRQ coté RT, car vous ne générez pas d'IRQ.
Benoit S. - Field Sales Engineer
Certified LabVIEW Developer
Certified TestStand Developer
National Instruments France
#adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet
Pièces jointes :
Filter and DC-RMS.zip ‏883 KB

Similar Messages

  • Courant de sortie analogique maxi et conséquence d'un court circuit (PXI 6221)

    Bonjour,
    Tout est dans le titre quasiemment,
    Je suis à la recherche d'informations concernant la carte PXI 6221 :
    - le courant maximal de sortie pour une sortie ana à 10 V : dans les spécications j'ai trouvé : Output current drive............... ±5 mA
    je suppose que c'est ça ?
    - deuxième point plus délicat : en cas de court-circuit sur une sortie ana, y-a-t'il une protection ? y-a t'il un risque d'endommager la carte ?
    Merci

    Bonjour,
    Merci d'avoir posté votre question sur le forum de National Instruments.
    Pour le COURANT de sortie, oui c'est bien + ou - 5mA pour 10V.
    Au niveau des courts circuits, biensur il n'est pas conseillé d'en faire. Vous n'avez aucune protection de type fusible ou diode.
    Brice S.
    National Instruments France

  • Comptage impulsion codeur incrémenta​l

    Bonjour,
    Je vous explique mon application:
    Je souhaite compter le nb d'impulsion d'un codeur incrémental de la marque BAUMER afin d'en déduire un signal 0-10V proportionnel à la vitesse d'un moteur.
    Données techniques:
    Codeur incrémental 1024 Pts/tour
    Sortie TTL 0-5V
    Vitesse max 60tr/min  donc fmax= 1024Hz
    Matériels utilisés:
    NI cDAQ 9174
    Carte de comptage NI 9421
    Carte sorties analogiques NI 9263
    Labview 2011 11.0
    Problèmes rencontrés:
    Sur ma face du programme Labview j'ai mis un graphe en sortie du bloc fonction DAQ ou je souhaite mesurer la fréquence des impulsions du codeur afin d'en déduire la vitesse. Quand je lance l'application et tourne le codeur je n'obtiens rien du tout.....
    La led "Active" du NI DAQ ne s'allume pas est-ce un problème? La led de ma voie de comptage ne s'allume pas non plus.
    J'ai pensé à un problème de câblage, j'ai donc branché directement en sortie du codeur un voltmètre. En tournant doucement le codeur je vois bien la sortie passer successivement de 0V à 5V.
    Je vous joins des photos de mon banc, le bout de programme et le schéma de câblage.
    J'espère que quelqu'un pourra m'apporter une aide...
    Merci par avance
    Christophe
    Pièces jointes :
    Comptage_codeur_incremental.zip ‏1983 KB

    bonjour,
    normalement la led active de la carte d'acquisition doit être allumé en fonctionnement. utiliser MAX pour vérifier si votre carte est bien détecté.
    ensuite vous pouvez avoir un problème de cablage si les fils sont serré sur la gaine et non sur les brins (coté matériel
    NI).
    Les assistant DAQ sont pratique pour ceux qui débute, mais pas toujours pratique. essayé de les évité aux maximum. il faut connecté le nom du périphérique en entrée de votre assistant. n'hésité pas à utiliser la sortie d'erreur qui vous permettra de débugger votre soft et de demander du support technique.
    Cordialement
    L.MICOU

  • Génération signal carré [débutant]

    Bonjour
    Je souhaiterais générer un signal carré sur Labview 2011, lequel serait : - modifiable en jouant sur la fréquence et l'amplitude.
                                                                                                            - visualisable sur l'oscilloscope.
    Je dispose d'un module cRIO FPGA 9075 sur lequel sont connectés un module d'entrées analogiques NI 9215 et
    un module de sorties analogiques NI 9263 sur lequel est branché l'oscilloscope.
    Comment importer notre signal carré obtenu sous Labview vers notre module FPGA ?

    Bonjour
    J'arrive a transférer le programme labview vers mon cRIO.
    Cependant, il faut maintenant que je modifie celui-ci en y ajoutant une sortie analogique pour que mon oscilloscope me renvoie le signal a partir de mon module de sorties analogiques ni 9263.
    Que doit-on rajouter au programme pour y parvenir ?
    Merci de votre aide.
    Pièces jointes :
    Untitled.lvproj ‏45 KB

  • Problème pour diviser une fréquence : "Timebase is invalid" (PCI-6602) ???

    Bonjour,
    je dispose d'une pci-6602, de CVI 6 et de DAQ Traditionnel.
    Je voudrais diviser une fréquence par 16 à l'aide du compteur 2 (en mode 'toggle', ce qui revient donc à la diviser par 32).
    J'utilise pour cela la fonction 'FrequencyDividerConfig'. je passe en argument de cette fonction 'Use Counter Source', puisque la fréquence que je souhaite diviser est externe (elle provient du compteur 3, et est de 4000 Hz environ). De plus, je relie la sortie du compteur 3 à la source du compteur 2.
    Pourtant, lors de la compilation, j'ai à chaque fois le message "Timebase is invalid". Que dois-je faire pour que ça marche ???
    Je précise que dans le function panel de 'FrequencyDividerConfig', il est écrit en bleu que cette fonction ne peut être utilisée qu'avec les compteurs DAQ-STC et Am9513. Comme les compteurs de ma carte sont des NI-TIO, on pourrait penser que c'est pour cela que j'ai un problème. Mais je pense que ce n'est pas le cas, vu que lorsque je souhaite diviser une timebase interne au compteur (de 20 MHz), cela marche sans problème : on peut donc utiliser cette fonction avec les compteurs NI-TIO !! (Je sais c'est bizarre !!!)
    Merci pour toute aide,
    Julien.

    Bonjour,
    Vous trouverez un exemple de mise en oeuvre d'une division de fréquence en NI-DAQ Traditionnel sous LabWindows/CVI avec une carte NI 660x sur le lien suivant: http://sine.ni.com/apps/we/niepd_web_display.display_epd4?p_guid=B45EACE3DDCB56A4E034080020E74861&p_node=DZ52328&p_source=External.
    La valeur que vous fixerez pour les variables ND_COUNT_X permettront de fixer le diviseur pour la fréquence.
    Les masses des compteurs sont communes, il n'est donc pas nécessaire de les relier pour tester cet exemple.
    Cordialement,

  • Division de fréquence : problème ? (pci-6602)

    Bonjour,
    je dispose d'une pci-6602, de CVI.6 et DAQ Traditionnel.
    Je souhaiterais qu'une fréquence générée par le compteur 7 soit divisée par 16 en sortie du compteur 2(en réalité, par 32, puisque je voudrais utiliser le mode Toggle). Je pense qu'en utilisant les fonctions SelectSignal et GPCTR_Change_Parameter, cela devrait marcher, mais j'ai systématiquement un problème avec ces fonctions lors de la compilation. Je dois donc mal m'y prendre.
    Que dois-je donc mettre en argument de ces 2 fonctions (si ce sont bien celles là que je dois utiliser) ?
    Et de plus, je sais que je dois relier les masses des compteurs à la masse de référence. Si je néglige cela (dans un premier temps en tout cas, même si ce n'est pas très propre), cela va-t-il empêcher le compteur 2 de diviser la fréquence provenant du compteur 7 ?
    Merci d'avance pour toute aide.
    Julien

    Bonjour,
    Vous trouverez un exemple de mise en oeuvre d'une division de fréquence en NI-DAQ Traditionnel sous LabWindows/CVI avec une carte NI 660x sur le lien suivant: http://sine.ni.com/apps/we/niepd_web_display.display_epd4?p_guid=B45EACE3DDCB56A4E034080020E74861&p_node=DZ52328&p_source=External.
    La valeur que vous fixerez pour les variables ND_COUNT_X permettront de fixer le diviseur pour la fréquence.
    Les masses des compteurs sont communes, il n'est donc pas nécessaire de les relier pour tester cet exemple.
    Cordialement,

  • Structure séquence

    Bonjour,
    Je viens vous demander des conseils pour l'utilisation des structures de séquences (Ci-Joint le Vi). J'utilise un Visa avec une structure de séquence. Dans la première et la deuxième étape j'arrive bien à connecter la liaison Visa ressource Name et Error aux deux entrées, mais lorsque j'essaie de connecter les sorties, j'ai un message d'erreur suivant "Un fil de liaison est connecté à un tunnel sans direction". Pour les entrées il n'y a pas de problème mais pour les sorties il y a erreur. Peut-on trouver une solution pour connecter les sorties ensembles?
    Merci d'avance, Cordialement      
    Pièces jointes :
    ni-1.vi ‏13 KB

    Bonjour,
    "dans l'étape 0, il n'est pas nécessaire de cabler la sortie ou il faut utiliser une "variable locale de séquence" pour ramener une valeur dans la séquence suivante." L'utilisation une variable locale de séquence oblige à ramener la sortie de la premiere étape vers entrée de la deuxième étape, par contre peut-on oublier la sortie de la première et cabler la sortie de la deuxième étape? Comme ceci? (Ci-joint le Vi). Il n'y a pas d'erreur mais je ne sais si cela fonctionne? Si jamais il y a une erreur dans la premiere étape on n'aura pas des informations sur cette étape alors?
    Merci d'avance,
    Pièces jointes :
    ni-1.vi ‏16 KB

  • Générer un signal carré dont la fréquence peut etre modifier en temps réel

    Pour le moment je n'ai réussi qu'à trouver un VI dont la fréquence reste constante durant toute la durée du process

    Il est possible de réaliser cela avec une sortie compteur.
    Pour un compteur du type DAQ-STC : "..\examples\DAQ\counter\daq-stc.llb\Frequency Shift Keying (DAQ-STC).vi.
    Pour un compteur du type NI-TIO : "..\examples\DAQ\counter\ni-tio.llb\Frequency Shift Keying (NI-TIO).vi.
    Le principe est d'avoir deux définitions qui sont sélectionnés par l'entrée GATE du compteur utilisé. Pendant qu'un jeu est utilisé, l'autre peut être modifié.
    Cela peut être réalisé également par une sortie analogique. Il existe également un exemple qui vous servira de base. Il s'agit du générateur de fonctions livré avec l'installation de LV. Vous pouvez le lancer par le menu DAQ Solutions --> ... --> Galeries de solutions --> Instrument de banc --> Générateur de fonctions
    J'utilise LV6.1 mais je pense que le chemin est identique pour LV6.

  • Contrôler la fréquence maximale et minimale d'un signal

    Bonjour à tous,
    J'ai crée un bloc qui génère des valeurs aléatoires pour finir dans un tableau 1 D. Ce tableau 1 D doit ensuite être envoyé vers ma sortie analogique afin de générer le signal attendu.
    Voici un exemple de valeur contenue dans mon tableau a une taille variant de 1000 à 5000.
    Le problème n'est pas la, je souhaite que le signal généré soit compris dans une plage de fréquence de 10 à 200 Hz comme ci-dessous : 
    Le problème c'est que je n'arrive à gérer cette notion de fréquence, voici un bout de code simplifié simulant mon problème :
    en aucuns cas je maitrise l'étendue de mon signal et je voulais savoir si quelqu'un a une solution? Je précise que le tableau 1 D est inchangeable.
    Cordialement
    Pièces jointes :
    Sans titre 4.vi ‏91 KB

    Voila je passe mon tableau 1 D en waveform, je définis un Dt pour limiter la plage de fréquence à utiliser. Mais comment controler la fréquence minimale ? 
    Cordialement

  • Retarder par soft une horloge d'échantil​lonnage externe PCI6250

    Bonjour,
    Je développe une application avec VB6 sous Window Xp en utilisant une carte DAQ PCI6250.
    L'API NI-DAQmx n'étant pas supportée par VB6 j'utilise la dll "nicaiu.dll" pour piloter la carte.
    Je souhaite échantillonner un signal vidéo à partir d'un front d'horloge externe fournie et câblée sur une entrée PFIn. La fonction suivante "DAQmxCfgSampClkTiming" me permet de réaliser mon besoin. Cependant, j'ai besoin de retarder d'environ 300ns ce front d'horloge. Existe t-il une solution soft permettant de définir un retard/delay d'acquisition sur un front d'horloge externe ?
    Merci,
    DR

    Bonjour,
    Par soft, il est impossible de retarder le démarrage d'une acquisition avec une résolution de 300ns simplement avec les fonctions de temporisations. Par contre, avec la carte Serie M que vous avez, vous pouvez mettre en oeuvre une des 2 méthodes suivantes:
    * retarder le signal de trigger avec la propriété "Delay" de la classe "Trigger" du driver NI-DAQmx. Le "Delay" est réglable soit en nombre de ticks de la timebase interne, soit en secondes, soit en nombre de périodes de la sample clock. le choix de l'unité se fait avec la propriété "Delay Units".
    * générer un pulse retardé de 300ns à l'aide d'un des compteurs de la carte. La génération du pulse peut être triggé sur réception de votre signal de trigger externe et la sortie du pulse utilisée pour déclencher l'acquisition
    Cordialement.
    Matthieu Gourssies
    National Instruments France

  • PCI6229 et DaQmx : Générer et compter des impulsions

    Bonjour,
    avec labview 7.1 et une carte PCI629 :
    Je souhaite 
    -générer des impulsions pour piloter un moteur pas à pas
    -pouvoir interrompre cette génération  par l'utilisateur (bouton) ou un fin de course
    -compter les impulsions ainsi générées
    en utilisant les exemples fournis avec DaQmx, je n'ai aucun problème pour séparément :
        -  générer des impulsions à la fréquence
    souhaitée sur la sortie CTR1 out de la carte et les interrompre par un
    bouton
        -  compter les impulsions arrivant sur l'entrée CTR0 in de la carte
    par contre il semble impossible de faire les 2 à la fois. Si
    j'essaie  sur le vi  de génération d'impulsions  de
    créer un  nouveau canal virtuel pour compter les impulsions et de
    lancer la tache , j'ai un message "the specified ressource is reserved"
    Une idée pour résoudre ce problème ?
    D'avance merci
    Daniel

    Bonjour,
    Je crois que tu as commencé 2 posts identiques.
    http://forums.ni.com/t5/Discussions-au-sujet-de-NI/tableur-excel-vers-sortie-analogique/m-p/2917840#...
    SI c'est le cas, tu peux fermer celui-ci.
    Merci
    .mesLeft{float:left} .mesInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898} .mesLogo{float:right;opacity:0.18} .mesLogo:hover{opacity:0.9}
    Maxime R.  
      CLD - Certified LabVIEW Developer / Développeur LabVIEW Certifié  
      CLAD - Certified LabVIEW Associate Developer   

  • Simuler une horloge externe avec MAX

    Bonjour,
    Pour un projet, je dois acquérir des horloges externes (moteur) afin de synchroniser les éléments.
    Notament, je dois mettre en forme les deux horlogues en entrée afin de générer un horloge de sunchronisation.
    J'aimerai simuler la génération des deux horlogue sous MAX mais je rencontre des difficultés.
    Mes horloges possèdent une fréquence de 200Khz et sont déphasée de 90° l'une par rapport à l'autre. Je dois sur les deux horloges détecter les fronts montant et descendant.
    J'ai besoin d'aide pour simuler les deux horloges avec MAX.
    Merci d'avance

    Bonjour vince30,
    Je ne suis pas sure de bien comprendre ce que vous voulez faire.
    MAX vous permet de simuler une carte et donc simule les signaux que vous recevrez. Vous pouvez par exemple simuler une carte PCI-6221. Ensuite vous pouvez allez dans paneaux de test et dans E/S compteurs. Ensuite vous pouvez générer un train d'impulsion (et donc une horloge). Vous pouvez aussi faire du comptage de front et donc détecter des fronts montants ou descendant. Seulement comme votre carte est simulée, rien ne sera généré et pour les compteurs la détection de front ne détecte rien en simulation.
    Le but de la simulation d'une carte est que vous puissiez l'utiliser dans votre programme sans l'avoir mais vous ne pouvez pas choisir le signal qui sera simulé. Avec le driver NI-DAQmx, il y a de nombreux exemples avec des compteurs. Vous pouvez en utiliser un et directement tester le programme avec une carte simulée. Vous n'aurez pas de signaux réels mais vous aurez des message d'erreurs si vous essayez de faire quelque chose que la carte ne permet pas par exemple.
    Si vous voulez simuler un signal il vous faudra le créér par programmation. Avec LabVIEW, il y a des fonctions de simulation de signal.
    J'espère que ceci vous aidera.
    Cordialement,
    Charlotte F. | CLAD
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    >> "Du 11 octobre au 17 novembre, 2 sessions en parallèle : bien démarrer - approfondir vos connais...

  • Error In Package

    is giving this error:
    107/20 PLS-00103: Encountered the symbol "(" when one of the following
             symbols was expected:
             : =), Default character varying large
             The symbol ": =" has been replaced by "(" to continue.Why?
    this line in my editor, is not refering to this...
    How can I locate the correct line??
    thanks

    Friends, please, I´m having difficult to resolve the errors in package... Please help me;;
    Package:
    --  Package : pkg_frota_empresa
    --  Descrição:
    --    Este package contém as funções para implementação do módulo frota, para todos os processos
    --    e telas que são referente a Cadastro de Empresas para o Módulo de Frota
    --  Definir os PKG utilizado no módulo:
    --  Histórico:
    --    28/12/2009 - André - Implementação.
    -- @D:\RepositNovo\FwCard\Des\Modulos\Card_Frota\Package\pkg_frota_empresa.sql
    -- @C:\CARD_DES\Modulos\Card_Frota\Package\pkg_frota_empresa_teste.sql
    CREATE OR REPLACE PACKAGE pkg_frota_empresa_teste
    IS
    -- Definicao dos Tipos de Tabelas Dinamicas
    -- Definicao de constantes
    -- Definição de Variaveis globais
    g_frota_cliente    frota_cliente%ROWTYPE;
    g_contrato_cliente contrato_cliente%ROWTYPE;
    TYPE regemprec_type IS RECORD
        (  id_frota_cliente        NUMBER
         , id_cliente              VARCHAR2(50)
         , id_pessoa_juridica      VARCHAR2(50)
         , cnpj                    VARCHAR2(50)
         , id_tipo_documento       VARCHAR2(50)
         , ie                      VARCHAR2(50)
         , im                      VARCHAR2(50)
         , razao_social            VARCHAR2(50)
         , nome_fantasia           VARCHAR2(50)
         , ddd                     VARCHAR2(50)
         , telefone                VARCHAR2(50)
         , fax                     VARCHAR2(50)
         , ddd_cel                 VARCHAR2(50)
         , fone_cel                VARCHAR2(50)
         , email                   VARCHAR2(50)
         , nome_impresso           VARCHAR2(50)
         , id_ramo_atividade       VARCHAR2(50)
         , fatura_enviada          VARCHAR2(50)
         , id_estado_cartao        VARCHAR2(50)
         , id_matriz               VARCHAR2(50)
         , id_cliente_categoria    VARCHAR2(50)
         , end_extrato_cnv_empresa VARCHAR2(50)
         , id_agente               VARCHAR2(50)
         , aceitar_cpf_nulo        VARCHAR2(1));
    TYPE regemp_type IS TABLE OF regemprec_type INDEX BY BINARY_INTEGER;
    -- Definição de Procedures e Funçoes que deverão ser publica, acesso de outras funçoes
    PROCEDURE inicializar;
    --Frota Cliente
    PROCEDURE inc_altfrotacliente(
       p_reg frota_cliente%ROWTYPE
    --Frota Cliente
    /*PROCEDURE inc_alt_frotacliente_exec(
      p_id_frota_cliente         IN OUT frota_cliente.id_frota_cliente%TYPE,
      p_id_cliente               IN     frota_cliente.id_cliente%TYPE,
      p_limite_mensal            IN     frota_cliente.limite_mensal%TYPE        DEFAULT 0,
      p_limite_trans             IN     frota_cliente.limite_trans%TYPE         DEFAULT 0,
      p_qtd_max_litros           IN     frota_cliente.qtd_max_litros%TYPE       DEFAULT 0,
      p_valor_max                IN     frota_cliente.valor_max%TYPE            DEFAULT 0,
      p_ver_agenda_condutor      IN     frota_cliente.ver_agenda_condutor%TYPE  DEFAULT '0',
      p_ver_km                   IN     frota_cliente.ver_km%TYPE               DEFAULT '0',
      p_ver_valor_max            IN     frota_cliente.ver_valor_max%TYPE        DEFAULT '0',
      p_diaval_carta_credito     IN     frota_cliente.diaval_carta_credito%TYPE DEFAULT 0
    -- Empresa+Frota_Cliente+Frota_Cliente_Veiculo
    PROCEDURE excluir(
       p_id_frota_cliente         IN  frota_cliente.id_frota_cliente%TYPE
    -- Chama o procedimento acima
    PROCEDURE excluirexec(
      p_id_frota_centro_custo IN frota_centro_custo.id_frota_centro_custo%TYPE
    --Empresa
    PROCEDURE inc_alt(
       p_reg  RegEmp_type
    --Chama o procedimento acima
    PROCEDURE inc_altexec(
       p_id_frota_cliente        IN OUT VARCHAR2,
       p_id_empresa              IN OUT VARCHAR2,
       p_id_pessoa_juridica      IN OUT VARCHAR2,
       p_cnpj                    IN VARCHAR2,
       p_id_tipo_documento       IN VARCHAR2,
       p_ie                      IN VARCHAR2,
       p_im                      IN VARCHAR2,
       p_razaosocial             IN VARCHAR2,
       p_fantasia                IN VARCHAR2,
       p_ddd                     IN VARCHAR2,
       p_telefone                IN VARCHAR2,
       p_fax                     IN VARCHAR2,
       p_ddd_cel                 IN VARCHAR2,
       p_fone_cel                IN VARCHAR2,
       p_email                   IN VARCHAR2,
       p_nome_impresso           IN VARCHAR2,
       p_ramo                    IN VARCHAR2,
       p_fatura_enviada          IN VARCHAR2,
       p_id_estado_cartao        IN VARCHAR2,
       p_id_matriz               IN VARCHAR2,
       p_cliente_categoria       IN VARCHAR2,
       p_end_extrato_cnv_empresa IN VARCHAR2,
       p_agente                  IN VARCHAR2,
       p_cpf_nulo                IN VARCHAR2
    PROCEDURE vrf_empresa(
       p_cnpj IN VARCHAR2,
       p_id_tipo_documento IN tipo_documento.id_tipo_documento%TYPE
    PROCEDURE inc_alt_contrato(
        p_operacao CHAR(1),
        p_reg contrato_cliente%ROWTYPE
    PROCEDURE inc_alt_contratoexec(
        p_operacao                 IN VARCHAR(1),
        p_id_cliente               IN contrato_cliente.id_cliente%TYPE,
        p_id_produto               IN produto.id_produto%TYPE,
        p_data_inicio              IN contrato_cliente.data_inicio%TYPE,
        p_data_fim                 IN contrato_cliente.data_fim%TYPE,
        p_comissao_1               IN contrato_cliente.comissao1%TYPE,
        p_comissao_2               IN contrato_cliente.comissao2%TYPE,
        p_forma_comissao1          IN contrato_cliente.forma_comissao1%TYPE,
        p_forma_comissao2          IN contrato_cliente.forma_comissao2%TYPE,
        p_dia_entrega              IN contrato_cliente.dia_entrega%TYPE,
        p_agente                   IN contrato_cliente.id_agente%TYPE
    END;
    SHOW ERRORS
    --------------------------Inicio das Definições dos Procedimento e Funçoes ------------------------------
    -- Os Procedimentos e Funçoes devem ter um cabeçalho explicando a função os parametros de entrada e saida
    -- As Definições das Variaveis de parametros de funcao e procedures devem iniciar com: p_
    -- As Definições de Variaveis locais deve sempre iniciar com: v_
    CREATE OR REPLACE PACKAGE BODY pkg_frota_empresa
    IS
    -- Function :  inicializar
    -- Descrição: Função que inicializa variaveis do PKG
    PROCEDURE inicializar
    IS
    BEGIN
      RETURN;
    END;
    -- Procedimento : inc_alt_frotacliente
    -- Descrição: Cadastro de Empresa
    -- Entrada
    --   p_reg : Valores a serem operados
    -- OBS:  Sem Commit e tratamento de excessão
    -- Histórico
    -- DATA       - DESENVOLVIMENTO - REQUISITO - INFORMAÇÃO
    -- 20/01/2010 - [ATILIO]        - #79165    - Implementação
    PROCEDURE inc_alt_frotacliente(
       p_reg frota_cliente%ROWTYPE
    IS
    BEGIN
      IF p_reg.id_frota_cliente IS NULL THEN
        SELECT SEQ_FROTA_CLIENTE.NEXTVAL INTO p_reg.id_frota_cliente FROM DUAL;
        INSERT INTO FROTA_CLIENTE VALUES p_reg;
      ELSE
        UPDATE FROTA_CLIENTE
        SET  id_cliente          = p_reg.id_cliente,
             limite_mensal       = p_reg.limite_mensal,
             limite_trans        = p_reg.limite_trans,
             qtd_max_litros      = p_reg.qtd_max_litros,
             valor_max           = p_reg.valor_max,
             ver_agenda_condutor = p_reg.ver_agenda_condutor,
             ver_km              = p_reg.ver_km,
             ver_valor_max       = p_reg.ver_valor_max,
             diaval_carta_credito= p_reg.diaval_carta_credito
        WHERE id_frota_cliente   = p_reg.id_frota_cliente;
      END IF;
    END;
    -- Procedimento : inc_alt_frotacliente_exec
    -- Descrição    : Incluir ou Alterar um registro referente a tabela: FROTA_CLIENTE
    -- Entrada:  p_id_frota_cliente     - Identificador do frota_cliente, quando( =NULL -> Incluir  <>NULL -> Alterar)
    --           p_id_cliente           - Identificador do cliente
    --           p_limite_mensal        - Limite mensal por veiculo
    --           p_limite_trans         - Limite por transação por veiculo
    --           p_qtd_max_litros       - Quantidade maxima de litros por abestecimento
    --           p_valor_max            - Valor máximo por abastecimento
    --           p_ver_agenda_condutor  - Configuração se deve ser verificado o agendamento para permitir abastecimento
    --           p_ver_km               - Configuração se deve verificar a KM no abastecimento
    --           p_ver_valor_max        - Configuração se deve ser verificado o valor máximo no abastecimento
    --           p_diaval_carta_credito - Configura o maximo de dias para vigencia de uma carta frete
    -- Historico
    --   DATA       - DESENVOLVEDOR - REQUISITO - INFORMAÇÃO
    --   20/01/2010 - Atilio - Implementação de Defaults
    /*PROCEDURE inc_alt_frotacliente_exec(
      p_id_frota_cliente         IN OUT frota_cliente.id_frota_cliente%TYPE,
      p_id_cliente               IN     frota_cliente.id_cliente%TYPE,
      p_limite_mensal            IN     frota_cliente.limite_mensal%TYPE        DEFAULT 0,
      p_limite_trans             IN     frota_cliente.limite_trans%TYPE         DEFAULT 0,
      p_qtd_max_litros           IN     frota_cliente.qtd_max_litros%TYPE       DEFAULT 0,
      p_valor_max                IN     frota_cliente.valor_max%TYPE            DEFAULT 0,
      p_ver_agenda_condutor      IN     frota_cliente.ver_agenda_condutor%TYPE  DEFAULT '0',
      p_ver_km                   IN     frota_cliente.ver_km%TYPE               DEFAULT '0',
      p_ver_valor_max            IN     frota_cliente.ver_valor_max%TYPE        DEFAULT '0',
      p_diaval_carta_credito     IN     frota_cliente.diaval_carta_credito%TYPE DEFAULT 0
    IS
    BEGIN
      --preencho o type
      g_frota_cliente.id_frota_cliente         := p_id_frota_cliente;
      g_frota_cliente.id_cliente               := p_id_cliente;
      g_frota_cliente.limite_mensal            := nvl(p_limite_mensal,0);
      g_frota_cliente.limite_trans             := nvl(p_limite_trans,0);
      g_frota_cliente.qtd_max_litros           := p_qtd_max_litros;
      g_frota_cliente.valor_max                := p_valor_max;
      g_frota_cliente.ver_agenda_condutor      := p_ver_agenda_condutor;
      g_frota_cliente.ver_km                   := p_ver_km;
      g_frota_cliente.ver_valor_max            := p_ver_valor_max;
      g_frota_cliente.diaval_carta_credito     := p_diaval_carta_credito;
      inc_alt_frotacliente(g_frota_cliente);
      COMMIT;
      EXCEPTION
      WHEN OTHERS THEN
        fwerr.gerar_exception(p_procedimento => 'pkg_frota_empresa.inc_alt_frotacliente');
    END;*/
    -- Procedimento : excluir
    -- Descrição    : Excluir um registro referente a tabela: FROTA_CLIENTE
    -- Entrada:  p_id_frota_cliente   - Identificador do frota_cliente
    -- OBS: Este procedimento não gera COMMIT, deixando para a função que chama esta responsabilidade
    -- Historico
    --   DATA       - DESENVOLVEDOR - REQUISITO - INFORMAÇÃO
    --   12/01/2010 - JOAO   -                  - Implementação
    --   20/01/2010 - ATILIO -
    PROCEDURE excluir(
      p_id_frota_cliente         IN  frota_cliente.id_frota_cliente%TYPE
    IS
    BEGIN
      DELETE FROTA_CLIENTE_VEICULO WHERE id_frota_cliente = p_id_frota_cliente;
      DELETE FROTA_CLIENTE WHERE id_frota_cliente = p_id_frota_cliente;
    END;
    -- Procedimento : excluirexec
    -- Descrição    : Excluir um registro referente a tabela: FROTA_CLIENTE
    -- Entrada:  p_id_frota_cliente   - Identificador de frota_cliente
    -- OBS:
    -- Historico
    --   DATA       - DESENVOLVEDOR - REQUISITO - INFORMAÇÃO
    --   20/01/2010 - ATILIO   -                  - Implementação
    PROCEDURE excluirexec(
      p_id_frota_cliente  IN  frota_cliente.id_frota_cliente%TYPE DEFAULT NULL
    IS
      v_ret  PLS_INTEGER;
      v_id_cliente NUMBER;
    BEGIN
      IF p_id_frota_cliente IS NULL THEN
        FOR i IN 1..htmldb_application.g_f01.COUNT LOOP
          SELECT id_cliente INTO v_id_cliente FROM frota_cliente WHERE id_frota_cliente = htmldb_application.g_f01(i);
          excluir(p_id_frota_cliente => htmldb_application.g_f01(i));
          v_ret := pkg_limpeza.lmp_empresa(v_id_cliente);
          fwerr.verificar(v_ret=0,v_ret);
        END LOOP;
      ELSE
        SELECT id_cliente INTO v_id_cliente FROM frota_cliente WHERE id_frota_cliente = p_id_frota_cliente;
        excluir(p_id_frota_cliente => p_id_frota_cliente);
        v_ret := pkg_limpeza.lmp_empresa(v_id_cliente);
        fwerr.verificar(v_ret=0,v_ret);
      END IF;
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        fwerr.gerar_exception(p_procedimento => 'excluirexec');
    END;
    -- Procedimento : inc_alt
    -- Descrição    : Inclusão/Alteração Empresa
    -- Entrada:  p_reg   - Referência a tabela temporária
    -- OBS:
    -- Historico
    --   DATA       - DESENVOLVEDOR - REQUISITO - INFORMAÇÃO
    --   20/01/2010 - ATILIO   -                  - Implementação
    PROCEDURE inc_alt(
       p_reg regemp_type
    IS
      v_id_emp  NUMBER;
      v_encontrou BOOLEAN DEFAULT TRUE;
    BEGIN
      IF p_reg(2) IS NULL THEN
        v_encontrou := FALSE;
      ELSE
        BEGIN
          SELECT id_cliente INTO v_id_emp FROM frota_cliente WHERE id_cliente = p_reg(2);
        EXCEPTION
          WHEN NO_DATA_FOUND THEN
          v_encontrou:=FALSE;
        END;
      END IF;
      IF NOT v_encontrou THEN
        ca_empresa_incluir_alterar(p_reg(2) ,p_reg(3) ,p_reg(4) ,p_reg(5) ,p_reg(6) ,p_reg(7) ,p_reg(8) ,p_reg(9) ,p_reg(10),
                                   p_reg(11),p_reg(12),p_reg(13),p_reg(14),p_reg(15),p_reg(16),p_reg(17),p_reg(18),p_reg(19),
                                   p_reg(20),p_reg(21),p_reg(22),p_reg(23),p_reg(24));
        --Constraint - com tab cliente
        SELECT id_cliente INTO v_id_emp FROM cliente WHERE id_cliente = p_reg(2);
        inc_altfrotacliente(p_id_frota_cliente => p_reg(1),
                            p_id_cliente       => v_id_emp);
      ELSE
        ca_empresa_incluir_alterar(p_reg(2) ,p_reg(3) ,p_reg(4) ,p_reg(5) ,p_reg(6) ,p_reg(7) ,p_reg(8) ,p_reg(9) ,p_reg(10),
                                   p_reg(11),p_reg(12),p_reg(13),p_reg(14),p_reg(15),p_reg(16),p_reg(17),p_reg(18),p_reg(19),
                                   p_reg(20),p_reg(21),p_reg(22),p_reg(23),p_reg(24));
      END IF;
    END;
    --  Procedure: inc_altexec
    --  Descrição:
    --    Incluir ou Alterar cadastro de empresa (FROTA)
    --  Entrada:
    --    cadastro de empresa
    --    p_id_frota_cliente     : identificação da empresa dentro do módulo
    --    p_id_empresa           : Identificador da empresa
    --    p_id_pessoa_juridica   : Identificador da empresa
    --    p_cnpj                 : CNPJ da empresa
    --    p_id_tipo_documento    : Indica o tipo de documento
    --    p_ie                   : Inscrição Estadual
    --    p_im                   : Inscrição Municipal
    --    p_razaosocial          : Razão Social
    --    p_fantasia             : Nome Fantasia
    --    p_ddd                  : DDD do telefone
    --    p_telefone             : Número do telefone
    --    p_fax                  : Número do fax
    --    p_ddd_cel              : DDD do celular
    --    p_fone_cel             : Número do celular
    --    p_email                : Email da empresa
    --    p_nome_impresso        : Nome que será impresa na fatura
    --    p_ramo                 : Ramo de Atividade
    --    p_fatura_enviada       : Idicador se a empresa pode reimprimir fatura pelo portal que já
    --                             foram enviada para o banco
    --    p_id_estado_cartao     : Estado que ficará o cartão após ser confeccionado
    --    p_id_matriz            : Identificador da empresa matriz
    --    p_cliente_categoria    : Categoria do Cliente
    --    p_end_extrato_cnv_empresa : Endereço Extrato Conferência
    --    p_agente               : Agente relacionado
    --    p_cpf_nulo             : Cpf nulo
    --  Histórico:
    -- 20/01/2010 - Atílio - Implementação
    PROCEDURE inc_altexec(
        p_id_frota_cliente        IN OUT VARCHAR2,
        p_id_empresa              IN OUT VARCHAR2,
        p_id_pessoa_juridica      IN OUT VARCHAR2,
        p_cnpj                    IN VARCHAR2,
        p_id_tipo_documento       IN VARCHAR2,
        p_ie                      IN VARCHAR2,
        p_im                      IN VARCHAR2,
        p_razaosocial             IN VARCHAR2,
        p_fantasia                IN VARCHAR2,
        p_ddd                     IN VARCHAR2,
        p_telefone                IN VARCHAR2,
        p_fax                     IN VARCHAR2,
        p_ddd_cel                 IN VARCHAR2,
        p_fone_cel                IN VARCHAR2,
        p_email                   IN VARCHAR2,
        p_nome_impresso           IN VARCHAR2,
        p_ramo                    IN VARCHAR2,
        p_fatura_enviada          IN VARCHAR2,
        p_id_estado_cartao        IN VARCHAR2,
        p_id_matriz               IN VARCHAR2,
        p_cliente_categoria       IN VARCHAR2,
        p_end_extrato_cnv_empresa IN VARCHAR2,
        p_agente                  IN VARCHAR2,
        p_cpf_nulo                IN VARCHAR2
    IS
    BEGIN
      RegEmp_type(1)  := p_id_frota_cliente;
      RegEmp_type(2)  := p_id_empresa;
      RegEmp_type(3)  := p_id_pessoa_juridica;
      RegEmp_type(4)  := p_cnpj;
      RegEmp_type(5)  := p_id_tipo_documento;
      RegEmp_type(6)  := p_ie;
      RegEmp_type(7)  := p_im;
      RegEmp_type(8)  := p_razaosocial;
      RegEmp_type(9)  := p_fantasia;
      RegEmp_type(10) := p_ddd;
      RegEmp_type(11) := p_telefone;
      RegEmp_type(12) := p_fax;
      RegEmp_type(13) := p_ddd_cel;
      RegEmp_type(14) := p_fone_cel;
      RegEmp_type(15) := p_email;
      RegEmp_type(16) := p_nome_impresso;
      RegEmp_type(17) := p_ramo;
      RegEmp_type(18) := p_fatura_enviada;
      RegEmp_type(19) := p_id_estado_cartao;
      RegEmp_type(20) := p_id_matriz;
      RegEmp_type(21) := p_cliente_categoria;
      RegEmp_type(22) := p_end_extrato_cnv_empresa;
      RegEmp_type(23) := p_agente;
      RegEmp_type(24) := p_cpf_nulo;
      inc_alt(RegEmp_type);
    EXCEPTION
      WHEN OTHERS THEN
        fwerr.gerar_exception(p_procedimento => 'inc_altexec');
    END;
    -- Procedimento : vrf_empresa
    -- Descrição : Procedimento responsável por verificar se o documento que esta sendo
    --             incluído já não pertence a uma empresa ou pessoa juridica, e para qual
    --             página do sistema será redirecionado.
    -- Entrada p_cnpj              - Documento
    --         p_id_tipo_documento - Tipo do documento da tabela TIPO_DOCUMENTO
    -- Histórico
    -- DATA       - DESENVOLVEDOR - REQUISITO - INFORMAÇÃO
    -- 15/01/2010 - ATILIO   -  #79229        - Implementação
    PROCEDURE vrf_empresa(
        p_cnpj IN VARCHAR2,
        p_id_tipo_documento IN tipo_documento.id_tipo_documento%TYPE)
    IS
      v_cnpj                pessoa_juridica.cnpj%TYPE;
      v_id_empresa          cliente.id_cliente%TYPE DEFAULT NULL;
    BEGIN
      v_cnpj:= fwutl.limpar_numero(p_cnpj);
      FOR lst IN ( SELECT fc.id_cliente as "Cliente",c.id_cliente, pj.id_pessoa_juridica
                     FROM cliente c, pessoa_juridica pj, frota_cliente fc
                    WHERE pj.id_pessoa_juridica = c.id_pessoa_juridica(+)
                      AND c.id_cliente = fc.id_cliente
                      AND pj.cnpj      = v_cnpj)
      LOOP
        v_id_empresa         := lst.id_cliente;
        EXIT;
      END LOOP;
      IF ( v_id_empresa IS NOT NULL ) THEN
        fwapl.redirecionar('f?p='||v('APP_ID')||':15011:'||v('APP_SESSION')||
          '::NO::P15011_CODIGO:'||v_id_empresa);
      ELSE
        fwapl.redirecionar('f?p='||v('APP_ID')||':15013:'||v('APP_SESSION')||
          '::NO:15013:P15013_PAGINA,P15013_CNPJ,P15013_ID_TIPO_DOCUMENTO:15012,'||formatar_docto(v_cnpj,p_id_tipo_documento)||','||p_id_tipo_documento);
      END IF;
      RETURN;
    EXCEPTION
      WHEN OTHERS THEN
        fwerr.gerar_exception(p_procedimento => 'pkg_frota_empresa.vrf_empresa');
    END;
    -- Procedimento : inc_alt_contrato
    -- Descrição    : Incluir/Alterar contrato para a empresa
    -- Histórico
    -- 18/01/2010 - Atilio - (79234) - Implementação
    PROCEDURE inc_alt_contrato(
        p_operacao CHAR(1),
        p_reg contrato_cliente%ROWTYPE
    IS
    BEGIN
      IF p_operacao = 'I' THEN
        ca_empresa_contrato_incluir(p_reg.id_cliente,p_reg.id_produto,p_reg.data_inicio,p_reg.data_fim,p_reg.comissao1,p_reg.comissao2,
                                    p_reg.forma_comissao1,p_reg.forma_comissao2,p_reg.dia_entrega,p_reg.id_agente);
      ELSE
        ca_empresa_contrato_incluir(p_reg.id_cliente,p_reg.id_produto,p_reg.data_inicio,p_reg.data_fim,p_reg.comissao1,p_reg.comissao2,
                                    p_reg.forma_comissao1,p_reg.forma_comissao2,p_reg.dia_entrega,p_reg.id_agente);
      END IF;
    END;
    -- Procedimento : inc_alt_contratoexec
    -- Descrição    : Incluir/Alterar contrato para a empresa
    -- Histórico
    -- 18/01/2010 - Atilio - (79234) - Implementação
    PROCEDURE inc_alt_contratoexec(
        p_operacao                 IN VARCHAR(1),
        p_id_cliente               IN contrato_cliente.id_cliente%TYPE,
        p_id_produto               IN produto.id_produto%TYPE,
        p_data_inicio              IN contrato_cliente.data_inicio%TYPE,
        p_data_fim                 IN contrato_cliente.data_fim%TYPE,
        p_comissao_1               IN contrato_cliente.comissao1%TYPE,
        p_comissao_2               IN contrato_cliente.comissao2%TYPE,
        p_forma_comissao1          IN contrato_cliente.forma_comissao1%TYPE,
        p_forma_comissao2          IN contrato_cliente.forma_comissao2%TYPE,
        p_dia_entrega              IN contrato_cliente.dia_entrega%TYPE,
        p_agente                   IN contrato_cliente.id_agente%TYPE
    IS
    BEGIN
      g_contrato_cliente.p_id_cliente     :=  p_id_cliente;
      g_contrato_cliente.p_id_produto     :=  p_id_produto;
      g_contrato_cliente.p_data_inicio    :=  p_data_inicio;
      g_contrato_cliente.p_data_fim       :=  p_data_fim;
      g_contrato_cliente.p_comissao_1     :=  p_comissao_1;
      g_contrato_cliente.p_comissao_2     :=  p_comissao_2;
      g_contrato_cliente.p_forma_comissao1:=  p_forma_comissao1;
      g_contrato_cliente.p_forma_comissao2:=  p_forma_comissao2;
      g_contrato_cliente.p_dia_entrega    :=  p_dia_entrega;
      g_contrato_cliente.p_agente         :=  p_agente;
      inc_alt_contrato(p_operacao => p_operacao
                      ,p_reg => g_contrato_cliente);
    EXCEPTION
      WHEN OTHERS THEN
        fwerr.gerar_exception(p_procedimento => 'pkg_frota_empresa.inc_alt_contratoexec');
    END;
    ---------------------------Final das Definições dos Procedimento e Funçoes ------------------------------
    BEGIN
      inicializar;
    END;
    SHOW ERRORSERRORS:
    105/20 PLS-00103: Encountered the symbol "(" when one of the following
             symbols was expected:
             : =), Default character varying large
             The symbol ": =" has been replaced by "(" to continue.
    110/42 PLS-00103: Encountered the symbol "(" when one of the following
             symbols was expected:
             : =. ), @% Default character
             The symbol ": =" has been replaced by "(" to continue.
    Warning: Package Body created with compilation errors.
    PROCEDURE inc_alt (
    ERROR at line 1:
    ORA-00900: invalid SQL statement
    Errors for PACKAGE BODY PKG_FROTA_EMPRESA:
    LINE / COL ERROR
    169 / 4 PLS-00103: Encountered the symbol "end-of-file" when one of
             following symbols was expected:
             begin end function package pragma procedure form

  • Comment commander un moteur CC avec Labview

    Bonjour,
    Je suis étudiant en mécanique et dans le cadre d'un projet, je dois créer un programme labview qui:
    - en entrée utilise les image provenant d'un caméra qui film une goutte sur un tapis
    - traiter cette image avec Vision Assistant (étape déjà faite)
    - générer une tension proportionnelle à la position du barycentre de la goutte (trouvé par le traitement précédent) par rapport au centre de l'image (avance ou retard).
    Le problème réside dans la génération de cette tension.
    Je voudrais faire varier la vitesse de rotation d'un moteur CC d'essuie-glace 12V ( Valéo, modèle voiture 406). Pour celà, je sais que je dois envoyer une tension générée depuis mon ordinateur jusqu'à une carte moteur (je pensais à une carte Sabertooth 2*12) mais je dois envoyer l'information par du RS 232. Est-il possible de générer ce type de tension à partir de Labview? Si oui, comment puis-je adapter une génération à la suite de mon programme en remplacement du signal simulé? (Dois-je utiliser VISA?)
    Est-t-il également possible de choisir une carte du type NI USB-6008, de communiquer avec elle et de la connecter à mon moteur? Car je m'aperçois que la sortie analogique n'est que de 5V maxi, donc cela nécessiterai une amplification supplémentaire?
    (Je joins au message la doc de la carte Saberttoth et le programme que j'ai commencé ainsi que l'image sur laquelle je travaille).
    Merci d'avance pour votre aide!
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    test_ouverture_fichier2.vi ‏153 KB
    Carte_moteur_Sabertooth.pdf ‏1314 KB
    goutte test.png ‏249 KB

    Bonjour,
    Si j'ai pu aider. Dans tous les cas, tu auras besoin de ta carte Sabertooth pour servir d'interface de puissance. Par contre, entre le RS232 et l'analogique pour la piloter c'est à toi de voir. Je pense que le 0-5 V fournit par une 6008 est plus imple à mettre en oeuvre, tu auras a mon vis la sortie 0-12V proportionnelle à l'entrée 0-5V. De toute façon, tu ne pourrais pas piloter le moteur en direct, il faut du matériel dédié (comme ta carte), car sinon, une 6008 ne founit pas de puissance, juste une tension.
    L'utilisation en RS232 peut être un peu plus compliqué à mettre en oeuvre au début, masi je pense que tu auras plus de souplesse et de possibilité pour le pilotage du moteur.
    Bonne continuation.
    Pense a marquer le forum comme résolu et à donner des compliments aux personnes qui ont répondu.
    Merci
    .mesLeft{float:left} .mesInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898} .mesLogo{float:right;opacity:0.18} .mesLogo:hover{opacity:0.9}
    Maxime R.  
      CLD - Certified LabVIEW Developer / Développeur LabVIEW Certifié  
      CLAD - Certified LabVIEW Associate Developer   

  • Générer des impulsions

    Bonjour,
    Mon problème n'est surement pas très compliqué mais je n'y arrive pas soit par manque de connaissance sur LabVIEW soit parce que la version que j'ai ne me le permet pas.
    Je souhaiterais générer un train d'impulsions (2ou3 impulsions seulement), ce signal sert à piloter une petite électrovanne. Il faut donc pouvoir maitriser la durée de l'impulsion et le temps entre les impulsions.
    Je dispose d'une carte NI9263 et de LabVIEW 9.0
    Enfait nous souhaitons réaliser l'équivalent de l'arduino Photoduino (petit boitier pilotant une electrovanne et un appareil photo + flash). Au lieu de prendre une photo nous souhaitons prendre une vidéo à l'aide d'une caméra Olympus. Nous pensions nous servir du déclencheur de la caméra pour piloter à la fois la caméra et l'electrovanne.
    Le declencheur agit comme un simple interrupteur (le signal passe de 5V à 0V lorsque on appuis). Actuellement je récupere ce signal sur LabVIEW, et lorsque je detecte un front decendant,  cela creé un signal "Carré" que j'envoi sur l'electrovanne (en passant par un transistor afin d'avoir l'ampérage demandé).
    Mais nous avons 2 problèmes notable :
    Le 1er est qu'il y à un retard non constant et non négligeable entre le début de la vidéo et la première goutte qui sort de l'EV (de 90ms à 350ms..). Cela me parrait beaucoup, peu etre que cela vient d'une erreur de ma part sur le VI (fréquence d'échantillonage, mauvaise optimisaion du VI ?)
    Pour réduire ce retard nous pensions piloter la caméra directement à partir de LabVIEW :  LabVIEW activerait un relais (remplaçant le déclencheur) et en parallele LabVIEW générerait le signal pour l'electrovanne. Ce qui m'intrigue c'est que le retard ne soit pas constant, cela me laisse penser que le problème vien du VI en lui même et qu'il serait possible de réduire cette durée. L'objectif étant qu'elle soit minimale OU que le retard soit constant.
    Le second problème, la génération d'un signal carré n'est pas satisfaisant pour observer des collisions entre gouttes. Il serait préférable de générer un train de 2 ou 3 impulsions où l'on peut choisir la durée de l'impulsion mais surtout le temps entre les impulsions. Sur LabVIEW je n'arrive pas à trouver la palette qui permet cela.. 
    Auriez vous quelque pistes svp?
    Si vous avez besoin de renseignement supplémentaires, n'hésitez pas !
    Cordialement,
    Alexandre.

    Merci pour ces informations.
    Je n'ai pas réussi à faire fonctionner le VI Gen Dig Pulse 8.5, lorsque je clique sur "Counter" cela ne me propose aucune voie. Si j'ai bien compris il faut une sortie "Compteur" et la carte que j'utilise(NI9263) ne possède que des sorties analogiques.
    Ne sachant pas faire les impulsions, j'ai contourné le problème en générant plusieurs tableaux qui au final me permettent de créer l'équivalent de 2 impulsions, mais sa ne fonctionne pas comme je voudrais.. Je vous joint le VI en piece jointe : "EVolympus.vi". Idéalement les impulsions sont de l'ordre de 10ms et espacé de 90ms.
    Le VI Gen Dig Pulse donnerait-il de meilleur resultat ?
    Je peux avoir à ma disposition (pour faire des essai) un boitier NI USB6343 (16inputs,16bit, 500kS/s, X series Multifonction DAQ).
    En parallele je travaille sur un stroboscope à LED piloté par Labview. Nous souhaiterions avoir 5 panneaux de LED, mais nous ne disposons que de 4 sorties analogique (NI9263). Nous avons couplé 2 panneaux sur la sortie ao3 mais ils ne fonctionnent pas. Problème de masse?
    Le signal Labview est envoyé sur la base d'un transistor.
    Je vous joint le VI ainsi qu'un schéma du cablâge.
    Cordialement,
    Alexandre.
    Pièces jointes :
    electric-schema.png ‏12 KB
    Stroboscope.vi ‏176 KB
    EVolympus.vi ‏98 KB

Maybe you are looking for

  • Clearing history one page at a time

    HELP! Unlike Explorer, I can't find a way to remove just one site (page) from history at a time. It just has a clear option that wipes everything out. Does anyone know if it is possible to clear one page at a time?

  • Windows 8 is not detecting my VIXIA HF M40 Camcorder

    Windows 8 is not detecting my VIXIA HF M40 Camcorder. I wonder if anyone else have the same problem. I did install the latest version of CameraWindow (i.e.CameraWindow DC 8.8 for Windows) software and I tried to run it manually but it complains that

  • Superimposed letters when printing

    Hi, When printing, some lines come written with double letter effect: For example, the word "is: comes written like iiss. The letters are so close that are almost on top of each other. Some times they are so close the word looks like is written in bo

  • Characters changing as I type

    I'm working on a document and see that as I type sometimes (not always) when I type a "c" it shows up as a k. This has happened in the word picture and touches. I don't know why. And after a "c" (that comes up as a "k") I type k and it comes up as "l

  • After OS reinstall, folder in dock opens in icon view.

    I have to click Open in Finder to see it as a list. It used to open as a list with one click. How can I fix settings to get list view in one click again?