double (double float)
Добавлено: 21 ноя 2013, 09:58
Пример макроса, конвертирующего double (четыре 16-битных слова) в float (32-bit float). В примере используется жёстко заданное входное значение (заполнение массива src в начале макроса)
- Код: Выделить всё
- macro_command main()
short src[4]
//используйте GetData вместо хардкода
src[3]=0x3fd4
src[2]=0x1893
src[1]=0x74bc
src[0]=0x6a7f
short dst[2]
int sign
sign = src[3] & 0x8000
int expn
expn = (src[3]>>4) & 0x7FF
if ( ( (expn & 0x700) <> 0) and ( (expn & 0x700) <> 0x700 ) ) then
//ПОТЕРЯ ЭКСПОНЕНТЫ!
end if
if (expn & 0x400) <> 0 then
expn = (expn & 0x7F) | 0x80
else
expn = expn & 0x7F
end if
int mantis
mantis = ((src[3]&15)<<19) | (src[2]<<3) | (src[1]>>13)
dst[1] = sign | (expn<<7) | (mantis>>16)
dst[0] = mantis
//сохраняем результат в LW0/LW1
SetData(dst[0], "Local HMI", LW, 0, 2)
end macro_command