Re: Plug-in pour systèmes windows 64bits

41
Salut,
En ce qui concerne les soucis de désinstallation avec le fichier msi, il faut remettre les fichiers qui ont été déplacés ou supprimer manuellement après son installation. Pour cela télécharger directement le zip prévu à cet effet sur google code (regarder la description car l'un des zip en téléchargement ne dispose pas de tous les fichiers).

Re: Plug-in pour systèmes windows 64bits

42
Sous windows (uniquement windows.h) j'arrive à trouver le port par son nom virtuel ( LTP2 et COM4 étant inexistant ils sont NULL ).

L'écriture apparemment serait bonne. Mais au final il n'y a rien d'écrit ( dwNumWritten reste null ) et il faut attendre 50s !!!

Surement un problème d’acquittement car le port n'est branché à rien. Donc au bout de 50s le port considérerait qu'il a bien envoyé le poids, sans en être sur ?

Enfin je n'en sais rien. Mes connaissances en électronique remonte à un bac électronique il y a 5ans ...

En image :

[IMG]http://img820.imageshack.us/img820/4458/coadapusb.png[/IMG]

Uploaded with ImageShack.us


Le code :
[quote=code]
#include
#include

using namespace std;

int main()
{
HANDLE hFile[4];
bool Success ;

hFile[0] = CreateFile("LPT1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hFile[1] = CreateFile("COM3", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

hFile[2] = CreateFile("LPT2", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hFile[3] = CreateFile("COM4", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

cout " " " " << hFile[3] << endl ;


char buffer[8];
buffer[0] = 1 ;
buffer[1] = 0 ;
buffer[2] = 0 ;
buffer[3] = 0 ;
buffer[4] = 0 ;
buffer[5] = 0 ;
buffer[6] = 0 ;
buffer[7] = 0 ;

DWORD dwNumWritten;
Success = WriteFile(hFile[0], buffer, strlen(buffer), &dwNumWritten,NULL);


cout << "OK ? "<< Success << " - " << dwNumWritten << endl;



/* for(int i = 0 ; i < 100 ; i++)
{
buffer[0] = !buffer[0] ;
Success = WriteFile(hFile[0], buffer, strlen(buffer), &dwNumWritten,NULL);
}*/


return 0;
}

[/quote]

Re: Plug-in pour systèmes windows 64bits

45
Bonjour,
Il faut bien chercher un peu :)

De mon coté j'arrive à écrire sur le port parallèle avec la méthode WriteFile, mais uniquement avec du code VB. Malheureusement Jedicut ne veut pas d'une dll écrite en VB :'(

En adaptant ce code VB en Pascal pour l'utilisation sous Delphi, j'ai un message d'erreur "le point d'entrée de la méthode CreateFile est introuvable dans la librairie kernel32.dll..."

Sinon cette méthode d'utilisation de kernel32.dll est sûrement la meilleure solution pour les adaptateurs USB/parallles car elle se contente d'un nom de port et se fiche de l'adresse.

Toutefois, quelques modification sur la mm2001 sont nécessaires car la méthode writefile ne fonctionne pas comme les inpout32.dll et compagnie. On perd ainsi le controle de la chauffe par pc, la lecture de l'état et la fonction moteur on/off. Mais les sorties A0 à A7 sont toujours opérationnelles, la découpe en elle même est donc toujours possible.

Mais il faudrait remettre la main sur le code de l'interface mm2001 pour l'adapter et utiliser autre chose que le port parallèle car on finira par être bloqués : /

Re: Plug-in pour systèmes windows 64bits

46
Il me semblait pourtant qu'on pouvait faire tout ce qu'on voulait sur le port parallèle avec la méthode writefile ??

Pour ce qui est du VB, l'incompatibilité est toujours vrai avec la nouvelle version beta de Jedicut ? Dans cette version j'ai revu la structure des dll de communication, en modifiant par exemple certain format de données pour utiliser des formats "universels". Tu y as jeté un oeil ?
Jerome

Re: Plug-in pour systèmes windows 64bits

47
Tout ce qu'on veut, oui, mais il y a des conditions :p

La méthode writefile permet entre autres d'envoyer des données sur le port parallèle, mais à chaque caractère envoyé, le périphérique concerné doit répondre qu'il l'a bien reçu. Sinon l'ordi reste en attente, et annule la transmission au bout d'un certains temps. Avant toute tentative, le périphérique doit également indiquer via les broches du registre status qu'il n'est pas en erreur, qu'il est bien "en ligne" (comme une imprimante, en fait), etc etc. Il faut donc relier sur l'interface certaine broches du port parallèle à 0V ou 5V du registre status pour que l'ordi sache qu'elle est OK pour recevoir une donnée, et donc pour que les méthodes CreateFile, WriteFile et ReadFile qui nous intéressent fonctionnent.

Je pense d'ailleurs que le soucis de Nicolas c'est en rapport avec ces connexions : l'ordi attend une réponse du port, mais ne l'obtient pas.

Voici ce que j'ai connecté au niveau du port parallèle sur la mm2001 pour tester la méthode WriteFile :

broches 10, 11 et 12 (respectivement signaux Ack, busy et Erreur papier) : 0V
broches 13 et 15 (respectivement signaux Online et Erreur) : 5V

Ensuite dans le code, il faut envoyer avec WriteFile un caractère dont le code ASCII correspond à l'ordre qu'on veut envoyer. Ce code ASCII est envoyé sur les 8 broches du registre data. Comme les broches du regitre status sont maintenu aux niveaux ci-dessus, on peut renvoyer immédiatement un autre ordre, ce qui permet donc de controler les moteurs. J'y suis parvenu assez facilement avec un petit code en VB à partir d'un exemple pris sur le site de MSDN.

Malheureusement, pour le moement je ne parviens pas à faire utiliser ces méthodes à du code Delphi...Je vais quand même réessayer une dll écrite en VB, comme effectivement tu as changé pas mal de truc, on peut espérer ...

Re: Plug-in pour systèmes windows 64bits

48
Bonjour,
Après quelques recherche et tatonnement, je suis finalement parvenu à faire fonctionner le WriteFile avec delphi...En fait le soucis c'était (en gros) juste que je m'obstinais à déclarer les fonctions avant de les utiliser (l'habitude de VB :p), alors qu'avec Delphi il n'y en a pas forcément besoin avec les dll propres à windows.

Sans déclarer ces fonctions ça fonctionne, je parviens donc à allumer mes petites LED :p.

J'ai plus qu'à reprendre le plug-in et y intégrer les WriteFile et compagnie. Par contre je pense le compiler sous un autre nom, histoire de les différencier. Par contre, pour le moment plus de lecture du port parallèle à cause des connexions à refaire sur l'interface, mais si déjà on peut découper avec n'importe quel adaptateur USB parallèle en controlant la chauffe manuellement, ça dépannera en attendant...

Re: Plug-in pour systèmes windows 64bits

49
Bonjour,
Voilà, première version test d'un plug-in qui utilise les API de windows.

Petite modification à faire dans le fichier adresse_port_LPT.ini : ajouter "nom=LPTX:" à la fin, en remplaçant le X par le numéro du port parallèle.

Ne pas oublier la petite modif de l'interface au niveau de la connection du port parallèle sur l'interface. Attention en effectuant cela de ne pas faire de court-circuit avec des sorties du PIC ou autres. Il faudra donc déconnecter des composants ou couper provisoirement des pistes d'un coup de cutter (facilement réparable ensuite).
-broches 10, 11 et 12 à la masse 0V
-broches 13 et 15 à 5V .

Pour l'instant toutes les fonctions qui lisent des informations sur l'interface (état et valeur de chauffe, timer...) sont normalement inopérantes, ou planteront :p. Suivant les retours, ce plug-in restera ainsi juste pour dépanner (car la découpe avec une chauffe manuelle doit fonctionner), ou sera moderniser.
Fichiers joints
CncNet_kernel32.zip
(50.22 Kio) Téléchargé 162 fois
`); }); })(jQuery, window, document, phpbb);