Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC: Question vidéo 24 de Bruno

Question vidéo 24 de Bruno 5 months 2 weeks ago #11085

  • Latapoune
  • Latapoune's Avatar
  • OFFLINE
  • Junior Boarder
  • Posts: 25
  • Karma: 0
Bonjour Bruno,

J'ai des questions sur ta vidéo 24 sur la simulation : je ne comprends pas comment fonctionne l'objet ScanTime et son utilisation dans algorithme. En simulation, un ScanTime oscille autour de 0.1...
Et je ne comprends pas non plus l'écriture de l’algorithme écrit en C, surtout la 2ème et 3ème ligne : est-ce un équivalent à if ?

Pourrais-tu m'éclairer sur ce sujet ?
Merci d'avance !

Seb
Last Edit: 5 months 1 week ago by Latapoune.
The administrator has disabled public write access.

Question vidéo 25 de Bruno 5 months 2 weeks ago #11086

  • benoit
  • benoit's Avatar
  • OFFLINE
  • Gold Boarder
  • Posts: 173
  • Karma: 0
Salut Seb,
En attendant une réponse plus précise de Bruno, quelques éclairages...

OA1 = ( OA1 >= 150.0 ) ? 150.0 : OA1;
Il s'agit d'un test... si OA1 supérieur ou égale à 150.0 alors affecter la valeur 150.0 à OA1
Exécuté à chaque cycle, ce test sature la valeur maxi de OA1 à 150.0

On peut également écrire ce test comme suit:
if ( OA1 >= 150.0 ) OA1 = 150.0;
rem: dans cette expression le 'then' est implicite, il n'est donc pas nécessaire de l'écrire après le ')'

OA1 = ( OA1 <= 0.0 ) ? 0.0 : OA1;
idem que précédemment mais avec 'inférieure ou égale à 0', sature OA1 à 0.

On peut également écrire ce test comme suit:
if ( OA1 <= 0 ) OA1 = 0;

OA1 += A2 / k * ( qe . A1 / 100.0 );
L'opérateur d'affectation '+=' sert à incrémenter une variable.
Les expressions suivantes sont équivalentes (en C):
A = A + 1;
A += 1;

Dans ma vidéo tuto N°6, je réalise une simulation similaire avec un bout de code en C peut-être plus simple à comprendre.
A+
/Ben
The administrator has disabled public write access.

Question vidéo 25 de Bruno 5 months 2 weeks ago #11087

  • Latapoune
  • Latapoune's Avatar
  • OFFLINE
  • Junior Boarder
  • Posts: 25
  • Karma: 0
Merci Benoît,

Je ne connaissais pas ces variantes de codage en C mais maintenant je comprends. Merci !

Oui j'ai suivi et appliqué ton tuto 6 très clair, mais c'est plus fort que moi, quand je ne comprends pas quelque chose, je cherche, et l'utilisation du ScanTime me pose question. La doc de Proview ne m'a pas éclairée sur ce sujet.

Merci !

Seb
The administrator has disabled public write access.

Question vidéo 25 de Bruno 5 months 2 weeks ago #11088

  • benoit
  • benoit's Avatar
  • OFFLINE
  • Gold Boarder
  • Posts: 173
  • Karma: 0
Seb,
Quand tu crées un projet, un objet PlcThread est automatiquement placé dans l'arborescence Nodes (voir Plc____PlcProcess).
Cet objet PlcThread sert de base de temps pour l'exécution (cycle) de l'objet plc, ainsi que les autres objets de l'arborescence Plan (ex: basecomponent, trend,...).
La base de temps par défaut est fixée à 100ms (voir attribut ScanTime)

l'objet ScanTime renvoi la valeur courante du ScanTime du PlcThread qui est lié au Plc.
Donc si le plc a un PlcThread de 100ms, l'objet ScanTime renvoi la valeur 0.1
/Ben
Last Edit: 5 months 2 weeks ago by benoit.
The administrator has disabled public write access.

Question vidéo 25 de Bruno 5 months 1 week ago #11090

  • Latapoune
  • Latapoune's Avatar
  • OFFLINE
  • Junior Boarder
  • Posts: 25
  • Karma: 0
Bonjour Benoît,

Ok je pense avoir compris, donc si je remplaçais A2 par 0.1 dans le code, cela ferait la même chose. L'avantage du ScanTime est que l'algorithme s'adapte à la base de temps de l'automate : si on change la base de temps à 200ms par exemple, il n'y a pas besoin de retoucher le programme ensuite.

Du coup j'ai approfondi le C est j'ai appris que l'écriture OA1 = ( OA1 >= 150.0 ) ? 150.0 : OA1; est une forme ternaire. J'en apprends tous les jours !

Merci!

Seb
The administrator has disabled public write access.
  • Page:
  • 1
Time to create page: 2.418 seconds