Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Simulation of a program

2019-10-05
2019-10-07
  • GuillaumeC7 - 2019-10-05

    Hello everyone !

    Sorry for my bad English. I'm Learning to use Codesys and I have a problem with Codesys and my program when I simulate him (I Don't have any error on this program). Indeed, when I put "access to the system" my program have "???" in action boxes and I can't simulate the program with my visualisation.

    I hope you could help me because I'm blocked with my program and I can't go ahead.

    Thank you !

    IMG: Annotation 2019

     
  • JAPIB

    JAPIB - 2019-10-05

    Hello GuillaumeC7.

    As the picture you post is in French, I will answer in french too.

    Les points d’interrogations indiquent en général que le module programme n'est pas exécuté par l'API.
    A cela 2 raisons possibles :

    1°) Dans votre image, on voit en bas à droite que l'API n'est pas en Marche.
    Même en mode simulation il faut démarrer l'API de simulation (En ligne -> Démarrer).
    A chaque fois que vous allez vous mettre Hors ligne, l'API de simulation va s’arrêter. Il faudra donc le redémarrer à chaque nouvelle mise en ligne.

    2°) Le module programme doit être appelé par une tâche ou par le PLC_PRG (lui même appelé par une tâche).

    Cordialement.

    English version (!!)
    Interrogation points generally indicate that the program module is not executed by the API.
    2 possible reasons:

    1) In your image, we see, in the bottom right, that the PLC is not running.
    Even in simulation mode you have to start the simulation PLC (Online -> Start).
    Whenever you go offline, the simulation API will stop. It will be necessary to restart it after each new connection.

    2 °) The program module must be called by a task or by the PLC_PRG (itself called by a task).

    Best regard

     
  • GuillaumeC7 - 2019-10-06

    Hello JAPIB,

    thank you very much to have answer me. As you have seen, I think it will be better communicate in French
    Alors malgré tes deux réponses, je n'ai pas réussi à simuler mon programme sans les "???".

    1) En mettant l'API en marche, les "???" restent quand même en place et je ne peux donc pas simuler (comme tu pourras le voir sur la photo ci-dessous).

    2) Je pense avoir bien appelé mon sous programme (celui contenant les actions avec "???") dans mon PLC_PROG (comme tu pourras le voir sur l'autre photo ci-dessous).

    Si tu as d'autres suggestions je suis preneur! et merci encore pour ta précédente réponse

    Cordialement,

    IMG: 2.png

    IMG: 1.png

     
  • JAPIB

    JAPIB - 2019-10-06

    Bonsoir,
    Dans la première photo du PLC_PRG, je ne vois qu'une étape appelée Init, mais je ne vois nulle part d'appel du module programme Prog_Init.
    Pour appeler ton module programme PROG_INIT il faut ajouter une action dans ton étape initiale du PLC_PRG, voir exemple ci dessous.

    Sinon, si ton PLC_PRG ne sert qu'à appeler PROG_INIT, écrit le directement en langage ST, plus simple à écrire que le SFC.

    Cordialement.

    IMG: Appel SFC.jpg

     
  • GuillaumeC7 - 2019-10-07

    Bonjour,

    Merci beaucoup pour votre réponse. Effectivement je n'avait pas mis "PROG_INIT" dans l'action "INIT" du PLC_PROG. (Par contre, l'image que vous avez mis joint à votre message n'est pas visible).

    Par ailleurs, je rencontre un autre soucis concernant la programmation de temporisation. Je souhaite mettre une tempo de 2s qui à la fin de ce temps passe à l'action suivante (et valide donc la transition). Je travaille sur la programmation d'un ascenseur et vais donc, par la suite, parler uniquement d'un étage.

    J'ai donc mis une action intitulé "Tempo_porte_ET1_2s" dans laquelle j'ai inscrit à l'intérieur "Tempo_porte_ET1(IN:=TRUE,PT:=T#2s);". J'ai déclaré la variable "Tempo_porte_ET1: TON;" comme vous pouvez le voir sur la photo ci-dessous. Puis j'ai inscrit à l'intérieur de la transition Tempo que vous pouvez voir à la suite de l'action Tempo ceci "Tempo_porte_ET1.Q(FALSE);". Cependant, lorsque je compile j'ai 3 erreurs concernant les 3 tempos (voir deuxième photo concernant l'erreur sur la tempo de l'étage 1. Je pense que je n'ai pas bien programmé les tempos mais je ne vois pas ce que je dois modifier.

    SVP aidez moi!!!!

    N'hésitez à me dire si vous avez besoin d'autres infos.

    Cordialement,

    IMG: 1.png

    IMG: 2.png

     
  • JAPIB

    JAPIB - 2019-10-07

    Bonsoir,

    Dans la transition il suffit d'écrire simplement "Tempo_porte_ET1.Q" si tu veux que la transition soit franchie au bout des 2 secondes, c'est à dire quand Tempo_porte_ET1.Q=TRUE.
    Si tu voulais franchir la transition si Tempo_porte_ET1.Q=FALSE, il faudrait écrire "NOT Tempo_porte_ET1.Q".

    Rappel concernant les blocs fonctionnels :
    Pour tout bloc fonctionnel, il est possible d'utiliser (en écriture ou lecture, suivant le type de paramètre) les différentes entrées/sorties du bloc.
    Pour une tempo TON, on à donc :
    Tempo_porte_ET1.In pour lancer la tempo
    Tempo_porte_ET1.PT pour fixer la durée
    Tempo_porte_ET1.Q pour l'info de fin de tempo
    Tempo_porte_ET1.ET pour lire le temps écoulé.

    Gestion des tempos avec le langage SFC :
    Pour gérer le temps dans le SFC, il existe une autre solution, qui évite les temporisations.
    Il faut, juste après avoir créé le module SFC, faire un clic droit dans l'éditeur SFC du module, et choisir l'option (tout en bas) "Utiliser les étapes CEI".
    Ceci permet d'avoir accès à 2 variables créées automatiquement pour chaque étape.
    - un BOOL : Nom_étape.x qui vaut TRUE quand l'étape est active
    - une durée de type TIME : Nom_étape.t, qui s'incrémente quand l'étape est active et qui repasse à 0 quand on quitte l'étape.
    Il suffit alors d'écrire dans la transition une équation du type : "Nom_étape.t>=T#2s"
    Par contre le fait d'utiliser les étapes CEI n'autorise plus à écrire du code dans les étape, mais oblige d'utiliser un petit rectangle qui s'affiche à droite de l'étape (comme les actions du Grafcet papier) dans lequel on peut piloter soit des variables soit des modules actions (modules créés par clic gauche sur le module SFC, dans l'explorateur de module, et en choisissant l'option "Ajouter une action").

    Si on utilise pas les étapes CEI, on à uniquement accès à une variable de type BOOL, appelée simplement Nom_étape (qui vaut TRUE quand l'étape est active).

    Cordialement.

     

Log in to post a comment.