Регистрация: 14.12.2014
Сообщений: 6
|
Опрос датчиков. Не могу построить графики, постоянно появляются какие-то проблемы.
В общем задали следующее задание:
Цитата:
При разработке программ источником данных является программная модель объекта управления.
На объекте установлены датчики, осуществляющие измерение некоторых физических переменных: температуры, давления, скорости, расхода и др. Каждый датчик имеет свой уникальный номер, по которому они могут отличаться друг от друга. Вместе с аппаратурой связи с вычислительной системой датчик образует измерительный канал, которому можно приписать тот же номер, что и у датчика. Для того, чтобы указать, с помощью какого датчика требуется в данный момент произвести измерение, надо назвать номер этого датчика и получить измеренное значение.
Разработчик программы имеет возможность из своей программы инициировать измерения или управление объектом. Для реализации измерения по некоторому каналу в программе предусмотреть вызов процедуры OPROS(KAN_IZM, X, WSPOM), где KAN_IZM – переменная, в которой сохраняется номер датчика, от которого требуется получить измерение. После завершения выполнения процедуры и возврата управления в вызвавшую ее программу измеренное значение будет размещено в переменной, указанной на втором месте в списке фактических параметров процедуры (в примере – в переменной X). Третий параметр – WSPOM – вспомогательный, который должен быть описан в программе и использоваться только при обращении к процедурам измерения и управления.
Для реализации подачи управляющего воздействия на объект в программе должна быть вызвана процедура UPRAV(KAN_UPR, U, WSPOM), где KAN_UPR – переменная, которой до обращения к процедуре должно быть присвоено значение, равное номеру устройства управления, которое должно использоваться для воздействия на объект, U – переменная, которой также до обращения к процедуре должно быть присвоено значение управляющего воздействия, подаваемого на объект, WSPOM – тот же, что и в процедуре OPROS.
Переменные KAN_IZM и KAN_UPR должны быть описаны в программе как INTEGER, а переменные X и U – как REAL.
Процедуры OPROS, UPRAV находятся в модуле INTRFC.TPU, который должен быть включен в программу при ее построении. При этом программа должна быть построена по следующему шаблону:
Program A;
Uses INTRFC;
Var KAN_IZM, KAN_UPR: INTEGER;
X,U : REAL;
WSPOM : MASSIV;
. . . . . . . . . . . . . . . .
UPRAV(KAN_UPR, U, WSPOM);
. . . . . . . . . . . . . . . .
OPROS(KAN_IZM, X, WSPOM);
. . . . . . . . . . . . . . . . .
Задание: разработать программу, осуществляющую опрос датчиков и управление техническим объектом по заданному закону.
Исходные данные: M1, M2 – номера опрашиваемых датчиков, L – номер канала управления, J – номер канала измерения отклика, N – число моментов выработки управляющих воздействий, B1, B2, B3, B4, B5, B6 – коэффициенты, определяющие закон управления, Yжел – желаемое значение отклика объекта.
Алгоритм:
1.Ввести исходные данные : M1, M2, L, J, N, B1, B2, B3, B4, B5, B6, Yжел.
2.Произвести измерения с помощью датчиков M1 и M2, запомнить измеренные значения X1[1], X2[1].
3.Вычислить значение управляющего воздействия по формуле
U[1] = B1+B2*X1[1]+B3*ln( Yжел +B4+B5*eB6*X2[1]) .
4.Подать управляющее воздействие U[1] на объект по каналу управления с номером L.
5.Произвести измерение с помощью датчика с номером J, запомнить измеренное значение Y[1].
6.Вывести на экран значения X1[1], X2[1], U[1], Y[1].
7.Повторить операции 2-6 N раз, получая, соответственно, X1[2], X2[2], U[2], Y[2],….,X1[N], X2[N], U[N], Y[N].
8.По накопленным данным вычислить и вывести на экран значение оценки качества управления
Q=((Y[1]-Yжел)2+(Y[2]-Yжел)2+…+(Y[N]-Yжел)2 )/N.
Исследовательская часть: изучить, как меняется значение оценки качества управления Q в зависимости от одного из коэффициентов Bi. Подобрать значение Bi так, чтобы оценка Q была возможно меньшей.
(Преподаватель сказал что необходимо построить график)
|
В общем проблема возникает в самой исследовательской части, программа просто зависает когда проходит этот цикл, а иначе я просто не понимаю как сделать график:
Код:
b[2]:=-0.5;
repeat
for i:=1 to N do
begin
OPROS(M1, B2X1[i], VS);
OPROS(M2, B2X2[i], VS);
UB2[i]:=B[1]+B[2]*B2X1[i]+B[3]*Ln(YJEL+B[4]+B[5]*exp(B[6]*B2X2[i]));
end;
for i:=1 to N do
begin
UPRAV (L, UB2[i], VS);
OPROS (J, YB2[i], VS);
end;
for i:=1 to n do
QB2:=QB2+(exp(ln(abs(YB2[i]-YJEL))*2))/N;
series1.AddXY(B[2],qb2);
b[2]:=b[2]+0.1;
until (b2[2]=1.5);
Программа, которую написал, во вложении: на rghost, потому что сюда не влезла. Спасибо за внимание, надеюсь на вашу помощь!
Да еще возможно стоит добавить: для проверки необходимо вводить такие числа типа (1 6 7 31 любое 100) (коэффициенты такие чтоб попасть в диапазон -70 до 70: -10 0,5 0,05 -10 10 10) вводится все по табулятору
Последний раз редактировалось IvanNaymov; 01.06.2015 в 19:18.
|