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.
[S7-1500] Pointeur en TIA
Re: [S7-1500] Pointeur en TIA
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.
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.
Re: [S7-1500] Pointeur en TIA
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.
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.
Re: [S7-1500] Pointeur en TIA
Bonjour,
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é!Dans le DB sources, toutes les variables sont DINT et les variables du DB destination sont des UDT.
Re: [S7-1500] Pointeur en TIA
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.
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
Re: [S7-1500] Pointeur en TIA
Salut,
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).
@+
Il est là le problème : ne pas se retrouver dans cette situation.Dans le DB sources, toutes les variables sont DINT et les variables du DB destination sont des UDT.
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).
@+


