Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
VDT Industrial Automation :: Просмотр темы - 1S-Task
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

1S-Task
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов VDT Industrial Automation -> Аппаратные средства систем автоматизации
Предыдущая тема :: Следующая тема  
Автор Сообщение
DiabloXan
Новичок
Новичок


Зарегистрирован: Jun 11, 2014
Сообщения: 9
Рейтинг: +0/-0

СообщениеДобавлено: Пн 07 Июл, 2014 17:12:21    Заголовок сообщения: 1S-Task Ответить с цитатой

Доброго времени суток форумчане!
Подскажите как создать блок ADD который складывает 1 раз в секунду в главной рутине контроллера, а не каждый цикл контроллера. Максимум чего добился создание нового 1-секундного TASKа.
Так же имеется второй вопрос:
Создал мною написанный блок в ADD-ON-Instructions-можно ли его как нибудь отлаживать онлайн?Не нашел вообще онлайна для созданного блока в ADD-ON-Instructions, соответственно не нашел возможности редактировать этот блок когда контроллер в онлайне.
Помогите пожалуйста решить эти вопросы буду признателен)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlexV
Эксперт
Эксперт


Зарегистрирован: Jan 10, 2007
Сообщения: 126
Рейтинг: +6/-0
Откуда: г.Мирный, Якутия

СообщениеДобавлено: Пн 07 Июл, 2014 23:24:50    Заголовок сообщения: Ответить с цитатой

Простейшие вариант:
таймер TON, после его DN - ONS RES ADD инструкции

Add-On блоки в онлайне не редактируются, что делает их применение крайне мало полезным. Понтовая фишка, не более того... Surprised
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Вт 08 Июл, 2014 0:03:52    Заголовок сообщения: Ответить с цитатой

Add-On инструкции позволяют сделать сложные программы более структурированными и наглядными, что облегчает отладку сложных проектов.
Эти инструкции, будучи однажды отлаженными, становятся как бы новыми командами, повышая удобство программирования. Отлаженный и проверенный код этих инструкций повышает надежность программы, т.к. уменьшает вероятность ошибок.
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
mp3corp
Эксперт
Эксперт


Зарегистрирован: Dec 12, 2012
Сообщения: 164
Рейтинг: +2/-0

СообщениеДобавлено: Вт 08 Июл, 2014 5:51:45    Заголовок сообщения: Re: 1S-Task Ответить с цитатой

DiabloXan писал(а):
Доброго времени суток форумчане!
Подскажите как создать блок ADD который складывает 1 раз в секунду в главной рутине контроллера, а не каждый цикл контроллера. Максимум чего добился создание нового 1-секундного TASKа.
Так же имеется второй вопрос:
Создал мною написанный блок в ADD-ON-Instructions-можно ли его как нибудь отлаживать онлайн?Не нашел вообще онлайна для созданного блока в ADD-ON-Instructions, соответственно не нашел возможности редактировать этот блок когда контроллер в онлайне.
Помогите пожалуйста решить эти вопросы буду признателен)


Можете использовать мой вариант, все прекрасно считает, однако остается проблема с насыщением, если у вас очень большой расход то после 999 999.99 появится экспанента, как вариант предется делать обнуление накопителя. Пример
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DiabloXan
Новичок
Новичок


Зарегистрирован: Jun 11, 2014
Сообщения: 9
Рейтинг: +0/-0

СообщениеДобавлено: Вт 08 Июл, 2014 6:48:34    Заголовок сообщения: Ответить с цитатой

Работал долго время на сименсе-там есть возможность написать так называемые FB(FC) блоки-которые просто незаменимы когда не возможно использовать блоки из стандартной библиотеки и для нестандартных задач-и там есть полная возможность их отладки в онлайне!!!У роквела я думал Add-on-instructions подобие FB(FC) сименса-но без онлайна как было сказано выше это понтовая фишка)
Тогда встает вопрос-как быть если нужно создать блок под определенную задачи и которого нет в стандартной библиотеке (Ибо после сименса она убогая)?
Есть ли у роквела что-то типо надстройки (Библиотеки) блоков (У сименса аналог CEMAT)-читал много инфы про роквел-но пока подобного не встречал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlexV
Эксперт
Эксперт


Зарегистрирован: Jan 10, 2007
Сообщения: 126
Рейтинг: +6/-0
Откуда: г.Мирный, Якутия

СообщениеДобавлено: Вт 08 Июл, 2014 8:14:44    Заголовок сообщения: Ответить с цитатой

Создаешь Routine в программе, потом вызываешь ее с помощью хоть JSR инструкции, хоть FOR для циклического вызова c индексацией.
В отличие от сименса, тут допустима запись вида array1[index1,index2]
Т.е. тут реализовано стандартное структурное процедурное программирование. UserType - стандартные структуры как в классических языках программирования.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DiabloXan
Новичок
Новичок


Зарегистрирован: Jun 11, 2014
Сообщения: 9
Рейтинг: +0/-0

СообщениеДобавлено: Вт 08 Июл, 2014 12:26:23    Заголовок сообщения: Ответить с цитатой

mp3corp - Ваша инструкция ADD не выполняется раз в секунду-она выполняется раз в цикл контроллера при выполнении условия GRT.

И все равно из выше написанного не увидел как сделать выполнение любого блока 1 раз в секунду в главной рутине(
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Вт 08 Июл, 2014 14:57:00    Заголовок сообщения: Ответить с цитатой

DiabloXan писал(а):
И все равно из выше написанного не увидел как сделать выполнение любого блока 1 раз в секунду в главной рутине(

Вам же уже написали:
AlexV писал(а):
Простейшие вариант:
таймер TON, после его DN - ONS RES ADD инструкции


Таймер считает в главной программе, и ADD считается только в том цикле, в котором устанавливается DN таймер, т.е. каждую секунду.

Позвольте также поинтересоваться, чем Вам не нравится задача, запускаемая ядром операционной системы контроллера точно раз в секунду? Этот механизм специально придуман именно для того, чтобы реализовывать функции, подлежащие периодическому выполнению. При этом Ваш ADD будет считаться в такой задаче принципиально более точно, чем при реализации периодического "интегрирования" пользовательским таймером. Объяснить, почему?
_________________
Обращайтесь к профессионалам.


Последний раз редактировалось: oldDad (Вт 08 Июл, 2014 18:28:13), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
mp3corp
Эксперт
Эксперт


Зарегистрирован: Dec 12, 2012
Сообщения: 164
Рейтинг: +2/-0

СообщениеДобавлено: Вт 08 Июл, 2014 16:20:23    Заголовок сообщения: Ответить с цитатой

DiabloXan писал(а):
mp3corp - Ваша инструкция ADD не выполняется раз в секунду-она выполняется раз в цикл контроллера при выполнении условия GRT.

И все равно из выше написанного не увидел как сделать выполнение любого блока 1 раз в секунду в главной рутине(

Почему, таймер 1000 мс, как только он насчитает бит DN станет - 1, далее идет 1 цикл счета и сброс таймера в 0 и так по кругу.
Условие GRT служит для того, чтоб расход не начал считать в обр. сторону, например будет ток <4 ма...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Locky
Частый гость
Частый гость


Зарегистрирован: Oct 13, 2009
Сообщения: 49
Рейтинг: +5/-1
Откуда: Рязань

СообщениеДобавлено: Вт 08 Июл, 2014 16:36:17    Заголовок сообщения: Ответить с цитатой

AlexV писал(а):
Простейшие вариант: таймер TON, после его DN - ONS RES ADD инструкции
А можно и без ONS RES если записать:
XIC Timer.DN ADD Variable Accum Accum
XIO Timer.DN TON 1000 0
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Locky
Частый гость
Частый гость


Зарегистрирован: Oct 13, 2009
Сообщения: 49
Рейтинг: +5/-1
Откуда: Рязань

СообщениеДобавлено: Вт 08 Июл, 2014 16:43:30    Заголовок сообщения: Ответить с цитатой

oldDad писал(а):
При этом Ваш ADD будет считаться в такой задаче принципиально более точно, чем при реализации периодического "интегрирования" пользовательским таймером. Объяснить, почему?
Объясните если не сложно. Ведь, насколько я могу помнить, период опроса модулей ввода-вывода не связан с выполнением остальных задач и одно и то же значение будет использовано как при обработке по таймеру, так и в отдельной задаче. Какой нюанс я забыл?
(Без сарказма, действительно интересно где я ошибаюсь.)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Вт 08 Июл, 2014 18:19:29    Заголовок сообщения: Ответить с цитатой

Давайте посмотрим на момент, в который выяснится, что таймер в фоновой пользовательской программе досчитал до DN и пора выполнять действия.

Момент, когда таймер отсчитает 1000мс, - это необязательно момент, когда фоновой задаче станет это известно, т.к. время пользовательского таймера течет асинхронно по отношению к актуальному времени, текущему в скане фоновой задачи. Время этого таймера течет параллельно скану фоновой задачи и отсчитывается системным таймером ядра операционной системы.

С высокой вероятностью, то, что таймер готов, выяснится только через некоторое время (несколько единиц миллисекунд или даже десяток миллисекунд) после того, как этот таймер станет готов.

Иначе говоря, факт DN выяснится через время
T = Tpre + Тот_начала_скана_мс.
Это время, в принципе, нестабильно, т.к. Тот_начала_скана_мс до обнаружения факта готовности таймера зависит от актуального времени скана, которое колеблется.

Эти флюкутации времени скана зависят, как мы знаем, от количества и характера имеющихся в фоновой задаче зависящих от внешних условий логических операций (actions) и связанных с ними действий (reactions), как от начала скана до момента определения готовности пользовательского таймера, так и после него до конца скана и, затем, снова из конца программы в начало следующего скана, от предшествующей этому моменту в следующем скане логики и связанных с этой логикой действий. Такие флюктуации могут достигать единиц и даже иной раз десятков миллисекунд.

Кроме того, как мы знаем, в многозадачной операционной среде реального времени с прерываниями работают задачи, имеющие более высокий, по отношению к фоновой задаче, приоритет, которые рвут контекст фоновой задачи тогда, когда им нужно, и так надолго, насколько им нужно. Они отбирают у фоновой задачи процессор и возвращают его ей через некоторое (также неопределенное) время, которое им необходимо для обработки, и которое также нестабильно.

В итоге, в такой системе флюктуации момента обнаружения готовности пользовательского таймера, расположенного в фоновой задаче, могут составлять даже десятки миллисекунд. А если рвущая фоновую задачу более приоритетная задача прерывается ещё более приоритетной и.т.п., каждая из которых (непредсказуемо для фоновой задачи) требует процессорного времени, то и еще больше.

Если, к тому же, система построена неоптимальным образом, и более приоритетные задачи загружены сильнее, чем низкоприоритетные, что в корне неверно, или же вообще не используется многозадачность, а всё тупо прописывается в одной фоновой задаче, то система превращается в тормоз ( всё в относительном времени, разумеется), и её динамика будет в несколько раз хуже, чем у оптимизированой многозадачной среды.

Теперь давайте рассмотрим альтернативу.
Имеется очень короткая очень высокоприоритетная задача, запускаемая периодически раз в секунду по системному таймеру ядра, имеющему наивысший приоритет. Эта задача состоит из строчки с оператором ADD, где наращивается интегральный расход. И всё. Логику сброса интегрального расхода в нужной ситуации можно спокойно поместить в фоновую задачу.
Время выполнения такой высокоприоритетной задачи будет доли миллисекунды, это время будет всегда идентично, без вариаций, и она всегда будет запускаться ровно раз в секунду, без никаких флюктуаций, по системному таймеру ядра операционной системы. Поэтому точность вычисления интегрального расхода в этом случае будет намного выше.

Немножко сложновато да? Задавайте вопросы, если что.
_________________
Обращайтесь к профессионалам.


Последний раз редактировалось: oldDad (Вт 08 Июл, 2014 21:58:20), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Locky
Частый гость
Частый гость


Зарегистрирован: Oct 13, 2009
Сообщения: 49
Рейтинг: +5/-1
Откуда: Рязань

СообщениеДобавлено: Вт 08 Июл, 2014 19:35:48    Заголовок сообщения: Ответить с цитатой

oldDad писал(а):
Немножко сложновато да? Задавайте вопросы, если что.
Да нет, ничего сложного, просто действительно забыл что где исполняется и что continuous task (это ведь она кроется под "фоновой пользовательской программой"?)имеет низкий приоритет.

Большое СПАСИБО за столь подробный ответ.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlexV
Эксперт
Эксперт


Зарегистрирован: Jan 10, 2007
Сообщения: 126
Рейтинг: +6/-0
Откуда: г.Мирный, Якутия

СообщениеДобавлено: Вт 08 Июл, 2014 23:31:36    Заголовок сообщения: Ответить с цитатой

Locky писал(а):
А можно и без ONS RES если записать:
XIC Timer.DN ADD Variable Accum Accum
XIO Timer.DN TON 1000 0

Нельзя! Razz
Логическая ошибка, ADD будет выполняться на следующий скан после установки DN таймера.

И еще добавлю свои 5 копеек Rolling Eyes
Фоновая задача имеет не просто низкий, а САМЫЙ низкий приоритет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Locky
Частый гость
Частый гость


Зарегистрирован: Oct 13, 2009
Сообщения: 49
Рейтинг: +5/-1
Откуда: Рязань

СообщениеДобавлено: Ср 09 Июл, 2014 6:06:44    Заголовок сообщения: Ответить с цитатой

AlexV писал(а):
Locky писал(а):
А можно и без ONS RES если записать:
XIC Timer.DN ADD Variable Accum Accum
XIO Timer.DN TON 1000 0

Нельзя! Razz
Логическая ошибка, ADD будет выполняться на следующий скан после установки DN таймера.
Ну, расчет суммы задержится на один скан, но работать будет и даже результат сильно не изменится т.к. все отсчеты на этот один скан будут сдвинуты. Строки можно местами поменять, тоже работать будет, и уже в том же скане когда DN установится. Razz
В данном примере просто хотел показать что для управления таймером можно обойтись без доп. операторов (ONS & RES) если знать что сброс входного условия таймера сбрасывает его аккумулятор, что в свою очередь приводит к сбросу бита DN.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов VDT Industrial Automation -> Аппаратные средства систем автоматизации Часовой пояс: GMT + 1
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

VDT Industrie Automatisierung GmbH | Friedrich-List-Allee 22, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432-98-10-13, Fax: +49 2432-98-10-99 | e-Mail: office@vdt-automation.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.126 секунды
/n