Tableau de DB d'instance.

Forum traitant des automates industriels de marque Siemens.
Répondre
Alex
Apprend le binaire
Apprend le binaire
Messages : 4
Enregistré le : 09 avr. 2016, 13:39

Tableau de DB d'instance.

Message par Alex » 09 avr. 2016, 14:03

Bonjour,

Tout d'abord je me présente un peu vu que je suis nouveau venu sur ce Forum.
Je m'occupe de S7 (300/400/1500) pour mon usine même si c'est pas vraiment mon boulot.
Je programme principalement en SCL (TIA v13), ayant de l'expérience en programmation générale (C, Java, Js, DB, etc).

Donc quand je fais un programme un peu lourd comme en ce moment, je souhaiterais créer des fonctions génériques, indexer les "objets" de l'installation dans des tableaux et appeler les fonctions dans des boucles pour éviter de répéter les mêmes opérations dans le programme.

Le problème est qu'on ne peut pas appeler des FB sans déclarer une DB d'instance ou en mutli-instance, et qu'on ne peut pas déclarer de tableau de DB d'instance. Donc on ne peut pas appeler des FB dans une boucle, comme on le ferait pour un tableau de pointeurs de fonctions pour ceux qui connaissent le C.

Bilan des courses, je suis obligé de créer des UDT pour chaque FC générique, avec un nomnage un peu lourd des variables avec les suffixes in_, out_, static_ par exemple. Par exemple impossible d'utiliser les tempos CEI dans une boucle, ni pas mal de fonctions technologiques ...

Alors connaissez-vous une technique pour faire rentrer des DB d'instance dans un tableau temporaire de Pointeur Any et appeler la FB à partir de ce pointeur?

steph68
Forcené des structures
Forcené des structures
Messages : 153
Enregistré le : 21 oct. 2015, 08:23

Re: Tableau de DB d'instance.

Message par steph68 » 12 avr. 2016, 00:19

hello,

quand tu créés un FB il devient un "type" que tu peux déclarer à volonté (autant d'instances que tu veux)
tu devrais pouvoir faire une déclaration du type ARRAY[0..10] OF FBxx, en théorie (je n'ai pas TIA Portal sous la main pour faire des essais)

ensuite pour l'appel, regardes comment est construit un appel de FB en langage LIST (en passant du ladder au list par ex ou sinon cf doc)
à un moment donné, il doit bien lui passer l'adresse de l'instance du bloc en paramètre ; c'est cette adresse d'instance qu'il faut faire varier (par un pointeur ANY peut-être)

au pire tu devrais pouvoir faire varier le n° de DB d'instance si TIA refuse la déclaration de type tableau (à cause de la synchro ; lorsque l'interface d'un FB change il faut resynchroniser toutes les instances (=compilation) et comme chaque chose à une adresse mémoire chez SIEMENS, ils n'ont pas dû autoriser ce type de manip pour faire plus simple ?).

voir ce topic : viewtopic.php?f=4&t=573

après il ne faut pas trop vouloir faire de le la POO (programmation orientée objet) sur un automate industriel, les outils de programmation ne sont pas adaptés.
des fois, un bon copier/coller sauve bien des heures de travail :mrgreen:

@+

Avatar de l’utilisateur
Alex25
Apprend le binaire
Apprend le binaire
Messages : 6
Enregistré le : 11 juin 2018, 15:56
Localisation : Besancon

Re: Tableau de DB d'instance.

Message par Alex25 » 11 juin 2018, 16:19

Bonjour alex
J'arrive un peut tard mais tu as quasiment la solution, (le principe et de créez un fc qui appel un db de tableau)
- Tu prend ton code du fb et tu met dans un fc. Dans ton fc tu va rajouter un entrée de type entier qui va être ton indexe de tableau (Tu peut supprimer les autres var d'e/s)
- Tu crée un udt avec toute les var e/s et var static de ton fb. (Cela fonctionne avec les tempo CEI si tu la déclare dans ton udt) et tu peut garder les var temporaire dans ton fc.
- Tu crée un DB array avec type de donnée ton udt.
- Et après tu va remplacer toutes tes variables du fc par : le nom de ton db array.this[#ta variable d'indexe du fc].ta variable d'origine.

Je n'ai pas réussis à passer en paramètre le nom de DB, si quelqu'un à la solution ...
Je n'ai pas testé d'appeler qu'une seule fois le fc mais cela devrais marché, je me sert de ce principe pour écrire des commandes ou passer des paramètre à plusieurs bloc moteur avec une simple boucle for. Très pratique aussi dans le cas de démarrage en cascade, on gagne tu temps en prog et on limite les erreurs
Ces choses la sont beaucoup plus facile à réaliser avec unity

GG10
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 112
Enregistré le : 15 sept. 2016, 14:35

Re: Tableau de DB d'instance.

Message par GG10 » 14 juin 2018, 16:25

Bonjour
j 'ai un peu de mal a comprendre ce que tu veux faire normalement les outils siemens sont vraiment puissant !!
peux tu me donner plus d'explication ???

Avatar de l’utilisateur
Brebiou
Créateur de langage
Créateur de langage
Messages : 529
Enregistré le : 21 oct. 2015, 08:38

Re: Tableau de DB d'instance.

Message par Brebiou » 15 juin 2018, 10:42

La question a été posé il y a deux ans et l'auteur ne s'est pas connecté depuis le 15 août 2017, donc je pense qu'il n'est pas utile de poursuivre ce topic.

Répondre