Page 1 sur 1

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

Posté : 05 janv. 2023, 19:24
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

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

Posté : 05 janv. 2023, 20:16
par itasoft
slts,
il faut faire des ARRAY de INT dont les bits des INT vont commander les sorties,

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

Posté : 07 janv. 2023, 17:44
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

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

Posté : 07 janv. 2023, 17:46
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

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

Posté : 10 janv. 2023, 11:55
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.

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

Posté : 10 janv. 2023, 12:31
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.