configuration port parallele sous windows xp - C++ - Programmation
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...................
Marsh Posté le 05-04-2005 à 09:40:39
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
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............
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
Marsh Posté le 05-04-2005 à 11:53:13
merci d'éditer ton titre et de virer les majuscules stp, sinon je ferme
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...
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?
Marsh Posté le 05-04-2005 à 14:15:30
bon, t'en as rien à faire de ce que je t'ai dit, tant pis
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
Marsh Posté le 08-04-2005 à 17:20:23
Ta toujours pas éditer là
LES MAJUSCULES CA FAIT MAL AUX YEUX
C'est illisible
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!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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...........?
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).
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.
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
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?
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
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?
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.
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?
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 :
|
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.......
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 :
|
l'envoie de données peut se faire sans driver spécial.
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) ;
}
} ;
}
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 ( ), en .Net cette fois-ci:
http://support.microsoft.com/defau [...] roduct=vb6
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.......
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.
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()]
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.
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.........
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?
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).
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".......
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?
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...
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?
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