[S7-1500] Pointeur en TIA

Forum traitant des automates industriels de marque Siemens.
Répondre
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

[S7-1500] Pointeur en TIA

Message par Damall »

Bonjour,

j'ai chercher un peu sur le web et le forum, mais je n'ai rien trouvé.

Je voudrais utiliser les pointeurs dans TIA V17, mais je n'y arrive pas en utilisant le MOVE_BLK.

Je voudrais transférer des données d'un DB dans un autre, mais les données ne sont pas au même format. Sous Step7 c'est facile, mais sous TIA je ne trouve pas.
Dans le DB sources, toutes les variables sont DINT et les variables du DB destination sont des UDT.

Merci d'avance.
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [S7-1500] Pointeur en TIA

Message par DurandO »

Bonjour,
je pense que cela est réalisable avec BlockMoveVariant comme ci-dessous, d'après moi, je n'ai pas testé, je n'ai le simulateur d'installé.
Exemple DurandO BlockMoveVariant

(d'après moi toujours)
SRC_index que j'ai mis a 0 serait le pointeur d’élément source (0 --> Val1, 1 -->Val2)
DEST_Index idem : 0 --> Record_1.Index, 1 --> Record_2.Index)
Count le nombre d'élement copiés.

A tester.
Merci de ton retour.
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

Re: [S7-1500] Pointeur en TIA

Message par Damall »

Merci,

Effectivement ce block existe, je ne l'avais pas trouvé dans la bibliothèque, et il fonctionne comme celui dans STEP7.

Donc c'est bon. :D
Avatar du membre
Sbukx
Première mise en service
Première mise en service
Messages : 51
Enregistré le : 15 janv. 2016, 14:59

Re: [S7-1500] Pointeur en TIA

Message par Sbukx »

Bonjour,
Dans le DB sources, toutes les variables sont DINT et les variables du DB destination sont des UDT.
Dans l'aide il est précisé que que les éléments source doivent être de même type que les éléments de destination. Si ça fonctionne, il y a peut être une subtilité!
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: [S7-1500] Pointeur en TIA

Message par DurandO »

Damall a écrit : 30 sept. 2022, 10:44 Merci,

Effectivement ce block existe, je ne l'avais pas trouvé dans la bibliothèque, et il fonctionne comme celui dans STEP7.

Donc c'est bon. :D
Bonjour,
je n'en suis pas si sur. (Voir plus la longueur destination)
Dans Step7 le BlockMove utilise :
un pointeur debut zone source + longueur
un pointeur debut zone Destination + longueur (dépendant de la donnée : bool, byte, int, struct, etc...)
La taille de la destination peut être différente de celle de la source. Le volume de données copiées sera limité à la taille de la destination.
Avec la fonction sous TIA BlockMoveVariant, il y a en plus les index source et dest, qui contrairement à ce que j'ai avancé ne sont pas forcement les n° d'élément, bien que l'aide le ainsi, mais l'aide je m'en méfie. c'est peut être le n° de byte:
Le mieux est de le tester.
Sbukx a écrit : 30 sept. 2022, 13:32 les éléments source doivent être de même type que les éléments de destination
Non, je ne pense pas.
Mon exemple n’était pas pertinent, j'aurai du indiquer comme destination : "Bloc_de_données_2".Record_1
Et dans ce cas, de mon point de vue (ceinture+bretelles) on transférera bien le contenu de "Bloc_de_données_1 à partir de l'adresse de VAL1 dans "Bloc_de_données_2" à partir de l''adresse de Record_1 et de longueur Record_1
J'espère être assez clair.
Merci de tester en simulation si tu peux (je n'ai pas l'outil d'installé).
Cordialement.
Durand.O
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: [S7-1500] Pointeur en TIA

Message par steph68 »

Salut,
Dans le DB sources, toutes les variables sont DINT et les variables du DB destination sont des UDT.
Il est là le problème : ne pas se retrouver dans cette situation.
Donc plus besoin de chercher des fonctions BLKMOV ...
Envisage une autre approche à ton problème !

Si tu fais du pur symbolique, ça ne doit pas arriver sinon c'est une erreur de conception / d'architecture du programme.

Pour info, les pointeurs ANY sont encore supportés uniquement sur le S7-1500 (peut-être plus pour longtemps) et sont remplacés par les VARIANT.
Sinon tu peux aussi regarder du côté des fonctions SCATTER et GATHER (qui transforme des BYTE en UDT) ou SERIALIZE / DESERIALIZE (idem mais plus fait pour de la lecture / écriture de fichier / stream) et READ_BIG / READ_LITTLE et équivalents WRITE ... plus fait pour gérer le boutisme des types de base (hors UDT).

@+
Répondre