Чуть выше моё сообщение #2435, достаточно было прочитать. Есть 3 варианта.
Вид для печати
Вы здесь меняете не значение переменных, а значение входов. А я имел в виду такой метод изменения значения:
Вложение 62133
Вот он только в отладке работает
Юрий добрый день! Опять приходится вернуться к данному вопросу, программа большая и в режиме симуляции время таймеров бежит медленнее и с рывками, чем это можно видеть в стандарте (легкой программе). Программа записанная в приборе будет также себя вести медленнее и с рывками? или это просто тормоза ОЛ в режиме симуляции ?
Добрый день. Такой вопрос. Имеется ПР 200 и термоконтроллеры Termodat. Суть такая, на панели управления Termodat оператор выставляет необходимую уставку нагрева. Через определенное время установка не нужна, но полностью охлаждать ее нельзя. По этому нужно перевести ее в режим энергосбережения. Я это попробовал реализовать это с помощью блока SEL. Но получается не совсем то что хочется, при включении блока SEL новая уставка записывается в термоконтроллер, но при снятии сигнала с SEL старая уставка не возвращается. Если на термоконтроллере в ручную изменить уставку, то будет та которую поставили. Если бы был один термоконтроллер, то можно и поменять, а если их 10, то процедура мало приятная. Подскажите как можно реализовать, чтоб при отключении блока SEL возвращалась старая уставка? Сделал переменную "Опрос" при ее отключении все равно старая уставка не возвращается. Не совсем понял как работает для регистров "Запуск чтения" "Запуск записи" "Статус".
вообще непонятно, что вы хотите сделать. опишите обывательским текстом. не вдаваясь в программирование.
а кто сказал, что ранее переданное число должно вернуться? вам нужно сначала записать последнюю вставку термоклньроллера се переменную, потом сделатб сел. а за ним ещё один сел, где усьавка сама на себя зациклена, чтобы поле сел она там осталась. или используйте макрос selchi
В принципе я это так и представляю, пока не понял как это реализовать. Что за макрос selchi?
Александр SPB и bayk ребята, не прокатит ваш вариант, ни один, ни другой... Включите логику для начала...
Если посмотреть на картинку автора, то что мы видим? SEL вычитывает сетевую переменную из Термодата и как бы записывает ее туда же. Как только мы через SEL записали что-то новое, что произойдет с сетевой переменной? правильно, она станет новым значением. И для SEL она уже сетевая....
Вам надо при запуске программы где-то хранить уставку Термодата, которую ввели именно на нем в виде константы типа. И менять на ту, которую вы считаете энергосберегающей.
У вас в программе должна быть еще одна переменная, которая считывает и сохраняет уставку введенную оператором на Термодате...
з.ы. замкнутый круг :) как только мы из ПР200 заменили уставку в Термодате, ПР200 как-то должен знать, что уставка изменилась именно им а не просто пришла по сети из Термодата. Иначе мы так и "константу" будем менять кругами...
Нужна "защелка" какая-то, то есть смена переменной именно с экранной или же это смена переменной из сети....
1exan это легко, просто по чтению переменной, а так же, что эту переменную записали с ПР.
Тут изменение переменной при чтении из Термодата надо отвязать от управления со стороны ПР. То есть если переменная изменилась, а ПР сам ее не менял, то это уставка Оператора и ее хранить и на нее возвращаться. то есть ее надо хранить не как сетевую переменную, а как уставку, пришедшую из сети при условии что мы не сами ее туда записали
Все верно. Перед изменением уставки (режим энергосбережения задается с ПР) нужно сохранить предыдущее значение уставки, а затем вернуть ее обратно. Как не пойму:confused:
Александр SPB у вас есть параметр, который вы можете отслеживать - это запись переменной со стороны ПР, с экрана или программы.
По этому читая из сетевой переменной параметр, если это делали не вы (не с экрана и не из уставки программы) заносите ее в какую-то переменную и не трогаете, и возврат соответственно на нее. Если это делали вы, то не трогаете эту переменную.
Всем спасибо за ответы. Вечером доберусь до объекта, попробую.
Dimensy
В ПР прошивку сегодня не получилось залить. Попробовал в режиме симулятора там получается что "Уст раб" то же должна быть сетевой переменной, так как откуда получать данные о текущей уставке? В этом случае программа не работает. Или я что то не так делаю?
Нет, сетевая переменная там только уставка в самом регуляторе. Рабочая и энергосберегательная уставки - это энергонезависимые переменные, которые можно редактировать через экран ПР. Так же, если вы поменяете на регуляторе уставку, она автоматом изменит и одну из уставок на ПР (в зависимости от текущего режима)
Забудьте вы про SelChange как страшный сон, у него есть определенный недостаток, который вам всю кровь выпьет :) а именно то, что даже защелкнув на входе переменную, он не поменяет на нее после выхода, так как переменная не менялась последней....
Вот вам картинкой защелка просто на SEL-ах, ну поменяйте на float если надо...
Energo соответственно переменная экрана или программы.
Termo1 промежуточная для хранения последнего изменения из прибора, можно так же менять в программе перед выходом из сберегающего режима...
Но записав в Termodat в регистре чтения же изменится значение ?
Программа рабочая до того момента пока оператор при включенном энергосбережении не поменял уставку. После этого уставка перезаписалась на новую. Я сначала не поверил, проверил так и есть. Даже перезапуск ПР не вернул уставку на место, даже при том что она энергонезависимая. Проверил в симуляторе так и есть, при включенном энергосберегающем режиме при изменении сетевой переменной "Чтение уставки" происходит перезапись "Уст сбер".
По поводу огорода так бы сделал, но дискретный вход занят. Идет пуско-наладка и приходится режим энергосбережения для каждого Termodat подбирать экспериментально. А их 11 штук
Александр SPB а кто вам мешает добавить экранную переменную 0 или 1 вместо дискретного входа ?
Еще раз, SelChange является КОЛХОЗОМ изначально, когда Овен поломал начальное значение для сетевых переменных, так колхозом и осталось. этот макрос первоначально был сделан по просьбе из-за того, что Овен сломал вышеуказанное...
Ну и если вы посмотрите потроха макроса, то поймете, что если на одном входе менять значение, то на значение второго входа вернуться нельзя в принципе, это в вашем случае и есть недостаток этого макроса..
Устава энергосбережения должна быть постоянной. И оператор не должен ее случайно изменить.
Расскажите как вы планировали включать и отключать энергосберегающий режим - по сигналу на входе ПР, по отсчёту таймера внутри ПР с какого-то момента времени, по увеличению уставки выше какого-либо значения или ещё как-то?
Все термодаты выходят из режима энергосбережения одновременно или независимо друг от друга?
Управление с ПР. У каждой Termodat своя рабочая температура, соответственно и режим энергосбережения у каждой свой. Чтоб после отключения режима энергосбережения все приборы более менее одновременно подошли к рабочей температуре. Режим включения энергосберегающего режима один, когда оператор знает что будет длительный перерыве в работе установки он включает режим энергосбережения.
Еще раз спрошу, отправив в регистр записи значение, что с регистром чтения становится ? :)
Александр SPB Ну ? мой вариант пробовали ? опять же, из регистра записи можно читать ? если что на SEL подать TermodatRead сетевую и может увеличить время таймера, чтобы успела защелкнутая переменная записаться...
з.ы. Просто я помню ваше условие, что после смены режима из сберегающего в обычный в прибор должна пойти запись уставки ДО сберегающего режима...
Иначе как вы говорите операторы начинают материться...
Вообще-то сравнивать float глупо, их только на больше/меньше можно сравнивать... Или предварительно округлять, а то можно нарваться "а че оно не равно" ?
В симуляторе, меня смутило, что при первом пуске какая бы ни была уставка из Termodat при запуске программы всегда сначала записывается уставка 0. Потом при переключении в энергосберегающий режим и назад все приходит в норму.(Как вариант можно конечно и кратковременно переключить режим энергосбережения после запуска программы) Сегодня ваш вариант и пример 5 от Dimensy попробую на железе.
Или вот моя доработка
И не в симуляторе, после прошивки ПР в сетевой переменной будет 0, и если при запуске программы он успеет записаться в прибор, там и будет 0. Это нормально в принципе для Овен :) В таком случае как раз необходимо сделать инициализацию сетевой переменной.
Как же достали вот эти мелочи у Овен, причем которые раньше работали корректно...