Importer des signaux calculés à partir de fichiers XDA : Différences entre MDA V7 et MDA V8

Depuis MDA V8.3.3, il est possible d'importer des signaux calculés à partir de fichiers XDA. Pour plusieurs raisons, les résultats des signaux calculés dans MDA V8 peuvent être différents de ceux de MDA V7. Ce document répertorie les différences en détail.

  • MDA V7 et MDA V8 utilisent des moteurs de calcul différents pour évaluer les formules : MDA V7 utilise un interpréteur Perl, tandis que MDA V8 se sert d'un moteur de calcul de type C. Cela peut entraîner des résultats différents (p. ex. en raison de la résolution). En interne, MDA V8 utilise différents types de données (par ex. int8, uint8, int16, booléen, double…) automatiquement, en fonction du résultat du calcul (déduction de type).
  • Pour les signaux calculés, MDA V8 prend en charge les types booléen, double et automatique. MDA V7 prend également en charge différents types d'entiers (uint16, sint32 …). Lors de l'importation, les types d'entiers sont remplacés par le type automatique. Si vous avez sélectionné un type entier dans MDA V7 pour garantir un résultat entier, MDA 8 peut délivrer des valeurs flottantes.
  • MDA V7 utilise automatiquement la fonction decimal() pour les opérations binaires (p. ex. dans la fonction Binary_AND). MDA V8 émulera ce comportement en appelant la fonction Raw(). Si vous utilisez un signal calculé, MDA V8 ne le fera pas et utilisera la valeur physique à la place.
  • Lors de l'utilisation de l'opérateur modulo (%), MDA V7 utilise la valeur décimale. MDA V8 utilise la valeur physique.
  • Les scripts Perl définis par l'utilisateur et spécifiant les fonctions des signaux calculés ne sont pas pris en charge. Les signaux calculés utilisant de telles fonctions sont importés, mais leur formule affiche une erreur.
  • Si vous référencez un signal dans les paramètres de trame, qui ne fait pas partie de la formule actuelle, MDA V8 utilise « Trames combinées (Fusionner les trames) ».
  • Les paramètres de conversion verbale ne sont pas pris en charge par MDA V8 et sont ignorés.
  • Les signaux de surveillance de limite sont importés. Cependant, les paramètres de conversion verbale (et les messages associés) sont ignorés. Le type de signal résultant est défini sur Booléen (pas chaîne) dans MDA V8. Les signaux sont supprimés des oscilloscopes lors de l'importation. Veuillez affecter manuellement le signal calculé à une bande booléenne dans un oscilloscope. Vous pouvez également l'affecter à un instrument de la Liste d'événements. Cela donnera une vue similaire à la bande d'événements dans MDA V7.
  • Les fonctions TableMap1 et TableMap2 ne sont pas prises en charge et affichent des erreurs dans MDA V8.

Constantes

MDA V7

Formule migrée dans MDA V8

BIRTHDAY

Non pris en charge dans MDA V8

DATE

Non pris en charge dans MDA V8

E

2,71828182845905

EPOCH

Non pris en charge dans MDA V8

G

9,80665

LOG2_E

1,44269504088896

LOG10_E

0,434294481903252

LOG_2

0,693147180559945

LOG_10

2,30258509299405

PI

3,14159265358979

PI_DIV_2

1,5707963267949

PI_DIV_4

0,785398163397448

ONE_DIV_PI

0,318309886183791

ONE_DIV_SQRT_2

0,707106781186548

SEC_PER_DAY

86400,0

SEC_PER_HOUR

3600,0

SEC_PER_MIN

60,0

SQRT_2

1,4142135623731

TWO_DIV_PI

0,636619772367581

TWO_DIV_SQRT_PI

1,12837916709551

TWO_PI

6,28318530717959

Opérations standard

Les résultats de calcul des signaux calculés importés avec des opérations standard présentent les problèmes connus suivants :

  • MDA V7 et MDA V8 ont des valeurs différentes pour la fonction rint/RoundInt. La fonction rint dans MDA V7 comporte une convention d'arrondi spécifique « Arrondi asymétrique vers le haut », mais MDA V8 possède la convention « Arrondi symétrique vers le haut ».
  • Dans MDA V7 les opérations de décalage (>>, <<) et binaires (&, |, ^) utilise la valeur brute du signal. MDA V8 émulera ce comportement en appelant la fonction Raw(). Cependant, une telle encapsulation ne fonctionne pas correctement pour les signaux calculés imbriqués, c'est-à-dire lorsque l'argument est un signal calculé qui contient un signal de mesure.
  • Les signaux calculés du type entier dans MDA V7 seront convertis en type double dans MDA V8. Cela entraîne des différences dans la gestion du débordement arithmétique. Par exemple la valeur ‘-1’ dans MDA V7 est représentée par ‘4294967295,00’ qui est ((uint32)’-1’), et dans MDA V8 c'est le réel ‘-1,00’.

Opérations de type "Bit individuel"

 

Caractéristique

MDA V7

Formule migrée dans MDA V8

Commentaire

Single Bit

double((long(rint(signal)) >> shift_value) & and_value)

Si un fichier de mesure est utilisé :

Raw(signal) >> shift_value & and_value

Si une valeur est utilisée :

value >> shift_value & and_value

Tous les arguments du signal de mesure sont enveloppés par la fonction Raw.

Opérations de type "Masque de bits"

 

Caractéristique

MDA V7

Formule migrée dans MDA V8

Commentaire

Bitmask

double((long(rint(signal)) >> shift_value) & and_value)

Si un fichier de mesure est utilisé :

Raw(signal) >> shift_value & and_value

Si une valeur est utilisée :

value >> shift_value & and_value

Tous les arguments du signal de mesure sont enveloppés par la fonction Raw.

Opérations de type "Surveillance de limite"

MDA V7 permet de définir des signaux calculés qui surveillent si un ou plusieurs signaux dépassent une valeur prédéfinie. Pour chaque limite à surveiller, une condition est définie, ainsi qu'un message à afficher si la limite n'est pas respectée.

Pour MDA V8, une telle opération est migrée en un signal calculé de type événement booléen. Le message associé ne sera pas migré.

Exemple :

Le fichier XDA d'un signal contient trois règles de calcul :

1

MyLimitMonitor1?1 = ${'C:_Data\INCA-NG_Sample Files\Coldstart2.dat:DG0:CG0:N10'}>1000

2

MyLimitMonitor1?2 = ${'C:_Data\INCA-NG_Sample Files\Coldstart2.dat:DG0:CG0:N10'}<100

3

MyLimitMonitor = ${'MyLimitMonitor1?1'} + ${'MyLimitMonitor1?2'}

Ces formules sont converties en un signal calculé dans MDA V8 :

Nom

MyLimitMonitor

Formule

(N10 > 1000) || (N10 < 100)

Type

Booléen