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

Delphi Sources



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

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

Внимательно еще раз прочитав мануал отыскал такой момент
PHP код:
Любая KE командаотсылаемая модулюдолжна начинаться с символов ‘$KE’
Также все команды должны заканчиваться символом возврата каретки <CR
и символом перехода на новую строку <LF> (в шестнадцатеричном формате 
эти символы имеют коды 0x0D и 0x0A соответственно
). 
Ответы модуля на командыа также отдельные информационные блоки 
выдаваемые модулем всегда начинаются с символа ‘
#’ (шестнадцатеричный код 0x23) 
и заканчиваются символами возврата каретки <CRи перехода на новую строку <LF>. 
Получается что входной сигнал для программы у меня
PHP код:
#ADC,1,0293#13#10 
потому и ошибка. А как мне от них (#13#10) избавится?
Ответить с цитированием
  #17  
Старый 28.12.2011, 22:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Используй ReplaceString
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #18  
Старый 28.12.2011, 23:05
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Благодарю за внимание.
Цитата:
Сообщение от angvelem
Используй ReplaceString
Nikitiy_II уже советовал в этой теме. Но там несколько иначе. Можно под мой случай подробнее описать?
Ответить с цитированием
  #19  
Старый 28.12.2011, 23:10
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

#13#10 это тоже символы и также заменяются на нужные.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #20  
Старый 28.12.2011, 23:13
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от angvelem
#13#10 это тоже символы и также заменяются на нужные.
Понятно. Ну мне их менять не нужно, мне их удалить нужно. Завтра попробую сделать. Благодарю за совет.
Ответить с цитированием
  #21  
Старый 28.12.2011, 23:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну так и подставляешь на замену пустые скобки.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #22  
Старый 29.12.2011, 12:24
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Уже не могу понять в чем дело. Из Edita работает, переключаю на модуль Jerom, нажимаю кнопку "Проверить" и получаю ошибку (прилагается). Вроде все правильно. Проект тоже прилагается. Ну в ЧЕМ ошибка!!!
Собственно процедура с ошибкой
PHP код:
procedure TForm1.Button12Click(SenderTObject);
begin
{DecimalSeparator:='.';
 }
 
RM :=5060.0;

CS1.Socket.SendText('$KE,ADC,1'#13#10);///Отправляем запрос на данные с 1 АЦП
 
Memo1.Text:=s;
 
Sleep(500);
    If 
RadioButton1.Checked true
    then
     s
:=edit2.Text
    
else
     
:= CS1.Socket.ReceiveText;

  
:= pos(',',s);
  if 
copy(s,0,i-1) = '#ADC' then begin///Если данные от АЦП
  
Edit3.Text := copy(s,0,i-1);

  
:= copy(s,i+1,length(s));
  
Edit6.Text := copy(s,i+1,length(s));

  
:= pos(',',s);

  if 
copy(s,0,i-1) = '1' then begin///Если данные с первого канала
  
Edit4.Text := copy(s,0,i-1);

  
s:=StringReplace(s,'#13#10',' ',[rfReplaceAllrfIgnoreCase]);///Удаляем #13#10
  
Edit5.Text := copy(s,i+1,length(s));
  
:= copy(s,i+1,length(s));///Получаем данные АЦП

  
Vadc:=strtofloat(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
Изображения
Тип файла: jpg Ошибка.jpg (60.7 Кбайт, 2 просмотров)
Вложения
Тип файла: rar Test.rar (9.4 Кбайт, 0 просмотров)

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

Подскажите HELP!!!!!
Ответить с цитированием
  #24  
Старый 29.12.2011, 21:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я говорил, поставь пустые скобки (''), а у тебя:
Код:
  s:=StringReplace(s,'#13#10',' ',[rfReplaceAll, rfIgnoreCase]);///Удаляем #13#10 
меняешь на пробел. Зачем?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #25  
Старый 30.12.2011, 12:07
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от angvelem
Я говорил, поставь пустые скобки (''), а у тебя:
Код:
  s:=StringReplace(s,'#13#10',' ',[rfReplaceAll, rfIgnoreCase]);///Удаляем #13#10 
меняешь на пробел. Зачем?
Проморгал.
Ну собственно исправил, а ошибка осталась (вложение).
Подключил модуль, нажал проверить, и получил ошибку.
Еще хочу попросить проверить порядок расчета, может что не в том порядке делаю....
Изображения
Тип файла: jpg Ошибка.jpg (72.2 Кбайт, 1 просмотров)

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

Убрал удаление переноса строки
Код HTML:
s:=StringReplace(s,'#13#10','',[rfReplaceAll, rfIgnoreCase]);///Удаляем #13#10
Думаю для программы расчета это не критично.
Пробую получить данные от устройства, получаю ошибку (прилагается). Тут опять получается ошибка в типах данных.
Изображения
Тип файла: jpg Ошибка-1.jpg (15.1 Кбайт, 2 просмотров)
Ответить с цитированием
  #27  
Старый 30.12.2011, 13:29
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Тут не с типами проблема, а с их конвертацией. Функция StringReplace не поможет с удалением спецсимволов... Для удаления переноса строки юзай эту функцию
Ответить с цитированием
  #28  
Старый 30.12.2011, 13:55
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Цитата:
Сообщение от Nikitiy_II
Тут не с типами проблема, а с их конвертацией. Функция StringReplace не поможет с удалением спецсимволов... Для удаления переноса строки юзай эту функцию
Вы думаете что проблема все таки в спецсимволах.
Если я правильно понял пример на С+ там спецсимволы не удаляются
Пример на С+
PHP код:
// Входной аргумент - цифровое значение АЦП в диапазоне 0-1023
  
int ADC_Value  atoi(argv[1]);     
  
  
// Расчет напряжения АЦП в вольтах
  
double inVolt = (((double)ADC_Value)/1023.0)*5.09;  // 5.09 - см. Дополнения ниже
  
printf("InVolt: %f\r\n"inVolt);

  
// Расчет сопротивления терморезистора
  
double RT = (Rm*inVolt)/(5.0 inVolt);
  
printf("RT: %f\r\n"RT);

  
// Расчет температуры в градусах Цельсия
  
double Temper = (betta/(log(RT/R0) + betta/298.0)) - 273;
  
printf("Temperature: %f\r\n"Temper); 
Ответить с цитированием
  #29  
Старый 30.12.2011, 14:43
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Nikitiy_II в функции на которую Вы указали знаки переноса меняются на пробел. Значит мне в строке
Код HTML:
#10: Source^ := #32; #13: Source^ := #32;
вместо #32 оставить '';
Подскажите в каком месте, и как правильно в моем случае сделать вызов данной функции.
Я отыскал такой пример
PHP код:
function DeleteLineBreaks(const Sstring): string;
var
  
SourceSourceEndPChar;
begin
  Source 
:= Pointer(S);
  
SourceEnd := Source Length(S);
  while 
Source SourceEnd do
  
begin
    
case Sourceof
      
#10: Source^ := #32;
      #13: Source^ := #32;
    
end;
    
Inc(Source);
  
end;
  
Result := Trim(S);
end;

Вызов функции
Edit1
.Text := DeleteLineBreaks(Memo1.Text); 
Приходится воевать с устройством. Не пойму что не нравится проге.

Последний раз редактировалось fofka, 30.12.2011 в 18:00.
Ответить с цитированием
  #30  
Старый 30.12.2011, 19:49
Аватар для fofka
fofka fofka вне форума
Начинающий
 
Регистрация: 12.10.2008
Сообщения: 163
Репутация: -1588
По умолчанию

Всех с Новым Годом!!! Разобрался с устройством Jerome, заработал.
На этом форуме выложил проект. http://www.delphisources.ru/forum/sh...7000#post97000 Может кому сгодится

Последний раз редактировалось fofka, 03.01.2012 в 20:05.
Ответить с цитированием
Ответ


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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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