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 :
Pièce jointe 201136
Pièce jointe 201137
Merci de votre aide.
Version imprimable
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 :
Pièce jointe 201136
Pièce jointe 201137
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
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:
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/
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:
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:
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;
Non toujours pas...
Même erreur de compil sur la seconde ligne...
hi, hi ! :aie:
Code:
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;
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.Citation:
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:
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:
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 ça :(Citation:
under 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.Citation:
NT does not give you direct access to the ports.
La fonction me retourne 0 mais le tiroir ne s'ouvre pas...Code:
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 DLLCitation:
j'ai essayé d'utiliser la dll InpOut32.dll mais sans succès.
par exemple celles-ci
Citation:
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'applicationCitation:
J'exécute l'application sur un Windows 8 x64.
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 pageCode:tdump -ee -m "C:\...\input32.dll" > "C:\...\input32dll.txt"