Имеется необходимость в остановке программы в любом её месте,с дальнейшим продолжением. Т.е. время шага должно остановиться, а после снятия паузы продолжиться. С SFCPause время шага начинает идти с нуля, что не устраивает условиям.
Имеется необходимость в остановке программы в любом её месте,с дальнейшим продолжением. Т.е. время шага должно остановиться, а после снятия паузы продолжиться. С SFCPause время шага начинает идти с нуля, что не устраивает условиям.
Не знаю, что за программа у Вас, но возможно проще к примеру снимать питание с выходных цепей.
Будет работать в случае, если в устройстве используете датчики.
Программа мойки резервуаров. Переключение насосов и клапанов происходит по времени (жесткая привязка), датчиков ОС нет. Необходимо по паузе выключать все устройства (с этим проблем нет) и останавливать время шага, после снятия паузы время шага должно продолжиться.
Вся программа на упрощенном SFC (не МЭК) состоит из шагов и условий перехода между шагами.
Я подозреваю, что в основном Ваша программв реализует некотторый алгоритм
Шаг_N--> включить то-то, выключить то-то, если время активности шага > заданного то, перейти на следующий. И так далее.
И скорей всего Вы используете простое условие для перехода типа _timeШаг_N > T1
А кто Вам мешает вместо такого простого условия перехода дважды щелкнуть мышкой на горизонтальной черточке и в качестве условия перехода написать фрагмент кода на IL, LD, FBD или ST, с таймером с возможностью остановки и продолжения работы, который и будет запоминать текущее время работы этого шага?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Либо создать параллельную ветвь, в которой условие будет отслеживание нажатия "пауза"
petera, Вы всё правильно поняли, через определённые промежутки времени нужно что-то включить-выключить, но во время этого промежутка необходимо отслеживать состояние аварийного выключателя и если он активен, то выключить кое-какие выхода и остановить время шага. Я при входе в шаг включаю-выключаю что нужно, в шаге проверяю аварию и предпринимаю действия по ней, а промежуток времени задаю минимальным временем шага.
Можно навставлять переменных типа TIME в качестве временных атрибутов каждого шага и уменьшать их, а потом сбрасывать по изменению SFCPause. Но я бы выкинул SFC и написал всё одним большим CASE.
Собственно, так я и сделал когда от меня потребовали возможность вставать на паузу в совершенно любой момент и учитывать время в отсутствие питания на контроллере. Я переписал таймер TON для своего проекта, чтобы он использовал вместо функции TIME мою PTIME (стало возможным останавливать, перематывать и вообще пускать время вспять — для отладки это гипер-офигенно), и гонял этот таймер в хвост и в гриву в большом кейсе. С SFC такого естественным способом не проделаешь — только городить огород с атрибутами каждого шага.
Последний раз редактировалось Yegor; 05.06.2013 в 08:36.