Bonjour,
Je développe un banc de test automatique qui va réaliser des mesures avec différents appareils ( alimentation multimètre oscilloscope ). Je dois imprimer ces mesures avec une imprimante ticket qui est une CITIZEN DP 562 CNL reliée sur l'ordinateur via liaison parallèle et détectée en tant qu'imprimante générique (sans driver).
Je commence par vous montrer mon code en expliquant ce qu'il fait :
J'ai un premier fichier pour piloter mon logiciel ( j'envoi ici les ordres pour mes appareils de mesures)
\TXT
OSCIL/ORDER/CURS:VBAOSITION2?/$NUM1
'ordre que j'envoi à l'oscillo pour qu'il fasse une mesure
TICK/Position du curseur 2 : /$NUM1/
'Imprime Position du curseur 2 : la valeur s
OSCIL/MEAS/1/$NUM2
TICK/Largeur d'impulsion : /$NUM2/s
'Imprime Largeur d'impulsion : la valeur s
FINT
'ici se trouve print.endDoc()
'FIN
TICK va appeler la fonction suivante qui permet d'imprimer :
Public printer As New Printer
Ici pas de problème mes 2 lignes s'impriment correctement le problème est que l'imprimante est programmée par défaut avec 66 lignes, et donc j'imprime 2 lignes + 64 blanches ce qui ne correspond aux attentes.
Code VB.NET : 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 Public Sub tick() Dim imp As String = "" Dim i As Integer = 1 Try While table(i) <> "" If table(i).StartsWith("$") Then Select table(i).Trim("$") Case "NUM1" imp = imp + num1.ToString + " " Case "NUM2" imp = imp + num2.ToString + " " Case "NUM3" imp = imp + num3.ToString + " " Case "NUM4" imp = imp + num4.ToString + " " Case "NUM5" imp = imp + num5.ToString + " " Case "NUM6" imp = imp + num6.ToString + " " Case "NUM7" imp = imp + num7.ToString + " " Case "NUM8" imp = imp + num8.ToString + " " Case "NUM9" imp = imp + num9.ToString + " " End Select Else imp = imp + table(i) + " " End If i = i + 1 End While printer.print(imp + vbCr) Catch ex As Exception MsgBox("Il y a eu une erreur lors de l'impression!", 0, "ERREUR!") End Try End Sub
Cela doit venir de la fonction appelée dans le premier fichier quand j'écris FINT cela appelle une autre fonction :
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Public Sub imprtick() Try printer.EndDoc() Catch ex As Exception MsgBox("L'impression a echoué", 0, "ERREUR!") End Try End Sub
Je suis obligé de mettre printer.endDoc dans une autre fonction car le logiciel peut aller plusieurs fois dans la fonction pour imprimer et avec print.EndDoc dedans cela n'imprime qu'une ligne si je le met dans ma fonction qui imprime, je n'arrive pas à imprimer sans print.EndDoc.
Je vous joins la doc intéressante de l'imprimante je n'arrive pas à programmer correctement ce qui est indiqué :
Symbol Code ( Hexadecimal) Function
ESC + "0" 1B, 4F Paging is off
ESC + "1" 1B, 31 2.75mm line spacing.
ESC + "2" 1B, 32 5.5mm line spacing.
Je pense que je dois utiliser 1B,4F pour que l'imprimante n'est plus de ligne précise à imprimer et que l'impression s'arrete après avoir fini d'imprimer les caractères voulus.
J'ai essayer printer.print(Chr(&H1B), Chr(&H4F)) et printer.print(Chr(&H1B)+ Chr(&H4F)) au début de mon code mais cela n'a rien donné, je ne sais pas si je dois laissé aussi print.endDoc .
J'ai essayé de passer la commande saut de ligne en hexa (printer.print(Chr(&HA)) et cela marchait (quand meme le probleme d'éjection du rouleau de papier ), je ne comprend donc pas pourquoi cette commande n'enlève pas le paramètrage du nombre de ligne.
Pour résumer printer.endDoc() imprime le nombre de lignes qui forment une page et j'aimerai lui enlever ce paramètre pour arreter l'impression juste après avoir arreter d'imprimer et ne avoir de blanc. Je ne sais pas si cela est possible avec la méthode printer.
Merci d'avance pour vos réponses et votre aide
Partager