PDA

Просмотр полной версии : Макрос суммарного расхода



arelavv
02.06.2020, 08:23
Подскажите, как можно записать в макрос для панели СП310 формулу для расчета суммарного значения числа (расхода). В ПЛК это выглядит так:
VAR
tickTock: R_TRIG;
END_VAR


tickTock(CLK := TIME_TO_UDINT(TIME()) MOD 1000 > 500);


IF tickTock.Q THEN
a := a + QF1 / 3600;
END_IF
Заранее благодарен!!!

petera
02.06.2020, 23:52
Подскажите, как можно записать в макрос для панели СП310 формулу для расчета суммарного значения числа (расхода). В ПЛК это выглядит так:
VAR
tickTock: R_TRIG;
END_VAR


tickTock(CLK := TIME_TO_UDINT(TIME()) MOD 1000 > 500);


IF tickTock.Q THEN
a := a + QF1 / 3600;
END_IF
Заранее благодарен!!!



BOOL X, Y;
static BOOL XPrevios;
static float a = 0;
float QF1;

// DEBUG only!
*(float*)(PSW+300) = a;
QF1 = *(float*)(PSW+256);

// ALGORITM
X = GetPSBStatus(4);
Y = X & !XPrevios;
XPrevios = X;
if (Y) {
a = a + QF1/3600;
}

49421 49426

arelavv
03.06.2020, 13:45
Спасибо за сотрудничество!!!Буду пробовать...

petera
03.06.2020, 15:35
Спасибо за сотрудничество!!!Буду пробовать...

X = GetPSBStatus(4); // получить состояние системного бита PSB4 - импульсы (меандр) с периодом 1сек

Y = X & !XPrevios; // это R_TRIGGER
XPrevios = X; // ловит фронт бита X

А дальше как у Вас

arelavv
03.06.2020, 16:58
Опробовал все окей.
Осталось поместить в энергонезависимую память и на ФЛЭШ, но это я пожалуй попробую сам. Помнится это было рассмотрено на Форуме не один раз.

arelavv
03.06.2020, 17:05
Дальше привязал вместо панельки ввода регистр прибора, осталось сделать не стираемые после отключения панели значения, то бишь поместить в Э.Н.Память ну и придумать как сделать сброс на "0". чтобы число не выходило за заданную разрядность. Обычно дежурный КИП это делает раз в месяц. У меня это было сделано на ПЛК в ФБ. В СИ не умею поэтому и попросил помощи. Еще раз спасибо.

arelavv
03.06.2020, 17:07
Да!!!petera хотел спросить а почему //Debug only...

petera
03.06.2020, 17:41
Да!!!petera хотел спросить а почему //Debug only...

потому, что к основному алгоритму эти две строчки отношения не имеют
их назначение посмотреть работу макроса на экране.

arelavv
03.06.2020, 17:49
То что не имеют я понял, меня смутило слово Debug...ну это так для поддержания разговора...

petera
03.06.2020, 18:51
Не стираемые значения - будут в регистрах PFW500..501

BOOL X, Y;
static BOOL XPrevios;
static float a = 0;
float QF1;
static BOOL Init;

// DEBUG only!
*(float*)(PSW+300) = a;
QF1 = *(float*)(PSW+256);

//Firs run
if (!Init) {
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 500, 0, TYPE_DWORD, &DWord_2_Float(a));
Init = TRUE;
}
// ALGORITM
X = GetPSBStatus(4);
Y = X & !XPrevios;
XPrevios = X;
if (Y) {
a = a + QF1/3600;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 500, 0, TYPE_DWORD, Float_2_DWord(a));
}


ЗЫ

То что не имеют я понял, меня смутило слово Debug...ну это так для поддержания разговора...

Мои попытки как-то помочь в отладке макросов путем вывода диагностических сообщений на экран https://owen.ru/forum/showthread.php?t=26783&p=251022&viewfull=1#post251022

arelavv
04.06.2020, 08:07
Petera , благодарствую за помощь, с экономил мне несколько дней работы, ну тогда еще вопрос, а как обнулить значения в регистрах по мере надобности кнопкой?
Заранее благодарен Валерий

arelavv
04.06.2020, 08:44
Поигрался с панелькой выяснил - значения обнуляются после отключения панели...

arelavv
04.06.2020, 09:30
Прошу прощения значения пропадают в программе что я сам накропал... У Петеры все работает!!!Сейчас разберу ошибки

arelavv
04.06.2020, 09:39
Строчку пропустил с INIT=TRUE, ...

petera
04.06.2020, 10:16
Petera , благодарствую за помощь, с экономил мне несколько дней работы, ну тогда еще вопрос, а как обнулить значения в регистрах по мере надобности кнопкой?
Заранее благодарен Валерий

Назначаем кнопке бит управления, например PSB256, действие при нажатии - ВКЛ.

В макрос, перед вычислением расхода, добавляем строчки

if (GetPSBStatus(256)) { // получить состояние кнопки
a = 0;
Y = TRUE; // для того, чтобы досрочно "обнулить" энергонезависимое значение"
ResetPSB(256); // сбросить бит управления кнопки
}

49452

Только будет не совсем обнуление, а фактически сброс будет до текущего значения QF1/3600

arelavv
04.06.2020, 11:06
Этого вполне достаточно!!! Респект!!!