Форум программистов, компьютерный форум, киберфорум
Контроллеры PLC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 3
1

Система автоматического погодного регулирования

19.03.2016, 07:39. Показов 757. Ответов 5
Метки нет (Все метки)

Имеется рабочая программа для погодного регулирования с точностью 0,5 градуса. Но когда контроллер поддерживает целое значение температуры теплоносителя, например 50 гр., то точность становится 1 гр.: от 49,5 до 50,5 гр. Если поддерживается, например 50,5 гр. о точность становится 0,5 гр.: от 50,25 до 50,75 гр.
Где нужно подкорректировать программу чтобы точность поддержания температуры была 0,5 гр.?

Код
PROGRAM PLC_PRG
VAR
	ind_temp: INT;
	ton1,ton2: TON;
	df: DECODE_FLOAT;
	ust_temp: REAL;
	temp_pod_i: INT;
	first_start: BOOL := TRUE;
	(*old_mode: INT;
	old_pod_ust: INT;
	old_ust_temp_z: INT;*)
	temp_pod, ust_temp_f: REAL;
	temp_nv: REAL;
	delta: REAL;
	ind_temp1: REAL;
END_VAR
VAR RETAIN
	temp: ARRAY [0..78] OF REAL;
	(*mode_r: INT;
	pod_ust_r: INT;
	ust_temp_r: INT;*)
	NaprReg_r:REAL;
END_VAR

………………………………………………………………………………………………………………………………………………………………….


NaprReg := NaprReg_r;


IF first_start THEN
    (*  +8                        +7.5                         +7                    +6.5                      +6     *)
	temp[0] := 35;  temp[1] := 36;  temp[2] := 36;  temp[3] := 36;  temp[4] := 36;
    (* +5.5                        +5                         +4.5                     +4                  +3.5    *)
	temp[5] := 36;  temp[6] := 36;  temp[7] := 36;  temp[8] := 36;  temp[9] := 36.5;
    (*  +3                         +2.5                         +2                       +1.5                           +1     *)
	temp[10] := 37;  temp[11] := 37.5;  temp[12] := 38;  temp[13] := 38.5;  temp[14] := 39;
    (*  +0.5                         0                         -0.5                       -1                      -1.5       *)
	temp[15] := 39.5;  temp[16] := 40;  temp[17] := 40.5;  temp[18] := 41;  temp[19] := 41.5;
    (*  -2                          -2.5                       -3                        -3.5                          -4       *)
	temp[20] := 42;  temp[21] := 42.5;  temp[22] := 43;  temp[23] := 43.5;  temp[24] := 44;
    (*  -4.5                        -5                       -5.5                        -6                             -6.5     *)
	temp[25] := 44.5;  temp[26] := 45;  temp[27] := 45.5;  temp[28] := 46;  temp[29] := 46.5;
   (*  -7                          -7.5                       -8                        -8.5                          -9       *)
	temp[30] := 47;  temp[31] := 47.5;  temp[32] := 48;  temp[33] := 48.5;  temp[34] := 49;
   (*  -9.5                       -10                       -10.5                       -11                        -11.5        *)
	temp[35] := 49;  temp[36] := 49;  temp[37] := 49.5;  temp[38] := 50;  temp[39] := 50;
    (*  -12                       -12.5                       -13                  -13.5                            -14      *)
	temp[40] := 50;  temp[41] := 50.5;  temp[42] := 51;  temp[43] := 51;  temp[44] := 51;
    (*  -14.5                       -15                       -15.5                     -16                         -16.5       *)
	temp[45] := 51.5;  temp[46] := 52;  temp[47] := 52.5;  temp[48] := 53;  temp[49] := 53.5;
    (*  -17                         -17.5                         -18                       -18.5                    -19       *)
	temp[50] := 54;  temp[51] := 54.5;  temp[52] := 55;  temp[53] := 55.5;  temp[54] := 56;
    (*  -19.5                         -20                         -20.5                       -21                      -21.5     *)
	temp[55] := 56.5;  temp[56] := 57;  temp[57] := 57.5;  temp[58] := 58;  temp[59] := 58.5;
    (*  -22                       -22.5                        -23                       -23.5                          -24       *)
	temp[60] := 59;  temp[61] := 59.5;  temp[62] := 60;  temp[63] := 60.5;  temp[64] := 61;
    (*  -24.5                       -25                       -25.5                       -26                           -26.5       *)
	temp[65] := 61.5;  temp[66] := 62;  temp[67] := 62.5;  temp[68] := 63;  temp[69] := 63.5;
   (*  -27                       -27.5                        -28                         -28.5                            -29       *)
	temp[70] := 64;  temp[71] := 64.5;  temp[72] := 65;  temp[73] := 65.5;  temp[74] := 66;
   (*  -29.5                       -30                       -30.5                     -31        *)
	temp[75] := 66.5;  temp[76] := 67;  temp[77] := 67.5;  temp[78] := 68;




IF NaprReg=0.0 THEN
		NaprReg := 0.5;
	END_IF;
	first_start := FALSE;
END_IF;



df( VALUE:=temp_pod_d, DEF_VALUE:= temp_pod);
CASE df._ERR OF
	12:  temp_pod_s := 2000; (* кз *)
	13:  temp_pod_s := 2001; (*обрыв *)
	6,7,8,9,10,11,14,15: temp_pod_s := 2002; (*ошибка контроллера *)
	ELSE
		temp_pod_s := REAL_TO_INT(df.OUT_VALUE*10);
		temp_pod := temp_pod_d;
END_CASE;

df( VALUE:=temp_nv_d, DEF_VALUE:=temp_nv);
CASE df._ERR OF
	12: temp_nv_s := 2000; (* кз *)
	13: temp_nv_s := 2001; (*обрыв *)
	6,7,8,9,10,11,14,15: temp_nv_s := 2002; (*ошибка контроллера *)
	ELSE
		temp_nv_s := REAL_TO_INT((df.OUT_VALUE+50.0)*10);
		temp_nv := temp_nv_d;
END_CASE;

ind_temp1 := temp_nv;
ind_temp := 16 - REAL_TO_INT(ind_temp1*2);
IF ind_temp < 0 THEN
	ind_temp := 0;
ELSIF  ind_temp > 78 THEN
	ind_temp := 78;
END_IF;

IF mode = 1 THEN
	ust_temp := temp[ind_temp]+pod_ust;
ELSE
	ust_temp := ust_temp_z;
END_IF;


temp_pod_i := REAL_TO_INT(temp_pod);
ust_temp_f := (ust_temp);
ton1.PT := t#10m; ton2.PT := t#10s;
ton1(in :=TRUE); ton2(in :=TRUE);
IF  ton1.ET >t#30s THEN
	IF (temp_pod_i >ust_temp) AND (temp_pod_s <2000) AND ((temp_nv_s<2000) OR (mode=0))  THEN
		delta :=(temp_pod - ust_temp_f)/500;
		NaprReg := NaprReg +delta;
		IF NaprReg > 0.90 THEN NaprReg := 0.90; END_IF;
	END_IF;
	IF (temp_pod_i <ust_temp) AND (temp_pod_s <2000) AND ((temp_nv_s<2000) OR (mode=0))  THEN
		delta :=(ust_temp_f - temp_pod)/500 ;
		NaprReg := NaprReg -delta;
		IF NaprReg < 0.0 THEN NaprReg := 0.0; END_IF;
	END_IF;
	ton1(in :=FALSE);
END_IF;

NaprReg_r := NaprReg;
napr_s :=REAL_TO_INT( NaprReg *1000);

IF  ton2.ET >t#400ms THEN
	ton2(in :=FALSE);
	ClearScreen(0);
	SetWorkScreen(0);

	ShowString(0,0,0,'Тнв=');
	CASE temp_nv_s OF
		2000: ShowString(0,4,0,'КЗ   ');
		2001: ShowString(0,4,0,'Обр  ');
		2002: ShowString(0,4,0,'Ош.  ');
		ELSE
	 		ShowReal(0, 4, 0, '%3.1f',temp_nv);
	END_CASE;
	ShowString(0,9,0,'Тп=');
	CASE temp_pod_s OF
		2000: ShowString(0,12,0,'КЗ   ');
		2001: ShowString(0,12,0,'Обр  ');
		2002: ShowString(0,13,0,'Ош.  ');
		ELSE
	 		ShowReal(0, 12, 0, '%3.1f',temp_pod);
	END_CASE;
	ShowString(0,0,1,'Uуп='); ShowReal(0, 4, 1, '%4.2f',NaprReg*10);
END_IF;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2016, 07:39
Ответы с готовыми решениями:

Cтруктурная схема системы автоматического регулирования вращения коллекторного двигателя
Разработать структурную схему систему автоматического регулирования коллекторным двигателем, в...

Создание модели автоматического регулирования газового котла. Все необходимо выполнить в SciLab
Необходимо составить модель автоматического регулирования температуры воды газового котла...

Разработка агоритма расчёта интегрального показателя качества регулирования замкнутой системы автоматического управления
Помогите понять само задание, если сможете решить буду благодарен. Заранее спасибо. ТЕМА...

Система автоматического полива
Привет всем! В этом году заканчиваю бакалавра и взял на диплом тему &quot;система автоматического...

__________________
5
Модератор
3331 / 2115 / 343
Регистрация: 13.01.2012
Сообщений: 8,234
19.03.2016, 08:23 2
Выделите в своем коде строки в которых происходит формирование уставки или регулирующего воздействия для регулятора и разговор станет предметным. Тот код который выложен сейчас сложен для понимания для человека не имеющего отношения именно к вашей системе.
0
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 3
19.03.2016, 10:24  [ТС] 3
Код
ind_temp1 := temp_nv;
ind_temp := 16 - REAL_TO_INT(ind_temp1*2);
IF ind_temp < 0 THEN
    ind_temp := 0;
ELSIF  ind_temp > 78 THEN
    ind_temp := 78;
END_IF;
 
IF mode = 1 THEN
    ust_temp := temp[ind_temp]+pod_ust;
ELSE
    ust_temp := ust_temp_z;
END_IF;
0
Модератор
3331 / 2115 / 343
Регистрация: 13.01.2012
Сообщений: 8,234
19.03.2016, 11:44 4
Весьма необычный блок кода (лично я не смог понять где тут уставка или воздействие). Логически поразмыслив можно прийти к выводу что описанные чудеса могут быть связаны либо с приведением типа либо с умножением на два.

Добавлено через 2 минуты
Хотя и то и то происходит при вычислении индекса... Значит если индекс верный значит в таблице шлак
0
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 3
19.03.2016, 14:50  [ТС] 5
Я не программист. Когда составлялась программа мне коротко объяснили что обозначают надписи в программе. Поэтому я и задаю вопрос на форуме. Программист который делал всё это уехал жить в КНДР.
0
6 / 6 / 0
Регистрация: 26.12.2013
Сообщений: 80
20.03.2016, 10:59 6
У Вас есть ощущение что виноват в погрешности код? Чуть подколдовать и нет погрешности?
Код без комментариев - плохой тон.
Написано достаточно понятно, но так промышленные коды не пишут.
Чтоб сделать устройство под Ваши требования допустите что код будет переписан.
Следовательно прям тут, на форуме, объявите бюджет мероприятия.
Если это будет сумма сопоставимая с теми трудозатратами, которые необходимы - Вы найдете человека.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2016, 10:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Система автоматического заполнения анкеты
Собственно нужна помощь в разработке Системы автоматического заполнения анкеты в формате MS Excel....

Система автоматического экономного освещения.
Добрый день. Прежде чем начать, скажу как на духу, я полный ноль в схемотехнике/электротехнике....

Статическая система автоматического управления
Помогите пожалуйста с вопросом, препод запарил) Вопрос: почему внешние статические характеристики...

Система автоматического управления следящим электроприводом
Помогите пожалуйста разобрать схему.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.