Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Forum traitant des automates industriels de marque Wago et du logiciel codesys
Répondre
r0m1
Apprend le binaire
Apprend le binaire
Messages : 2
Enregistré le : 05 janv. 2023, 19:07

Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par r0m1 »

Bonjour,

je viens de la programmation domotique javascript (avec le logiciel iRidium) et je souhaite passer sur du WAGO 750-891 et codesys 2.3

J'ai souvent besoin d'envoyer plusieurs valeurs BOOL ou INT pour contrôler plusieurs sorties (éclairage en général) à raison d'une valeur par sortie. en javascript j'utilisais des ARRAY dans lesquels je stockais le nom ou adresse de ma sortie (par ex: lamp1,lamp2,pool or %QX24.0,%QX24.1,%QX24.2) ainsi que la valeur cible (par ex: on/off, true/false, INT dimming value ...) chaque colonne correspond à une sortie avec sur la ligne 1 son nom/adresse et sur la ligne 2 la valeur que je veux lui donner. après avoir déclaré ce tableau j'appelle une fonction qui envoie chaque valeur à chaque sortie mais c'est la que ca bloque. Comment faire pour qu'une valeur contenu dans mon array (par ex: '%QX24.0') devienne un objet ou une sortie, je ne sais pas comment le nommer, afin que je puisse lui donner une valeur.

J'ai testé quelque chose dans codesys avec une "logique" similaire à ce que j'ai fait en java (voir capture) mais bien sur cela n'est pas si simple.

Je cherche depuis plus de 4h et je ne trouve rien qui corresponde a mon besoin.

Cela est il possible dans codesys et si oui quel est la bonne façon de procéder ?

Merci par avance
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par itasoft »

slts,
il faut faire des ARRAY de INT dont les bits des INT vont commander les sorties,
Automaticien privé (de tout)
itasoft@free.fr
r0m1
Apprend le binaire
Apprend le binaire
Messages : 2
Enregistré le : 05 janv. 2023, 19:07

Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par r0m1 »

Bonjour et merci de votre retour,

Mon problème n'est pas la valeur de commande mais plutôt l'adresse (ou le nom) de la sortie, comment faire pour que la variable String stockée dans mon ARRAY et contenant l'adresse de ma sortie devienne mon objet auxquels j'attribue une valeur.

ou alors c'est moi qui n'ai pas compris votre réponse !

Merci et bon week end
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par itasoft »

EXEMPLE: pour commander les sorties 0 et 1 je met la valeur numérique 3 dans mon ARRAY[0..x] OF INT (ya pas de STRING)
----clic dessus pour zoom----
_voyantNum.JPG
--
ceci dit, j'ai l'impression que tu veux faire un programmateur à came, comme sur les machines à laver
Automaticien privé (de tout)
itasoft@free.fr
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par DurandO »

r0m1 a écrit : 05 janv. 2023, 19:24 Bonjour,

je viens de la programmation domotique javascript (avec le logiciel iRidium) et je souhaite passer sur du WAGO 750-891 et codesys 2.3

J'ai souvent besoin d'envoyer plusieurs valeurs BOOL ou INT pour contrôler plusieurs sorties (éclairage en général) à raison d'une valeur par sortie. en javascript j'utilisais des ARRAY dans lesquels je stockais le nom ou adresse de ma sortie (par ex: lamp1,lamp2,pool or %QX24.0,%QX24.1,%QX24.2) ainsi que la valeur cible (par ex: on/off, true/false, INT dimming value ...) chaque colonne correspond à une sortie avec sur la ligne 1 son nom/adresse et sur la ligne 2 la valeur que je veux lui donner. après avoir déclaré ce tableau j'appelle une fonction qui envoie chaque valeur à chaque sortie mais c'est la que ca bloque. Comment faire pour qu'une valeur contenu dans mon array (par ex: '%QX24.0') devienne un objet ou une sortie, je ne sais pas comment le nommer, afin que je puisse lui donner une valeur.

J'ai testé quelque chose dans codesys avec une "logique" similaire à ce que j'ai fait en java (voir capture) mais bien sur cela n'est pas si simple.

Je cherche depuis plus de 4h et je ne trouve rien qui corresponde a mon besoin.

Cela est il possible dans codesys et si oui quel est la bonne façon de procéder ?

Merci par avance
Bonjour,
je ne connais pas Codesys, mais il doit y avoir possibilité soit d'indexer tes variables ou travailler sur tableau.

Dans le principe j'aurai procédé ainsi :
créer un tableau
- L1C1 adresse
-L2C1 valeur (un entier)

Convention :
si on affecte un booléen soit adresse +1000
si on affecte un entier soit adresse +0
Exemple
1240;1243;250
1;0;1234
=> mise a true Q24.0, mise a false Q24.3, charger 1234 dans QW250
tu créé une fonction qui interprète cela, du genre :

Code : Tout sélectionner

Chgt_Var (adr,value:int): bool; (retourne true si succes)
if adr> 1000 then VariableBool[adr-1000] := (value>0) else VariableInt[adr] := Value;
[/b]
En supposant que tu ais défini les tableaux suivants :
VariableBool : array [0..255] of bool qui pointe sur Q0.0
VariableInt : array [0..255] of INT qui pointe sur QW0

Ce n'est qu'un exemple à adapter à ton système.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY

Message par philou77 »

Salut !
dans un automate, pas de programmation 'objet' avec propriétés, méthodes, évènements..

il faut détourner la programmation pour réaliser un semblant de programmation 'objet'.
+1 avec la 'méthode' de DurandO, simple et efficace.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Répondre