Bonjour,
Je cherche à piloter l'ouverture d'un tiroir caisse Aures.
J'ai les commandes mais je ne sais pas sur quel port et avec quel protocole les envoyer.
Voici les infos de la doc :
Merci de votre aide.
Bonjour,
Je cherche à piloter l'ouverture d'un tiroir caisse Aures.
J'ai les commandes mais je ne sais pas sur quel port et avec quel protocole les envoyer.
Voici les infos de la doc :
Merci de votre aide.
cette documentation semble être pour une caisse équipée d'un port spécial non ?
personnellement j'ai utilisé des tiroirs branchés sur une imprimante EPSON TM88-V et il suffit d'envoyer une séquence spécifique à l'imprimante pour qu'elle ouvre le tiroir, il y a un sujet sur cela quelque part dans le forum Delphi
Bonjour,
Tu n'as pas de driver à installer avec ce tiroir qui semble effectivement bien spécifique ? Celui-ci indiquerait quel port utiliser
Ton connecteur ressemble même pas à une liaison série qui respecterait le protocole RS-232. Ce tiroir se branche sur quelle connexion du PC ?
Maintenant, la plupart de ce type de matériel respecte la norme ESC/POS
Merci pour vos réponses.
Oui il dispose d'un port spécifique.
Voici la doc complète du PC Tactile sur lequel se connecte le tiroir : http://www.aures-support.fr/DATA/Doc/Manuel%20Yuno.pdf
En cherchant "tiroir" vous trouverez très vite la page sur la connexion et celle sur le protocole.
Merci
C'est comme pour ton problème d'affichage, c'est juste une autre série de commande a émettre via TComPort
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Oui c'est ce que je me suis dit mais j'ai envoyé un caractère sur les 6 ports COM que je vois dans le gestionnaire de périphériques et il ne s'est pas ouvert.
J'avais lu sur d'autres forums que n'importe quelle commande pouvait ouvrir le tiroir. Qu'une impulsion électrique sur le port suffisait.
Une idée de comment envoyer cette commande O 48C 04 vers le port COM (j'utilise le composant TComPort) ?
Pour l'afficheur je fais un WriteStr() et ça fonctionne...
Comment identifier le port vers lequel envoyer la commande ?
Ils disent Emplacement du registre : 48Ch ..?
Merci
si ça tourne sous XP tu dois pouvoir taper dans l'assembleur
il est question ici d'un port IO de la carte mère et non d'un Port com.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure ouvrir(); assembler; asm mov al, $04 out $48c, al end;
au pire tu peux le faire en TurboPascal sous DOS et le lancer par un ShellExecute
EDIT: sinon il faut se tourner vers un driver système
http://www.grahamwideman.com/gw/tech/Delphi/iopm/
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Java peux invoquer une DLL native, donc ce qui est possible en natif, l'est aussi sous Java
http://openjdk.java.net/projects/dio/
Merci pour vos réponses.
J'avoue préférer cette solution là
Je pense tester ça ce soir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure ouvrir(); assembler; asm mov al, $04 out $48c, al end;
Je vous tiens au courant
J'ai de nouveau un tiroir caisse en ma disposition pour faire des tests
Malheureusement la procédure "ouvrir" citée plus haut remonte une erreur de compil : Non concordance de taille d'opérande.
Je suis preneur de tout conseil pour tester le plus possible de solutions tant que j'ai le tiroir.
Merci pour votre aide
essaye
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure ouvrir(); assembler; asm mov al, $04 mov $48c, dx // out ne prend pas plus qu'un octet en valeur immédiate comme adresse (en asm X86 32 bits...) out dx, al end;
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Non toujours pas...
Même erreur de compil sur la seconde ligne...
hi, hi !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure ouvrir(); assembler; asm mov al, $04 mov dx, $48c // autant mettre les opérandes dans le même ordre qu'au dessus ! out dx, al // out ne prend pas plus qu'un octet en valeur immédiate comme adresse (en asm X86 32 bits...) end;
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Cette fois ça compile mais j'ai une exception "Instruction privilégiée" sur la dernière ligne à l'exécution.
Quelqu'un peut peut-être me bricoler un script dans un autre langue à exécuter lorsque j'ai besoin d'ouvrir le tiroir..?
Merci encore pour votre aide.
J'ai trouvé pas mal de ressources liées à mon tiroir caisse mais j'ai du mal à les transposer à mon soft en Delphi.
Sur cette page http://www.aures-support.fr/DATA/dri...ual%20list.htm il y a des versions compilées d'utilitaires permettant de manipuler le tiroir mais seule la version Windows en VB fonctionne sur mon PC.Comment commander un tiroir caisse connecté directement sur le Galéo ?
Le port tiroir caisse est accessible à travers une adresse mémoire. Vous pouvez utiliser, soit les drivers OPOS, soit l'adresse directement (GALEO 200: adresse H48C, GALEO 1500/150: adresse H4B8, ouverture: H01, autorisation de fermeture: H00 et statut à la même adresse) à l'aide de la dll de gestion du tiroir caisse (voir page 25 de la documentation technique). Vous pouvez télécharger cet utilitaire afin de tester le port tiroir.
Par contre j'ai les sources de la version DOS... Peut-être que cela peut aider..?
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // Cash Drawer definition file. // I/O port 0x48C, 2 Cash Drawer Box support. //==== History ====// //R00 070518 First release. #define CDBoxCtlIO 0x48C //Cash Drawer Control Register #define CDBoxStsIO 0x48C //Cash Drawer Status Register #define CDBoxCtlCMDOpen1 0x0C //Command for Cash Drawer 1 open control #define CDBoxCtlCMDOpen2 0x30 //Command for Cash Drawer 2 open control #define CDBoxCtlCMDAllowClose 0x00 //Command for allow Cash Drawer close #define CDBoxStsIOMask 0xC0 //Cash Drawer Status Register mask #define CDBox1StsBit 0x40 //Cash Drawer "DIN bit0" pin input status bit map #define CDBox2StsBit 0x80 //Cash Drawer "DIN bit1" pin input status bit map #define CDBoxStsIs0Str "0, Close " //String for Cash Drawer bit map == 0 #define CDBoxStsIs1Str "1, Open or not exist " //String for Cash Drawer bit map == 1
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 //==== History ====// //R00 070518 First release. #include "CDB48Cx2.h" #include <stdio.h> #include <dos.h> #include <conio.h> #define CDBoxOpenDelay 300 //Delay time for Cash Drawer open void CDBoxCMD(int CDBoxCMDValue ); char APName[]= "\t\tCash Drawer Testing Program\n" "\t===========================================\n" ; char APHelp[]= "\n - Pass '1' key for open Cash Drawer 1" "\n - Pass '2' key for open Cash Drawer 2" "\n - Pass '3' key for open both of Cash Drawer 1 and Cash Drawer 2" "\n - Pass '0' key for Exit" "\n" ; void main(void){ int PortStatus, OldPortStatus = 0xff; char getkey = 0; clrscr(); //clear screen printf(APName); printf(APHelp); printf( "\nCash Drawer Control Register\t: I/O 0x%X", CDBoxCtlIO); printf( "\nCash Drawer Status Register\t: I/O 0x%X", CDBoxStsIO); for(;;) { PortStatus = (inportb(CDBoxStsIO) & CDBoxStsIOMask); if (OldPortStatus != PortStatus) { gotoxy (1,12); printf ("\n\tCash Drawer 1 Status : "); if((PortStatus & CDBox1StsBit) == 0) printf(CDBoxStsIs0Str); // =0 else printf(CDBoxStsIs1Str); // =1 printf ("\n\tCash Drawer 2 Status : "); if((PortStatus & CDBox2StsBit) == 0) printf(CDBoxStsIs0Str); // =0 else printf(CDBoxStsIs1Str); // =1 }; while(kbhit()){ getkey = getch(); switch (getkey){ case '1': CDBoxCMD( CDBoxCtlCMDOpen1 ); break; case '2': CDBoxCMD( CDBoxCtlCMDOpen2 ); break; case '3': CDBoxCMD( (CDBoxCtlCMDOpen1 | CDBoxCtlCMDOpen2) ); break; } gotoxy (35,16); printf( "Input: [%c] ", getkey); //DEBUG } if(getkey=='0') break; OldPortStatus = PortStatus; } } void CDBoxCMD(int CDBoxCMDValue ){ outport(CDBoxCtlIO, CDBoxCMDValue); //Control value delay(CDBoxOpenDelay); //Delay time for Cash Drawer open outport(CDBoxCtlIO, CDBoxCtlCMDAllowClose); //Allow Close Cash Drawer }
Merci tourlourou pour ton code. Je retrouve cette structure dans d'autre forums donc j'essaie de comprendre pourquoi il ne fonctionne pas pour moi.
J'exécute l'application sur un Windows 8 x64. Un problème de compatibilité..?
Concernant l'exception "instruction privilégié" j'ai pu trouver ça.
Et çaunder W98 needed nothing to allow it to write a byte to an I/O address, eg the PC parallel port. Under NT and on it will generate EPriviledge unless that address has been 'opened' in some way eg using gwiopm. Thus EPriviledge can be an indicator of a 'garbage read/write' (as David suggests) or of an incomplete setup that read / writes incorrectly setup hardware.
Sinon j'ai essayé d'utiliser la dll InpOut32.dll mais sans succès.NT does not give you direct access to the ports.
La fonction me retourne 0 mais le tiroir ne s'ouvre pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function Out32(wAddr:word;bOut:byte): byte; stdcall; external 'inpout32.dll'; ... ShowMessage(IntToStr(Out32($48C,$04)));
Une idée ?
Bonjour,
Il y a peut être d'autres fonctions dans cette DLLj'ai essayé d'utiliser la dll InpOut32.dll mais sans succès.
par exemple celles-ci
function inportb(_Port: Integer): BYTE; StdCall; external 'inpout32.dll';
procedure outportb(_Port: Integer; _Data: BYTE); StdCall; external 'inpout32.dll';la dll inpout32.dll est placée Où ? il faut AMHA qu'elle soit soit dans SYSWOW64 soit dans le répertoire de l'applicationJ'exécute l'application sur un Windows 8 x64.
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Oui la dll est dans le répertoire de l'appli.
Par contre j'ai essayé ta fonction et elle n'est pas implémentée dans ma version de la dll.
J'ai une erreur lorsque je l'appelle...
ma documentation est peut être un peu vieille, cela fait longtemps (début 2000) que je n'ai plus eu affaires avec cette dll.
as-tu une liste des fonctions ? sinon (tdump est fourni dans le répertoire bin de delphi)
sinon en cherchant un peu pour me (re)mettre au jus, j'ai vu cette page
Code Commande : Sélectionner tout - Visualiser dans une fenêtre à part tdump -ee -m "C:\...\input32.dll" > "C:\...\input32dll.txt"
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager