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
Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY
- itasoft
- 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
slts,
il faut faire des ARRAY de INT dont les bits des INT vont commander les sorties,
il faut faire des ARRAY de INT dont les bits des INT vont commander les sorties,
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY
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
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
- itasoft
- 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
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---- --
ceci dit, j'ai l'impression que tu veux faire un programmateur à came, comme sur les machines à laver
----clic dessus pour zoom---- --
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
itasoft@free.fr
Re: Comment utilisé un nom de I/O ou son adresse stocké dans un ARRAY
Bonjour,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
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;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

- 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
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.
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 ! 

