Communication RS232 avec imprimante thermique

Forum traitant des automates industriels de marque Siemens.
Répondre
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Communication RS232 avec imprimante thermique

Message par jackclad »

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
Pièces jointes
string.jpg
command imprim.jpg
DurandO
Expert de l'héxadécimal
Expert de l'héxadécimal
Messages : 396
Inscription : 21 mars 2021, 15:31

Re: Communication RS232 avec imprimante thermique

Message par DurandO »

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:

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
Exemple transfert tableau de char

Code : Tout sélectionner

//Transferer un tableau de caractère (Char)
UMOVE_BLK(IN:="SMS".Buffer[0],
          COUNT:=5,
          OUT=>"SMS".Buffer[10]);
          
Cordialement.
Durand.O
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Re: Communication RS232 avec imprimante thermique

Message par jackclad »

Merci pour t'on aide durant .
Je suis déçus depuis plusieurs jours , c'est bien compliquer.
DurandO
Expert de l'héxadécimal
Expert de l'héxadécimal
Messages : 396
Inscription : 21 mars 2021, 15:31

Re: Communication RS232 avec imprimante thermique

Message par DurandO »

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
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Re: Communication RS232 avec imprimante thermique

Message par jackclad »

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 .
Pièces jointes
imprim ecran.jpg
DurandO
Expert de l'héxadécimal
Expert de l'héxadécimal
Messages : 396
Inscription : 21 mars 2021, 15:31

Re: Communication RS232 avec imprimante thermique

Message par DurandO »

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
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Re: Communication RS232 avec imprimante thermique

Message par jackclad »

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
Pièces jointes
structure trame.jpg
steph68
Codeur fou
Codeur fou
Messages : 268
Inscription : 21 oct. 2015, 08:23

Re: Communication RS232 avec imprimante thermique

Message par steph68 »

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 :
  • 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.
Je précise bien un seul tableau de BYTE et non une structure de X tableaux qui s'enchaînent (sache que TIA Portal fait du padding pour aligner les membres sur des adresses paires : https://en.wikipedia.org/wiki/Data_structure_alignment )

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 !

@+
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Re: Communication RS232 avec imprimante thermique

Message par jackclad »

Merci .

Je vais regarder tout cela durant la journée.
jackclad
Code sa première boucle
Code sa première boucle
Messages : 11
Inscription : 29 juin 2021, 20:13

Re: Communication RS232 avec imprimante thermique

Message par jackclad »

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
Répondre