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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2011, 01:54   #11
SonicBob
Форумчанин
 
Регистрация: 30.05.2011
Сообщений: 133
По умолчанию

появилась мысль а что если все 4 блока (перевод,выкидывание пустых строк(мб заменить убрать а просто заменить тримом после объединения?), объединение, выкидывание лишнего из строки) записать в функции а на в кнопке просто будет использование этих функций последовательно, можно ли запихать в функцию циклы?и ускорит ли это работу?
SonicBob вне форума Ответить с цитированием
Старый 28.08.2011, 17:28   #12
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

я бываю тут редко, в основном когда надо чуток отвлечься..
ну начнем по порядку..

Цитата:
а вот 3,4 проблемы - нас учили в универе что в поток и функции отдельные можно помещать только абстрактные уравнения которые работают с переменными в которых отдельно загоняются данные, вопрос как в поток загнать такую конструкцию как открытие порта,
3. имелось в виду сделать класс-поток, с событием OnRead и функцией Write
4. вы что то делаете с листборксами, что то с массивами и т.п. отдельный части, (как пример, сортировка, очистка, переносы и т.п.) сделайте отдельными процедурами-функциями, а не все подряд в одной функции, так и отлаживаться легче, и если у функций-процедур нормальное название то и понятно что оно должно делать и для чего предназначается.

Цитата:
надо увеличить буфер или сделать очистку по достижению 255 байт?
использовать динамический массив, размер задавать когда уже известно сколько байт накопилось в буфере, и после обработки уничтожать. (уменьшит производительность, но 1. вы ее не почувствуете, 2. однозначно примите все что надо, 3. научитесь работать с ним)

Цитата:
хорошо\плохо? тут как раз выскакивает вопрос а что будет если это будет работать с непрерывным поток(лавина) данных
решать вам..

далее..
если у вас работает на сохраненых данных, но при подключение класса для работы с com портом программа подвисает, не кажется ли вам что надо копать код класса com порта?
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 28.08.2011, 17:33   #13
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

есть хороший справочник drkb3.chm. поищите в Инете пригодиться.(сам иногда заглядываю туда)

так же читал разные статьи на http://www.delphikingdom.com
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 28.08.2011, 17:56   #14
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

в первый раз не обратил внимания на

Код:
  if  (not WriteFile(FPort, WriteBytes, SizeOf(WriteBytes), dwWrite, @FOverWrite))
  and (GetLastError <> ERROR_IO_PENDING) then
    raise EComPortError.Create('Error writing port ' + PortName);
SizeOf(WriteBytes) всегда при любых обстоятельствах будет равно 4 (при 32 битном компиляторе)
надеюсь сами догадаетесь почему.


по поводу класса для работы с com портом у мну много не лестных слов.
не совсем понятно, устройство работает у вас в синхронном режиме или асинхронном?

если в асинхронном то дожидайтесь записи в порт.
если в синхронном то на какой использовать POverlapped;


WaitForSingleObject(FOverRead.hEven t, INFINITE)
вы будете ждать до скончания века пока что то не запишется в com порт, спрашивается на какой тогда асинхронный режим? (да и вы не когда не сможете завершить поток при таком подходе) или у вас весы все время что то пишут в com порт?

почему то мне кажется что работа у вас происходит как запрос-ответ(хотя могу и ошибаться)

так же не могу сказать что произойдет когда поток будет ждать данных с порта, а в это время вы попытаетесь что то записать туда.
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 30.08.2011, 05:39   #15
SonicBob
Форумчанин
 
Регистрация: 30.05.2011
Сообщений: 133
По умолчанию

проблема снята

Последний раз редактировалось SonicBob; 30.08.2011 в 10:09.
SonicBob вне форума Ответить с цитированием
Старый 02.09.2011, 18:01   #16
SonicBob
Форумчанин
 
Регистрация: 30.05.2011
Сообщений: 133
По умолчанию

снятие данных работает как надо, перевод и построение тоже но есть 2 проблемы
1)жрет дикое количество памяти и проца, причем память с каждым проходом цикла все больше и больше
2)не получается сделать что б цикл срабатывал каждый раз как приходят данные

вот кусок кода который делает все преобразования, мы думает из за его косячности пропадает куча памяти
Код:
var ts,rs,i:integer;
w:string;
k:cardinal;
s1,s2:string; 
today : TDateTime;
begin
application.processmessages;
listbox5.Clear;
for ts:=0 to listbox1.Items.Count-1 do begin 
  for rs:=0 to 160 do begin                                                   
    if listbox1.Items[ts]=simvolucs2[rs] then
    if Trim(simvol[rs])<>'' then
    if (rs in [2..26]) then begin
    begin
    listbox5.Items.Add(simvol[rs]);                                        
    if listbox5.Count=8 then
      begin          
      application.processmessages;
      repeat
      s1:=(trim((listbox5.Items[0]+ listbox5.Items[1]+listbox5.Items[2]+listbox5.Items[3]+listbox5.Items[4]+
listbox5.Items[5]+listbox5.Items[6]+listbox5.Items[7]))) ;//да да я знаю это ппц
      listbox5.clear;
      until (listbox5.Count<=7);
      w:=stringreplace(s1,'.',',',[rfReplaceAll, rfIgnoreCase]); 
      Delete(w, 9, 10);
      s2:=w;
      listbox3.Items.Add(w +'  '+FormatDateTime('hh:nn:ss:zzz', Now));  
      Label21.Caption:= IntToStr(ListBox3.Items.Count);
      end;
       for i:=0 to listbox3.Count-1 do
        begin    
        Series1.addXY(Now,strtofloat(s2),'',clBlack);
       end;
    end;
  end;
end;
end;
end;
2 вопроса как избавится или свести к минимуму потребления памяти при каждом прогоне? и как сделать срабатывание по приходу данных?(они в лист бокс1 пишутся пока что)
SonicBob вне форума Ответить с цитированием
Старый 06.09.2011, 14:27   #17
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

Цитата:
2 вопроса как избавится или свести к минимуму потребления памяти при каждом прогоне? и как сделать срабатывание по приходу данных?(они в лист бокс1 пишутся пока что)
Память жрет возможно из за Series1..
вы туда все пихаете и пихаете

по поводу проца, жрет так же Series, и не совсем понятные циклы.

по поводу срабатывания по приходу, а как они попадают то в лист бокс?
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 06.09.2011, 15:51   #18
SonicBob
Форумчанин
 
Регистрация: 30.05.2011
Сообщений: 133
По умолчанию

да все жрётся из за графика, щас ищем способ избавиться от этой проблемы,
пытаемся сделать так что б при добавлении новой точки в лист 3 что б она добавлялась в график и при этом затирала первую, что то типа ленты полиграфа хотим получить в итоге, но не получается что б именно 1 пришла - 1 ушла, пока получается что график полностью перерисовывается и из за этого получается такой ппц, ни чего не читаемо с него,
циклы фигня все как надо там )
такой вопрос а можно ли сделать что б
1)прорисовывалась только видимая часть графика (всмысле что б когда пользователь двигал его то и график подрисовывался под новую область а струю затирал)
2)что б самая правая точка графика была всегда прямо на границе видимой области
и если можно то как?
SonicBob вне форума Ответить с цитированием
Старый 06.09.2011, 16:56   #19
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от SonicBob Посмотреть сообщение
1)прорисовывалась только видимая часть графика (всмысле что б когда пользователь двигал его то и график подрисовывался под новую область а струю затирал)
2)что б самая правая точка графика была всегда прямо на границе видимой области
и если можно то как?


1 и 2 взаимоисключающие. либо я вас не понял.
1. Series - это набор контрольных точек по которому строиться график, мною было замечено что строиться по индексу, т.е. отрисовывает первую точку потом вторую и т.д.
если у вас будут данные [x,y] 1[1,1] 2[2,2] 3[3,3] 4[1.5, 1.5] то он нарисует не понятно что, т.е. с точки 3 отрисует линию на точку 4 хотя это уже будет далеко не красиво(может у меня глючный компонент стоял, не знаю)

для того что бы сделать как вы хотите надо менять максимум и минимум оси, таким образом вы будете двигать график, но данные из series не куда не денутся.
2. то же самое, работайте с макс и мин оси
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 07.09.2011, 03:08   #20
SonicBob
Форумчанин
 
Регистрация: 30.05.2011
Сообщений: 133
По умолчанию

тут еще дело в том что мы точно знаем что такие графики возможны тк есть программа в которой график работаем именно так как хотим,но скопировать от туда нет возможности тк она на С а мы в его вабще не знаем
щас пока мучаем тчарт наткнулись на проблему что на оси Х(там должно быть время, на каждую точку 1 точка времени) всего 1 значение ровно по центру и если тронуть график оно исчезает
с чем такое связанно ? уже все настройки перекопали
SonicBob вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработать программу, которая строит график Функция y =Cos x. bajge Общие вопросы Delphi 2 16.06.2011 18:55
программа, которая считывает цепочку чисел и печатает наиболее длинную, монотонно возрастающую их подпосл alexb81 Помощь студентам 3 31.05.2011 14:03
Delphi, почему не строит график? xMass Помощь студентам 10 30.03.2009 20:32
Программа строит неправильный график xMass Помощь студентам 7 06.06.2008 19:04
Как считывать данные с COM,LPT порта и нарисовать график Sergiu Фриланс 2 22.12.2007 11:53