Communication RS232 avec imprimante thermique
Communication RS232 avec imprimante thermique
Bonjour
Je vous remercie d'avance pour votre aide et je tien a préciser que je suis novice dans ce domaine.
Je dois utiliser une imprimante thermique scaime tp200 pour imprimer en utilisant un s7-1200 ainsi que son module de communication CM 1241 (RS232) . J'essaie d'écrire ABCD pour commencer.
J'ai suivi différents tuto sur YouTube pour configurer le port config et utiliser les blocs send ptp et rcv ptp. Mais je bloque au niveau de la création du DB surtout avec la doc technique du constructeur que je joins en jpg. J'essais faire un string de cette façon (par rapport a la photo jpg string) Que je met dans le buffer send PTP .
Avec les string , char et le lanquage scl , je suis perdu .
Cordialement
Je vous remercie d'avance pour votre aide et je tien a préciser que je suis novice dans ce domaine.
Je dois utiliser une imprimante thermique scaime tp200 pour imprimer en utilisant un s7-1200 ainsi que son module de communication CM 1241 (RS232) . J'essaie d'écrire ABCD pour commencer.
J'ai suivi différents tuto sur YouTube pour configurer le port config et utiliser les blocs send ptp et rcv ptp. Mais je bloque au niveau de la création du DB surtout avec la doc technique du constructeur que je joins en jpg. J'essais faire un string de cette façon (par rapport a la photo jpg string) Que je met dans le buffer send PTP .
Avec les string , char et le lanquage scl , je suis perdu .
Cordialement
Re: Communication RS232 avec imprimante thermique
Bonjour,
Pour ton envoi de caractères tu utilises la fonction Send_P2P_DB, le buffer doit être un array of char.
Il existe des fonctions de transfert (instruction de base), conversion string vers buffer (instruction avancé String + Char).
En SCL, que je ne maîtrise pas, plus habitué au list de step 7, tu dois pouvoir constituer ta trame dans ce genre la:
Exemple transfert tableau de char
Cordialement.
Durand.O
Pour ton envoi de caractères tu utilises la fonction Send_P2P_DB, le buffer doit être un array of char.
Il existe des fonctions de transfert (instruction de base), conversion string vers buffer (instruction avancé String + Char).
En SCL, que je ne maîtrise pas, plus habitué au list de step 7, tu dois pouvoir constituer ta trame dans ce genre la:
Code : Tout sélectionner
//Transferer un tableau de caractère (Char)
"SMS".Buffer[0]:= 'A';//Charger un caractere
"SMS".Buffer[1]:= 'B';//Charger un caractere
"SMS".Buffer[2]:= 'C';//Charger un caractere
"SMS".Buffer[3]:= 'D';//Charger un caractere
"SMS".Buffer[4]:=B#16#0A;//Charger un code ascii CR
"SMS".Buffer[5]:= B#16#0D;//Charger un code ascii LF
Code : Tout sélectionner
//Transferer un tableau de caractère (Char)
UMOVE_BLK(IN:="SMS".Buffer[0],
COUNT:=5,
OUT=>"SMS".Buffer[10]);
Durand.O
Re: Communication RS232 avec imprimante thermique
Merci pour t'on aide durant .
Je suis déçus depuis plusieurs jours , c'est bien compliquer.
Je suis déçus depuis plusieurs jours , c'est bien compliquer.
Re: Communication RS232 avec imprimante thermique
Bonjour,
tu vas sans doute devoir créer un fc qui met en forme ta trame.
Il y a très longtemps, j'ai du gérer une imprimante série avec du télémécanique.
Pour constituer mes trames, j'avais adopté la technique suivantes :
Je m'étais constitué une bibliothèque de chaîne de caractères, dans des mots constants, en siemens ce serait dans un DB.
créé un tableau par trame dans le forme suivantes :
Mot 1 : Adresse caractère
Mot 2 : longueur en caractère
Mot 3 : adresse caractère
Mot 4 : longueur en caractère
Mot x : valeur 0 => fin de trame
Par exemple, supposons les textes suivants :
DB10.DBB0 contient 'TEMPERATURE '
DB10.DBB20 contient 'BASSE '
DB10.DBB30 contient 'HAUTE '
DB10.DBB100 contient 'DEFAUT '
Soit DB12 définissant mes trames :
Trame 1 dans DB12 à partir de DW0 si je souhaite 'DEFAUT TEMPERATURE BASSE '
100, 7, 0, 12, 20, 6, 0, 0
Trame 2 dans DB12 à partir de DW20 si je souhaite 'DEFAUT TEMPERATURE HAUTE '
100, 7, 0, 12, 30, 6, 0, 0
Il suffit de créer la fonction qui reçoit en entrée STrame (un tableau de byte définissant les adresses et longueur) et qui retourne en sortie TRAME un tableau de char (la trame) et LG longueur totale.
Tout dépend de ce que tu dois imprimer, la quantité, la complexité, etc...
Cordialement.
Durand.O
tu vas sans doute devoir créer un fc qui met en forme ta trame.
Il y a très longtemps, j'ai du gérer une imprimante série avec du télémécanique.
Pour constituer mes trames, j'avais adopté la technique suivantes :
Je m'étais constitué une bibliothèque de chaîne de caractères, dans des mots constants, en siemens ce serait dans un DB.
créé un tableau par trame dans le forme suivantes :
Mot 1 : Adresse caractère
Mot 2 : longueur en caractère
Mot 3 : adresse caractère
Mot 4 : longueur en caractère
Mot x : valeur 0 => fin de trame
Par exemple, supposons les textes suivants :
DB10.DBB0 contient 'TEMPERATURE '
DB10.DBB20 contient 'BASSE '
DB10.DBB30 contient 'HAUTE '
DB10.DBB100 contient 'DEFAUT '
Soit DB12 définissant mes trames :
Trame 1 dans DB12 à partir de DW0 si je souhaite 'DEFAUT TEMPERATURE BASSE '
100, 7, 0, 12, 20, 6, 0, 0
Trame 2 dans DB12 à partir de DW20 si je souhaite 'DEFAUT TEMPERATURE HAUTE '
100, 7, 0, 12, 30, 6, 0, 0
Il suffit de créer la fonction qui reçoit en entrée STrame (un tableau de byte définissant les adresses et longueur) et qui retourne en sortie TRAME un tableau de char (la trame) et LG longueur totale.
Tout dépend de ce que tu dois imprimer, la quantité, la complexité, etc...
Cordialement.
Durand.O
Re: Communication RS232 avec imprimante thermique
Merci Durant.
J'ai pas encore fais ce que tu m'as expliquer.
J'ai essayer une autre façon. J'ai bien réussit a écrire un mot ou faire une saut de ligne . Le truc , c'est que avnt mon mot s'ecrit ou au debut de chaque saut de ligne que je fais , j'ai toujours le symbole E de euro qui apparait.
Je m'ai toujours pas trouver la raison .
J'abandonne pas , je vais y arriver , je me dis .
J'ai pas encore fais ce que tu m'as expliquer.
J'ai essayer une autre façon. J'ai bien réussit a écrire un mot ou faire une saut de ligne . Le truc , c'est que avnt mon mot s'ecrit ou au debut de chaque saut de ligne que je fais , j'ai toujours le symbole E de euro qui apparait.
Je m'ai toujours pas trouver la raison .
J'abandonne pas , je vais y arriver , je me dis .
Re: Communication RS232 avec imprimante thermique
Bonjour,
cela dépend de la trame que tu envoi.
Le caractère Euro a le code ascii 254 (FE en hexa).
Es-tu sur que ta trame ne contienne pas cette valeur?
Cela me fait passer à une string[254] que tu aurais tenté d'envoyer à partir du second octet.
Quel est le contenu de ta trame?
Pour en être sur, tu peux afficher dans une VAT les valeurs de ton DB en choisissant le format caractère de préférence.
exemple:
DB100.DBB2
DB100.DBB3 etc...
Dans le menu, tu as insertion plage qui est bien pratique pour cela.
Pour info, dans mon exemple, j'ai parlé de caractères de fin 0A 0D.
Après lecture de la notice de ton imprimante, le caractère "CR" 0D (de mémoire) ne serait pas forcément nécessaire.
Cela dépend de la configuration :
Autofeed = ON ou OFF (Inutile ou Necessaire)
Cordialement.
Durand.O
cela dépend de la trame que tu envoi.
Le caractère Euro a le code ascii 254 (FE en hexa).
Es-tu sur que ta trame ne contienne pas cette valeur?
Cela me fait passer à une string[254] que tu aurais tenté d'envoyer à partir du second octet.
Quel est le contenu de ta trame?
Pour en être sur, tu peux afficher dans une VAT les valeurs de ton DB en choisissant le format caractère de préférence.
exemple:
DB100.DBB2
DB100.DBB3 etc...
Dans le menu, tu as insertion plage qui est bien pratique pour cela.
Pour info, dans mon exemple, j'ai parlé de caractères de fin 0A 0D.
Après lecture de la notice de ton imprimante, le caractère "CR" 0D (de mémoire) ne serait pas forcément nécessaire.
Cela dépend de la configuration :
Autofeed = ON ou OFF (Inutile ou Necessaire)
Cordialement.
Durand.O
Re: Communication RS232 avec imprimante thermique
Bonjour Durand
J'ai essayer de composer ma trame de cette façon (voir le jpeg que je joins).
JE t'avoue que mon niveau et faible sur la programmation , est que je suis perdu quand tu parle par exemple
DB100.DBB2
DB100.DBB3
est ce que tu aurais un exemple de programme ou une composition de la trame a me faire montrer en jpg pour que je comprenne mieux ?
Car la par exemple je me comprend pas comment on lui envoie une commande.
Merci pour t'on aide .
Cordialement
J'ai essayer de composer ma trame de cette façon (voir le jpeg que je joins).
JE t'avoue que mon niveau et faible sur la programmation , est que je suis perdu quand tu parle par exemple
DB100.DBB2
DB100.DBB3
est ce que tu aurais un exemple de programme ou une composition de la trame a me faire montrer en jpg pour que je comprenne mieux ?
Car la par exemple je me comprend pas comment on lui envoie une commande.
Merci pour t'on aide .
Cordialement
Re: Communication RS232 avec imprimante thermique
Salut,
Tu n'y es pas du tout.
Un type STRING dispose d'un entête de 2 octets pour coder la capacité de stockage et la longueur de la chaîne, afin que ce soit transparent à l'utilisation (avec des fonctions tels que CONCAT, LEFT, MID, RIGHT...)
Si tu envoies ça directement à l'imprimante, tu auras ces 2 octets indésirables.
Réfères toi à l'aide en ligne de TIA Portal sur le type STRING.
2 approches à ton problème :
Le caractère de contrôle LF (10) se représente '$N' dans une chaîne.
Le caractère de contrôle CR (13) se représente '$R'.
Bon courage !
@+
Tu n'y es pas du tout.
Un type STRING dispose d'un entête de 2 octets pour coder la capacité de stockage et la longueur de la chaîne, afin que ce soit transparent à l'utilisation (avec des fonctions tels que CONCAT, LEFT, MID, RIGHT...)
Si tu envoies ça directement à l'imprimante, tu auras ces 2 octets indésirables.
Réfères toi à l'aide en ligne de TIA Portal sur le type STRING.
2 approches à ton problème :
- tu tiens à utiliser des STRING : construis ta chaîne avec les fonctions de la bibliothèque (CONCAT...). Avant envoi, tu converties cette STRING en tableau de BYTE (ou CHAR au choix) avec la fonction STRG_TO_CHARS ; tu transmets ce tableau + longueur (obtenu avec LEN) à ta fonction d'envoi RS232
- tu ne travailles qu'avec un tableau de BYTE (ou CHAR) que tu composes case par case (ex tab[0] := 'A', tab[1] := 'B' ...) ; je te suggères l'utilisation du langage SCL pour faire ceci.
Le caractère de contrôle LF (10) se représente '$N' dans une chaîne.
Le caractère de contrôle CR (13) se représente '$R'.
Bon courage !
@+
Re: Communication RS232 avec imprimante thermique
Merci .
Je vais regarder tout cela durant la journée.
Je vais regarder tout cela durant la journée.
Re: Communication RS232 avec imprimante thermique
Bonjour
Désoler de me pas être revenu depuis un moment , j'ai réussit a faire mon implication et je voulais vous le faire partager.
Ce m'est pas parfait mais cela fonctionne.
Je vous faire partager plus tard , j'arrive pas a mettre en pièce jointe
Désoler de me pas être revenu depuis un moment , j'ai réussit a faire mon implication et je voulais vous le faire partager.
Ce m'est pas parfait mais cela fonctionne.
Je vous faire partager plus tard , j'arrive pas a mettre en pièce jointe