Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 09:45   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию проверка при зполнении побайтово в single

есть некая программ которая читает данные с прибора через ком порт.
эти данные предаются в дальнейшую обработку и сохраняются результаты.
проблема в следующем.
программа передаёт значение типа float побайтово, я это значение пытаюсь вставить аналогично в тип дельфи single. но иногда в приборе возникает ошибка и приходят случайные байты вместо нужных. в результате возникает ошибка присвоения и в отладчике пишется в значении переменной "-NAN" что вызывает исключительную ситуацию и выкидывает из дальнейшей обработки параметров прибора. значения байтов может быть например 0,232,145,255


как правильно исключить данную ошибку?
на текущий момент сделано следующим образом.


Код:
  
        d_a[1]:=b_in[5]; //переменная
        d_a[2]:=b_in[4];
        d_a[3]:=b_in[7];
        d_a[4]:=b_in[6];
        try
          if (l_val>-2147483640)and(l_val<2147483640)then
          begin
            A_Sin(p,0);//процедура отображения
            A_res(l_val,18,p); //процедура сохранения
          end
          else Slog('Ошибка числа, слишком большое(маленькое) в строке прибора ');//сохранение ошибки
        except
          Slog('Ошибка числа, слишком не правильные байты в нём, в  строке прибора '); //сохранение ошибки
        end;
где

Код:
var
  l_val:single;
  d_a: array[1..4] of byte absolute l_val;
  b_in: array[1..70] of byte;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 09.04.2012, 10:00   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Интересно, есть такая функция в делфи IsNaN()?
EUGY вне форума Ответить с цитированием
Старый 09.04.2012, 10:21   #3
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

спасибо. добавил строчку. теперь работает лучше

Код:
        
        d_a[1]:=b_in[5]; //переменная
        d_a[2]:=b_in[4];
        d_a[3]:=b_in[7];
        d_a[4]:=b_in[6];
        try
          if not IsNaN(l_val) then
          if (l_val>-2147483640)and(l_val<2147483640)then
          begin
            A_Sin(p,0);//процедура отображения
            A_res(l_val,18,p); //процедура сохранения
          end
          else Slog('Ошибка числа, слишком большое(маленькое) в строке прибора ');//сохранение ошибки
        except
          Slog('Ошибка числа, слишком не правильные байты в нём, в  строке прибора '); //сохранение ошибки
        end;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как побайтово считать файл GIF? Bubel Visual C++ 1 29.10.2011 02:23
Как побайтово считать файл GIF? Bubel Visual C++ 1 27.10.2011 11:44
Проверка при запуске Nice42ru Помощь студентам 10 02.01.2010 18:52
Проверка при импорте Власов А.С. БД в Delphi 3 09.11.2009 09:48
Проверка при добавлении записи Tanya2008 БД в Delphi 3 22.04.2009 10:07