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

C# Discussion :

probléme BitConverter.GetBytes en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut probléme BitConverter.GetBytes en C#
    Bonjour, j'ai un équipement avec qui je communique en Modbus, je récupère registre type Word de 16 bits, et je dois regrouper deux registres qui se suivent pour avoir une valeur réel de 32 bits
    pour cela j'ai utilisé la méthode BitConverter.GetBytes et BitConverter.ToSingle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pitch_Col2  = Math.Round(BitConverter.ToSingle(BitConverter.GetBytes(RegistresSix.InputReg[0][2] << 16 | RegistresSix.InputReg[0][3]), 0),7);
    avec :
    • RegistresSix.InputReg[0][2] = premier registre
    • RegistresSix.InputReg[0][3] = deuxième registre



    mon problème se pose quand le deuxième registre est négatif j’obtient NaN au lieu de la valeur
    mais par contre quand j'ai le premier registre qui est négatif ou les deux qui sont positifs j'obtient ce que je veux

    vous avez des solutions ou des explication à ce problème ?
    Dernière modification par Invité ; 12/12/2019 à 21h44.

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Pourquoi Converter.ToSingle() (virgule flottante simple précision) au lieu de Converter.ToInt32() ? Ce sont des nombres à virgule tes données en entrées ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Noxen Voir le message
    Pourquoi Converter.ToSingle() (virgule flottante simple précision) au lieu de Converter.ToInt32() ? Ce sont des nombres à virgule tes données en entrées ?
    les données d'entrées, non sans virgule
    Nom : Capture.PNG
Affichages : 192
Taille : 15,0 Ko

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Je pense qu'il y a une mauvaise compréhension.
    Il faut voir la table Modbus comme un espace de stockage. Des bits donc où tu peux lire et écrire par mots (16 bits) ou par coils (1bit par 1 bit).
    Tu peux donc y stocker ce que tu veux (ushort, short, float, int uint, long, ulong, double...). Tu donnes l'adresse de départ et le nombre de mots ou de bits à lire/écrire.
    Par exemple :
    Tu veux écrire la valeur 5 int32 sur tes registres 2 et 3.
    Tu convertis en bits 0000 0000 0000 0000 | 0000 0000 0000 0101. Tu sépares la première moitié dans le mot1 et la seconde moitié mot2 et tu écris successivement tes deux mots sur reg2 et reg3.
    Donc int donne 32 bits que tu remets dans 2 int16 et que tu écris.

    C'est la même chose pour lire. Tu lis 2 ushort (2 x int16); Tu convertis en 32 bits (classe BitArray). Tu prends tes 32 bits et tu les convertis en Int32. Ca marche pareil si tu veux convertir en float32.

Discussions similaires

  1. Problème de Math.round avec des grands nombres
    Par Sfaxiano dans le forum Général Java
    Réponses: 2
    Dernier message: 22/09/2012, 12h20
  2. arrondi math.round
    Par calitom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/09/2007, 14h53
  3. System.math.round problème d'arrondi..
    Par Destiny dans le forum C#
    Réponses: 8
    Dernier message: 09/09/2007, 10h54
  4. arrondir un chiffre sans utiliser math.round
    Par calitom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/06/2007, 17h57
  5. Comportement étrange de Math.round
    Par opasteur dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2006, 13h05

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