STEP 7 Professional V13 SP1 Présentation de la conversion de type de données Présentation de la conversion de type de données Introduction Si vous combinez plusieurs opérandes dans une instruction, vous devez tenir compte de la compatibilité de leur type de données. Il en va de même pour les affectations ou pour la fourniture de valeurs à des paramètres de bloc. Si les opérandes sont de types différents, il faut les convertir. Il existe deux possibilités de conversion : • Conversion implicite La conversion implicite est prise en charge par les langages de programmation CONT, LOG, SCL et GRAPH. La conversion implicite n'est pas possible dans le langage de programmation LIST. • Conversion explicite Vous utilisez une instruction de conversion explicite avant d'exécuter l'instruction proprement dite. Remarque Conversion de chaînes de bits en SCL Toutes les chaînes de bits (BYTE, WORD, DWORD et LWORD) sont traitées dans des expressions telles que les nombres entiers correspondants sans signe (USINT, UINT, UDINT et ULINT). La conversion implicite de DWORD en REAL, par exemple, est donc exécutée comme une conversion de UDINT en REAL. Conversion implicite Une conversion implicite est exécutée automatiquement lorsque les types de données des opérandes sont compatibles. Le contrôle de compatibilité peut s'effectuer sur la base de critères plus ou moins stricts : • Avec contrôle CEI (par défaut) Si un contrôle CEI est paramétré, on applique les règles suivantes : • ― La conversion implicite de BOOL en d'autres types de données n'est pas possible. ― Seuls les types de données REAL, BYTE, WORD, DWORD, DINT, INT, SINT, UDINT, UINT, USINT, TIME, LDT, DTL, DT, TOD, WCHAR et CHAR peuvent être convertis implicitement. ― La longueur de bits du type de données source ne doit pas dépasser la longueur de bits du type de données cible. Il n'est par exemple pas possible de spécifier un opérande du type de données WORD à un paramètre qui exige le type de données BYTE. Sans contrôle CEI Si aucun contrôle CEI n'est paramétré, on applique les règles suivantes : ― La conversion implicite de BOOL en d'autres types de données n'est pas possible. This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete documentation can be found at: /dokumentation/default.aspx?DocVersionId=74495465995&Language=fr-FR&TopicId=58427923211 16/04/2017 STEP 7 Professional V13 SP1 Présentation de la conversion de type de données ― Seuls les types de données REAL, LREAL, BYTE, WORD, DWORD, LWORD, SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT, TIME, LTIME, S5TIME, LDT, DTL, TOD, LTOD, DATE, STRING, WSTRING, WCHAR et CHAR peuvent être convertis implicitement. ― La longueur de bits du type de données source ne doit pas dépasser la longueur de bits du type de données cible. Il n'est par exemple pas possible de spécifier un opérande du type de données DWORD à un paramètre qui exige le type de données WORD. ― Pour les paramètres d'entrée/sortie (InOut), la longueur de bits d'un opérande spécifié à un paramètre doit correspondre à la longueur de bits programmée du paramètre respectif. Remarque Conversion implicite sans contrôle CEI L'éditeur de programmation repère les opérandes convertis implicitement à l'aide d'un rectangle gris. Un rectangle gris foncé signale qu'une conversion implicite sans perte de précision est possible, p. ex. lorsque le type de données INT est converti en type DINT. Un rectangle gris clair signale qu'une conversion implicite est possible, mais que des erreurs peuvent apparaître pendant l'exécution. Si vous convertissez p. ex. le type de données LINT en type DINT et qu'un débordement se produit, la sortie de validation ENO est mise à "0". Vous trouverez également des informations supplémentaires concernant le réglage du contrôle CEI et la conversion implicite sous "Voir aussi". Conversion explicite Si les opérandes ne sont pas compatibles et qu'une conversion implicite n'est donc pas possible, vous pouvez procéder à une conversion explicite. Vous pouvez à cet effet soit utiliser les instructions de conversion de la Task Card "Instructions", soit insérer manuellement la conversion dans le programme. Pour plus d'informations sur la syntaxe des fonctions de conversion explicite, référez-vous à la section "Voir aussi". Un dépassement éventuel est affiché au niveau de la sortie de validation ENO. Un dépassement se produit lorsque p. ex. la valeur du type de données source dépasse celle du type de données cible. Pour plus d'informations sur la conversion explicite, référez-vous à "Voir aussi". La figure suivante montre un exemple de conversion explicite de type de données : Le bloc fonctionnel "Block" attend une variable de type "INT" au paramètre d'entrée "IN_INT". La valeur de la variable "IN_DINT" doit donc d'abord être convertie de DINT en INT. Si la valeur de la variable "IN_DINT" se trouve dans la plage de valeurs admissible du type de données INT, une conversion a lieu. Dans le cas contraire, un dépassement est signalé. Cependant, This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete documentation can be found at: /dokumentation/default.aspx?DocVersionId=74495465995&Language=fr-FR&TopicId=58427923211 16/04/2017 STEP 7 Professional V13 SP1 Présentation de la conversion de type de données même en cas de dépassement, une conversion se produit, mais les valeurs sont coupées et la sortie de validation ENO est mise à "0". Voir aussi → Conversion implicite → Conversion explicite This document constitutes a free excerpt compiled by the user himself/herself from the documentation provided by Siemens for this product. Siemens disclaims all liability for the completeness of this document. It shall only be used for the user's own internal purposes. It shall not be passed on to third parties. The complete documentation can be found at: /dokumentation/default.aspx?DocVersionId=74495465995&Language=fr-FR&TopicId=58427923211 16/04/2017