PDA

Просмотр полной версии : Опрос модулей и Main Task



жекон
05.09.2013, 14:44
Опрашиваю три модуля МДВВ,8АС и МВУ входа функцией 03, выхода 16.По входам происходит потеря связи, при этом выхода работают нормально, переменял всё настройки на десять рядов ничего не помогло ,пока не залез в конфигурацию задач в Main Task поставил интервал t#100ms(по умолчанию t#2ms) и опрос нормализовался так и должно быть?

capzap
05.09.2013, 15:11
Почему там стояло две миллисекунды? Плк под линуксом меньше 20 не рекомендует ставить производитель, это и в доках отражено

vladimir_prg
06.09.2013, 06:07
Почему там стояло две миллисекунды? Плк под линуксом меньше 20 не рекомендует ставить производитель, это и в доках отражено
Не совсем понял где этот товарич нашел 2 мс, но во всех модулях ввода-вывода (при подключение конфигуратора) в параметре "задержка ответа по rs-485" - стоит 2 мс.
Это хорошо или плохо?

capzap
06.09.2013, 06:44
Не совсем понял где этот товарич нашел 2 мс, но во всех модулях ввода-вывода (при подключение конфигуратора) в параметре "задержка ответа по rs-485" - стоит 2 мс.
Это хорошо или плохо?

в каком из модулей ввода-вывода Вам встретился Main Task в конфигурации? И какая связи между терминами "задержка ответа" Вашего поста и "интервал" из первого поста

Дмитрий Артюховский
06.09.2013, 08:27
Почему там стояло две миллисекунды? Плк под линуксом меньше 20 не рекомендует ставить производитель, это и в доках отражено

это для таска визуализации нужно время, а полезный цикл, почему бы и нет??? или в данном примере все объединено в один???

Александр Приходько
06.09.2013, 12:46
Хочу внести немного ясности.
В CDS есть раздел Конфигурация задач.
В этом разделе каждой задачи задается тип ее вызова (Циклический, по событию, свободный цикл, по состоянию).
Также задается время цикла для циклического опроса, приоритет задачи, и сама вызываемая задача.



Приоритет (0-31): число от 0 до 31 со следующими значениями: 0 - самый высокий, 31 - самый низкий приоритет,
Тип: в списке представлены следующие типы задач:
Циклическая: задача вызывается циклически через заданный интервал времени.
Свободная: задача вновь вызывается сразу же после окончания в непрерывном цикле, без задания каких-либо интервалов.
По состоянию: задача вызывается, если переменная, заданная в поле Событие, принимает значение TRUE.
По событию: задача вызывается по фронту значения логической переменной, определенной в поле Событие.
По внешнему событию: задача вызывается по событию, которое определено в поле Событие. Список доступных событий зависит от целевой платформы. (Не путать с системными событиями)


Разница между состоянием и событием:
Для вызова задачи, управляемой состоянием, необходимо, чтобы заданная переменная приняла значение TRUE. Для задачи, управляемой событием, необходимо изменение значения с FALSE на TRUE. Если частота дискретизации планировщика задач слишком низкая, то фронт события может остаться незамеченным.


Интервал (для задач типа 'циклическая' или 'по внешнему событию', если событие требует задания времени): период времени, после которого задача должна быть вызвана снова. Справа от поля ввода значения задаются единицы измерения. Это могут быть миллисекунды [ms], либо микросекунды [µs]. При установке миллисекунд значение должно быть дано в формате TIME (например, "t#200ms"). При вводе микросекунд используется числовая форма представления (например, "300").
Событие (для задач типа 'по событию' и 'по внешнему событию'): глобальная переменная инициирующая запуск задачи передним фронтом. Используйте кнопку ... или Ассистент ввода <f2>..</f2>


Также тут можно задать сторожевой таймер WatchDog:



Сторожевой таймер
Для каждой задачи можно определить контроль времени выполнения (таймер-сторож). Если целевая платформа поддерживает расширенную конфигурацию таймера-сторожа то, могут быть определены максимальное, минимальное и значение по умолчанию. Также может присутствовать определение времени в процентах.
Начальные значения параметров сторожевого таймера зависят от используемого устройства.
Enable: если сторожевой таймер включен (http://www.owen.ru/forum/newreply.php?do=postreply&t=15739), то задача будет прервана с установленным статусом ошибки, если её выполнение заняло больше времени, чем задано в поле 'Время' (см. ниже) с учетом заданной восприимчивости (см. ниже). Если в диалоге Установки ПЛК (http://www.owen.ru/forum/:/PLC_settings.htm) активирована опция "Обновлять входы/выходы в остановленном состоянии", то выходы получают заданные начальные значения.


Время (например, t#200ms): время сторожевого таймера; описание см. выше: Enable. В зависимости от целевой системы время вводится в процентах от интервала задачи. В этом случае селектор единиц измерения показан серым цветом и отображает "%".
Восприимчивость: допустимое число превышений времени сторожа без формирования признака ошибки.

Обратите внимание, что сторожевой таймер можно отключить для конктретных SPS-циклов, используя функции библиотеки CmpIecTask.library. Это может быть полезно при работе с SPS-циклами, требующими больше времени, чем обычно, в связи с процессами инициализации.
После объявления соответствующей переменной для управления задачей (типа RTS_IEC_HANDLE),
hIecTask : RTS_IEC_HANDLE;
отключение (и последующее повторное включние) возможно за счет следующего использования функций:
hIecTask := IecTaskGetCurrent(0);
IecTaskDisableWatchdog(hIecTask);
... // Code that is protected against watchdog
IecTaskEnableWatchdog(hIecTask);



Что касается СПК1хх в таргете версии 3,5,0,40 для задачи PLC_PRG прописан интервал 2мс, для Task_Visu 100мс.
В новом таргете версии 3,5,3,40 интервал вызова для PLC_PRG я увеличу до 10мс - для большинства задач его хватает.

Если надо ускорить отображение визуализации, то для нее цикл я рекомендую ставить свободным.

Обмен по Modbus, настроенный через дерево объектов привязывается к циклу PLC_PRG, поэтому чем больше у нее цикл, тем медленней будет работать опрос.

Надеюсь тепер стало все чуточку понятнее.
Для наглядности пара скринов с рекомендуемыми настройками:
99339934

жекон
06.09.2013, 15:11
Обмен по Modbus, настроенный через дерево объектов привязывается к циклу PLC_PRG, поэтому чем больше у нее цикл, тем медленней будет работать опрос.

Получается что СПК тупо не хватало времени на корректный опрос при T#2ms.
P.S.Куда отчет о тестировании выслать?

Александр Приходько
06.09.2013, 15:51
Получается что СПК тупо не хватало времени на корректный опрос при T#2ms.
P.S.Куда отчет о тестировании выслать?

Вероятно да. Цикл меньше 5мс смысла делать нет.

Отчет о тестировании присылайте на A.Prikhodko@owen.ru

жекон
06.09.2013, 16:12
За выходные скину

vladimir_prg
07.09.2013, 01:50
Обмен по Modbus, настроенный через дерево объектов привязывается к циклу PLC_PRG, поэтому чем больше у нее цикл, тем медленней будет работать опрос.
99339934

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

Александр Приходько
07.09.2013, 03:47
А я то думал почему у меня последний модуль в ошибку вываливался периодически....после того, как я в программку кодика немножко прибавил. Ведь в старом кодесусе сетевые задачи решались отдельно от основного цикла...

Сомневаюсь, что это как то связано. Скорее всего проблема гдето в другом месте.
Цикл в данном случае влияет только на частоту вызова.

НО! если цикл задать очень маленький сама программа будет съедать все процессорное время, а на модбас ни чего не отанется. Пока мне на 100% не известен принцип этой связки, но подозреваю, что модбас все так же работает в фоне.

жекон
07.09.2013, 04:13
Сомневаюсь, что это как то связано. Скорее всего проблема гдето в другом месте.
Цикл в данном случае влияет только на частоту вызова.
НО! если цикл задать очень маленький сама программа будет съедать все процессорное время, а на модбас ни чего не отанется. Пока мне на 100% не известен принцип этой связки, но подозреваю, что модбас все так же работает в фоне.
В реальности было так при 2 мс индикатор обмена то горит практически ровным светом, то изредка подмигивает на модулях индикаторы мигают как положено ошибка не загорается, хотя тайм аут довольно маленький 5 мс выходные регистры работают без проблем, и без каких либо перебоев как я думаю у них приоритет по отношению к входным, а последние то появятся то в нули периодичность может быть секунда а может и несколько минут

Александр Приходько
07.09.2013, 04:16
В реальности было так при 2 мс индикатор обмена то горит практически ровным светом, то изредка подмигивает на модулях индикаторы мигают как положено ошибка не загорается, хотя тайм аут довольно маленький 5 мс выходные регистры работают без проблем, и без каких либо перебоев как я думаю у них приоритет по отношению к входным, а последние то появятся то в нули периодичность может быть секунда а может и несколько минут

Попробуйте цикл PLC_PRG выставить 10мс, время ожижидания ответа на интерфейсе 100мс и время между фреймами 10мс.

жекон
07.09.2013, 04:23
Попробую обязательно в понедельник, а сейчас стоит 100мс,но отклик модулей заметно притормаживает,Александр вы совсем не спите?

Александр Приходько
07.09.2013, 06:04
Попробую обязательно в понедельник, а сейчас стоит 100мс,но отклик модулей заметно притормаживает,Александр вы совсем не спите?
) И такое случается.

vladimir_prg
08.09.2013, 06:25
Попробуйте цикл PLC_PRG выставить 10мс, время ожижидания ответа на интерфейсе 100мс и время между фреймами 10мс.

Параметр таймаут ответа есть на мастере и есть на слэйвах. По умолчание везде 1000 мс. Нужно выставить и там и там? Какой там приоритет?
100 мс точно хватит? А то у меня шкаф с модулями уехал, а панелька пока осталась. Проверить уже нет возможности. Если что-то не так введу - будет плохо. Все на совести Александра: собираюсь поменять цикл PLC_PRG с 2 мс на 10 мс, а таймаут modbus с 1000 мс на 100 мс.

vladimir_prg
08.09.2013, 06:28
) И такое случается.
Если наш бдительный админ будет спать, то овеновские асушники перегрызут друг другу глотки, а форум будет завален рекламой вражеской продукции )

Дмитрий Артюховский
08.09.2013, 10:33
а вот если один раз напрячься и разобраться как использовать библиотеку модбас непосредственно в своей программе, то данный вечный вопрос канет в лету.... ну правда, если фон минимален, то время выполнения видно сразу, и вопрос "почему не работает" даже не появляется ))))

написать пару десятков строчек кода даже быстрее чем конфигуратор настраивать, а после того как учтем переносимость кода....... вставить опрос в новый проект - это два раза copy-paste, или час лазить по тме выпадающих менющек конфигуратора и все равно что-то пропустить.....

Александр Приходько
08.09.2013, 20:18
Параметр таймаут ответа есть на мастере и есть на слэйвах. По умолчание везде 1000 мс. Нужно выставить и там и там? Какой там приоритет?
100 мс точно хватит? А то у меня шкаф с модулями уехал, а панелька пока осталась. Проверить уже нет возможности. Если что-то не так введу - будет плохо. Все на совести Александра: собираюсь поменять цикл PLC_PRG с 2 мс на 10 мс, а таймаут modbus с 1000 мс на 100 мс.

Открываем справку CODESYS и читаем. И даже в инструкции по модмас, которую я делал и выкладывал и Вам давал ссылку все это есть. Я настоятельно рекомендую Вам ознакомиться с этой информацией самомтоятельно. Там все просто.


Если наш бдительный админ будет спать, то овеновские асушники перегрызут друг другу глотки, а форум будет завален рекламой вражеской продукции )
Ну благо я не один. Просто сейчас есть возможность периодически за форумом следить.


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

написать пару десятков строчек кода даже быстрее чем конфигуратор настраивать, а после того как учтем переносимость кода....... вставить опрос в новый проект - это два раза copy-paste, или час лазить по тме выпадающих менющек конфигуратора и все равно что-то пропустить.....

Согласен, но на самом деле конфигурация с обменом из одного проекта в другой переносится на раз. Открываете 2 проекта и дерево с модбасом просто перетаскиваете в новый проект. Это еще быстрее чем с библиотеками )
Надо один раз разобраться и все будет просто.

жекон
09.09.2013, 14:42
Попробуйте цикл PLC_PRG выставить 10мс, время ожижидания ответа на интерфейсе 100мс и время между фреймами 10мс.Попробовал опрос идет без проблем, модули откликаються почти моментально спасибо за совет.

Александр Приходько
12.09.2013, 14:45
В новом таргете для прошиви с ядром 3,5,3,40 время цикла по умолчанию будет 10мс, дабы в дальнейшем подобные проблемы не повторялись.