Sortie 24V avec CompactDAQ et module NI 9472
Bonjour à tous,
Je travaille actuellement sur un projet où je dois utiliser un système qui est commandé électriquement et est constitué d’une valve sélectrice.
Ce système est actif tant qu'il est alimenté (tension de 24 Vcc) et je voudrais pouvoir contrôler ce système avec simplement l'appui d'un bouton dans mon interface Labview.
De plus, j'utilise un système CompactDAQ et différents modules pour l'acquisition des données des capteurs que j'ai, et je voudrais donc utiliser un de ces modules pour fournir cette tension de 24V.
Sur le site internet de NI, je n'ai pas trouvé de module de sortie analogique qui pourrait fournir une tension allant jusqu'à 24V et je me suis donc arrêté sur le module de sortie numérique NI 9472 que j'avais déjà de disponible et qui a une gamme de sortie maximale entre 6 et 30 V.
Pouvez-vous donc me dire si ce module pourrait convenir pour obtenir cette tension en sortie du CompactDAQ et vers mon système ? Sinon, quelqu'un aurait un autre module à me conseiller peut-être ?
C'est aussi le fait que ce module soit un module de sortie numérique plutôt qu'analogique qui me gène...
N'ayant pas encore accès aux capteurs de ma machine, je voudrais également savoir si il était possible dans un VI de simuler mes signaux de sortie de capteur (4 à 20 mA) afin de tester le fonctionnement de mon programme ?
Merci d'avance pour vos réponse !
Bonjour,
Merci pour votre dernière réponse, mais malgré tout je ne parviens pas à faire fonctionner mon VI que j'ai mis en fichier ci-joint. C'est en fait un sous-VI de mon programme principal.
Comme vous me l'avez indiqué, j'ai mis à l'intérieur d'une boucle "while" un bouton ON/OFF avec l'assistant DAQ que j'ai mis
en "sortie de port" sur le port 0 car c'est e seul choix qui m'est offert lorsque je le configure.
Bref, j'ai fait un montage rapide comme indiqué dans la documentation du module 9485 avec une source de tension CC 24V sur l'entrée 0 (CH0a) puis en sortie 1 (CH0b) j'ai connecté une résistance pour ma charge et ensuite je reviens vers la masse de mon alimentation pour fermer le circuit. J'ai également connecté un voltmètre en parallèle sur ma charge pour vérifier que la tension de 24V circule bien lors de l'activation du relai.
Cependant, comme vous verrez sur le VI ci-joint, je ne peux pas faire la liaison entre mon bouton poussoir et l'assistant DAQ car mon interrupteur est de type booléen et mon assistant DAQ doit recevoir un tableau 1D.
J'espère que vous pourrez m'indiquer une méthode pour arriver à avoir mes 24V en sortie, pourtant il me semble que ce n'est pas si difficile que ça et j'ai fait des choses beaucoup plus compliquées dans mes autres programmes...
Aussi, j'ai remarqué lorsque je rentre dans mon assistant DAQ pour le configurer et que j'appuie sur "exécuter", j'obtient bien mes 24V en sortie, ce qui indique que le relai s'est fermé, mais pour le réouvrir et retrouver une tension nulle, je dois appuyer sur "inverser toutes les lignes du port".
Merci d'avance pour votre réponse !
Pièces jointes :
Régénération_finale.vi 38 KB
Similar Messages
-
Sort up and sort Down push buttons in module pool with table control wizard
hi,
i have created 2 buttons for Sort up and sort Down push buttons in module pool with table control wizard
please any one can help me.
regardsHi
Following code is to enable and disable the tbl control using two buttons. Just alter the code and for each button write the sort code.
REPORT YJAN27_SCREEN .
TABLES: SFLIGHT, YFLIGHT_28.
TYPES: BEGIN OF struct1,
carrid like sflight-carrid,
connid like sflight-connid,
fldate like sflight-fldate,
END OF struct1.
CONTROLS TBL1 TYPE TABLEVIEW USING SCREEN 2700.
DATA: OK_CODE LIKE SY-UCOMM,
CARRID LIKE SFLIGHT-CARRID, "cols in tbl ctrl
CONNID LIKE SFLIGHT-CONNID,
FLDATE LIKE SFLIGHT-FLDATE,
itab TYPE TABLE OF STRUCT1 WITH HEADER LINE,
cols like line of TBL1-COLS,
FLAG TYPE I.
FLAG = 1.
CALL SCREEN 2700.
*& Module STATUS_2700 OUTPUT
* text
MODULE STATUS_2700 OUTPUT.
SET PF-STATUS 'BACK'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_2700 OUTPUT
*& Module USER_COMMAND_2700 INPUT
* text
MODULE USER_COMMAND_2700 INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'DIS'. "write code for sort up
loop AT TBL1-COLS INTO COLS.
COLS-SCREEN-INPUT = 0.
MODIFY TBL1-COLS FROM COLS.
ENDLOOP.
FLAG = 2.
WHEN 'ENA'. "write code for sort down
loop AT TBL1-COLS INTO COLS.
COLS-SCREEN-INPUT = 1.
MODIFY TBL1-COLS FROM COLS.
ENDLOOP.
FLAG = 1.
ENDCASE.
ENDMODULE. " USER_COMMAND_2700 INPUT
*& Module GET_DATA OUTPUT
* text
MODULE GET_DATA OUTPUT.
select carrid connid fldate from SFLIGHT into table itab.
ENDMODULE. " GET_DATA OUTPUT
*& Module POPULATE_TBL OUTPUT
* text
MODULE POPULATE_TBL OUTPUT.
MOVE-CORRESPONDING ITAB TO SFLIGHT.
ENDMODULE. " POPULATE_TBL OUTPUT
*& Module CHANGE_SCREEN OUTPUT
* text
MODULE CHANGE_SCREEN OUTPUT. " use this module if you want to hide the other button
CASE FLAG.
WHEN 1.
LOOP AT SCREEN.
IF SCREEN-NAME = 'B_ENA'.
SCREEN-INVISIBLE = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
IF SCREEN-NAME = 'B_DIS'.
SCREEN-INVISIBLE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN 2.
LOOP AT SCREEN.
IF SCREEN-NAME = 'B_DIS'.
SCREEN-INVISIBLE = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
IF SCREEN-NAME = 'B_ENA'.
SCREEN-INVISIBLE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDCASE.
ENDMODULE. " CHANGE_SCREEN OUTPUT
PROCESS BEFORE OUTPUT.
MODULE STATUS_2700.
MODULE CHANGE_SCREEN. " use this if you want to display one button at a time
MODULE GET_DATA.
loop at itab WITH control TBL1.
MODULE POPULATE_TBL. " populate tbl ctrl
endloop.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_2700. " do the sort operations
loop at itab.
endloop.
Hope this helps
Regards,
Jayanthi.K -
Bonjour à tous,
Je travaille actuellement sur un nouveau projet de système automatisé nécessitant la récupération d’information. J'ai un certain besoin a combler pour mon application et n'etant pas un expert dans le materiel NI, je prefere prendre vos avis et suggestions afin que ma solution soit la meilleure possible.
Il me faut donc en termes d'I/O :
6 entrées pour 6 détecteurs inductif NO fonctionnant à 24V (trois fils pour chaque détecteur).
3 entrées pour 3 détecteurs fins de courses NO fonctionnant à 24V.
1 a 2 sorties PWM 0-5V.
2 sorties logiques TTL (0-5V).
2 sorties logiques 0-24V.
2 sorties analogiques 0-10V avec 8 bits de résolution minimum.
Quelques I/O analogiques et digitales supplémentaires…
Idéalement, j'aimerais alimenter mes 9 détecteurs (6 inductifs + 3 fins de courses) sous 24V directement depuis mes périphériques NI pour ne pas avoir à utiliser une autre source d’alimentation.
Ma solution serait d'utiliser une carte PCIe 6321 pour les sorties PWM, TTL et analogiques 0-10V ainsi que pour les I/O analogiques et digitales supplémentaires. J’utilise Windows 7 avec LabVIEW 2012 pour faire l’acquisition des données.
Pour les entrées et sorties 24V, je pencherais pour un module d'entrée/sortie numérique 24V tel que le NI 9375. J’ai choisi celui-ci car il comprend 32 I/O avec 16 entrées et 16 sorties. Je prendrais également le châssis cDAQ-9171 afin de pouvoir connecter mon module en USB avec mon ordinateur.
Selon vous, est-ce que ma solution est viable et répond à mes attentes? Niveau qualité/prix je n'ai pas trouvé mieux! Mais je ne prétends pas être un expert et peut être que certains d'entre vous ont de meilleurs idées
Je vous remercie par avance.
MaximeBonjour,
Auriez-vous un contact francophone pour le Canada et Montréal plus exactement?
Merci.
Maxime -
Panneaux de métadonnées customisées XMP avec la CREATIVE CLOUD
Bonjour à tous,
Avant la CREATIVE CLOUD, nous avions l'habitude de créer des panneaux de métadonnées customisées pour l'industrie de la mode afin de gérer les nombreux fichiers graphiques (Illustrator, Photoshop, Indesign) permettant la création des modèles de vêtements, les plans de collection, les prints et Artwork, voir même les dossiers techniques dans indesign.
A l'aide d'Adobe bridge, nous pouvions définir des processus de gestion des ressources numériques très efficaces, s'appuyant sur le tri, la classification, l'annotation de ces fichiers.
Il était même possible en utilisant des mots clés, de récupérer les métadonnées en légende dans Indesign afin de produire très rapidement des documents synthétisant l'ensemble des informations essentielles de la collection.
En matière d'édition, nous pouvions également exporter dans un PDF ou un slide show, l'ensemble des fichiers d'une collection intelligente ou d'un filtre, via le module Output de Bridge (certes limité, mais quand même pratique, d'où l'incompréhension de nombreux utilisateurs qui ont vu ce module être retiré par défaut de Bridge CC, sans apporter d'alternative sérieuse).
Nous notons toutefois que le module output peut être réinstallé dans bridge CC mais ne présente aucune évolution fonctionnelle (voir le lien ci-dessous) :
Installation du module de sortie Adobe
Avec l'arrivée de la CREATIVE CLOUD, la procédure de création des panneaux XMP a été modifiée par Adobe.
En effet, avec les versions de la créative suite, il fallait utiliser Flash Builder pour créer des panneaux avancés de métadonnées (File info Dialog), ou alors un kit de fichiers fourni par Adobe se nommant GENERIC PANEL (fichier XML modifiable), permettant de créer des panneaux de métadonnées relativement simples.
Cette méthode présentait toutefois des problèmes évoqués sur les forums, car souvent ces panneaux apparaissaient vides dans les logiciels de la CREATIVE SUITE.
Malgré des explications plus ou moins hasardeuses des équipes techniques d'Adobe (création d'un fichier trust.cfg ou utilisation de la bonne version du SDK), beaucoup d'entre-nous n'ont jamais réellement su démystifier les caprices d'affichage des panneaux XMP utilisant la technologie flash.
Désormais, avec la CREATIVE CLOUD, il faut utiliser le kit XMP Metadata UI SDK qui regroupe un ensemble de fichiers XML paramétrables.
Théoriquement, nous n'avons donc plus besoin de passer par Flashbuilder pour créer des panneaux de métadonnées XMP.
Malheureusement, Il semblerait que la migration des panneaux XMP créés dans les anciennes versions (CS5, CS6) avec Flashbuilder ne soit pas possible en l'état (sauf pour le Generic panel qui a été réalisé via un fichier XML et qui peut être converti via le Generic panel converter mis à disposition par Adobe)
Avant de mettre la main dans le cambouis, j'aimerais donc savoir si :
Quelqu'un d'entre-vous a déjà expérimenté la création de ces nouveaux panneaux XMP via le kit XMP Metadata UI SDK
La procédure de création est plus simple
Les possibilités offertes par Flashbuilder via de l'action script ont été conservées dans ces nouveaux panneaux( ex : possibilité de créer des listes de saisies filtrables en fonction des critères renseignées)
L'affichage des nouveaux panneaux dans les outils Adobe se fait correctement
Dans l'attente de votre retour d'expérience.
Merci.
Daté TETEGANBonjour,
Peut-être pourriez-vous tout désisntaller de façon clean avec l'utilitaire Cleaner Tools : http://helpx.adobe.com/fr/creative-suite/kb/cs5-cleaner-tool-installation-problems.html
Réinstaller suivant la configuration souhaitée.
Creative Cloud, n'a pas besoin d'être installé spécifiquement sur le bureau. -
9472 Error 50808 with cDAQ-9172
I am using the module NI-9472 (digital output) to switch a din-rail Relay with 24V DC that is switching a 3phase contactor, but am I getting the error 50808 when using this module with the cDAQ-9172 on slot 1.
I have tryed the same application, with the same 9472 module with cDAQ-9171 and everything is working ok. The problem only pressists with the cDAQ-9172 and only when I connect the cables from the 9472 module to the relays. If these cables are disconected, I never get the error, and the module LEDs work just fine.
I am also posting the VI I am using in order to get some help, maybe I should do this in other way.
Thank you for the help.
Attachments:
error.jpg 92 KB
Test 2.vi 50 KBHello,
DAQmx returns these errors after the host PC's USB controller reports a USB transaction error.
To recover from this state, you may use this : Programmatically Reset USB DAQ device in LabVIEW
The underlying issue could come from the host controller, the device, or even the USB cable. Some host controllers are more susceptible than others to encountering these transaction errors. It is recommended to double-check your USB cable and if necessary try the device on a different host controller.
You could try a different USB host controller (PCI USB host controllers cost typically between 20 and 30 dollars).
You'll find all these information in the following document : Why Do I Receive Error -50405 or Error -50808 Using an NI USB DAQ Device When Inserting or Removing ...
FYI, a customer who met the same issue get the 9172 working by using an externally powered USB hub.
Regards
Jérémy C.
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;}
Travaux Pratiques d'initiation à LabVIEW et à la mesure
Du 2 au 23 octobre, partout en France -
Ni9263 : 2 sorties de forme différentes
Binjour, j'uitlise le Ni cDAQ 9174 avec un module 9263. Je souhaiterais faire sortir 2 signaux différents. C'est à dire un sortie continue 5V et une sinusoidale 0-10V en pilotant la frequence..Tout ça en meme temps.
Est ce possible? je n'y arrive pas. Mais je pense que ça doit etre tout bete.
Merci beaucoup
MathieuBonjour,
Le module 9263 possède un convertisseur « digital vers analogique » pour chacune de ses 4 sorties analogiques, avec, en outre, un rafraîchissement des voies simultané. Il est donc possible de produire 2 signaux simultanés sur 2 sorties analogiques différentes. En outre, la technologie du Compact DAQ 9174 est également adaptée à ce type de besoin. Vous pouvez donc piloter plusieurs sorties analogiques en même temps. Si vous souhaitez plus d’informations sur le Compact DAQ en question ainsi que sur la technologie de synchronisation et de cadencement qu’il contient, vous pouvez consulter les liens suivants :
User Guide and Specifications NI cDAQ-9178/9174
NI-STC3 Timing and Synchronization Technology
Si vous souhaitez obtenir deux signaux en sortie d’une façon simple, vous pouvez générer vos signaux à l’intérieur d’une même tâche.
Voici un petit exemple basé sur 2 waveformes (qui sont paramétrables, bien sûr) afin de vous aider dans la conception de votre VI.
Le formalisme pour indiquer qu’on travaille sur deux voies physiques (par exemple sur la carte « Dev1 » en ao0 et ao1), mais dans la même tâche est le suivant :
On déclare dans la commande Physical Channel Dev1/ao0 :n (pour utiliser toutes les vois de 0 à n) ou Dev1/ao0, Dev1/ao1 (pour utiliser les voies ao0 et ao1 seulement).
Vous trouverez également plus d’exemples pour vous aider dans la recherche d’exemples LabVIEW, aux rubriques « E/S matérielles/DAQmx/Génération analogique/Tension ».
J’espère que ces quelques éléments vous permettront de progresser dans la résolution de votre problème.
Cordialement,
Guillaume H.
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;}
>> NIDays 2011, le mardi 8 février au CNIT de Paris La Défense
Pièces jointes :
Support 2 sorties de forme différentes.png 39 KB -
Dear Experts,
I mfacing a strange problem.
I hv an internal table containing the required data in required sorted order.
But when i call CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' function module,
the sort order gets changed. I m not sorting internal table.
The internal table is very much ok till i write statement "CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' ".
I hv checked in dbugging mode, (if sy-subrc = 0 in the above function module) the sort order getting changed only in the call of function module.
Any suggestion.
Regards,
MaverickHi,
Define:IT_SORT TYPE SLIS_T_SORTINFO_ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = w_repid
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
IT_FIELDCAT = i_fcat[]
I_SAVE = 'X'
IT_SORT = it_sort
TABLES
T_OUTTAB = i_faglflexa_all
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
IF SY-SUBRC 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Now in debugging if the sy-subrc = 0 then only the further process will take place.
If sy-subrc is not zero then what is the point of sorting data as Th Function module have some error.
So what you are getting in debugging that is correct. Nothing is wrong.
regards,
Pravin
Edited by: pravin s. on Mar 15, 2010 12:22 PM
Edited by: pravin s. on Mar 15, 2010 12:25 PM -
Memory and performance when copying a sorted table to a standard table
Hello,
As you all probably know, it's not possible to use a sorted table as a tables parameter of a function module, but sometimes you want to use a sorted table in your function module for performance reasons, and at the end of the function module, you just copy it to a standard table to return to the calling program.
The problem with this is that at that moment, the contents of the table is in memory twice, which could result in the well known STORAGE_PARAMETERS_WRONG_SET runtime exception.
I've been looking for ways to do this without using an excessive amount of memory and still being performant. I tried four methods, all have their advantages and disadvantages, so I was hoping someone here could help me come up with the best way to do this. Both memory and performance are an issue.
Requirements :
- Memory usage must be as low as possible
- Performance must be as high as possible
- Method must work on all SAP versions from 4.6c and up
So far I have tried 3 methods.
I included a test report to this message, the output of this on my dev system is :
Test report for memory usage of copying tables
table1[] = table2[]
Memory : 192,751 Kb
Runtime: 436,842
Loop using workarea (with delete from original table)
Memory : 196,797 Kb
Runtime: 1,312,839
Loop using field symbol (with delete from original table)
Memory : 196,766 Kb
Runtime: 1,295,009
The code of the program :
I had some problems pasting the code here, so it can be found at [http://pastebin.com/f5e2848b5|http://pastebin.com/f5e2848b5]
Thanks in advance for the help.
Edited by: Dries Horions on Jun 19, 2009 1:23 PM
Edited by: Dries Horions on Jun 19, 2009 1:39 PM
Edited by: Dries Horions on Jun 19, 2009 1:40 PM
Edited by: Dries Horions on Jun 19, 2009 1:40 PMI've had another idea:
Create a RFC function like this (replace SOLI_TAB with your table types):
FUNCTION Z_COPY_TABLE .
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(IT_IN) TYPE SOLI_TAB
*" EXPORTING
*" VALUE(ET_OUT) TYPE SOLI_TAB
et_out[] = it_in[].
ENDFUNCTION.
and then try something like this in your program:
DATA: gd_copy_done TYPE c LENGTH 1.
DATA: gt_one TYPE soli_tab.
DATA: gt_two TYPE soli_tab.
PERFORM move_tables.
FORM move_tables.
CLEAR gd_copy_done.
CALL FUNCTION 'Z_COPY_TABLE'
STARTING NEW TASK 'ztest'
PERFORMING copy_done ON END OF TASK
EXPORTING
it_in = gt_one[].
CLEAR gt_one[].
WAIT UNTIL gd_copy_done IS NOT INITIAL.
ENDFORM.
FORM copy_done USING ld_task TYPE clike.
RECEIVE RESULTS FROM FUNCTION 'Z_COPY_TABLE'
IMPORTING
et_out = gt_two[].
gd_copy_done = 'X'.
ENDFORM.
Maybe this is a little bit faster than the Memory-Export?
Edited by: Carsten Grafflage on Jul 20, 2009 11:06 AM -
Hi all...
I using for loop to display student information and i want to sort the information (e.g. module code, name, admin no and etc) given in ascending and descending order. I use combo box to list and select the (information) to be sorted in either in ascending or decending order.
But, how sld i code in the way that the result will change instance whenever i click the combo box ( e.g name) to be sorted in ascending order. Cos now, it only sort the last index, last student information and not all the student.
Below is what i have done:
String [] headerString = {"Module Group", "Tutorial Group", "Admin No", "Name"};
//Create combo box
JComboBox header = new JComboBox(headerString);
header.setSelectedIndex(3);
header.addActionListener(this);
//Create the radio buttons
ascendButton = new JRadioButton("Ascending", true);
ascendButton.setMnemonic(KeyEvent.VK_UP);
ascendButton.setSelected(true);
descendButton = new JRadioButton("Descending", false);
descendButton.setMnemonic(KeyEvent.VK_DOWN);
//Register a listener for the radio buttons.
ascendButton.addActionListener(this);
descendButton.addActionListener(this);
//Group the radio buttons
group = new ButtonGroup();
group.add(ascendButton);
group.add(descendButton);
buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
buttonPanel.add(header);
buttonPanel.add(ascendButton);
buttonPanel.add(descendButton);
class nameComparator implements Comparator
public int compare(Object o1, Object o2)
Vector one = (Vector)o1;
Vector two = (Vector)o2;
//the following line will return a negative value
//if one is smaller in size than two
// return one - two;
public boolean equals(Object obj)
//don't know what to put it
public void actionPerformed(ActionEvent event)
System.out.println("Before" + v);
if (ascendButton.isSelected())
//Sort by natural order
//Case-insensitive sort, ie. a, C, z
Collections.sort(v, String.CASE_INSENSITIVE_ORDER);
else
//Reverse-order sort
Collections.sort(v, Collections.reverseOrder());
list.setListData(v);
//Reset the model used by the JComboBox after sorting the vector
DefaultComboBoxModel model = new DefaultComboBoxModel(headerString);
header.setModel(model);
System.out.println("After" + v);
//reconstruct the vector and repaint again
repaint();
}Hi all, below is my coding. I still don't know how to start to sort my jlist. hope guys out there can give me some idea. Thanks.
import java.awt.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.util.*;
import java.util.Vector.*;
public class Display extends JFrame implements ActionListener{
JButton editButton;
JButton setButton;
JComboBox header;
JLabel imageLabel;
JLabel acadYrLabel;
JLabel semseterLabel;
JLabel moduleCodeLabel;
JLabel moduleGroupLabel;
JLabel tutorialGroupLabel;
JLabel admNoLabel;
JLabel nameLabel;
JPanel aPanel;
JPanel imagePanel;
JPanel soloPanel;
JPanel buttonPanel;
JPanel contentPanel;
JPanel textFieldPanel;
JRadioButton ascendButton;
JRadioButton descendButton;
JScrollPane infoPane;
JScrollPane scrollPane;
JTextField textField;
JTextField moduleGroupField;
JTextField tutorialGroup;
JTextField adminNo;
JTextField nameField;
JTextField acadYrField;
String[] headerString = {
"Module Group", "Tutorial Group", "Admin No", "Name"};
public Display()
//Create combo box
header = new JComboBox(headerString);
header.setSelectedIndex(3);
header.addActionListener(this);
//Create the radio buttons
ascendButton = new JRadioButton("Ascending", true);
ascendButton.setMnemonic(KeyEvent.VK_UP);
ascendButton.setSelected(true);
descendButton = new JRadioButton("Descending", false);
descendButton.setMnemonic(KeyEvent.VK_DOWN);
//Register a listener for the radio buttons.
ascendButton.addActionListener(this);
descendButton.addActionListener(this);
//Group the radio buttons
ButtonGroup group = new ButtonGroup();
group.add(ascendButton);
group.add(descendButton);
buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
//buttonPanel.setAlwaysOnTop(true);
buttonPanel.add(header);
buttonPanel.add(ascendButton);
buttonPanel.add(descendButton);
imagePanel = new JPanel(new GridLayout(10, 3));
imagePanel.addComponentListener(new ComponentAdapter()
public void componentResized(ComponentEvent e)
JPanel p = (JPanel) e.getComponent();
populate(50,60);
public void populate(int length, int height)
for (int i = 0; i <30; i++)
soloPanel = new JPanel(new BorderLayout(0, 20)); //Specified gaps between components
soloPanel.setPreferredSize(new Dimension(length, height+150));
soloPanel.setBackground(Color.GRAY);
//Create the text field and set it up
acadYrField = new JTextField();
acadYrField.setBackground(Color.GRAY);
acadYrField.setColumns(20);
acadYrField.setEditable(false);
acadYrField.setText("2004");
tutorialGroup = new JTextField();
tutorialGroup.setBackground(Color.GRAY);
tutorialGroup.setColumns(20);
tutorialGroup.setEditable(false);
tutorialGroup.setText("BM0539"+i+i);
adminNo = new JTextField();
adminNo.setBackground(Color.GRAY);
adminNo.setColumns(20);
adminNo.setEditable(false);
adminNo.setText("012345X" + i);
moduleGroupField = new JTextField();
moduleGroupField.setBackground(Color.GRAY);
moduleGroupField.setColumns(20);
moduleGroupField.setEditable(false);
moduleGroupField.setText("IT12345");
nameField = new JTextField();
nameField.setBackground(Color.GRAY);
nameField.setColumns(20);
nameField.setEditable(false);
nameField.setText("Alex" + i);
textFieldPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
textFieldPanel.setBackground(Color.GRAY);
textFieldPanel.setPreferredSize(new Dimension(235, 180));
textFieldPanel.add(acadYrField);
textFieldPanel.add(tutorialGroup);
textFieldPanel.add(adminNo);
textFieldPanel.add(moduleGroupField);
textFieldPanel.add(nameField);
infoPane = new JScrollPane(textFieldPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
editButton = new JButton("Edit");
editButton.addActionListener(this);
//Create panel and add edit button to panel
JPanel editPanel = new JPanel();
editPanel.add(editButton);
editPanel.setBackground(Color.GRAY);
soloPanel.add(infoPane, BorderLayout.CENTER);
soloPanel.add(editPanel, BorderLayout.SOUTH);
imagePanel.add(soloPanel);
public static void main(String[] args)
Display d = new Display();
d.createAndShowGUI();
public void createAndShowGUI()
//Make sure we have nice window decorations
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
//Create and set up the window
JFrame frame = new JFrame("IABC");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPanel = new JPanel(new BorderLayout());
contentPanel.add(buttonPanel, BorderLayout.NORTH);
contentPanel.add(imagePanel, BorderLayout.SOUTH);
scrollPane = new JScrollPane(contentPanel);
frame.setContentPane(scrollPane);
frame.pack();
frame.setSize(500, 300);
frame.setLocation(350, 250);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
public void actionPerformed(ActionEvent event)
if (ascendButton.isSelected())
//Sort by natural order
//Case-insensitive sort, ie. a, C, z
if (header.getSelectedIndex() == 0)
Collections.sort(v, new myComparator());
else
//Reverse-order sort
Collections.sort(v, Collections.reverseOrder());
list.setListData(v);
//Reset the model used by the JComboBox after sorting the vector
DefaultComboBoxModel model = new DefaultComboBoxModel(headerString);
header.setModel(model);
System.out.println("After" + v);
//reconstruct the vector n repaint again
repaint();
class myComparator implements Comparator
public int compare(Object o1, Object o2)
String one = (String)o1;
String two = (String)o2;
return one.compareTo(two);
} -
Erreur de communication avec fieldpoint
Je possède un FP1600 qui commande un FPAI110, un FPRLY420, un FPAOCO20, et deux FPDODC60.
Mon programme est réalisé avec Labview 6.0, j'utilise Fieldpoint Explorer 2.0 et la version du firmware de mon FP1600 est la 3.02.
Après plusieurs heures de fonctionnement sans problèmes, la fonction FP read me renvois Error 33162 .
A ce moment il devient impossible de communiquer avec aucun des modules du banc fieldpoint, la fermeture puis l'ouverture de la connexion n'a aucun effet.
La seule façon de reprendre la main sur Fieldpoint est de couper l'alimentation du module de commande FP1600, puis de la rétablir.Nous avons déja eu ce problème avec un controlleur FP-1600. Il semble que ces controlleurs sont très sensible au bruit. La meilleur solution c'est de changer les FP1600 pour des FP2000, depuis ce temps nous n'avons jamais eu de problème !!!
Nous avons eu des discussions avec les gens de NI et il ont dit qu'ils avaient trouvé un problème. Ce problème devrait être réglé sur les controlleurs FP2000.
Si la solution de rechange n'est pas une option pour toi tu peux faire des recherches sur le site de NI je crois qu'il en parle un peu. Tu peux aussi approcher un représentent NI pour obtenir un démo de FP2000 pour vérifié si il tient la route avec ton système. -
RS232 fonctionne avec MAX mais pas depuis Labview
Bonjour,
Je dois communiquer en RS232 avec un Xmodus1200 (module GSM).
J'arrive à communiquer et à piloter mon module sans problème depuis MAX mais dès que j'essaie depuis LABVIEW, je ne recois qu'une partie du message.
Le problème provient plus que probablement d'un problème de config différente entre les deux mais je tourne en rond sans trouver la solution.
Je joins en annexe les captures d'écran de la config MAX et de l'écran "INPUT/OUTPUT" et également les écrans Labview.
Merci d'avance
Nicolas
Pièces jointes :
Screen.docx 437 KBBonjour,
Sous Labview, pour savoir le nombre d'octet à lire vous utilisez la fonction qui permet de savoir combien d'octets sont dans le buffer. Hors au moment d'utiliser cette fonction, il est possible que la trame ne soit pas encore entièrement dans le buffer de lecture. La fonction "lire le port série" ne va donc pas lire toute la réponse.
Si la taille de votre trame est connue à l'avance, vous pouvez mettre en entrée de la fonction 'lire le port série" le nombre d'octet à lire.
Cordialement;, -
Synchronis​ation acquisitio​n sortie ttl
Je n'arrive pas à synchroniser le déclenchement de mon appareil (déclenché à partir d’une sortie compteur +5V que je récupère via le SCXI-1180) avec le début de mes acquisitions (sur voie analogiques). Je voudrais le faire de manière la plus précise possible (à la mili seconde près).
Pour cela j’ai mis dans une boucle séquence mon sous VI de création de l’impulsion sur une sortie compteur à +5V avec le sous VI AI START. Mais la synchronisation n’est pas parfaite et en plus je reçois un message d’erreur : Aucun transfert en
cours pour la ressource spécifiée.
Attachments:
Programme.JPG 151 KBBonjour,
Vous voulez synchroniser la génération d'un pulse sur une sortie compteur avec une acquisition analogique bufférisée finie.
Pour plus de précision, la meilleure méthode est de déclencher l'acquisition analogique sur un trigger numérique externe.
Ce signal numérique de trigger corespondra à votre sortie compteur ce qui permettra d'avoir une parfaite synchronisation entre les 2 tâches.
Concrètement, si vous avez une carte DAQ MIO Serie E ou S utilisant le chip DAQ-STC, vous pouvez relier la sortie du compteur "OUT X" à l'entrée "PFIO" (= AI Start Trigger).
Les exemples LabVIEW à utiliser sont:
* Acquire N Scans Digital Trigger.vi
* Generate Single Pulse.vi
Bonne continuation.
Matthieu Gourssies
National Instruments -
Acquerir le signal en creneau d'un capteur de debit (pulse 24v)
Bonjour,
Comment faire 'acquisition de mon capteur de debit (impulsion de 24v) avec le NI 9411?
Merci d'avanceBonjour,
Quelle est le signal reçu par ce capteur ? Comment interpréter un résultat en mesurant celui-ci ? Est-ce un rapport cyclique qui varie, une période, une phase ?
Vous trouverez plusieurs exemples dans LabVIEW » Aide » Outils de recherche d'exemples.
Cordialement,
Message Edité par Maxime MULLER le 05-11-2010 08:53 AM -
Bonjour tout les monde !
Je suis actuellement en BTS électrotechnique et j'ai besoin de votre aide pour LabVIEW.
C'est la première fois que je l'utilise.
Le matériel :
Un automate cRIO-9073.
Des modules NI 9217,9203,9403,9476.
Un PC avec LabVIEW
But de mon projet:
Élaborer avec LabVIEW un programme test pour chaque module.
(Je dois faire des programmes qui testent chaque entrées,sorties ou voies de ces modules pour voir si ils fonctionnent bien)
Problèmes rencontrés:
Je ne comprend pas à quoi sert la fonction "TIME LOOP" et je ne sais pas comment la configurer (en effet je l'ai insérer mais le prof m'a dit que je devais la configurer)
Aussi je ne sais pas comment configurer mes modules dans "l'exploreur de projet" (je pensais que le module se configurais automatiquement)
Par exemple ma carte NI 9217 collecte les informations de 4 sondes PT100, donc j'ai fait le programme mais mon prof m'a dit que je devais configurer le module dans l'explorateur de projet et que je devais configurer le TIME LOOP.
Merci d'avance pour vos réponses.
Cordialement,
L'ETUDIANTBonjour L'ETUDIANT,
Pour donner quelques pistes :
- J'imagine que tu parles des boucles cadencées (Timed Loop). Ces boucles se configurent en double-cliquant sur l'entête de la boucle en haut à gauche. Tu pourras ainsi fixer le cadencement de ta boucle, mais aussi sa priorité entre autres. Ces boucles sont largement utilisés dans les VIs Temps Réel car elles permettent de mieux maitriser l'exécution.
- Les module se configurent effectivement dans ta fenêtre de projet. Une fois ton cRIO ajouté au projet, tu as la possibilité de "découvrir" tes modules. Une fois ceci effectué, tu auras accès à tous les modules connectés sur ton cRIO, et leurs propriétés pourront être modifiées.
Un petit tour sur ce tuto pourra probablement t'aider.
Cordialement,
Eric M. - Application Engineering Specialist
Certified LabVIEW Architect
Certified LabWindows™/CVI Developer -
Daqmx enregistrer des taches numériques et analogiques
Bonjour,
Sur labview depuis peu après avoir utilisé signal express pendant pas mal de temps, je tente de réaliser une application permettant de visualiser et d'enregistrer dans mesures analogiques et numériques.
Je dispose d'un Ni cDAQ-9174 avec différents modules (thermocouples, mesures de tensions, mesures numériques...).
En ce qui concerne l'affichage des courbes et le paramètrage, je m'en suis sorti, par contre en ce qui concerne l'enregistrement dans un fichier TDMS, je rencontre des soucis.
Je souhaiterais enregistrer ma tache analogique et ma tache numérique, ainsi que l'horodatage, mais je n'arrive pas à cumuluer les taches, ni à mettre l'horodatage, et je ne peux pas lancer plusieurs fois le vi daqmx - configurer l'enregistrement...
J'ai essayé beaucoup de combinaisons, mais rien ne semble fonctionner.
Si vous avez un exemple pouvant m'aider, ou une aide à m'apporter, je vous en remercie d'avance.
Je vous joins une version de mon vi faisant uniquement l'enregistrement de la partie analogique.
Cordialement,
Jon
Résolu !
Accéder à la solution.
Pièces jointes :
Mesure Thermocouple v1.vi 101 KBEn fait avec l'assistant DAQ je ne peux configurer l'enregistrement, à moins que je ne me trompe ?
J'ai commencé par utiliser l'assistant avant de reprendre des exemples pour utiliser ce dont j'ai besoin.
Actuellement j'essaye d'utiliser d'autres fonctions, comme la fonction "Exporter des waveforms vers un fichier tableur (1D)" mais je ne trouve pas d'exemple là dessus...
J'arrive à récupérer les mesures que je fais, mais j'ai un décalage entre mes mesures analogiques et numériques, l'horodatage est faux, et j'ai des blancs dans le fichier excel ainsi créé.
Je joins le vi version 2012, peut être quelqu'un aura-t-il un exemple pour m'aider à avancer sur cette version ?
Merci d'avance.
Jon
Pièces jointes :
Mesure Thermocouple v2.vi 85 KB
Maybe you are looking for
-
Recently my printer stopped printing black, although it would print the other colors. When I tried to print a print pattern, it would not print the checkered pattern it used to print to check the alignment. I tried cleaning, to no avail. Then I got
-
MIME Multipart/related to embed images in html files - Servlet
Hello, My goal is to embed images in html/xhtml files to decrease latency when using slow networks. Think about mobile phones, if I have 10 images in one page, I will have 11 requests/responses to get the whole page. The solution would be to embed al
-
I've put together a number of multi-screen flash presentations using stills and flash transitions and effect but I have a 3-screen display to do which features full screen video on each screen. I suppose the question is: Is Flash a viable way to deli
-
[solved] Wine OpenGL Drivers
Hello Since I updated my Wine long time ago, 3D applications won't start. Wine gives this output http://pastebin.com/whccHcRx but my nvidia driver is installed correctly http://pastebin.com/FAcCa8hK Is it an 64 bit issue? I am using Arch 64 Bit and b
-
Preloaders in external .swf not working
Hi people. I have built this website to showcase our work http://www.perfectmarketing.co.uk All the movie clips shown in the centre of the screen are external .swfs with their own preloader. But when the site is live, the preloaders don't seem to be