IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres langages Discussion :

[TwinCat] Automatiser une machine de conditionnement qui pose les capsules sur des bouteilles


Sujet :

Autres langages

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut [TwinCat] Automatiser une machine de conditionnement qui pose les capsules sur des bouteilles
    Salut!

    Pour résumer, je suis coincé dans un cours (école d'ingénieurs) où on me demande de développer une mini-machine, et de la programmer en Pascal.
    La programmation est éliminatoire, et comme ce n'est pas mon métier, je suis sur la sellette. Le reste est OK.

    Ce qu'il me faut, c'est un coup de main pour écrire le programme. Je suis capable d'en écrire une partie (j'ai eu un cours quand même), mais pas beaucoup.

    Quelqu'un pour m'aider? Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : avril 2002
    Messages : 2 456
    Points : 4 252
    Points
    4 252
    Par défaut
    Poste déjà ce que tu as fait, l'intitulé du problème, ce qu'il te reste à faire et les idées que tu as pour les faire.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 856
    Points : 13 820
    Points
    13 820
    Billets dans le blog
    8
    Par défaut
    Bonjour !

    Il y aura sûrement quelqu'un pour t'aider, si toutefois tu nous dis de quoi il s'agit.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ouais, super!
    Désolé, j'étais encore à l'école mais je voulais avoir des réponses en rentrant.

    Je dois encore passer au bureau de mon prof pour discuter de quelques détails.
    En gros, il s'agit d'automatiser une machine de conditionnement qui pose les capsules sur des bouteilles. Les actionneurs sont pneumatiques, tous commandés par électrovannes, et contrôlés pas deux capteurs de fin de course.
    - La machine est construite sur la base d'un tapis-roulant à cellules. Chaque cellule peut accueillir une seule bouteille.
    - À l'entrée de la machine, un vérin pousse les bouteilles sur le tapis-roulant depuis un chargeur.
    - Le tapis-roulant avance par pas qui correspondent à la longueur des cellules. Il y a un capteur pour le positionnement des cellules.
    - Les bouteilles passent sous une station de sertissage qui pose les capsules. C'est un vérin (avec capteurs, et tout).
    - Après sertissage, les bouteilles passent sous une caméra de contrôle qui vérifie la conformité des produits (le fonctionnement de la caméra n'est pas à traiter, on s'occupe seulement du signal de sortie, un booléen).
    - Si les bouteilles sont conformes, un vérin (capteur, et tout...) les éjecte en direction du circuit d'emballage.
    - Si les bouteilles ne sont pas conformes, elles continuent et sortent au bout du tapis-roulant (et on se fiche de savoir où elles vont, ce n'est plus du ressort de notre machine).

    Il y a toute une procédure pour pouvoir tester notre programme sur une installation à l'école, mais pour ça je pense qu'il me faudra trouver de l'aide à l'école.
    De vous, je n'attends qu'une aide pour écrire le code.
    J'ai surtout besoin d'aide pour savoir ce qu'il faut écrire de plus que le code lui-même (je ne pense pas qu'on y va directement à coups de IF et CASE, il doit y avoir d'autres trucs à paramétrer, non?)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Hey, c'est encore moi.
    J'ai reçu quelques indications du professeur; j'arrive un peu plus à lire le code.

    J'ai amené une ligne avec moi, j'aurais besoin d'une indication pour la comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fbCycleAuto(xStart:=fbCycleMain.iStep=350,
    			xStop:=fbCycleMain.iStep=390,
    			xReset:=fbCycleMain.iStep=810);
    Dites-moi si vous avez besoin d'informations supplémentaires.

    En attendant, j'aimerais être sûr que je lis ça correctement:
    "fbCycleAuto", c'est l'appel du sous-programme FB_CycleAuto, c'est ça?

    Et concernant les trois lignes du style "xStart:=fbCycleMain.iStep=350":
    Celle-ci, elle veut dire que si xStart=TRUE, on initialise iStep à 350 dans FB_CycleMain? Ou alors quoi?

    Merci pour vos commentaires, même si c'est juste pour me dire que j'ai rien compris (quoique vous m'en apprendrez assez peu comme ça ^^)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Il me reste moins de deux semaines, alors si vous pouviez ne pas prendre tout votre temps... ^^
    (Je cherche aussi ailleurs, mais une aide humaine serait d'un grand secours pour être franc)

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 856
    Points : 13 820
    Points
    13 820
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Il me reste moins de deux semaines, alors si vous pouviez ne pas prendre tout votre temps...
    Relis le message de wormful_sickfoot. Où est ce que tu as fait ? Quels sont les problèmes que tu as rencontrés ?

    D'ailleurs, tu ne donnes même pas tous les éléments nécessaires. Il y a une partie du code qui est fournie : tu en as reproduit une seule ligne. Comptes-tu sur nous pour deviner ce que contient le reste ?

    Citation Envoyé par Armulis Voir le message
    Dites-moi si vous avez besoin d'informations supplémentaires.
    Oui, si tu veux de l'aide, je te confirme qu'il faut donner toutes les informations dont tu disposes.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Je vous ai écrit une ligne de code et vous ai demandé si je la lisais correctement.
    Vous n'avez pas besoin de me corriger tout le programme, ça c'est mon travail; j'ai juste besoin d'aide pour apprendre à lire le Pascal; si je sais le lire, mes connaissances sont suffisantes pour être capable d'écrire un programme de base.

    Si vous voulez vraiment, voici le code comme je peux vous le passer. Nous utilisons TwinCAT. Il est écrit en plusieurs sous-programmes.

    P_Main (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROGRAM P_MAIN
    VAR
    END_VAR
    P_MAIN (code):
    FB_Machine (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    FUNCTION_BLOCK FB_Machine
    VAR_INPUT
    
    	fbIO:FB_IO;
    	fbBtn:FB_Btn;
    
    	fbCycleMain:FB_CycleMain;
    	fbCycleAuto:FB_CycleAuto;
    	fbCycleMan:FB_CycleInit;
    
    	fbVerin1:FB_Verin;
    	fbVerin2:FB_Verin;
    	fbVerin3:FB_Verin;
    
    	xModeAuto:BOOL;
    
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    
    END_VAR
    VAR CONSTANT
    
    END_VAR
    FB_Machine (code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    fbCycleMain();
    (*Appelle le sous-programme FB_CycleMain*)
    
    fbCycleAuto(xStart:=fbCycleMain.iStep=350,
    			xStop:=fbCycleMain.iStep=390,
    			xReset:=fbCycleMain.iStep=810);
    (*Je ne suis pas sûr de comprendre cette question; j'imagine que si "xStart" vaut "TRUE", ça attribue la valeur "350" à la variable "iStep" du sous-programme "FB_CycleMain", et pareil pour les trois cas. Merci de m'expliquer ça*)
    
    fbIO.QxStartMoteur:=fbMachine.fbCycleAuto.iStep=10;
    
    fbVerin1(
    	xSetPlus:=fbMachine.fbCycleAuto.iStepBranche1=10 ,
    	xSetMoins:=fbMachine.fbCycleAuto.iStepBranche1=20,
    	);
    
    fbVerin2(
    	xSetPlus:=fbMachine.fbCycleAuto.iStepBranche2=1000 ,
    	xSetMoins:=fbMachine.fbCycleAuto.iStepBranche2=2000,
    	);
    
    fbVerin3(
    	xSetPlus:=fbMachine.fbCycleAuto.iStepBranche3=10000 ,
    	xSetMoins:=fbMachine.fbCycleAuto.iStepBranche3=20000,
    	);
    FB_CycleMain (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FUNCTION_BLOCK FB_CycleMain
    VAR_INPUT
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    	iStep:INT:=0;
    END_VAR
    FB_CycleMain (code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    IF fbMachine.fbBtn.xHmiReset
    		THEN
    			iStep:=810;
    END_IF
    
    CASE iStep OF
    	0:(*Init des variables*)
    		fbMachine.xModeAuto:=FALSE;
    		iStep:=50;
    	50:(*sélection du mode*)
    		(*Mode auto*)
    		iStep:=300;
    	300:(*Attente de start automatique*)
    			IF fbMachine.fbBtn.xHmiStart
    				THEN
    					iStep:=350;
    			END_IF
    	350:(*Start et attente fin de cycle*)
    		IF fbMachine.fbBtn.xHmiStop
    				THEN
    					iStep:=390;
    			END_IF
    	390:IF fbMachine.fbCycleAuto.iStep=0
    			THEN
    				iStep:=50;
    		END_IF
    	810:IF fbMachine.fbCycleAuto.iStep=0
    		THEN
    			iStep:=50;
    		END_IF;
    END_CASE
    FB_CycleInit (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FUNCTION_BLOCK FB_CycleInit
    VAR_INPUT
    	xStart:BOOL;
    	xStop:BOOL;
    	xReset:BOOL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    	fbTon :TON;
    	fbTrigStart:R_TRIG;
    	iStep:INT:=0;
    END_VAR
    FB_CycleInit (code pas encore écrit).

    FB_CycleAuto (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    FUNCTION_BLOCK FB_CycleAuto
    VAR_INPUT
    	xStart:BOOL;
    	xStop:BOOL;
    	xReset:BOOL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    	fbTon :TON;
    	fbTrigStart:R_TRIG;
    	iStep:INT:=0;
    	iStepBranche1:INT:=0;
    	iStepBranche2:INT:=0;
    	iStepBranche3:INT:=0;
    END_VAR
    FB_CycleAuto (code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    IF xReset
    	THEN
    		iStep:=0;
    END_IF
    
    fbTrigStart(CLK:=xStart);
    
    CASE iStep OF
    	0:(*Test du bouton start*)
    		IF fbTrigStart.Q
    			THEN
    
    				iStep:=15;
    		END_IF
    	10:IF fbMachine.fbVerin2.xOnMoins
    			THEN
    				iStep:=15;
    		END_IF
    	15:fcSetStep(iStep:=iStep,iNextStep:=20);
    	20:iStepBranche1:=10;
    		iStepBranche2:=10;
    		iStepBranche3:=10;
    		iStep:=30;
    	30:IF iStepBranche1=99  AND iStepBranche2=99  AND iStepBranche3=99
    			THEN
    				iStep:=90;
    		END_IF
    	90:IF xStop
    			THEN
    				iStep:=999;
    			ELSE
    				iStep:=10;
    		END_IF
    	999:iStep:=0;
    END_CASE
    
    CASE iStepBranche1 OF
    	0:(*Test du bouton start*)
    		;
    	10: IF fbMachine.fbVerin1.xOnPlus
    	THEN iStepbranche1:=20;END_IF
    	20:IF fbMachine.fbVerin1.xOnMoins
    	THEN iStepbranche1:=99;END_IF
    	99:;
    END_CASE
    fcSetStep (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROGRAM fcSetStep
    VAR_INPUT
    	iNextStep:INT;
    END_VAR
    VAR_IN_OUT
    	iStep:INT;
    END_VAR
    VAR
    END_VAR
    fcSetStep (code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF fbMachine.fbBtn.xHmiStepByStep
    		THEN
    			IF  fbMachine.fbBtn.xHmiStart
    				THEN
    					iStep:=iNextStep;
    			END_IF
    		ELSE
    			iStep:=iNextStep;
    END_IF
    FB_Verin (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    FUNCTION_BLOCK FB_Verin
    VAR_INPUT
    	(*pilotage*)
    	xSetPlus:BOOL;
    	xSetMoins:BOOL;
    	xReset:BOOL;
    
    	(*Fin de course*)
    	IxFdcPlus AT%I* :BOOL;
    	IxFdcMoins AT%I* :BOOL;
    
    	(*Paramètres fixes*)
    	TimeOut:TIME:=t#5s;(*Time out pour erreur*)
    	TimeStabilisation:TIME:=t#1000ms;(*Temps de stabilisation*)
    	xSansFdcPlus:BOOL:=TRUE;
    	xSansFdcMoins:BOOL:=TRUE;
    END_VAR
    VAR_OUTPUT
    	(*Commande électrovanne*)
    	QxOutPlus AT%Q*:BOOL;
    	QxOutMoins AT%Q*:BOOL;
    	(*Information d'état*)
    	xOnPlus:BOOL;
    	xOnMoins:BOOL;
    	xError:BOOL;
    END_VAR
    VAR
    	iStep:INT :=0;
    	fbTrigPlus:R_TRIG;
    	fbTrigMoins:R_TRIG;
    	fbTimeOut:TON;
    	fbTimeStabilisation:TON;
    END_VAR
    FB_Verin (code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    IF xReset
    	THEN
    		iStep:=0;
    END_IF
    
    
    fbTrigPlus(clk:=xSetPlus);
    fbTrigMoins(clk:=xSetMoins);
    
    IF fbTrigPlus.Q AND NOT xOnPlus
    	THEN
    		iStep:=100;
    END_IF
    
    IF fbTrigMoins.Q AND NOT xOnMoins
    	THEN
    		iStep:=200;
    END_IF
    
    
    CASE iStep OF
    	0:(*Cycle de reset output et test de start*)
    		;
    	100:(*sortie plus*)
    		IF IxFdcPlus OR xSansFdcPlus
    			THEN
    				iStep:=110;
    		END_IF
    	110:IF fbTimeStabilisation.Q
    			THEN
    				iStep:=199;
    		END_IF
    	199:(*ok en plus*)
    		;
    	200:(*entrée moins*)
    		IF IxFdcMoins OR xSansFdcMoins
    			THEN
    				iStep:=210;
    		END_IF
    	210:IF fbTimeStabilisation.Q
    			THEN
    				iStep:=299;
    		END_IF
    	299:(*ok en moins*)
    		;
    
    END_CASE
    
    QxOutPlus:=iStep>=100 AND iStep<200;
    QxOutMoins:=iStep>=200 AND iStep<300;
    
    xOnPlus:=iStep=199 AND (IxFdcPlus OR xSansFdcPlus) AND QxOutPlus;
    xOnMoins:=iStep=299 AND (IxFdcMoins OR xSansFdcMoins) AND QxOutMoins;
    xError:=fbTimeOut.Q
    		OR iStep=199 AND NOT xOnPlus
    		OR iStep=299 AND NOT xOnMoins
    		OR IxFdcMoins AND IxFdcPlus;
    
    fbTimeOut(IN:=(iStep=100 OR iStep=200) AND NOT (fbTrigPlus.Q OR fbTrigMoins.Q),PT:=TimeOut);
    
    fbTimeStabilisation(IN:=iStep=110 OR iStep=210,PT:=TimeStabilisation);
    FB_IO (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    FUNCTION_BLOCK FB_IO
    VAR_INPUT
    	Ix1 AT%I* : BOOL;
    	Ix2 AT%I* : BOOL;
    	Ix3 AT%I* : BOOL;
    	Ix4 AT%I* : BOOL;
    	Ix5 AT%I* : BOOL;
    
    	QxStartMoteur AT%Q*: BOOL;
    
    
    
    END_VAR
    VAR_OUTPUT
    
    END_VAR
    VAR
    END_VAR
    FB_IO (pas de code).

    FB_Btn (déclaration des variables):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FUNCTION_BLOCK FB_Btn
    VAR_INPUT
    	xHmiStart:BOOL;
    	xHmiStop:BOOL;
    	xHmiReset:BOOL;
    	xHmiStepByStep:BOOL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    END_VAR
    FB_Btn (pas de code).

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    avril 2002
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : avril 2002
    Messages : 457
    Points : 707
    Points
    707
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Salut,

    Je vous ai écrit une ligne de code et vous ai demandé si je la lisais correctement. Vous n'avez pas besoin de me corriger tout le programme, ça c'est mon travail; j'ai juste besoin d'aide pour apprendre à lire le Pascal...
    Tu l'as lue très correctement, je suppose. Après, pour la comprendre, on n'en sait rien puisqu'on te répète qu'il faut avoir tout le code. Est-ce que tu lis correctement la phrase qui précède ?

    Cordialement.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    Cours Python - FAQ Python - Forum Python - Livre complet apprendre Python 3

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Bon, écoutez ça commence de m'énerver. Ca veut dire quoi "je suppose"? Que tu ne connais pas le Pascal?
    Le code entier, je vous l'ai donné. S'il manque quelque chose, c'est à vous de me dire quoi.

    Je crois pas que la syntaxe d'une fonction IF dépende de tout le reste du code; en principe, c'est une écriture standard.

    Ce dont j'ai besoin, c'est de connaître la syntaxe du Pascal. Le code, on s'en fout, c'est mon problème. Je suis en troisième année d'école d'ingénieurs, et je maîtrise les concepts de base de la programmation. Je suis capable d'écrire un structogramme, donc je suis capable de développer un programme pour autant que j'en connaisse la syntaxe.
    En d'autres termes, je suis capable de communiquer, mais je ne connais pas toutes les langues pour autant.

    Je veux juste qu'on me confirme que je lis une ligne correctement. Contentez-vous de dire oui ou non, ça suffit.

    Je repose ma question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fbCycleAuto(xStart:=fbCycleMain.iStep=350,
    			xStop:=fbCycleMain.iStep=390,
    			xReset:=fbCycleMain.iStep=810);
    Dites-moi si vous avez besoin d'informations supplémentaires.

    La lecture que je fais de cette ligne:
    "fbCycleAuto", c'est l'appel du sous-programme FB_CycleAuto.

    "xStart:=fbCycleMain.iStep=350":
    Ca, ça veut dire que si xStart=TRUE, on initialise iStep à 350 dans FB_CycleMain.

    Deux fois "oui" ou "non", s'il-vous-plaît. =D

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    avril 2002
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : avril 2002
    Messages : 457
    Points : 707
    Points
    707
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Je repose ma question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fbCycleAuto(xStart:=fbCycleMain.iStep=350,
    			xStop:=fbCycleMain.iStep=390,
    			xReset:=fbCycleMain.iStep=810);
    Dites-moi si vous avez besoin d'informations supplémentaires.

    La lecture que je fais de cette ligne:
    "fbCycleAuto", c'est l'appel du sous-programme FB_CycleAuto.

    "xStart:=fbCycleMain.iStep=350":
    Ca, ça veut dire que si xStart=TRUE, on initialise iStep à 350 dans FB_CycleMain.

    Deux fois "oui" ou "non", s'il-vous-plaît. =D
    Le Pascal utilisé ici ne me semble pas standard (ni standard ISO ni le standard de fait de TurboPascal). il est difficile de répondre par "oui" ou par "non" à une question pour laquelle nous n'avons pas assez d'éléments. On peut faire des hypothèses. Ce segment de code :

    fbIO:FB_IO;
    fbBtn:FB_Btn;

    fbCycleMain:FB_CycleMain;
    fbCycleAuto:FB_CycleAuto;
    fbCycleMan:FB_CycleInit;

    fbVerin1:FB_Verin;
    fbVerin2:FB_Verin;
    fbVerin3:FB_Verin;

    xModeAuto:BOOL;
    suppose que la variable fbCycleMain appartient au type FB_CycleMain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    La lecture que je fais de cette ligne:
    "fbCycleAuto", c'est l'appel du sous-programme FB_CycleAuto.
    La lecture que j'en fais est que "fbCycleAuto" est une fonction (qui est un sous-programme particulier). Une fonction en Pascal renvoie toujours une valeur, une procédure modifie un état. Le programme passe à cette fonction les paramètres : xStart, xStop, xReset qui sont des booléens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xStop:=fbCycleMain.iStep=390
    En Pascal standard ceci signifie que xStop est une variable qui prend la valeur de fbCycleMain qui devrait être de type RECORD vue la notation pointée (on pourrait aussi avoir une notation pointée de ce type pour des pointeurs ou des Objets mais ici cela me paraît moins probable). Comment une variale booléenne (xStop) peut prendre la valeur d'une fonction ? Je sais juste que c'est impossible en Pascal standard (sauf si cette fonction renvoie un booléen bien entendu) même si on considère que la valeur qui est affectée est iStep qui est un integer ! Le contrôle des types est très strict en Pascal ce qui montre que ce langage n'est pas du Pascal même s'il en emprunte plus ou moins la syntaxe...
    Un des champs de ce RECORD serait iStep qu'on fixe ici à 390. Cependant le code fourni plus haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FUNCTION_BLOCK FB_CycleMain
    VAR_INPUT
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    	iStep:INT:=0;
    END_VAR
    qui semble définir le type FB_CycleMain auquel appartient la variable fbCycleMain. Sauf que je ne reconnais pas tout à fait le genre de définition ici parce que ce n'est pas du Pascal standard sauf erreur de ma part... Le mot "FUNCTION_BLOCK" n'est pas un mot réservé du Pascal standard, je n'y peux rien !

    Cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xStop:=fbCycleMain.iStep=390
    se réfère à celle-ci (le CASE) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	390:IF fbMachine.fbCycleAuto.iStep=0
    			THEN
    				iStep:=50;
    Ce qui signifie que le programme attribue à xStop la valeur fbCycleMain.iStep quand celle-ci est à 390. En Pascal, le signe ":=" est une attribution de valeur, le signe "=" est une égalité.

    Ce "Pascal" n'est pas vraiment du Pascal et, puisque tu es ingénieur, tu aurais peut-être pu le savoir. Nous il faut qu'on devine.

    Citation Envoyé par Armulis Voir le message
    Bon, écoutez ça commence de à m'énerver. Ca veut dire quoi "je suppose"? Que tu ne connais pas le Pascal?
    Ceci est un forum d'aide, pas un défouloir. Si tu penses que tes compétences d'ingénieur (que je n'ai pas) te dispensent de t'expliquer, il serait bon que tu te débrouilles seul. Pour répondre à la question, je connais le Pascal (TurboPascal, FreePascal et même UCSD) pas le pseudo-Pascal utilisé dans ton programme. Il faut que tu fouilles la doc de ton compilateur qui a manifestement pris des libertés avec la norme. Je ne connais pas toutes les variantes du Pascal.



    Citation Envoyé par Armulis Voir le message
    Le code entier, je vous l'ai donné. S'il manque quelque chose, c'est à vous de me dire quoi.
    Il ne s'est pas affiché quand j'ai posté mon message, désolé.

    Citation Envoyé par Armulis Voir le message
    Je crois pas que la syntaxe d'une fonction IF dépende de tout le reste du code; en principe, c'est une écriture standard.
    En principe peut-être, en réalité : NON.

    Citation Envoyé par Armulis Voir le message
    Ce dont j'ai besoin, c'est de connaître la syntaxe du Pascal.
    => doc compilateur.

    Citation Envoyé par Armulis Voir le message
    Je suis en troisième année d'école d'ingénieurs,
    Bravo !

    Citation Envoyé par Armulis Voir le message
    Je veux juste qu'on me confirme que je lis une ligne correctement. Contentez-vous de dire oui ou non, ça suffit.
    Je veux juste un peu de politesse. Merci.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    Cours Python - FAQ Python - Forum Python - Livre complet apprendre Python 3

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 231
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 231
    Points : 11 575
    Points
    11 575
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Bon, écoutez ça commence de m'énerver. Ca veut dire quoi "je suppose"? Que tu ne connais pas le Pascal?
    Ça n'est pas du Pascal. Point!

    Si on te demande d'utiliser TwinCAT, on ne te demande pas de faire du Pascal. D'après ce que je vois sur leur site, c'est un compilateur "maison" capable de générer du code PLC (Programmable Logic Controller), soit la gestion des entrées/sorties (détecteurs de proximité/fin de course d'un côté et vérins/vannes/lampes de l'autre) et du code ISO-6983 (G,N,etc.) pour les mouvements d'axes. Ils ont peut-être leurs propres cartes real-time pour transformer un simple PC en commande numérique, mais je n'ai pas trop cherché.

    Il y a manifestement une grosse incompréhension de ta part et/ou de ton prof.

    EDIT:
    Bon, en regardant un peu comment sont faites tes routines, xStart, xStop, xReset donnent l'état en cours de la machine :
    - En cycle si iStep = 350
    - En cours d'arrêt si iStep = 390
    - En réinitialisation si iStep = 810 (après un problème, arrêt d'urgence, etc.)

    iStep est fixé manuellement par les boutons du tableau de commandes.

    FB_CycleAuto parait surprenant ! Il y a un trigger (synchro) sur xStart alors que cette procédure est appelée cycliquement depuis Main. Ça doit se bouffer la queue...

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    avril 2002
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : avril 2002
    Messages : 457
    Points : 707
    Points
    707
    Par défaut
    En moins de 10 mn sur le site de Twincat, j'ai trouvé le langage utilisé décrit sur Wikipedia (!)

    Structured text ST (Texte Structuré) est l'un des cinq langages de l'IEC 61131-3. Il est utilisé pour les automates programmables (en anglais PLC : programmable logic controllers). C'est un langage de haut niveau et sa structure rappelle les langages Ada et PASCAL.

    Le format de ces fichiers a été standardisé en XML par PLCopen.

    Des instructions plus ou moins complexes sont supportées, par exemple :

    boucle d'itération (REPEAT-UNTIL; WHILE-DO) ;
    conditions (IF-THEN-ELSE; CASE) ;
    fonctions (SQRT(), SIN()).
    => ici il y en a un cours en PDF qui a l'air assez complet pour ce que j'en comprends.
    www.plcopen.org/pages/...standards/iec_61131_3.

    Je ne ferai pas de remarques superfétatoires sur la capacité d'un ingénieur en troisième année à utiliser Google...
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    Cours Python - FAQ Python - Forum Python - Livre complet apprendre Python 3

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Salut, et merci d'être passé!

    OK, apparemment mon prof s'est planté. Lui, il m'a garanti que c'était du Pascal. Déjà là, pour me faire aider je suis naze... ^^

    Je me suis mis à-fond dessus ce weekend, donc il y a du progrès.

    Merci pour tes commentaires, Richard. Ca c'est du détail! =D

    J'ai réussi de réparer certains trucs, mais à-force n'ai complètement réécrit le programme. Il me manque encore des références pour faire des boucles d'attente et des Timers, tout ça, mais puisque je suis à l'école en ce moment, je vais interroger mon prof.

    Et comme le délai s'approche à grands pas, je pense qu'on va pouvoir fermer ce sujet si personne n'a de remarque à ajouter ;D

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2011, 14h36
  2. Réponses: 3
    Dernier message: 07/01/2009, 12h00
  3. Une barre de navigation qui suit les déplacements dans une longue page
    Par septembr1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/02/2008, 11h56
  4. Réponses: 1
    Dernier message: 15/08/2006, 02h39
  5. Mise à jour d'une balise par innerHTML qui pose pb !!
    Par nerik38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2006, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo