Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.12.2011, 19:07
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию String и Integer

Добрый вечер всем. Вопрос по формуле.
PHP код:
var
          
string;
          
integer;
          
fVadc Double;
   
begin
{процедура}
 
Vadc:=f/1023.0*3.3
Получаю ошибку.
PHP код:
Unit1.pas(185): Incompatible types'String' and 'Extended' 
Как заставить корректно работать формулу?
Это "продолжение" темы http://www.delphisources.ru/forum/sh...ad.php?t=19573

Последний раз редактировалось fofka, 28.12.2011 в 19:22.
Ответить с цитированием
  #2  
Старый 28.12.2011, 19:23
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

А дальше код где???
Ответить с цитированием
  #3  
Старый 28.12.2011, 19:32
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Полный код процедуры, где ошибка.
PHP код:
procedure TForm1.Timer1Timer(SenderTObject);
 var
    
sstring;
    
iinteger;
    
fRTRMVadc Double;
 
begin
Vadc напряжение АЦП в вольтах к которому подключен датчик
  Vpit 
источник постоянного опорного напряжения
  K 
коэффициент температурной чуствительностиравен 3988
  Rm 
сопротивление резистора в омах схема и формула [url]http://www.kernelchip.ru/KTS-1.php[/url])
  
Ro сопротивление датчика при 25 oCравно3 кОм
  RT 
= (Rm*Vadc)/(Vpit Vadc);
 
Так как модуль запитан через свой стабилизатор 3.3vVpit 3.3v
}
 
RM :=5060.0;///Сопротивление резистора в омах

CS1.Socket.SendText('$KE,ADC,1'#13#10);
 
Memo1.Text:=s;
  {
 
:= edit2.Text;
 }
 if 
s[1] = '#' then begin
 
if copy(s,2,3) = 'ADC' then begin
 i 
:= 5;
 while 
s[i] <> ',' do begin
 
if 10 then break; // (*) if i > 10 then break;
 
inc(i);
 
end;
      
inc(i);
      
:= copy(s,i+1,length(s));
      
Vadc:=s/1023.0*3.3;///расчет напряжения АЦП в вольтах
      
RT:= (Rm*Vadc)/(3.3 Vadc);///расчет сопротивления терморезистора в омах
      
:= (3988.0/({log}(RT/3000.0) + 3988.0/298.0))-273;///Расчет температуры в градусах цельсия
      
Form1.Edit1.Text := FormatFloat('0.0000 C"',f);
      
end;
    
end;
   
end

Последний раз редактировалось fofka, 28.12.2011 в 19:34.
Ответить с цитированием
  #4  
Старый 28.12.2011, 19:39
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

PHP код:
Vadc:=s/1023.0*3.3
а надо так:
PHP код:
Vadc:=strtofloat(s)/1023.0*3.3
Ответить с цитированием
  #5  
Старый 28.12.2011, 19:44
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Сделал как посоветовали. Выдает ошибку.
Изображения
Тип файла: jpg Ошибка.jpg (12.5 Кбайт, 13 просмотров)
Ответить с цитированием
  #6  
Старый 28.12.2011, 19:45
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

PHP код:
procedure TForm1.CS1Read(SenderTObject;SocketTCustomWinSocket);
 
begin
  s 
:= Socket.ReceiveText;
end
Ответить с цитированием
  #7  
Старый 28.12.2011, 19:54
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Попробуйте с сервера данные отправлять с "ноликом" спереди, и точкой, в качестве разделителя
Ответить с цитированием
  #8  
Старый 28.12.2011, 19:55
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Нужно убрать "Enter" на конце, и возможно дописать 0 в начале.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 28.12.2011 в 19:59.
Ответить с цитированием
  #9  
Старый 28.12.2011, 20:05
Аватар для Dark King
Dark King Dark King вне форума
Прохожий
 
Регистрация: 31.10.2011
Сообщения: 25
Репутация: -1637
По умолчанию Ошибка

Matnik!!!
За это можно и бан схлоптать!

Последний раз редактировалось Dark King, 29.12.2011 в 17:33.
Ответить с цитированием
  #10  
Старый 28.12.2011, 20:16
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от Nikitiy_II
Попробуйте с сервера данные отправлять с "ноликом" спереди, и точкой, в качестве разделителя
Nikitiy_II. Это сложнее. Я отправляю запрос, получаю ответ в таком примерно виде
PHP код:
#ADC,1,0293 
Где #ADC - выход с АЦП, 1 - первый канал, 0293 - сами данные.
Ответить с цитированием
  #11  
Старый 28.12.2011, 20:21
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Тогда при раздилении переменной написать проверочку...
Ответить с цитированием
  #12  
Старый 28.12.2011, 20:38
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от Nikitiy_II
Тогда при раздилении переменной написать проверочку...
А пример можно? На си+ без проверки работает.
Ответить с цитированием
  #13  
Старый 28.12.2011, 21:23
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

ну, strtofloat в делфи достаточно капризная функция...

ну вообще как-то так:
PHP код:
s:=StringReplace(s,',','.',[rfReplaceAllrfIgnoreCase]);//заменяем запятую точкой

 
if s[1]='.' then Insert('0',s,1);//если первый символ ".", то спереди ставим 0 
Ответить с цитированием
Этот пользователь сказал Спасибо Nikitiy_II за это полезное сообщение:
fofka (28.12.2011)
  #14  
Старый 28.12.2011, 21:30
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Ну одну ошибку отыскал, при проверки входного сигнала брал еще запятую
PHP код:
:= copy(s,i+1,length(s)); 
Исправил на
PHP код:
:= copy(s,i+2,length(s)); 
Без модуля , при испралении данных в Edite меняется температура. Подключаю модуль, выдает ошибку.
В прицепе програмулина. Может подскажите?

Выдержка из мануала
PHP код:
Пример 1:
Получить результат преобразования АЦП с 3-го канала:
запрос$KE,ADC,3
ответ
#ADC,3,0645
В данном примере на входе АЦП в момент подачи запроса было напряжение:
645 3.3 2.08 [ ] 
Вложения
Тип файла: rar Test.rar (7.8 Кбайт, 2 просмотров)

Последний раз редактировалось fofka, 28.12.2011 в 21:32.
Ответить с цитированием
  #15  
Старый 28.12.2011, 21:33
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от Nikitiy_II
PHP код:
Vadc:=s/1023.0*3.3
а надо так:
PHP код:
Vadc:=strtofloat(s)/1023.0*3.3
Спасибо за подсказку помогло. Был не прав, работает У меня ошибка.....

Последний раз редактировалось fofka, 28.12.2011 в 21:46.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025