2017-09-13 5 views
0

J'ai un problème concernant le type de données que je reçois lors de la lecture d'un SPS avec Labview.Numéro d'interprète Labview en tant que flottant

S7 read

je reçois un tableau 1D de valeurs entières 32 bits de la S7Read_VI que je dois interprete comme valeurs flottantes que ces valeurs sont de type REAL dans le SPS. Labview affiche les nombres comme ceci: 1131655987 qui est censé être 243.7 (quand interprété comme float). Le s7Read_VI offre également des lectures de type REAL lui-même, mais de toute façon cela ne fonctionne pas (certains collègues ont également remarqué ce problème).

J'essaie maintenant d'interpréter ces nombres (1131655987) comme nombres à virgule flottante dans labview et jusqu'ici n'ai pas trouvé une solution valide.

Est-ce que andybody a une idée de comment je peux interpréter un nombre décimal comme un nombre à virgule flottante? une conversion comme SGL montré dans l'image, n'a pas de sens je crois, comme le nombre est déjà flottant et juste affiché comme décimal.

Meilleures salutations, jonnyx

+2

'1131655987' est un entier de 32 bits. Si vous interprétez la valeur (les 32 bits) comme un flottant de 32 bits, vous obtenez en effet '243.7' (je viens de vérifier cela). Je ne sais pas comment vous pouvez lancer un tel nombre entier pour flotter dans Labview, cependant. En Pascal, ce serait 'IntValue: = 1131655987; myFloat: = PSingle (@Intvalue) ^; ', en C (probablement UB, bien que):' int invalue = 1131655987; float myfloat = * ((float *) (void *) & intvalue); ' –

+0

ouais, pour ceux qui se demandent,' 1131655987' est '4373B333' en hexadécimal, que vous pouvez passer dans un convertisseur à flotteur que vous pouvez trouver en ligne, par exemple: [link] (https://www.h-schmidt.net/FloatConverter/IEEE754de.html) – jonnyx

Répondre

3

Le nœud To Single Precision est un opérateur de conversion sur chaque élément de la matrice. Il ne réinterprète pas le tableau en tant que tableau de valeurs à simple précision. Si vous voulez réinterpréter le tableau en tant que valeurs de précision unique, utilisez le terminal terminal et votre tableau à x (main gauche) du type (centre) fonction Type Cast et le fil dans un tableau de constante unique:
TypeCast

0

Ce que je l'ai fait pour résoudre mon problème a été de changer le type de données dans SPS de REAL DWORD.

L value_REAL*1000 //REAL value like 243.7 RND T value_DWORD //now DWORD but accuracy not lost: 243700

alors je viens de lire dans mes valeurs avec LabView et les diviser par 1000.

espoir que tout le monde peut profiter de cela. meilleures salutations, jonnyx