18/05/2011, 23:59:29
Salut Raymond,
La fonction f2_decode effectue la bonne conversion. Je pense que le
problème se trouve dans ce que tu lui fournis.
A première vue, cette fonction s'attend à recevoir en entrée un Array
de 2 valeurs correspondant aux 2 octets de données transmis sur le
bus.
Essaie d'afficher ce que tu fournis à la fonction hexdec et ce qu'elle
retourne, tu trouveras peut-être quelque chose d'intéressant.
En fait, le premier example que tu donnais me paraît bon, surtout que
tu dis que ça fonctionne avec "1902". Es-tu certain que la fonction
GroupRead retourne bien une chaine de caractères?
Jean-François
On 18 mai, 20:43, "marc.assin" <raym...@warichet.com> wrote:
> > Entretemps, j'ai trouvé une routine PHP sur le forum allemand...
>
> Il se pourrais que ce ne soit pas la bonne fonction de conversion.
> On m'a tuyauté vers les librairies eibd client, effectivement, il y a
> 2 fonctions de conversion
> J'ai essayé
> function f2_decode($val)
> {
> $exp = ($val[0] & 0x78) >> 3;
> $sign = ($val[0] & 0x80) >> 7;
> $mant = ($val[0] & 0x07) << 8 | $val[1];
> if ($sign)
> $sign = -1 << 11;
> else
> $sign = 0;
> $val = ($mant | $sign) * pow (2, $exp) * 0.01;
> return $val;}
>
> qui ne donne pas le bon résultat et
> function f2_encode($val)
> {
> if($val<0)
> {
> $sign = 1;
> $val = - $val;
> }
> else
> $sign = 0;
> $val = $val * 100.0;
> $exp = 0;
> while ($val > 2047)
> {
> $exp ++;
> $val = $val / 2;
> }
> if ($sign)
> $val = - $val;
> $val = $val & 0x7ff;
>
> return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07),
> ($val& 0xff));}
>
> qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou
> bien je ne sais pas m'en servir avec cet array
La fonction f2_decode effectue la bonne conversion. Je pense que le
problème se trouve dans ce que tu lui fournis.
A première vue, cette fonction s'attend à recevoir en entrée un Array
de 2 valeurs correspondant aux 2 octets de données transmis sur le
bus.
Essaie d'afficher ce que tu fournis à la fonction hexdec et ce qu'elle
retourne, tu trouveras peut-être quelque chose d'intéressant.
En fait, le premier example que tu donnais me paraît bon, surtout que
tu dis que ça fonctionne avec "1902". Es-tu certain que la fonction
GroupRead retourne bien une chaine de caractères?
Jean-François
On 18 mai, 20:43, "marc.assin" <raym...@warichet.com> wrote:
> > Entretemps, j'ai trouvé une routine PHP sur le forum allemand...
>
> Il se pourrais que ce ne soit pas la bonne fonction de conversion.
> On m'a tuyauté vers les librairies eibd client, effectivement, il y a
> 2 fonctions de conversion
> J'ai essayé
> function f2_decode($val)
> {
> $exp = ($val[0] & 0x78) >> 3;
> $sign = ($val[0] & 0x80) >> 7;
> $mant = ($val[0] & 0x07) << 8 | $val[1];
> if ($sign)
> $sign = -1 << 11;
> else
> $sign = 0;
> $val = ($mant | $sign) * pow (2, $exp) * 0.01;
> return $val;}
>
> qui ne donne pas le bon résultat et
> function f2_encode($val)
> {
> if($val<0)
> {
> $sign = 1;
> $val = - $val;
> }
> else
> $sign = 0;
> $val = $val * 100.0;
> $exp = 0;
> while ($val > 2047)
> {
> $exp ++;
> $val = $val / 2;
> }
> if ($sign)
> $val = - $val;
> $val = $val & 0x7ff;
>
> return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07),
> ($val& 0xff));}
>
> qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou
> bien je ne sais pas m'en servir avec cet array