configuration port parallele sous windows xp

configuration port parallele sous windows xp - C++ - Programmation

Marsh Posté le 04-04-2005 à 10:08:49    

Bon voila mon probleme,
je voudrais transmettre des donnees via une interface cree sous visual C++ vers une carte d'acquisition,celle ci va memoriser ces donnees et les envoyer vers une carte d'asservissement affin de commander des miroirs pour la projection du lazer,donc le probleme c'est qu'il fallait reconfigurer le port parallele du PC sachant que je travaille avec visual C++ et le systeme utilisé est le windows XP? j'attendrais votre réponse......MERCI D'AVANCE.....


Message édité par samuel63 le 11-04-2005 à 09:26:39
Reply

Marsh Posté le 04-04-2005 à 10:08:49   

Reply

Marsh Posté le 04-04-2005 à 18:24:48    

http://forum-images.hardware.fr/themes_static/images_forum/1/recherche.gif
 
sujet abordé X fois ici ...

Reply

Marsh Posté le 05-04-2005 à 09:18:23    

et pourtant j'ai fait un petit tour dans le forum,il y avait pas mal d'idees mais j'ai pas trouvé exactement ce que je cherche,si vous avez une petite idée n'hésitez pas...................

Reply

Marsh Posté le 05-04-2005 à 10:54:55    

j'ai visité ces pages,et j'ai fait une petite recherche à INTERNET,et j'ai remarqué que la lecture/ecriture sur le port parallele est differente suivant le système utilisé,par exemple,pour mon cas,la programmation sous visual C++ pour configurer sous windows XP n'est pas la même qu'en travaillant sur win 98,sous winXP on peut utiliser un driver ou un dll,et pour moi je ne sait pas lequel utiliser et qui s'adapte à mon application,suite à une recherche à INTERNET j'ai trouvé le programme à l'adresse suivante:http://www.geekhideout.com/iodll.shtml
les deux programmes sont dans les deu fichiers io.h et io.cpp,donc je ne sait si ces deux programmes sont valables ou pas............

Reply

Marsh Posté le 05-04-2005 à 10:55:07    

titre en caps, pas bon ca...

Reply

Marsh Posté le 05-04-2005 à 11:52:03    

ben on a vu que au cours, ya pas trop moyen sous windows xp à cause d'un protection!! tu devrais retouner sous win 98

Reply

Marsh Posté le 05-04-2005 à 11:53:13    

merci d'éditer ton titre et de virer les majuscules stp, sinon je ferme


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-04-2005 à 12:13:28    

Sous XP il te faut un driver, qui s'utilise via une dll.
Fait une recherche sur comment on utilise une dll...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 05-04-2005 à 14:12:01    

c'est ce que j'ai fait,et suite à cette recherche il me demande d'utiliser les deux programmes qui seront d'apres ce que j'ai compris à mon programme de base sous visual C++,les deux programmes sont les suivans:
 
 
#include "io.h"
 
PORTOUT PortOut;
PORTWORDOUT PortWordOut;
PORTDWORDOUT PortDWordOut;
PORTIN PortIn;
PORTWORDIN PortWordIn;
PORTDWORDIN PortDWordIn;
SETPORTBIT SetPortBit;
CLRPORTBIT ClrPortBit;
NOTPORTBIT NotPortBit;
GETPORTBIT GetPortBit;
RIGHTPORTSHIFT RightPortShift;
LEFTPORTSHIFT LeftPortShift;
ISDRIVERINSTALLED IsDriverInstalled;
 
HMODULE hio;
 
void UnloadIODLL() {
 FreeLibrary(hio);
}
 
int LoadIODLL() {
 hio = LoadLibrary("io" );
 if (hio == NULL) return 1;
 
 PortOut = (PORTOUT)GetProcAddress(hio, "PortOut" );
 PortWordOut = (PORTWORDOUT)GetProcAddress(hio, "PortWordOut" );
 PortDWordOut = (PORTDWORDOUT)GetProcAddress(hio, "PortDWordOut" );
 PortIn = (PORTIN)GetProcAddress(hio, "PortIn" );
 PortWordIn = (PORTWORDIN)GetProcAddress(hio, "PortWordIn" );
 PortDWordIn = (PORTDWORDIN)GetProcAddress(hio, "PortDWordIn" );
 SetPortBit = (SETPORTBIT)GetProcAddress(hio, "SetPortBit" );
 ClrPortBit = (CLRPORTBIT)GetProcAddress(hio, "ClrPortBit" );
 NotPortBit = (NOTPORTBIT)GetProcAddress(hio, "NotPortBit" );
 GetPortBit = (GETPORTBIT)GetProcAddress(hio, "GetPortBit" );
 RightPortShift = (RIGHTPORTSHIFT)GetProcAddress(hio, "RightPortShift" );
 LeftPortShift = (LEFTPORTSHIFT)GetProcAddress(hio, "LeftPortShift" );
 IsDriverInstalled = (ISDRIVERINSTALLED)GetProcAddress(hio, "IsDriverInstalled" );
 
 atexit(UnloadIODLL);
 
 return 0;
}
 
et le deuxieme est le suivant:
 
 
#include <windows.h>
 
typedef void (WINAPI *PORTOUT) (short int Port, char Data);
typedef void (WINAPI *PORTWORDOUT)(short int Port, short int Data);
typedef void (WINAPI *PORTDWORDOUT)(short int Port, int Data);
typedef char (WINAPI *PORTIN) (short int Port);
typedef short int (WINAPI *PORTWORDIN)(short int Port);
typedef int (WINAPI *PORTDWORDIN)(short int Port);
typedef void (WINAPI *SETPORTBIT)(short int Port, char Bit);
typedef void (WINAPI *CLRPORTBIT)(short int Port, char Bit);
typedef void (WINAPI *NOTPORTBIT)(short int Port, char Bit);
typedef short int (WINAPI *GETPORTBIT)(short int Port, char Bit);
typedef short int (WINAPI *RIGHTPORTSHIFT)(short int Port, short int Val);
typedef short int (WINAPI *LEFTPORTSHIFT)(short int Port, short int Val);
typedef short int (WINAPI *ISDRIVERINSTALLED)();
 
extern PORTOUT PortOut;
extern PORTWORDOUT PortWordOut;
extern PORTDWORDOUT PortDWordOut;
extern PORTIN PortIn;
extern PORTWORDIN PortWordIn;
extern PORTDWORDIN PortDWordIn;
extern SETPORTBIT SetPortBit;
extern CLRPORTBIT ClrPortBit;
extern NOTPORTBIT NotPortBit;
extern GETPORTBIT GetPortBit;
extern RIGHTPORTSHIFT RightPortShift;
extern LEFTPORTSHIFT LeftPortShift;
extern ISDRIVERINSTALLED IsDriverInstalled;
 
extern int LoadIODLL();
 
 
donc je ne sais pas si ça fonctionne ou pas avec ça?
 
 
 

Reply

Marsh Posté le 05-04-2005 à 14:12:01   

Reply

Marsh Posté le 05-04-2005 à 14:15:30    

bon, t'en as rien à faire de ce que je t'ai dit, tant pis


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-04-2005 à 16:57:38    

bon, je réouvre et je uppe pour ce monsieur, à qui j'ai expliqué en MP comment éditer son titre et virer les caps :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-04-2005 à 17:17:16    

merci,et bien j'attends les instructions,

Reply

Marsh Posté le 08-04-2005 à 17:20:23    

Ta toujours pas éditer là :??:  
 
LES MAJUSCULES CA FAIT MAL AUX YEUX  
 
C'est illisible :)

Reply

Marsh Posté le 18-04-2005 à 14:20:36    

et bien,il y'a pas mal de visiteurs et personnes ne veut me répondre!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Reply

Marsh Posté le 25-04-2005 à 16:06:48    

coucou,il y'a quelqu'un,le problème des majuscules c'est réglé,s'il y'a une personne qui pourrait me répondre ou il a une connaissance sur le sujet,il sera le bien...........?

Reply

Marsh Posté le 25-04-2005 à 18:18:01    

sous windows xp, il suffit de faire un "mini" driver qui lit simplement les données sur le port parallele et les ecrit. (port 378, 379, 37A, mais en fait on pourrait acceder à tous les ports, attention certains ports sont qu'en lecture seul). Ensuite ton programme communique avec ce driver pour acceder à ces ports.
Il faut faire un driver car windows xp interdit aux programmes en mode utilisateur d'acceder à ces ports. Seules les programmes tournant en mode noyau peuvent y acceder (driver).


Message édité par papy_danone le 25-04-2005 à 18:21:15
Reply

Marsh Posté le 25-04-2005 à 20:57:20    

Ca dépend. Si c'est pour envoyer du texte tu peux ouvrir le fichier LPT1 et lire/écrire dessus.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-04-2005 à 10:22:40    

merci à vous de me répondre,en faite je vais vous expliquer le but de la manipulation,mon travail consistait à relier une interface réalisée sous le logiciel microsoft visual studio.net à des scanners pour projeter du lazer,donc cette interface sert à commander le lazer,donc j'ai conçu la carte d'acquisition qui reçoit les données du port parallele et les envoie vers mes scanners,mais il reste le problème de communiquer ces données de mon programme de commande vers ma carte et bien sur via le port parallele,sachant que je travaille sous windows xp,je suis plutôt éléctromécanicien,donc j'en suis conscient qu'on ne peut pas communiquer directement avec le port parallele et qu'on aura besoin d'un driver,on peut pas trouver des exemples sur internet des drivers en plus en programmation visual c++ .net

Reply

Marsh Posté le 26-04-2005 à 16:39:46    

j'ai fait une visite dans le forum et j'ai remarqué qu'il y avait qui avait proposé d'utiliser le driver decrit dans l'adresse suivante:http://www.internals.com/utilities/winio.zip  
sachant que je travaille sur windows xp service pack 1;
pensez vous que ce driver est fonctionnel dans ces conditions?

Reply

Marsh Posté le 27-04-2005 à 00:57:15    

A priori oui, mais il te faudra être administrateur pour faire fonctionner ton logiciel.
Si la communication avec ton scanner se fait en envoyant du texte / des données, tu peux te contenter d'ouvrir le fichier LPT1 et lire / écrire dessus.
http://msdn.microsoft.com/library/ [...] serial.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 27-04-2005 à 10:39:08    

pouvez vous m'eclaircir un peu l'idée,ou je peu le trouver ce fichier,en plus il y aura quoi dans ce fichier?

Reply

Marsh Posté le 27-04-2005 à 10:47:20    

Ce fichier on le "trouve" si un port parallèle est installé.
C'est pas un vrai fichier sur disque, c'est une émulation. EN ouvrant le fichier LPT1, tout se passe comme si on lisait / écrivait dans un fichier normal, sauf que à la place Windows envoie / lit des données depuis le port parallèle.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 27-04-2005 à 14:31:50    

oui le fichier lpt1 existe et se trouve à l'adresse 378,et ensuite il faut faire quoi,il y aura un programme à faire?

Reply

Marsh Posté le 27-04-2005 à 14:52:43    

Je sais pas comment il s'utilise ton périphérique. Et à priori tu cherches à faire un programme, non ?
Tu peux tenter de jouer avec cmd, mais ça va être limité...

Code :
  1. echo "coucou" > LPT1



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 27-04-2005 à 16:21:28    

le programme est deja réalisé,il me reste à relier mon programme(de projection lazer) à ma carte de réception des données,c'est pour ça il me faut un driver pour envoyer ces données,je pense que je vais essayer avec le logiciel winIO,je pense qu'il va me permettre par la suite de finir mon programme avec c++ en utilisant input affin d'activer les broches utiles suivant l'ordre de mes commandes.......

Reply

Marsh Posté le 27-04-2005 à 16:25:55    

Il te faut un driver si tu veux faire des choses pointues sur le port paralèlle, genre contrôler manuellement l'état des broches.
Si tu utilises un protocole de communication classique, ben depuis ton programme existant, travailles directement sur le fichier LPT1.

Code :
  1. FILE * lpt1 = fopen( "LPT1", "w" );
  2. fprintf( lpt1, "coucou\n" );$*
  3. fclose( lpt1 );


l'envoie de données peut se faire sans driver spécial.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-04-2005 à 15:31:28    

je n'ai pas essayé avec lpt1,mais j'ai essayé d'envoyer des boucles avec outp à la fin de mon programme principale de projection,et à la sortie mes scanners ne bougent pas,voila l'allure de mon programme:
 
 
 
#pragma once
 
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Xml;
using namespace System::Threading;
using namespace System::Timers;
 
#include "forme.h"
#include "gestionXML.h"
#include <conio.h>
 
namespace projection
{
 /// <summary>  
 /// Description résumée de projeter
 ///
 /// AVERTISSEMENT : Si vous modifiez le nom de cette classe, vous devrez également modifier la  
 ///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée  
 ///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
 ///          les concepteurs ne pourront pas interagir correctement avec les ressources
 ///          localisées associées à ce formulaire.
 /// </summary>
 public __gc class projeter : public System::Windows::Forms::Form
 {
 public:  
  projeter(String *fichier)
  {
   InitializeComponent();
   images=new ArrayList() ;
 
   if (!chargerImages(fichier))
    Close() ;
 
   int duree[]=DUREES_PREVISUALISATION ;
   int i ;
   int max=0 ;
 
   for (i=0; duree[i]; i++)
    max=Math::Max(duree[i].ToString()->Length, max) ;
 
   for (i=0; duree[i]; i++)
    this->dudDuree->Items->Add(String::Concat(new String(32, max+1-duree[i].ToString()->Length), duree[i].ToString(), S" ms" )) ;
  }
         
 protected:  
  void Dispose(Boolean disposing)
  {
   if (disposing && components)
   {
    components->Dispose();
   }
   __super::Dispose(disposing);
  }
 
 private: System::Windows::Forms::GroupBox *  groupBox1;
 private: System::Windows::Forms::Button *  btstart;
 private: System::Windows::Forms::RadioButton *  rbanimation;
 private: System::Windows::Forms::RadioButton *  rbimage;
 private: System::Windows::Forms::PictureBox *  zoneGraphique;
 private: System::Windows::Forms::ListBox *  lbImages;
 private: System::Windows::Forms::DomainUpDown *  dudDuree;
 private: System::Windows::Forms::NumericUpDown *  numericUpDown1;
 private: System::Windows::Forms::CheckBox *  checkBox1;
 private: System::Windows::Forms::Button *  btAllumer;
 private: System::Windows::Forms::Button *  btEteindre;
 
 
 private:
  //
  // <summary>
  // Variable nécessaire au concepteur.
  // </summary>
  System::ComponentModel::Container* components;
  //
  // <summary>
  // Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  // le contenu de cette méthode avec l'éditeur de code.
  // </summary>
  void InitializeComponent(void)
  {
   System::Resources::ResourceManager *  resources = new System::Resources::ResourceManager(__typeof(projection::projeter));
   this->groupBox1 = new System::Windows::Forms::GroupBox();
   this->btEteindre = new System::Windows::Forms::Button();
   this->btAllumer = new System::Windows::Forms::Button();
   this->checkBox1 = new System::Windows::Forms::CheckBox();
   this->numericUpDown1 = new System::Windows::Forms::NumericUpDown();
   this->dudDuree = new System::Windows::Forms::DomainUpDown();
   this->btstart = new System::Windows::Forms::Button();
   this->rbanimation = new System::Windows::Forms::RadioButton();
   this->rbimage = new System::Windows::Forms::RadioButton();
   this->zoneGraphique = new System::Windows::Forms::PictureBox();
   this->lbImages = new System::Windows::Forms::ListBox();
   this->groupBox1->SuspendLayout();
   (__try_cast<System::ComponentModel::ISupportInitialize *  >(this->numericUpDown1))->BeginInit();
   this->SuspendLayout();
   //  
   // groupBox1
   //  
   this->groupBox1->Controls->Add(this->btEteindre);
   this->groupBox1->Controls->Add(this->btAllumer);
   this->groupBox1->Controls->Add(this->checkBox1);
   this->groupBox1->Controls->Add(this->numericUpDown1);
   this->groupBox1->Controls->Add(this->dudDuree);
   this->groupBox1->Controls->Add(this->btstart);
   this->groupBox1->Controls->Add(this->rbanimation);
   this->groupBox1->Controls->Add(this->rbimage);
   this->groupBox1->Location = System::Drawing::Point(24, 288);
   this->groupBox1->Name = S"groupBox1";
   this->groupBox1->Size = System::Drawing::Size(496, 88);
   this->groupBox1->TabIndex = 32;
   this->groupBox1->TabStop = false;
   this->groupBox1->Text = S"Projeter";
   //  
   // btEteindre
   //  
   this->btEteindre->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btEteindre->Location = System::Drawing::Point(240, 56);
   this->btEteindre->Name = S"btEteindre";
   this->btEteindre->Size = System::Drawing::Size(64, 24);
   this->btEteindre->TabIndex = 43;
   this->btEteindre->Text = S"Eteindre";
   this->btEteindre->Click += new System::EventHandler(this, OnEteindre);
   //  
   // btAllumer
   //  
   this->btAllumer->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btAllumer->Location = System::Drawing::Point(240, 24);
   this->btAllumer->Name = S"btAllumer";
   this->btAllumer->Size = System::Drawing::Size(64, 24);
   this->btAllumer->TabIndex = 42;
   this->btAllumer->Text = S"Allumer";
   this->btAllumer->Click += new System::EventHandler(this, OnAllumer);
   //  
   // checkBox1
   //  
   this->checkBox1->Location = System::Drawing::Point(384, 24);
   this->checkBox1->Name = S"checkBox1";
   this->checkBox1->Size = System::Drawing::Size(104, 16);
   this->checkBox1->TabIndex = 41;
   this->checkBox1->Text = S"coché données";
   //  
   // numericUpDown1
   //  
   this->numericUpDown1->Location = System::Drawing::Point(328, 24);
   System::Int32 __mcTemp__1[] = new System::Int32[4];
   __mcTemp__1[0] = 255;
   __mcTemp__1[1] = 0;
   __mcTemp__1[2] = 0;
   __mcTemp__1[3] = 0;
   this->numericUpDown1->Maximum = System::Decimal(__mcTemp__1);
   this->numericUpDown1->Name = S"numericUpDown1";
   this->numericUpDown1->Size = System::Drawing::Size(48, 20);
   this->numericUpDown1->TabIndex = 40;
   //  
   // dudDuree
   //  
   this->dudDuree->Location = System::Drawing::Point(112, 24);
   this->dudDuree->Name = S"dudDuree";
   this->dudDuree->ReadOnly = true;
   this->dudDuree->Size = System::Drawing::Size(112, 20);
   this->dudDuree->TabIndex = 39;
   this->dudDuree->Text = S"durée d\'exposition";
   //  
   // btstart
   //  
   this->btstart->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
   this->btstart->Location = System::Drawing::Point(352, 56);
   this->btstart->Name = S"btstart";
   this->btstart->Size = System::Drawing::Size(96, 24);
   this->btstart->TabIndex = 30;
   this->btstart->Text = S"Démarrer";
   this->btstart->Click += new System::EventHandler(this, OnDemarrerProjection);
   //  
   // rbanimation
   //  
   this->rbanimation->Checked = true;
   this->rbanimation->Location = System::Drawing::Point(16, 24);
   this->rbanimation->Name = S"rbanimation";
   this->rbanimation->Size = System::Drawing::Size(88, 24);
   this->rbanimation->TabIndex = 27;
   this->rbanimation->TabStop = true;
   this->rbanimation->Text = S"L\'animation";
   //  
   // rbimage
   //  
   this->rbimage->Location = System::Drawing::Point(16, 56);
   this->rbimage->Name = S"rbimage";
   this->rbimage->Size = System::Drawing::Size(208, 24);
   this->rbimage->TabIndex = 28;
   this->rbimage->Text = S"Seulement l\'image sélectionnée";
   //  
   // zoneGraphique
   //  
   this->zoneGraphique->BackColor = System::Drawing::Color::White;
   this->zoneGraphique->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
   this->zoneGraphique->Cursor = System::Windows::Forms::Cursors::Cross;
   this->zoneGraphique->Location = System::Drawing::Point(264, 16);
   this->zoneGraphique->Name = S"zoneGraphique";
   this->zoneGraphique->Size = System::Drawing::Size(256, 256);
   this->zoneGraphique->TabIndex = 31;
   this->zoneGraphique->TabStop = false;
   //  
   // lbImages
   //  
   this->lbImages->Location = System::Drawing::Point(24, 16);
   this->lbImages->Name = S"lbImages";
   this->lbImages->Size = System::Drawing::Size(216, 251);
   this->lbImages->TabIndex = 30;
   this->lbImages->SelectedIndexChanged += new System::EventHandler(this, OnChangementImage);
   //  
   // projeter
   //  
   this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
   this->ClientSize = System::Drawing::Size(544, 398);
   this->Controls->Add(this->groupBox1);
   this->Controls->Add(this->zoneGraphique);
   this->Controls->Add(this->lbImages);
   this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
   this->Icon = (__try_cast<System::Drawing::Icon *  >(resources->GetObject(S"$this.Icon" )));
   this->MaximizeBox = false;
   this->MinimizeBox = false;
   this->Name = S"projeter";
   this->ShowInTaskbar = false;
   this->Text = S"Projeter l\'animation";
   this->groupBox1->ResumeLayout(false);
   (__try_cast<System::ComponentModel::ISupportInitialize *  >(this->numericUpDown1))->EndInit();
   this->ResumeLayout(false);
 
  }  
 
 
  //
  // <summary>
  // Liste des images
  // </summary>
  ArrayList *images ;
  //
  // <summary>
  // Couleur principale
  // </summary>
  Color coulPrincipale ;
  //
  // <summary>
  // Couleur de sélection
  // </summary>
  Color coulSelection ;
  //
  // <summary>
  // Couleur du calque
  // </summary>
  Color coulCalque ;
  //
  // <summary>
  // Thread pour la projection
  // </summary>
  Thread * thproj ;
  //
  // <summary>
  // Charger images
  // </summary>
  bool chargerImages(String *filename)
  {
   XmlTextReader* reader = NULL ;
   bool retval=true ;
 
   try {
 
    // Intitialise le reader avec le fichier et ignore les noeuds vides
    reader = new XmlTextReader(filename) ;
    reader->WhitespaceHandling = WhitespaceHandling::None ;
 
    // On rejoint le noeud racine "Projection"
    while (reader->Read() && (reader->NodeType != XmlNodeType::Element || String::Compare(reader->Name, S"Projection" )))
     ;
 
    // On doit être sur le noeud Projection
    if (reader->NodeType != XmlNodeType::Element || String::Compare(reader->Name, S"Projection" ))
     throw new Exception("Balise Animation ou Optimisation non trouvée" ) ;
     
    chargerCouleurs(reader) ;
    chargerImages(reader) ;
   
   } catch(Exception *e) {
    AFFICHE_ERREUR(String::Concat("Erreur lors du chargement à partir du fichier \"", filename, "\"\n\nCause : \n", e->ToString())) ;
    retval=false ;
   }
   
   if (reader!=0)
    reader->Close() ;
   
   if (images->Count)
    lbImages->SelectedIndex=0 ;
 
   return retval ;
  }
  //  
  // <summary>
  // Code spécifique au chargement des couleurs
  // </summary>
  void chargerCouleurs(XmlTextReader* reader)
  {
   // Lecture des couleurs  
   reader->MoveToContent() ;  
   coulPrincipale     = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulPrincipale" ))) ;
   coulSelection      = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulSelection" ))) ;
   coulCalque         = Color::FromArgb(System::Convert::ToInt32(reader->GetAttribute(S"CoulCalque" ))) ;
   reader->MoveToElement() ;
 
   // On se place sur le noeud suivant, qui doit donc être une vue
   reader->Read() ;
  }
  //  
  // <summary>
  // Code spécifique au chargement des lignesBrisees
  // </summary>
  void chargerImages(XmlTextReader* reader)
  {
   forme *f ;
 
   // Si il y a bien des images... (balise ouverte et fermante en même temps!)
   if (reader->NodeType == XmlNodeType::Element && !String::Compare(reader->Name, S"Forme" )) {
 
    // On charge les formes tant qu'on est pas sur la fin du fichier et qu'on est sur une forme
    while (!reader->EOF && reader->NodeType == XmlNodeType::Element && !String::Compare(reader->Name, S"Forme" )) {
     f=formeFromXML(reader) ;
     images->Add(f) ;
     lbImages->Items->Add(f->get_nom()) ;
    }
 
    // On a terminé de lire les formes, on vérifie que l'on est sur la balise fermante de Projection
    if (reader->NodeType != XmlNodeType::EndElement || String::Compare(S"Projection", reader->Name))
     throw new Exception("Erreur de syntaxe XML" ) ;
 
    if (lbImages->Items->Count)
     lbImages->SelectedItem=0 ;
   }
  }
  //  
  // <summary>
  // Quand on change d'image, redessine la zone graphique
  // </summary>
  System::Void OnChangementImage(System::Object *  sender, System::EventArgs *  e)
  {
   // On vérifie qu'un élément est sélectionné
   if (lbImages->SelectedIndex != -1) {
    Graphics *graphics ;
   
    // Effacer la zone graphique
    try {
     zoneGraphique->set_Image(new Bitmap(zoneGraphique->get_Width(), zoneGraphique->get_Height())) ;
    } catch (...) {
     throw new Exception(S"Erreur lors du chargement du bitmap" ) ;
    }
 
    // Pour éviter que ça ne plante au démarrage
    // en effet, vues n'est pas initialisé lors du premier appel de cette méthode
    try {
     Pen *NewPen = new Pen(coulPrincipale, 1) ;
     dynamic_cast<ligneBrisee*>(images->get_Item(lbImages->SelectedIndex))->paint(graphics=System::Drawing::Graphics::FromImage(zoneGraphique->get_Image()), NewPen) ;
     NewPen->Dispose() ;
    }
    CATCH_DEBUG // Affiche un message d'erreur uniquement si __DEBUG__ est défini
   
    zoneGraphique->set_Image(zoneGraphique->Image) ;
   
    graphics->Dispose() ;
   }
  }
  //  
  // <summary>
  // Quand l'utilisateur clique sur le bouton pour démarrer la projection
  // </summary>
  System::Void OnDemarrerProjection(System::Object *  sender, System::EventArgs *  e)
  {
   // S'il faut démarrer
   if (!String::Compare(btstart->Text, "Démarrer" )) {
     
    MessageBox::Show("Demarrage de la projection" ) ;
    btstart->Text=S"Arrêter" ;
    lbImages->Enabled=false ;
    rbanimation->Enabled=false ;
    rbimage->Enabled=false ;
    dudDuree->Enabled=false ;
    thproj  = new Thread(new ThreadStart(this, test /*projSelImg*/));
    thproj->Start() ;
   }
 
   // Il faut arrêter
   else {
    btstart->Text=S"Démarrer" ;
    lbImages->Enabled=true ;
    rbanimation->Enabled=true ;
    rbimage->Enabled=true ;
    dudDuree->Enabled=true ;
    thproj->Abort() ;
    thproj->Join() ;
   }
 
   /*
   for (i=0; i<1000; i++) {
    // Envoi de 11110000 sur la ligne de données
    outportb(0x378,0xF0) ;
   
    // Ligne de commade : X - X - X - X - /SELECT - /INIT - AUTOFEED - /STROBE
    outportb(0x37A,0x0F) ;
   }
   */
  }
 
  void test()
  {
 
   unsigned short adresse ;
   int valeur ;
 
   if (this->checkBox1->Checked == true)
    adresse=0x378 ;
   else
    adresse=0x37A ;
   
   valeur=Convert::ToInt32(this->numericUpDown1->Value) ;
   
   //Dialogue avec le port parallèle  
   
   _outp(0x37A, 12) ;
   
   while(1) {
    _outp(0x378, valeur) ;
    _outp(0x37A, 14) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 6) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 8) ;
    _outp(0x37A, 2) ;
    _outp(0x378, valeur) ;
    _outp(0x37A, 0) ;
    _outp(0x37A, 2) ;
   }
  }
 
  //  
  // <summary>
  // Pour projeter en boucle l'image sélectionnée
  // </summary>
  void projSelImg()
  {
   ligneBrisee *lb=dynamic_cast<ligneBrisee*>(images->get_Item(lbImages->SelectedIndex)) ;
   int i ;
 
   while(1)
    for (i=0 ; i<(int) lb->get_nbPoints(); i++)
     projeterPoint(lb->get_point(i)) ;
  }
  //  
  // <summary>
  // projeter un point
  // </summary>
  void projeterPoint(PointF pt)
  {
   this->rbimage->Text=pt.ToString() ;
   Thread::Sleep(500) ;
 
   
   /*
   // envoi du poids faible de x
   _outp(0x378,mat[i][j]);
   _outp(0x37A,15);
   _outp(0x37A,7);
   j++;  
   // envoi du poids fort de x    
   _outp(0x378,mat[i][j]);
   _outp(0x37A,13);
   _outp(0x37A,7);
   j++;  
   // envoi du poids faible de y
   _outp(0x378,mat[i][j]);  
   _outp(0x37A,3);
   _outp(0x37A,7);
   j++;  
   // envoi du poids fort de y    
   _outp(0x378,mat[i][j]);
   _outp(0x37A,1);
   _outp(0x37A,9);
   j++;
   for(l=0;l<vit;l++);
   if (j>=param[i*2]*4) j=0;
   */
 
  }
 
 
  System::Void OnAllumer(System::Object *  sender, System::EventArgs *  e)
  {
   _outp(0x37A, 12) ;
  }
 
  System::Void OnEteindre(System::Object *  sender, System::EventArgs *  e)
  {
   _outp(0x37A, 4) ;
  }
 
   
} ;
}
             

Reply

Marsh Posté le 28-04-2005 à 15:47:57    

Utilise les balses [ cpp ]
Que veux-tu qu'on fasse avec tout ce code ?
_outp c'est une mauvaise solution, ça ne marche pas sous XP. Si tu suis un peu le débat (ça fait plusieurs fois que j'ai des doutes), tu aurais compris que le driver sert à remplacer _outp.  
Et je reviens encore à la charge avec mon LPT1 ( :sweat: ), en .Net cette fois-ci:
http://support.microsoft.com/defau [...] roduct=vb6


Message édité par HelloWorld le 28-04-2005 à 15:48:39

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-04-2005 à 16:50:59    

[hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _
   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero) ]
 
[Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero) ]
 
[Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero) ]
 
[Success = CloseHandle(hParallelPort) ]
 
ce sont ces codes la qu'il faut utiliser?
franchement la syntaxe me dit rien de tout,je ne suis pas spécialiste de la programmation comme vous,
je ne sait pas s'il faut modifier ces lignes,comment je pourrait introduire mes lignes de codes pour definir les broches à utiliser suivant un certain ordre de commande,par exemple je devrais commencer par faire un clear au debut,ensuite remplir mes 4registres,ensuite allumer le lazer,ensuite faire un chargement ldac.......c'est un exemple.......

Reply

Marsh Posté le 28-04-2005 à 17:31:59    

Avec CreateFile tu ouvres le fichier "LPT1", et tu écris / lis dedans avec WriteFile / ReadFile. Tu le ferme après utilisation avec CloseHandle.
Apparement tu bosses en Managed C++, inclut <windows.h> et tu auras accès à ces fonctions.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 29-04-2005 à 14:00:11    

donc j'ai commencé à introduire les lignes de codes,mais je connais pas la syntaxe des lignes à rajouter pour pour ecrire dans le fichier lpt1 parceque il parait qu'on peut pas lire dans ce fichier,les lignes à rajouter vont me permettre de commander mes fils d'adresse(select,init,autofeed du port parallele)affin de remplir les 4 registres de ma carte d'acquisition......avez vous une idée?..........
voila l'allure de la partie du programme que j'ai effectué,j'ai rien inventé,j'ai juste suivi l'exemple dans l'adresse que vous m'avez donné:
[try {
        // Parallel port
         Console.WriteLine("Accessing the LPT1 parallel port" );
        //pour ouvrir le fichier lpt1 du port parallele
        void hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)
  // Verifier si le fichier lpt1 est ouvert
  if hParallelPort.ToInt32 = -1  
  {
            Throw New CommException("Unable to obtain a handle to the LPT1 port" );
  }
        //pour ecrire dans le fichier lpt1
        Console.WriteLine("Writing the following data to LPT1: Test" );
        void Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
        if Success = False  
  {
            Throw New CommException("Unable to write to LPT1" );
  }
        Console.WriteLine(Ex.Message);
        //pour fermer le fichier lpt1
        void Success = CloseHandle(hParallelPort)
        if Success = False  
  {
            Console.WriteLine("Unable to release handle to LPT1" );
  }
  }
        Console.WriteLine("Press ENTER to quit" );
        Console.ReadLine()]

Reply

Marsh Posté le 29-04-2005 à 22:45:53    

Citation :

vont me permettre de commander mes fils d'adresse


Arf...c'est l'info que je te demande depuis le début, comment se passe ta communication avec ton bidule. Si tu dois jouer sur des broches précises, bon ben oublie CreateFile, et reprend le driver winio... Remplace tes _outp par le outportb de winio.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-05-2005 à 10:04:10    

Bonjour tout le monde,salut helloword,
donc j'ai testé ce programme et j'ai rien reçu au niveaude mes scanners,donc je vais installer le driver winio et j'éspère que ça va marcher.........

Reply

Marsh Posté le 02-05-2005 à 14:30:33    

salut,j'ai suivi la procédure dans le help de winio,jai généré mon programme et il me marque l'erreur suivante:
[e:\Mes documents\Visual Studio Projects\projection\projeter.h(16): fatal error C1083: Impossible d'ouvrir le fichier include : 'winio.h' : No such file or directory
]
c'est quoi ce problème la?

Reply

Marsh Posté le 02-05-2005 à 14:39:04    

Il trouve pas winio... Faut l'ajouter à ton projet, ou bien aux paths de VC++ (Outils->Options).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-05-2005 à 16:44:00    

apres génération du programme je trouve beaucoup d'erreur,113 erreurs,c'est des erreurs dans le fichier winio.h lorce que je l'ai rajouté comme répertoire pour le fichier include"winio.h".......

Reply

Marsh Posté le 02-05-2005 à 17:01:02    

en faite voila ce que j'ai fait,j'ai fait outil_option_projets_et la j'ai rajouté une nouvelle ligne pour la liste des fichiers include ,donc j'ai rajouté mon répertoire pour le fichier winio.h que j'ai installé sous windows,c'est ça la méthode ou pas?

Reply

Marsh Posté le 02-05-2005 à 20:57:27    

Oui.
Après les erreurs faut en donner quelques unes. Tu as inclus <windows.h> avant ?
Le mieux c'est de récupérer un exemple qui marche / compile, et de t'en servir comme base...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-05-2005 à 09:34:14    

merci du renseignement de windows.h,il reste que 4 erreurs et 4warnings,j'etais à 130,pour l'exemple donc vous avez parlé ou je pourrais le trouver?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed