Зарегистрирован: May 19, 2007 Сообщения: 14 Рейтинг: +0/-0
Добавлено: Пт 28 Сен, 2007 7:48:51 Заголовок сообщения: Время цикла программы SLC 5/05 + Время отклика с OPC
Описываю задачу:
Есть контроллер SLC 5/05, время цикла программы 0,3 секунды (вычисляю вручную).
Scan Times-Average показывает 300 ms (или 30 *10 ms).
OPC RS Linx 2.51 подключен к контроллеру через Ethernet.
Scada Genesis32 читает данные с RS Linx. При подаче команды время отклика составляет ~ 3-x секунд, что непонятно и недопустимо!
Если через мониторинг подавать ту же команду, то тоже самое!
Делал объект на этом контроллере + OPCRSLinx + RSView32.
Самое тормозное звено в этой цепи RSView, но и то время отклика (отсылка+цикл программы+отсылка) было примерно 1 сек.
Напишите, как вы считаете время отклика. В это время у вас входит время реакции исполнительного механизма?
так ведь и Genesis32 тоже клиент. Ладно, я попробую!
А как на счет того что управляющая команда выдается из самого RS Logix 500? Открываю файл команд устройст B20, выставляю бит, команда также приходит только через ~3 секунды!
И еще вопрос? в Закладке Scan Times (жму Processor Status), Average в чем меряется? Точнее у AB 100ms чему равно 1 секунде или 0,1 секунде?
Я указал что Average = 300ms может это и есть 3 секунды?
А как на счет того что управляющая команда выдается из самого RS Logix 500? Открываю файл команд устройст B20, выставляю бит, команда также приходит только через ~3 секунды!
Тогда опыт с OPC Test Client проводить не нужно. Все и так ясно.
Raven999 писал(а):
И еще вопрос? в Закладке Scan Times (жму Processor Status), Average в чем меряется? Точнее у AB 100ms чему равно 1 секунде или 0,1 секунде?
Я указал что Average = 300ms может это и есть 3 секунды?
Там-же написано Maximum[*10 ms], т.е. если у вас в ячейке показывае 300, то это 300*10 ms= 3 сек.
НИКОГДА, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЦИКЛЫ, ОСОБЕННОЕ ЕСЛИ ЕСТЬ КАКОЙ НИТЬ ОБМЕН
Задача решается так:
По возможности сделайте так чтобы за один цикл программы обрабатывался один элемент цикла.
Времени обновления хватает на все элементы цикла
НИКОГДА, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЦИКЛЫ, ОСОБЕННОЕ ЕСЛИ ЕСТЬ КАКОЙ НИТЬ ОБМЕН
Тут вы не правы, просто циклы нужно правильно использовать. Это кстати в любой документации на контроллеры A-B написано.
Если у вас в цикле очень много шагов, то разбейте их по 100 за цикл программы или как вы сделали по одному и.т.
В общем-то закон известный: либо ты выигрываешь в скорости и проигрываешь в ресурсах (память), либо наоборот.
Я когда начинал писать программы, в циклах много использовал косвенную адресацию. Со временем понял, что иногда для повышения быстродействия лучше вначале положить в промежуточные переменные, а потом обратно.
Я для битовых переменных использую косвенную адресацию, для целых или вещественных через промежуточные переменные!
Так например аналоговый канал имеет и косвенную адресацию и копирование параметров датчика во внутреннюю переменную а потом измеренные значения уже обратно!
В принципе уйдя от цикла я ничего не потерял, время обработки одного канала, или цифрового или аналогового в результате осталось тоже самое, а время цикла снизилось с 300 до 30 мс. В общем я для себя решил что циклы буду организовывать только так!
Я вот прочёл и стал вспоминать, когда этоя использовал циклы. И не вспомнил реально ни одного случая, когда бы пришлось их использовать. На мой взгляд, циклы нужны, если привык программировать на обычных компьютерных языках и никак не представляешь себе архитектуру программы, которая циклов не содержит вообще. Но если подумать, что каждая контроллерная программа - это принципиально цикл, то начинаешь понимать, что циклами ползоваться совершенно необязательно.
А как вы думаете, коллеги? Можете ли вы привести пример, когда использование цикла необходимо и оправдано, и никак без него нельзя?
Под циклом я понимаю связку LBL----JMP (это в данном форуме уже обсуждалось).
Без циклов не обойтись, когда обрабатываешь принятые данные, по какому-то протоколу (ASCII модуль).
Если объект большой, то удобно оборудование разбить на группы, которые обрабатываются по циклу. Например у вас 2000 аналоговых сигналов, которые нужно проанализировать на выход за диапазон, привести к тех.шкале, проверить на аварийные, предаварийные уставки и т.д.
Если у вас 1000 отсекателей, то вероятность ошибки значительно повышается, если каждый из них вы будете делать отдельно (памяти съестся тоже много). Разумнее алгоритм их работы сделать "подпрограммой", которая вызывается по циклу.
Без циклов не обойтись, когда обрабатываешь принятые данные, по какому-то протоколу (ASCII модуль).
Почему не обойтись? Кто мешает получить из буфера символ, положить его куда надо и пойти дальше? А следующий символ получить (если он есть) в следующем скане программы?
Цитата:
Если объект большой, то удобно оборудование разбить на группы, которые обрабатываются по циклу. Например у вас 2000 аналоговых сигналов, которые нужно проанализировать на выход за диапазон, привести к тех.шкале, проверить на аварийные, предаварийные уставки и т.д.
А вот файловые операции, например, FAL: определили массив, задали длину, выражение для обработки переменной в массиве, количество единиц массива за один проход скана, определили стартовые условия FAL, и всё. Процесс пошёл параллельно времени скана и независимо от него, а Вы только проверяете, а не закончилась ли обработка. Зачем цикл?
Последний раз редактировалось: oldDad (Вт 30 Окт, 2007 10:15:29), всего редактировалось 1 раз
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна. Открытие страницы: 0.137 секунды