PDA

Просмотр полной версии : СПК107 - зависает после нескольких часов работы



a_gricaj
11.05.2016, 08:29
Начал отладку своей программы: оставил на ночь СПК107 работать с включенным опросом модулей, архивированием (на SD карту).
Судя по архивированным переменным проработал СПК примерно 7 часов и завис....

Подскажите пожалуйста где искать причину, сам грешу на архивирование на базе "гистограммы"(на форуме есть пример),
правда я его переделал под себя - увеличил количество переменных, от сюда вопрос: не много ли я хочу от СПК107????


Вот сам проект (не судите строго - мой первый проект на контроллере ОВЕН) 24417

А есть ли метод поиска причин зависания контроллера??

приборист
11.05.2016, 09:54
Завис как?
Индикатор работа моргает? Или горит?

a_gricaj
11.05.2016, 09:59
скрин журнала:24419

a_gricaj
11.05.2016, 10:05
Завис как?
Индикатор работа моргает? Или горит?

CОМ потух и модули перестали опрашиватся
РАБОТА - ГОРИТ

Некоторые экраны работают, могу отключится и подключится к спк, скрин журнала выше выложил - буфер полон....

a_gricaj
11.05.2016, 10:17
24421
Задача MainTask висит походу, что могло ее подвесить??

a_gricaj
11.05.2016, 14:35
Че все так плохо и никто не знает????

XopHeT
11.05.2016, 17:20
Андрей, у Вас проект гигантский и зависает через (целых) 7 часов.
Вы реально думаете, что кому-то под силу за 6 часов локализовать проблему и разобраться в простынях кода, которые "не судите строго - мой первый проект на контроллере ОВЕН"?

a_gricaj
11.05.2016, 18:15
Андрей, у Вас проект гигантский и зависает через (целых) 7 часов.
Вы реально думаете, что кому-то под силу за 6 часов локализовать проблему и разобраться в простынях кода, которые "не судите строго - мой первый проект на контроллере ОВЕН"?

нет, я все понимаю (хотя на счет гигантского не совсем согласен, на работе контролер(S7-400) который управляет всем предприятием-250 блоков, и то это еще не гигантский ), хочется самому разобраться, но не знаю с чего начать, хотя догадываюсь, что проблема в куске который строит график, наверное я его упрощу - оставлю только режим 10 мин и 24 часа и оставлю на ночь.....

Интересно, а можно ли посмотреть загрузку процессора СПК??

Евгений Кислов
11.05.2016, 19:47
нет, я все понимаю (хотя на счет гигантского не совсем согласен, на работе контролер(S7-400) который управляет всем предприятием-250 блоков, и то это еще не гигантский ), хочется самому разобраться, но не знаю с чего начать, хотя догадываюсь, что проблема в куске который строит график, наверное я его упрощу - оставлю только режим 10 мин и 24 часа и оставлю на ночь.....

Интересно, а можно ли посмотреть загрузку процессора СПК??

Можно, подключитесь через Putty и в терминале выполните команду top. См. СПК. FAQ, п. 14.9.

У вас, судя по описанию, не СПК зависает, а программа уходит в очень долгий цикл.

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

Осинский Алексей
11.05.2016, 21:55
Я Вам сегодня ответил на e-mail. Проверьте пожалуйста и давайте локализовать проблему вместе.
Для начала нам нужно понять что зависает, потом будем разбираться почему.

Отключайте части программы и смотрите, в который момент проект перестанет зависать - значит последняя из отключенных частей приводила к зависанию.

Возможно Евгений прав и проблема из-за некорректной работы с файлами.
Есть возможность определить к-вот открытых файлов можно по следующему методу:


1) подключиться с использованием putty;
2) выполнить команду "ps";
3) найти процесс с именем codesyssp, и запомнить его PID;
4) выполнить команду "ls /proc/PID/fd", где PID - ID процесса из 3 шага;
5) запомнить максимальное число, которое выведет команда

В общем случае к-во открытых файлов в системе не переваливает за 100, если у Вас перевалит за 300-500 и будет увеличиваться со временем, то явно проблема в файлах.

Если Вы используете библиотеку SPK_Tools версии 1.3.12 (http://www.owen.ru/uploads/txtlic.php?url=http:/ftp.owen.ru/index.html/CoDeSys3/04_Library/02_Manual_installation/08_SPK_Tools/1.3.0/SPK_Tools_1.3.12.compiled-library), то объявите экземпляр ФБ:


fb_HandleCount:FileHandles;

и вызывайте циклически код


fb_HandleCount.xStart := TRUE;
fb_HandleCount();
if fb_HandleCount.xDone then
//организуйте задержку перед следующим вызовом ФБ для избежания перегрузки процессора, после окончания задержки выполните код
fb_HandleCount.xStart := FALSE;
fb_HandleCount();
end_if

Отобразите на визуализации значение переменной fb_HandleCount.wHandlesCount
и следите за его изменением. Если значение будет расти - проблема в работе с файлами.

В будущих прошивках этот функционал будет поддержан в таргет-файле и эти танцы не будут нужны.

И да, в общем случае, одного обращения более чем достаточно, нет смысла писать сразу везде. Это не ускорит решение Вашего вопроса.

a_gricaj
11.05.2016, 22:28
Можно, подключитесь через Putty и в терминале выполните команду top. См. СПК. FAQ, п. 14.9.

У вас, судя по описанию, не СПК зависает, а программа уходит в очень долгий цикл.

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

Евгений, а не подскажите, что это за ошибка:
24430
Она появляется сразу после "Пуска" программы...

Евгений Кислов
12.05.2016, 07:22
Евгений, а не подскажите, что это за ошибка:
24430
Она появляется сразу после "Пуска" программы...

Вероятно, оно связано с наличием галочки Мультикасание в Менеджере визуализации (СПК мультикасание не поддерживает). Не обращайте на него внимание, оно не влияет на работоспособность программы.

slonegd
12.05.2016, 07:49
Доброе. Не стал создавать тему, но ситуация похожа. Через несколько часов зависает. СОМ гаснет, РАБОТА нет, горит постоянно. Подключится кодесисом не могу. На визуализации есть часы реального времени, они останавливаются. Нажатие на визуализации ни к чему не приводят. Связи с этим несколько вопросов:
1. Что происходит если сработает вотчдог? Я то привык, что перезагрузка, но когда был подключен кодесисом всплыло исключение вотчдога визутаска.
2. Есть подозрения, что именно визуалиазция меня весит, к тому же факт из предыдущего пункта наводит на мысли. Читал, что не стоит группировать объекты на визуализации: это правда или наглая ложь?
3. Сама визуализация состоит из кучи рисунков средствами кодесиса, которые сгруппированы и просто невидимы, если не нужны сейчас. Плюс различные кнопки которые выполняют несложный ST код и имеют изменяющуюся надпись. Таких элементов на экране более 1000, просто как правило они невидимы. Но отыскать какой элемент вызывает ошибку нереально. Их слишком много, зависание происходит далеко не сразу. Есть какие нибудь средства попроще?
4. мэйн таск по монитору выполняется в среднем 2,5 мс, к ней привязаны опросы модулей, как я понял. С ними проблем не возникает. Цикличность мэйн таск 5мс. Поставлю больше и бывает пропускает датчики положения (не успевает опрашивать).
Ну и еще вопросик, который давно меня мучает.
5. Опрос модулей. Мы там ставим циклически, но без приоритета, как в задачах. Какой опрос будет происходить, если циклически вышло на один и тот же фрейм сразу 2 опроса?

update: spktools и alarmmanager в проекте не использую, с файлами так же не работаю

a_gricaj
12.05.2016, 09:20
4. У меня та же фигня с опросом модулей хотя и стоит 20 мс но опрос привязался к циклу мэйн таск, правда я опрашиваю через триггер,
5 вопрос тоже интересует....


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

Осинский Алексей
12.05.2016, 09:49
5. Опрос модулей. Мы там ставим циклически, но без приоритета, как в задачах. Какой опрос будет происходить, если циклически вышло на один и тот же фрейм сразу 2 опроса?

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

slonegd
12.05.2016, 10:18
Вы задаете минимальное, а не гарантированное время опроса. Все модули опрашиваются циклически, поэтому если у модуля №5 уже настало время опроса, но программа еще не опросила модуль №1, то модуль №5 будет просто ждать своей очереди

То есть создается очередь из опросов?
Еще объясните, чисто гипотетически:
фреймы 5мс
опрос модуля 1 - цикл 10 мс
опрос модуля 2 - цикл 15 мс
больше модулей нет.
на второй фрейм пошел опрос модуля 1
к третьему фрейму (15мс от начала) первый еще не ответил, соответственно второй в очередь встал
к четвертому (20мс) первый еще не ответил, второй по прежнему в очереди, но пришла очередь первого опять. Первый же не встанет в очередь, он ведь и так опрашивается?

capzap
12.05.2016, 10:27
То есть создается очередь из опросов?
Еще объясните, чисто гипотетически:
фреймы 5мс
опрос модуля 1 - цикл 10 мс
опрос модуля 2 - цикл 15 мс
больше модулей нет.
на второй фрейм пошел опрос модуля 1
к третьему фрейму (15мс от начала) первый еще не ответил, соответственно второй в очередь встал
к четвертому (20мс) первый еще не ответил, второй по прежнему в очереди, но пришла очередь первого опять. Первый же не встанет в очередь, он ведь и так опрашивается?

а что 16,17,18,19 миллисекунды уже отменили?

Осинский Алексей
12.05.2016, 10:31
То есть создается очередь из опросов?
Еще объясните, чисто гипотетически:
фреймы 5мс
опрос модуля 1 - цикл 10 мс
опрос модуля 2 - цикл 15 мс
больше модулей нет.
на второй фрейм пошел опрос модуля 1
к третьему фрейму (15мс от начала) первый еще не ответил, соответственно второй в очередь встал
к четвертому (20мс) первый еще не ответил, второй по прежнему в очереди, но пришла очередь первого опять. Первый же не встанет в очередь, он ведь и так опрашивается?
Сейчас не могу утверждать это со 100% вероятностью т.к. этот вопрос уже к разработчикам CODESYS, но мне реализация видится так:
1) Старт контроллера
2) Опрос модуля 1
3) Опрос модуля 2
4) Проверяем прошел ли цикл опроса модуля 1 если да - опрашиваем, если нет - переходим к шагу 5
5) Проверяем прошел ли цикл опроса модуля 2, если да - опрашиваем, если нет - переходим к п. 4

Поэтому очереди как таковой нету, а есть цикл опроса.

slonegd
12.05.2016, 10:36
а что 16,17,18,19 миллисекунды уже отменили?

Я в ступоре. Думал модуль сделал запрос или получил ответ и ушел до следующего фрейма. А он выходит еще и ответа дожидается между фреймами? Как он определяет сколько ждать? До следующей задачи?
На примере понятнее.
Мейнтаск 5 мс, среднее время работы 2мс
Во время работы задачи, отображаемое в конфигураторе, входит работа с модбас модулями?
Если входит, то почему тогда работа не ровна 5мс, что останавливает работу модбасмодулей?
Если не входит, то как я понимаю, работа с модбас идет всё время, пока его не прервет следующая задача?

capzap
12.05.2016, 10:55
Я в ступоре. Думал модуль сделал запрос или получил ответ и ушел до следующего фрейма. А он выходит еще и ответа дожидается между фреймами? Как он определяет сколько ждать? До следующей задачи?
На примере понятнее.
Мейнтаск 5 мс, среднее время работы 2мс
Во время работы задачи, отображаемое в конфигураторе, входит работа с модбас модулями?
Если входит, то почему тогда работа не ровна 5мс, что останавливает работу модбасмодулей?
Если не входит, то как я понимаю, работа с модбас идет всё время, пока его не прервет следующая задача?

Вы как бы доходили до места как на картинке?

На первой вкладке есть тайм-аут, это время после которого контроллер уже не ждет ответа от конкретного слейва, на вкладке с кaнaлaми там где триггер, есть циклическое выполнение, ставить его равным циклу контроллера не стоит менее 20мс нормальной работы со слейвами не получится

a_gricaj
12.05.2016, 11:01
Я в ступоре. Думал модуль сделал запрос или получил ответ и ушел до следующего фрейма. А он выходит еще и ответа дожидается между фреймами? Как он определяет сколько ждать? До следующей задачи?
На примере понятнее.
Мейнтаск 5 мс, среднее время работы 2мс
Во время работы задачи, отображаемое в конфигураторе, входит работа с модбас модулями?
Если входит, то почему тогда работа не ровна 5мс, что останавливает работу модбасмодулей?
Если не входит, то как я понимаю, работа с модбас идет всё время, пока его не прервет следующая задача?

Также не понял, на примере будет понятнее,
Например я настраиваю опрос через "Trigger Variable"(rising edge) с помощью таймера, его передергиваю через заданное время, но почему изменяя (увеличивая время цикла Main Task) у меня увеличивается и время опроса модулей - вижу это так как у модулей настроен Таймаут и они начинают отваливаться (когда большой циклMain Task)????

Еще вопрос по модулю МВ110-8А он также у меня настроен через "Trigger Variable"(rising edge) все 8 каналов имеют свой таймер с настройкой времени опроса.
Если поставить опрос одного канала раз в 1 сек а второго раз в 5 сек то разницы нет, получается у МВ110-8А есть свой внутренний "флаг" и весь этот огород который я нагородил с опросом модулей в проекте с "Trigger Variable" и таймерами вообще ненужен??????????????

slonegd
12.05.2016, 11:11
Вы как бы доходили до места как на картинке?

На первой вкладке есть тайм-аут, это время после которого контроллер уже не ждет ответа от конкретного слейва, на вкладке с кaнaлaми там где триггер, есть циклическое выполнение, ставить его равным циклу контроллера не стоит менее 20мс нормальной работы со слейвами не получится

Не о таймаутах речь, они стоят по 70мс. При меньшем у меня ошибки шины появляются именно по таймауту. Вот за что не люблю эти модули, что никто (видимо, кроме программистов кодесис) не может конкретно расписать что за чем идет в опросах при разных значениях. Я понимаю, что при фреймах 5мс, модуль не ответить на следующий фрейм. Я просто не хочу ждать ни милисекунды, когда ответ уже получен.

С помощью функций всё очень просто.
цикл задачи 1 выдал запрос
цикл задачи 2...n проверка ответа или таймаута
цикл задачи n+1 следующий запрос.

Причем время цикла задачи можно и 2мс поставить, он просто ждет ответа, но как только он получил его, то переходит к следующему. Сам задача выполняется микросекунды.

slonegd
12.05.2016, 11:15
Еще вопрос по модулю МВ110-8А он также у меня настроен через "Trigger Variable"(rising edge) все 8 каналов имеют свой таймер с настройкой времени опроса.
Если поставить опрос одного канала раз в 1 сек а второго раз в 5 сек то разницы нет

А как вы определили, что разницы нет? Просто величина опрашиваемая за 5 секунд могла не измениться. (ну или та, что раз в секунду опрашивается. Цикличность мейнтска не стоит ставить более промежутками между фреймами, это бессмысленно, как я понял.

a_gricaj
12.05.2016, 11:20
А как вы определили, что разницы нет? Просто величина опрашиваемая за 5 секунд могла не измениться. (ну или та, что раз в секунду опрашивается. Цикличность мейнтска не стоит ставить более промежутками между фреймами, это бессмысленно, как я понял.

Подавал на аналоговый вход сигнал 0-1В и наблюдал) в он-лайне......

capzap
12.05.2016, 11:20
Вот за что не люблю эти модули, что никто (видимо, кроме программистов кодесис) не может конкретно расписать что за чем идет в опросах при разных значенияхну почему же ни кто, подключаете к сети RS485 дополнительно ПК, на нем устанавливаете эмулятор слейва, открываете окошко логов и смотрите какие запросы были отправлены и какие ответы получены, так и сможете узнать кто за кем следует. Из нас ни кто ни чего не напишет, не зная что Вы опрашиваете, как Вы это делаете, конфигуратор не такой глупый, он еще самостоятельно принимает решение какие запросы сгруппировать, как тут возможно будет объясннить, что за чем идет

Я просто не хочу ждать ни милисекундыв протоколе модбас есть еще такое понятие как пауза тишины, так что ждать несколько миллисекунд всёже придется

slonegd
12.05.2016, 11:26
конфигуратор не такой глупый

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

a_gricaj
12.05.2016, 11:29
Подавал на аналоговый вход сигнал 0-1В и наблюдал) в он-лайне......

И может я не прав но модуль МВ110-224.2АС скоростной только потому, что имеет на борту только 2 входа, а не 8- мое субъективное мнение....

capzap
12.05.2016, 11:30
так если Вы хотите сами всем руководить, переходите на библиотеки. Этот документ читали спк_модбас (http://ftp.owen.ru/index.html/CoDeSys3/11_Documentation/01_SPK/SPK_Modbus_v.0.81.pdf)?

приборист
12.05.2016, 11:36
И может я не прав но модуль МВ110-224.2АС скоростной только потому, что имеет на борту только 2 входа, а не 8- мое субъективное мнение....
А 8АС?
Потому что имеет 4 модуля по 2АС?;)

a_gricaj
12.05.2016, 11:37
так если Вы хотите сами всем руководить, переходите на библиотеки. Этот документ читали спк_модбас (http://www.http://ftp.owen.ru/index.html/CoDeSys3/11_Documentation/01_SPK/SPK_Modbus_v.0.81.pdf)?

Ссылка не работает....

slonegd
12.05.2016, 11:38
Читал и в кодесисе 2,3 так и работаю, никаких проблем. Но вот тот же код в кодесисе 3, зависает спк, выдает исключение, пока не разобрался почему, работу работать надо, да и тех поддержка молчит.

Вот мой пост первый на странице http://www.owen.ru/forum/showthread.php?t=15530&page=71
Там и проект простенький приложен. Никто не помог пока.

a_gricaj
12.05.2016, 11:39
А 8АС?
Потому что имеет 4 модуля по 2АС?;)
А про 8АС забыл))) но с ним не встречался, и что он реально быстрее простого 8А????? Если да, то я не прав....

a_gricaj
12.05.2016, 11:44
неа)))

24436

a_gricaj
12.05.2016, 11:45
неа)))

24436

о уже работает

capzap
12.05.2016, 12:36
Читал и в кодесисе 2,3 так и работаю, никаких проблем. Но вот тот же код в кодесисе 3, зависает спк, выдает исключение, пока не разобрался почему, работу работать надо, да и тех поддержка молчит.

Вот мой пост первый на странице http://www.owen.ru/forum/showthread.php?t=15530&page=71
Там и проект простенький приложен. Никто не помог пока.
так если читали, почему пример тот не написали согласно этого документа, КДС сразу подчеркивает где имеется не соответствие. С проверкой четности согласно того же документа у Вас тоже не всё правильно, двойка соответствует нечетности, а не как Вы пишите четности. Какие настройки у слейва тоже ведь не указаны в посте, поэтому там комментировать особо не чего

slonegd
12.05.2016, 13:24
так если читали, почему пример тот не написали согласно этого документа, КДС сразу подчеркивает где имеется не соответствие. С проверкой четности согласно того же документа у Вас тоже не всё правильно, двойка соответствует нечетности, а не как Вы пишите четности. Какие настройки у слейва тоже ведь не указаны в посте, поэтому там комментировать особо не чего

Еслиб были ошибки компилятора, то проекты бы не зашился, так что подчеркиваний нету.
Согласен, в коменте ошибка, но я просто скопипастил давно работающий в ПЛК73 алгоритм, а на коменты уже давно не смотрю и не правлю, никому у меня на работе они не нужны.
НО, всё перечисленное не должно приводить к зависанию самого СПК и исключению мэйнтаска после открытия порта. Вопрос то был про зависание, а не про организацию обмена с блоками, благо с этим у меня никаких проблем нет.

ПС похоже мне помогли настройки вотчдога в моих зависаниях, поставил восприимчивость (слово то какое) визутаска на 10. Что в помощи, что у овенов про восприимчивость очень расплывчато написано. Пока не нашел пост с картинками от Александра Приходько о том, что восприимчивость - задача не уходит в исключение пока количество превышений времени вотчдога ПОДРЯД не станет равно значению восприимчивости. Слово подряд упущено, что совершенно меняет смысл (прям как в конституции).

capzap
12.05.2016, 15:59
Еслиб были ошибки компилятора, то проекты бы не зашился, так что подчеркиваний нетуя где то написал про ошибку? Что присваивается аргументу ComHandle в документе и что присваиваете Вы? Разве там в этой строчке у Вас нет предупреждения о не соответствии типов

а на коменты уже давно не смотрю и не правлютут не столько дело в комментах, сколько соответствует ли такая настройка параметрам связи в слейве

ПС похоже мне помогли настройки вотчдога в моих зависаниях, поставил восприимчивость (слово то какое) визутаска на 10. Что в помощи, что у овенов про восприимчивость очень расплывчато написано. Пока не нашел пост с картинками от Александра Приходько о том, что восприимчивость - задача не уходит в исключение пока количество превышений времени вотчдога ПОДРЯД не станет равно значению восприимчивости. Слово подряд упущено, что совершенно меняет смысл (прям как в конституции).в этом я вобще ни чего не понимаю, нормально работающая система ни когда не доведет даже до одного вачдога, не говоря о нескольких

slonegd
12.05.2016, 16:42
Что присваивается аргументу ComHandle в документе и что присваиваете Вы?

Вот спасибо, добрый человек. Я еще не испытал (пока занят сильно), но предупреждение действительно пропало. Оно, кстати, пропало и когда просто 3 написал.

А по поводу срабатывания вотчдога, то согласен, что срабатывать не должен, но визуализация мною вообще мало контролируется. Вчера на ночь оставил, установка была просто включена, ни один из алгоритмов не запущен, из меняющихся элементов тока часы строкой, да температуры. Пришел сутра, а он висит, по часам видно что в 21 20 завис. Каких-то жутких элементов нет в визуализации, все черточками, кружками и прямоугольниками нарисовал, плюс строки всякие на wstring. Мне вообще плевать, что визуализация зависла, но она из-за исключения работу всего остального тоже останавливает. Ком порт сразу вырубается, хотя казалось бы причем он тут.

a_gricaj
13.05.2016, 14:57
Ну моя проблема (зависание СПК) решилась, наверное дело было в работе с файлами, всем СПС за помощь....

Эдуард_Н
18.05.2016, 16:23
Запустил проект на СПК110, пока не включал управление котлами отвал модулей ни разу не наблюдался. Как только начал в программе использовать управление котлами модуль начали отваливаться и как-то сразу все (думаю прога виснет хотя визуализация при этом работает). При увеличении времени в "MainTask" вроде ведёт к лучшему, но при этом визуализация начинает притормаживать.
Кто чего посоветует?

Евгений Кислов
18.05.2016, 17:39
Как только начал в программе использовать управление котлами модуль начали отваливаться и как-то сразу все

Если есть возможность, отправьте архив проекта на e.kislov@owen.ru

приборист
18.05.2016, 18:07
Запустил проект на СПК110, пока не включал управление котлами отвал модулей ни разу не наблюдался. Как только начал в программе использовать управление котлами модуль начали отваливаться и как-то сразу все (думаю прога виснет хотя визуализация при этом работает). При увеличении времени в "MainTask" вроде ведёт к лучшему, но при этом визуализация начинает притормаживать.
Кто чего посоветует?

Проверять COM.slavesOk
И при отваливании модулей делать com.reset
Я только так смог победить это.

Говорят что с библиотеками этой проблемы нет, я проверить не успел.

Эдуард_Н
18.05.2016, 18:23
Проверять COM.slavesOk
И при отваливании модулей делать com.reset
Я только так смог победить это.


Как это сделать в CFC? Использую для связи "Mx110_drivers_3.5.4.5".

приборист
18.05.2016, 18:29
Как это сделать в CFC? Использую для связи "Mx110_drivers_3.5.4.5".
Тут я бессилен :)
Делал через стандартный конфигуратор.

Эдуард_Н
18.05.2016, 19:23
Если есть возможность, отправьте архив проекта на e.kislov@owen.ru
Отправил. За ранее спасибо.

Осинский Алексей
18.05.2016, 19:49
Запустил проект на СПК110, пока не включал управление котлами отвал модулей ни разу не наблюдался. Как только начал в программе использовать управление котлами модуль начали отваливаться и как-то сразу все (думаю прога виснет хотя визуализация при этом работает). При увеличении времени в "MainTask" вроде ведёт к лучшему, но при этом визуализация начинает притормаживать.
Кто чего посоветует?

Эдуард, давайте в теме о модулях продолжим?

Эдуард_Н
18.05.2016, 20:00
Эдуард, давайте в теме о модулях продолжим?

Хорошо, давайте.

Эдуард_Н
23.05.2016, 13:28
Запустил проект на СПК110, пока не включал управление котлами отвал модулей ни разу не наблюдался. Как только начал в программе использовать управление котлами модуль начали отваливаться и как-то сразу все (думаю прога виснет хотя визуализация при этом работает). При увеличении времени в "MainTask" вроде ведёт к лучшему, но при этом визуализация начинает притормаживать.
Кто чего посоветует?

Спасибо всем за рекомендации.
Сегодня в 8.15 утра применил все рекомендации, вроде пока нормально (6 часов полёт нормальный), не срок конечно, но всё таки. Посмотрим, что будет дальше.

a_gricaj
23.05.2016, 16:14
Продолжу свою тему другим вопросом....
Мой проект состоит из СПК107, МВ110-8A -2 шт,МВ110-2АС, МУ110-8Р, МВ110-16ДН, МУ110-6У, МВ110-224.2АС, частотник ПЧВ101
Все каналы всех модулей опрашиваются посредством "RISING EDGE".
Терминаторы подключены с каждой стороны, длина сети не более 2 метров - все на столе собрано
Запустил программу - ВСЕ ОК, опрос модулей идет.
Решил по экспериментировать с сетью - откинул коннектор (с RS-485) от СОМ-порта СПК, появились запрограммированные мною ошибки по связи- все OK.
Подключил коннектор обратно - все модули с частотником "подхватились", все нормально - связь восстановилась.
Передернул опять коннектор - опрос не возобновляется, еще раз передернул опрос восстановился и т.д. То есть СОМ-порт не виснет, а связь не восставливается каждый раз когда подключен сетевой кабель....
Когда с подключенным коннектором опрос не восстановился наблюдал такую ситуацию: значки модулей в дереве проекта(CODESyS) - красные треугольники - типа не находит модулей, но по светодиодам модулей видно опрос идет и светодиод "авария не загорается"(настроен сетевой Тайм-аут). Сигнал xError показывает, что связи нет.
Продолжил эксперимент и выяснил, что вся проблема в частотнике - без подключенного частотника с модулями стабильно (100%) восстанавливается связь. Как только подключаю к частотнику сеть (даже без его опроса) - связь падает со всеми модулями, или не падает (как повезет). Промерял осциллографом сигналы в сети - вроде импульсы без помех - прямоугольные.
Подскажите пожалуйста как эту проблему решить......

Заранее СПС!!!

slonegd
27.05.2016, 16:32
Заметил, что переменная .xAllSlavesOk не совсем правильно отображает состояние слейвов. Переменная тру, но фактически в кодесисе присутствуют восклицательные знаки. Заменил эту переменную на NOT(.xError or .xError и так далее) вместо .xAllSlavesOk и работать стало без перебоев в сети (ну то есть, если перебои появлялись, то связь восстанавливалась в соответствии с написанным алгоритмом).

slonegd
27.05.2016, 16:34
Подскажите пожалуйста как эту проблему решить......


тут надо на алгоритм восстановления связи смотреть.

a_gricaj
29.05.2016, 19:36
Заметил, что переменная .xAllSlavesOk не совсем правильно отображает состояние слейвов. Переменная тру, но фактически в кодесисе присутствуют восклицательные знаки. Заменил эту переменную на NOT(.xError or .xError и так далее) вместо .xAllSlavesOk и работать стало без перебоев в сети (ну то есть, если перебои появлялись, то связь восстанавливалась в соответствии с написанным алгоритмом).

С .xError стало лучше - 90% восстановления связи, а как программно "ресетнуть" ком порт????

slonegd
31.05.2016, 12:04
я сделал такую конструкцию


CASE restart_STEP OF
0: IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
a4_error_count:=a4_error_count+1;
IF a4_error_count>5 THEN
restart_STEP:=restart_STEP+1;
END_IF
ELSE
a4_error_count:=0;
END_IF
1: Modbus_Master_COM_Port.xStop:=TRUE;
Modbus_Master_COM_Port_1.xStop:=TRUE;
TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=TRUE;
a7.xReset:=TRUE;
a2.xReset:=TRUE;
a3.xReset:=TRUE;
a5.xReset:=TRUE;
a6.xReset:=TRUE;
a8.xReset:=TRUE;
a9.xReset:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
2: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=FALSE;
a7.xReset:=FALSE;
a2.xReset:=FALSE;
a3.xReset:=FALSE;
a5.xReset:=FALSE;
a6.xReset:=FALSE;
a8.xReset:=FALSE;
a9.xReset:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
3: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=TRUE;
Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
4: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=FALSE;
Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
5: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xStop:=FALSE;
Modbus_Master_COM_Port_1.xStop:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
6: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
TON_restart(IN:=FALSE);
restart_STEP:=0;
END_IF
END_CASE

С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.

Эдуард_Н
31.05.2016, 12:25
я сделал такую конструкцию


CASE restart_STEP OF
0: IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
a4_error_count:=a4_error_count+1;
IF a4_error_count>5 THEN
restart_STEP:=restart_STEP+1;
END_IF
ELSE
a4_error_count:=0;
END_IF
1: Modbus_Master_COM_Port.xStop:=TRUE;
Modbus_Master_COM_Port_1.xStop:=TRUE;
TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=TRUE;
a7.xReset:=TRUE;
a2.xReset:=TRUE;
a3.xReset:=TRUE;
a5.xReset:=TRUE;
a6.xReset:=TRUE;
a8.xReset:=TRUE;
a9.xReset:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
2: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=FALSE;
a7.xReset:=FALSE;
a2.xReset:=FALSE;
a3.xReset:=FALSE;
a5.xReset:=FALSE;
a6.xReset:=FALSE;
a8.xReset:=FALSE;
a9.xReset:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
3: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=TRUE;
Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
4: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=FALSE;
Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
5: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xStop:=FALSE;
Modbus_Master_COM_Port_1.xStop:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
6: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
TON_restart(IN:=FALSE);
restart_STEP:=0;
END_IF
END_CASE

С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.

А экспортный вариант можете сделать?

slonegd
31.05.2016, 13:21
А экспортный вариант можете сделать?

Не понимаю, что значит экспортный.
Modbus_Master_COM_Port - это название ком порта, я оставил, что выдает по умолчанию.
Modbus_Master_COM_Port_1 - второй ком порт.
а4,а5 и так далее - так называются у меня блоки расширения (слейвы).
restart_STEP - просто int, больше как в этом куске кода нигде не используется.
a4_error_count - int, считает ошибки, больше как в этом куске кода нигде не используется.
TON_restart - функциональный блок TON, больше нигде не используется.

Вот картинка с деревом проекта, может так будет понятнее.
24659

a_gricaj
01.06.2016, 09:57
я сделал такую конструкцию


CASE restart_STEP OF
0: IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
a4_error_count:=a4_error_count+1;
IF a4_error_count>5 THEN
restart_STEP:=restart_STEP+1;
END_IF
ELSE
a4_error_count:=0;
END_IF
1: Modbus_Master_COM_Port.xStop:=TRUE;
Modbus_Master_COM_Port_1.xStop:=TRUE;
TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=TRUE;
a7.xReset:=TRUE;
a2.xReset:=TRUE;
a3.xReset:=TRUE;
a5.xReset:=TRUE;
a6.xReset:=TRUE;
a8.xReset:=TRUE;
a9.xReset:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
2: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
a4.xReset:=FALSE;
a7.xReset:=FALSE;
a2.xReset:=FALSE;
a3.xReset:=FALSE;
a5.xReset:=FALSE;
a6.xReset:=FALSE;
a8.xReset:=FALSE;
a9.xReset:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
3: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=TRUE;
Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
4: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xResetComPort:=FALSE;
Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
5: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
Modbus_Master_COM_Port.xStop:=FALSE;
Modbus_Master_COM_Port_1.xStop:=FALSE;
TON_restart(IN:=FALSE);
restart_STEP:=restart_STEP+1;
END_IF
6: TON_restart(IN:=TRUE,PT:=T#200MS);
IF TON_restart.Q THEN
TON_restart(IN:=FALSE);
restart_STEP:=0;
END_IF
END_CASE

С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.

Спс за пример, я уже сделал, правда чуть не так, но смысл тот же (правда без остановки СОМ-порта) - заметил, что если отвалились все модуля - достаточно отключить их опрос, "ресетнуть" их и возобновить опрос.

Александр Приходько
01.06.2016, 23:03
В СПК1хх в случае проблем с обменом рекомендуется производить закрытие порта. Это недокументированная фича. В случае закрытия порта весь внутренний буфер приема очищается. Таким образом это положительным образом в некоторых ситуациях влияет на обмен.

Эдуард_Н
02.06.2016, 06:57
В СПК1хх в случае проблем с обменом рекомендуется производить закрытие порта. Это недокументированная фича. В случае закрытия порта весь внутренний буфер приема очищается. Таким образом это положительным образом в некоторых ситуациях влияет на обмен.

Когда решите проблему со связью по 485 в СПК1хх эти действия не нужны будут?

ufaman
29.06.2016, 14:06
я сделал такую конструкцию



Мастер.xStop:=TRUE;
Пауза200ms;

Слейв.xReset:=TRUE;
Пауза200ms;
Слейв.xReset:=FALSE;
Пауза200ms;

Мастер.xResetComPort:=TRUE;
Пауза200ms;
Мастер.xResetComPort:=FALSE;
Пауза200ms;

Мастер.xStop:=FALSE;
Пауза200ms;



А после останова Мастера сброс на Слейвы разве проходит? Или xReset только для инициализации соответствующих ФБ?
И почему везде такие большие паузы?

slonegd
22.07.2016, 16:01
Весь порядок действий слизал где-то с форума. Паузы наобум, насколько можно меньше не экспериментировал. Я вообще по этому алгоритму аварийное отключение определял. Если блоки не отвечают, значит на них нет питания. Как только питание появлялось обратно, связь восстанавливалась, иногда раза с пятого, иногда сразу.