This is topic -за-сутки-месяц-год- in forum Языки программирования (IL/FBD) / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/11/t/000014.html

Posted by CONSAT (Участник № / Member № 51) on :
 
Необходимо вычислять сумму каналов за сутки месяц и год

Прицип работы
чу сумируем значения канала за 24 часа
в выходном канале накапливаются(суммируются) значения до 24 часов и передаются
в седующую FBD программу которая суммирует за МЕСЯЦ и результат передается в
седующую FBD программу которая суммирует за ГОД.

Входной канал - усредняет в течении часа!

Автономная отладка происходит нормально а при реальной работе
в блоке "И" при наступлении нулей (условие обнуления)- на блоке умножения
не прописывается ноль...

Где в программе наши ошибки?
Возможно ли реализовать поставленую задачу более проще?

Ниже 3 FBD-программы :
- Swod-KCc.frm --------------------------------------
(* ---- *)
(* *)
FUNCTION_BLOCK Swod-KCc

VAR_IN_OUT
IN2_4 : REAL;
(* -їюф ё +711 *)
SUM_3 : REAL;
(* -_їюф

*)
IB4_1 : REAL;
END_VAR

VAR_CONSTANT
END_VAR

VAR
OR_1 : REAL;
SEC_0 : REAL;
MIN_0 : REAL;
HR_0 : REAL;
MUL_2 : REAL;
MUL_4 : REAL;

END_VAR

TIME(0,SEC_0,MIN_0,HR_0);
OR_1 := OR(0,SEC_0,MIN_0,HR_0,IB4_1);
MUL_4 := MUL(0,OR_1,IN2_4);
MUL_2 := MUL(0,OR_1,SUM_3);
SUM_3 := ADD2(0,MUL_2,MUL_4);

FUNCTION_BLOCK_END
-------------------------------------------------------

- Swod-KCм.frm --------------------------------------
(* ---- *)
(* *)
FUNCTION_BLOCK Swod-KCь

VAR_IN_OUT
IN2_4 : REAL;
(* -їюф ё +711 *)
SUM_3 : REAL;
(* -_їюф

*)
END_VAR

VAR_CONSTANT
IN2_6 : REAL := 1;
END_VAR

VAR
OR_1 : REAL;
SEC_0 : REAL;
MIN_0 : REAL;
HR_0 : REAL;
MUL_2 : REAL;
DAY_5 : REAL;
MON_5 : REAL;
YR_5 : REAL;
MUL_4 : REAL;
EQ_6 : USINT;

END_VAR

TIME(0,SEC_0,MIN_0,HR_0);
DATE(0,DAY_5,MON_5,YR_5);
EQ_6 := EQ(0,DAY_5,IN2_6);
OR_1 := OR(0,SEC_0,MIN_0,HR_0,EQ_6);
MUL_4 := MUL(0,OR_1,IN2_4);
MUL_2 := MUL(0,OR_1,SUM_3);
SUM_3 := ADD2(0,MUL_2,MUL_4);

FUNCTION_BLOCK_END
-------------------------------------------------------

- Swod-KCг.frm --------------------------------------
(* ---- *)
(* *)
FUNCTION_BLOCK Swod-KCу

VAR_IN_OUT
IN2_4 : REAL;
(* -їюф ё +711 *)
SUM_3 : REAL;
(* -_їюф

*)
END_VAR

VAR_CONSTANT
IN2_6 : REAL := 1;
END_VAR

VAR
OR_1 : REAL;
SEC_0 : REAL;
MIN_0 : REAL;
HR_0 : REAL;
MUL_2 : REAL;
DAY_5 : REAL;
MON_5 : REAL;
YR_5 : REAL;
MUL_4 : REAL;
EQ_6 : USINT;

END_VAR

TIME(0,SEC_0,MIN_0,HR_0);
DATE(0,DAY_5,MON_5,YR_5);
EQ_6 := EQ(0,MON_5,IN2_6);
OR_1 := OR(0,SEC_0,MIN_0,HR_0,EQ_6);
MUL_4 := MUL(0,OR_1,IN2_4);
MUL_2 := MUL(0,OR_1,SUM_3);
SUM_3 := ADD2(0,MUL_2,MUL_4);

FUNCTION_BLOCK_END
-------------------------------------------------------
 


Posted by Wizard (Участник № / Member № 109) on :
 
Среднее значение канала можно считать используя подтип КАНАЛ->Среднее. В настройке TIME задаётся время, за которое надо усреднять значение(1минута-1год). Однако есть небольшая тонкость-усреднённое значение обновляется только в 00 секунд и во время работы нельзя переводить время.
 
Posted by CONSAT (Участник № / Member № 51) on :
 
Именно этот канал на вход мы и подаем (усреднение за час)...
Конечно понятно, что если проект был перезапущен, мы теряем усреднение канала за то время, когда он простаивал.
Мы еще поставили параметр проекта "подчитывать при старте..."

Проблема в том, что при ручной проверке (усреднять за минуту) - все OK. А реально - нет сброса в ноль!! :-(((.

P.S. А как обратно ввести в проект *.frm в FBD????
 


Posted by Wizard (Участник № / Member № 109) on :
 
Для обнуления значения я написал FBD-программу. Обнуление происходит по заданному времени.Для этого использовались блоки time,==,sel. Если нужно могу выслать директом(нужен ваш email)в виде *.crm и кратким описанием.
Насколько мне известно, файлы с расширением *.frm вставить нельзя.
 
Posted by Pentagon (Участник № / Member № 74) on :
 
Мы уже достаточно намучились [Безумие / Mad]
Просим Вас Wizard выслать нам проект в котором:
Есть минимум 5 каналов
1й - изменяется по любому закону
2й - промежуточный для среднего за час
3й - среднее за сутки
4й - среднее за месяц
5й - .. год

Канал типа КАНАЛ->Среднее->1год НЕ ПОДХОДИТ так как он появится по истечению
целого года! А нам нужно видеть текущее среднее к примеру да 3 месяца. В конце года выдать отчет за текущий год и заново считать на следующий год. [Недоумение / Confused]

Наш E-mail: consat@zp.ukrtel.net
В ответ мы сразу вышлем наш проект с описаниями.... [Пдмигивание / Wink]

ЗЫ: Ну не позволяет форум увидеть email и темболее выложить файл (картинку, архив проекта) [Улыбка / Smile] [Неодобрение / Frown]
 
Posted by CONSAT (Участник № / Member № 51) on :
 
Новая прблема!
Необходимо производит усреднение параметров и дальнейше их суммирование.
При этом накапливаемые значения (суммирующие) должны выдаваться в канал
после каждого своего изменения.

Не происходит обнуление каналов, производящие суммирование
усредненных значений за сутки, месяц, год.

Направляем Вам проект с данными: FBD - программы и привязка их к каналам:

канал "1"- это канал опрашивается 1 раз в 20 секунд;
srednee - произодит расчет среднего значения канала 1 за 1 час и
выдает результат 1 раз в час;
summa_sutki - производит суммирование значений канала srednee,
результат получаем 1 раз в час, обнуление происходит в конце суток;
summa_mec - производит суммирование значений канала srednee,
результат получаем 1 раз в час, обнуление происходит в конце месяца;
summa_god - производит суммирование значений канала srednee,
результат получаем 1 раз в час, обнуление происходит в конце года.

В процессе автономной отладки - все нормально, нормально и при периоде
опроса каналов = 1сек. Как только программа привязана
к каналам с периодами опроса 1 час обнуление не происходит.
В чем наша недоработка?

Пример, как должен происходит расчет и выдача параметров в канал:

1час 2час ... 0:00 ..... конец месяца ......конец года
канал 1 2,13,4,80,...6 ......... ...... ......... ........
srednee 140 138 89 130 0(67)
summa_sutki 140 278 0(89) 0(130) 0(67)
summa_mec 140 278 1345 0(130) 0(67)
summa_god 140 278 1345 767890 0(67)

Проект не вашем ящике.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Мы рассмотрели ваш проект.
Первое предположение состоит в том, что у Вас, безусловно, будет отставание в результатах, получаемых в каналах суммирования, на 1 цикл их обработки. Если их период обработки равен 1 секунде - на 1 секунду, если период равен 1 часу - на 1 час. Т.е., обнуления следует ждать не в 00:00:00, а в 01:00:00.

Связано это с тем, что Вы привязали FBD в процедуре УПРАВЛЕНИЕ каналов INPUT. У этих каналов сначала осуществляется преобразование ВХОДА в РЕАЛЬНОЕ, а затем просчитывается процедура УПРАВЛЕНИЕ, в которой у Вас присваивается значение атрибуту ВХОД.

Возможно, что, если Вы переведете эти процедуры в ТРАНСЛЯЦИЮ и выходы FBD передадите в атрибут РЕАЛЬНОЕ, ПРОБЛЕМА БУДЕТ СНЯТА.

Но я хотел бы предложить Вам иное,с моей точки зрения, более простое решение.

В качестве каналов суммирования возьмите стандартные каналы подтипа КАНАЛ_СУММА с соответствующими периодами суммирования (сутки/месяц/год) и периодами обработки 1 час. Их атрибуты ВЫХОД как раз и будут сумматорами с теми функциями, которые Вам нужны. А в РЕАЛЬНЫХ у них будут значения за предыдущие сутки/месяц/год.

Атрибуты ВЫХОД доступны и в математике, и в графике. Если же Вам необходимо именно эти значения архивировать, тогда создайте для каждого из них еще по одному каналу подтипа КАНАЛ_КОПИРОВАТЬ с настройками на атрибут ВЫХОД соответстующего канала суммирования.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2