![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет! Прошу помочь с написанием кода имитирующего опрос датчиков реактора в реальном времени. На форме при нажатии кнопки пуск должен быть показатель времени идущий от 0 сек который увеличивается до нажатия кнопки стоп по 1 секунде, показатель температура, показатель давление (эти два показателя - рандомные числа лежащие в определенном интервале могут сначала увеличиваться то потом уменьшаться типо если растет темпер то растет давление, числа показываются на форме в реальном времени) При нажатии кнопки стоп, надо чтобы посчитались средняя температура, среднее давление за прошедшее время и вывелись результаты на туже форму вместе с показателем затраченного времени И после этого отобразилось на графике по Y - средняя температура и среднее давление а по Х - время эксперимента.
|
|
#2
|
|||
|
|||
|
Ну и в чем проблема?
Создаешь таймер, логическую переменную для флага и массив для сохранения значений давления и температуры. Если очень хочется сделать совсем правдоподобно, то пишем функцию Давление от Температуры. Код:
type
TValuePair = record
Temp : Double;
Press : Double;
end;
TForm1 = class(TForm)
Timer1 : TTimer;
btStart : TButton;
btStop : TButton;
private
Vals : Array Of TValuePair;
logging : Boolean;
function P(T : Double) : Double;
end;
// Вычислдение давления от температуры
// Для примера P = (T / (T+200))*15
procedure TForm1.P(T : Double) : Double;
begin
Result := (T / (T+200))*15;
end;
procedure TForm1.Timer1Timer(Sender : TObject);
var
d : Double;
begin
if logging then
begin
SetLength(Vals,Length(Vals)+1);
d := Random *10 -5; // изменение температуры от -5 до 5
Vals[High(Vals)].Temp := Vals[High(Vals)-1] + d;
Vals[High(Vals)].Press := P(Vals[High(Vals)].Temp);
end;
end;
procedure TForm1.btStartClick(Sender : TObject);
begin
SetLength(Vals,1);
Vals[0].Temp := Random * 100; // нач. температура от 0 до 100
Vals[0].Press := P(Vals[0].Temp);
logging := true;
end;
procedure TForm1.btStopClick(Sender : TObject);
var
I : Integer;
t_avg, p_avg : Double;
begin
logging := False;
// теперь считаем среднее значения
t_avg := 0;
p_avg := 0;
For I := Low(Vals) To High(Vals) Do
Begin
t_avg := t_avg + Vals[i].Temp;
p_avg := p_avg + Vals[i].Press;
End;
t_avg := t_avg / Length(Vals);
p_avg := p_avg / Length(Vals);
ShowMessage(Format('Кол-во отсчетов: %d'#13#10'Средне значение температуры: %.3f'#13#10'Среднее значение давления: %.3f',[Length(Vals),t_avg,p_avg]));
end; |
|
#3
|
|||
|
|||
|
Vals[High(Vals)].Temp := Vals[High(Vals)-1] + d;
ошибка [Pascal Error] Unit1.pas(49): E2015 Operator not applicable to this operand type |
|
#4
|
|||
|
|||
|
Сорь, недопечатал:
Код:
Vals[High(Vals)].Temp := Vals[High(Vals)-1].Temp + d; |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Enforcement (14.01.2020)
| ||
|
#5
|
|||
|
|||
|
допер уже, спасибо огромное) кинь цифры телефона скину благодарность
|
|
#6
|
|||
|
|||
|
не сможешь
номер +1(...) |