Просмотр полной версии : Накопительный счетчик НА ПЛК100.30.M02
Добрый день! Пишу программу учета тепла на CFC с использованием ФБ HEAT_METER из библиотеки oscat building и ФБ FLOW_METER из библиотеки oscat basic. Все бы хорошо, но после сброса питания накопительное значение джоулей в ФБ HEAT_METER сбрасывается на 0. Как мне сделать какой либо накопительный счетчик, в который записывается значение выхода ФБ HEAT_METER, которое не обнуляется при обнулении входа, сбросе питания, и которое продолжает накапливать цифру, прибавлять к остаточному значению данные с выхода HEAT_METER.
То есть накрутил счетчик тепла на выходе ФБ HEAT_METER 300 000 джоулей, эти 300 000 джоулей так же на выходе отдельного счетчика, при сбросе питания ФБ HEAT_METER свой счетчик обнуляет и начинает считать заново, и нужно чтобы на отдельном счетчике цифра продолжала расти, складывая свою остаточную с данными счетчика ФБ HEAT_METER.
Надеюсь понятно объяснил. Всю голову сломал, не могу понять как это сделать.
Ну вот примерно так:
43279
Ну вот примерно так:
43279
Так..прописал это дело себе в программу, пока что оно удваивает значение на выходе и после сброса питания не сохраняется... что не так?
В моем блоке семантическая ошибка. Должно быть вот так
Trig(CLK:=Tact , Q=> );
IF Trig.Q
THEN OldHeat:=InHeat-OldHeat; (**)
Heat:=Heat+OldHeat; (**)
END_IF;
OutHeat:=Heat; (**)
Иначе трансляция сохраненных значений будет только по сигналу Tact.
На счет удвоения не совсем понятно. В приложенном файле не нашел переменной enb.
И да, я постоянно путаю R_TRIG и F_TRIG. Сорри. В данной задаче должен быть R_TRIG
Кроме того, намудрил с алгоритмом подсчета.
Исправленный вариант.
Иначе трансляция сохраненных значений будет только по сигналу Tact.
На счет удвоения не совсем понятно. В приложенном файле не нашел переменной enb.
И да, я постоянно путаю R_TRIG и F_TRIG. Сорри. В данной задаче должен быть R_TRIG[/QUOTE]
Поправил все. Но ведь в любом случае после восстановления питания на выходе OutHeat должно быть оставшееся значение, так? А у меня 0..
Выше приложил исправленный вариант, добавлена еще одна переменная.
Переменная Heat точно сделана глобальной и ретайн? После перезаливки программы ретайн слетает.
[QUOTE=Sulfur;308298]Выше приложил исправленный вариант, добавлена еще одна переменная.
А как часто в такт надо сигнал гнать?
Выше приложил исправленный вариант, добавлена еще одна переменная.
Переменная Heat точно сделана глобальной и ретайн? После перезаливки программы ретайн слетает.
Вот теперь работает! Буду тестировать) Спасибо..поклон до земли!
А как часто в такт надо сигнал гнать?
Можно хоть секундный BLINK на вход повесить, физическая запись во внутренний ретайн все равно будет выполнена в момент снятия питания с ПЛК.
В принципе можно убрать Tact и сделать обновление Heat по изменению InHeat:
IF OldHeat <> InHeat THEN далее по тексту. Тогда и триггер R_TRIG не нужен.
Я бы сделал без БЛИНКа
43296
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot