PDA

Просмотр полной версии : ПЛК110[M02] останавливается цикл при подключении входных дискретов



mitroshkin
13.06.2021, 13:23
Стоит счетчик в конфигураторе задач на 100мсек. Подключено 12 DI через встроенные 24В, 3 в сработке. В какой-то момент цикл встает. Счетчик не считает, код не выполняется. Опросы внешки по 2 портам идут. Только пересброс по питанию. Откидываю 24В идущие на DI - все пашет без остановки. ватчдог стоит по всем модулям и не отрабатывает.
Второй контроллер не отрабатывает половину DI и при подключенных 24В останавливается через 1,2сек. Но он вообще глючит по страшному, будем по гарантии менять.
Что поможет?

A.Simonov
14.06.2021, 13:13
Что поможет?

Добрый день.

Поможет нормальное описание проблемы, желательно с приложенным проектом.

Письмо лучше отправить на support@owen.ru а не на форум.

В письме подробно опишите следующие пункты:
1) Какое оборудование используется? (маркировка плк, прошивка плк)
2) Какая схема подключения? (что подключене, куда и как)
3) Что делаете, что не получается, какой результат ожидаете?
4) Приложите ваш проект

mitroshkin
15.06.2021, 10:09
Добрый день.
Поможет нормальное описание проблемы, желательно с приложенным проектом.


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

Пол дня потратил на проверку-перепроверку 5 страниц работы с указателями, а проблема крылась в опечатке проверки индекса массива.... Попробуй в ST ее заметить...

Rake Runner
15.06.2021, 10:29
Любой компилятор Си мозг выест, если есть возможность выхода за пределы индекса.

А вы много компиляторов Си использовали?

55569


Пол дня потратил на проверку-перепроверку 5 страниц работы с указателями, а проблема крылась в опечатке проверки индекса массива.... Попробуй в ST ее заметить...

Конечно, ведь использовать символьные константы для обозначения границ массива - это прям так сложно.

melky
15.06.2021, 10:34
Указателей вообще сейчас нет в языках высокого уровня. Точнее они есть, но в незащищенном режиме исполнения, который еще надо умудриться включить.
Работаете в ПЛК с указателями, будьте любезны контролировать сами...

Филоненко Владислав
15.06.2021, 13:33
как насчет прочтения документации 55570

Жалко что ради "удобства" эта функция оставлена "опциональной".
Как и опции проверок доступа к памяти при компиляции.

mitroshkin
15.06.2021, 13:46
будьте любезны контролировать сами...

Так у меня проблема не с указателями:) Читайте внимательнее...

mitroshkin
15.06.2021, 13:50
как насчет прочтения документации 55570

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

mitroshkin
15.06.2021, 13:53
А вы много компиляторов Си использовали?
Конечно, ведь использовать символьные константы для обозначения границ массива - это прям так сложно.

Мой компилятор меня постоянно долбит проверь индексы:)
Я опечатался в проверке индекса, обнулял не ту переменную. Программка была второстепенная и я даже про нее забыл...

Филоненко Владислав
15.06.2021, 18:14
о какой библиотеке идет речь? Функция CheckBounds и так встроена в прошивку, её реализацию только нужно самому писать, потму что не всякому хочется чтоб как в документации неправильный индекс превращался в один их крайних диапазона

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

krollcbas
15.06.2021, 22:07
Мне все таки непонятно зачем специалисты C# берутся за работу,за несвойственную их характеру, тему.
Ведь столько работы вокруг где есть, там протокол написать, сделать сложную систему отчетов.
Не поверю что тут есть достойная программиста C# оплата.

Ну зачем в данной задаче индексы массивов?
Вы делаете нейронную сеть, какой-то самообучающийся алгоритм?

mitroshkin
16.06.2021, 08:55
Мне все таки непонятно зачем специалисты C# берутся за работу,за несвойственную их характеру, тему.
Ведь столько работы вокруг где есть, там протокол написать, сделать сложную систему отчетов.
Не поверю что тут есть достойная программиста C# оплата.

Ну зачем в данной задаче индексы массивов?
Вы делаете нейронную сеть, какой-то самообучающийся алгоритм?

Вы один из них?:) Я в си шарп полный ноль...
Раскажите как вы пользуетесь массивами без индекса? DATA[n] - для понимания n - это индекс.
Если не пользуетесь массивами, то как пишете, например, файлы?

krollcbas
16.06.2021, 09:12
Конечно, при использовании массивов использую индексы, осторожно.
"Писать файлы" - любопытно для чего? Какая общая цель данного действия.

В одном моем проекте обжарки кофе тренды, например, пишутся на флешку.
Доработал/адаптировал существующий у ОВЕН пример
55593

mitroshkin
16.06.2021, 09:13
И в чем "правильность кодирования"? В подходе - я рукожоп, держите меня семеро? А на хрена тому кто уверен в своем коде бестолковая молотилка ? Тута ТС melky'ому - типа это индекс, это не указатель)) А какая разница то если кривое обращение к памяти ?

пс
Странно что ТС на вопрос о проекте не ответил - "а зачем вам мой секретный код?"
Вот истинный програмиист!!!:) Че написал - сам понял? :) Где комментарии?

mitroshkin
16.06.2021, 10:16
Конечно, при использовании массивов использую индексы, осторожно.
"Писать файлы" - любопытно для чего? Какая общая цель данного действия.

"Ну зачем в данной задаче индексы массивов?"

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

Про какую задачу вы говорите?

mitroshkin
16.06.2021, 15:32
Не пробовали документацию прочитать на предмет ретайн?

А вы не пробовали в живую поработать, потом по форумам полазить и в конце прояснить что при прошивке все трется, особенно modbus slave (который ретайн по умолчанию).

mitroshkin
16.06.2021, 15:34
Вот оно - клиповые гуппи-программисты !!! :) Выхватываем чего-то откуда-то и пытаемся понять без контекста. Что было до того - не имеет значения. А зачем ? Ведь память 5 секунд, своё же - забыли, нужны коменты.

Опять ничего не понял... я умею переменные инкрементировать, даже к ST привык с его паскалем, но для чего данная информация?

capzap
16.06.2021, 15:47
А вы не пробовали в живую поработать, потом по форумам полазить и в конце прояснить что при прошивке все трется, особенно modbus slave (который ретайн по умолчанию).

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

mitroshkin
16.06.2021, 16:50
встречный вопрос, а зачем Вы прошиваете так часто, чтоб об этом можно было говорить. При отладке проекта достаточно онлайн изменений, когда проект готов создается загрузочное приложение, если уж понадобилось прошивку сменить на новую, ну можно же почитать расширенную документацию, понять в каком файле хранятся ретайн переменные, через ПЛК-браузер выгрузить этот файл, после прошивки загрузить файл, как Вам такое Митрошкин?

Ох эти сказочки, ох эти сказочники.... :) Это прокатит если проект 3 строчки.
А вы пробовали переписывать ретайн через ПЛК-браузер? например раз 15 за день...
А я имею 1 битик, который все мои переменные одним махом закидывает в файл и автоматом файл подтягивается при запуске проекта. Написание данной приблуды с изученим либы заняло у меня 3-4 часа. Оно того стоит.

mitroshkin
16.06.2021, 21:34
https://owen.ru/forum/showthread.php?t=14918&p=109415&viewfull=1#post109415 так что ли?
нет не пробовал, у меня с мозгами всё в порядке, зачем эта бессмыслица, еще раз спрошу? Вы либо после каждого обнуления контроллера записывайте на свои место одни и те же значения, либо вообще не портите плк частыми прошивками в истинном их значении. Для изменения проекта достаточно подправить код и по новой подключится онлайн, соглашаясь на изменения, тогда ретайны останутся их даже трогать не надо

Т.е. ваш совет воспользоваться ПЛК браузером для сохранения ретайн уже оказывается бессмыслицей?
1. При создании больших проектов программа пишется и отлаживается модульно - что есть полный перезагруз контроллера.
2. ПЛК110 есть большой гемморойный глюк, который заставляет подбирать и перебирать параметры обменов через порт много раз и при каждой замене любой настройки - полный перезагруз контроллера.
3. Мне досталась в придачу к ПЛК110 панель "уважаемого" производителя СП315 - пришлось перелопачивать проект что бы это чудо заработало - каждый раз полный перезагруз контроллера:)

"Вы либо после каждого обнуления контроллера записывайте на свои место одни и те же значения" - 600 значений записать в свои места? В codesys? Он кодировку отечественную поддерживать не хочет, про EXСEL разработчики даже не слышали...

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

mitroshkin
16.06.2021, 21:57
где я написал, что можно сохранять ретайн через браузер? Я написал что штатный ретайн формируется в файл, который можно стянуть прежде чем обнулять память плк, а потом по мере необходимости заливать обратно если там есть ценная информация.

Внимательнее почитайте свои сообщения.


этот бред свойственен новичкам. Ни когда такого не происходило, мой проект может содержать до 9 объектов, работающие не зависимо, к ним до двух пид-регуляторов. По рецептуре, 15 рецептов в которых до 15 операций для каждой время или температура, скорость редуктора, время работы и паузы, плюсом еще общие системные параметры такие как коэффиценты регуляторов и всякое по мелочи, в итоге более 1000 параметров и я не парюсь что что то не сохраняется и надо зачем то в ручную вводить
Письками померяемся?:)))) Пишите свои коды как хотите, я же вам не советую писать данные в файл...


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

какой файл? откуда? он в контроллере как лежал, так и лежит, никому не мешает, согласно документации:))) Если я его считываю при пуске программы, то это нормальная практика.

Филоненко Владислав
17.06.2021, 08:58
Что это за глюк с подбором параметров портов связи? Вы перебором скорость подбираете?

mitroshkin
17.06.2021, 11:05
Что это за глюк с подбором параметров портов связи? Вы перебором скорость подбираете?

При чем тут скорость:) ее диктуют клиенты. В ПЛК режим автоматического опроса, по умолчанию который 100млс. Вот с им и колдую. Через сутки работы на ПЛК падают сокеты по MODBUS TCP и опросы по 485 становятся какие-то невнятные и очень редкие. При тайминге 500млс запрос-ответ раз в 10-20 сек и то не все слейвы. Ошибок при этом никаких. Цикл программы в норме. Все алгоритмы отрабатывают.
TCP вообще не имеет никаких настроек, 485 - никакой диагностики, но подозреваю что ложит систему он.

Филоненко Владислав
18.06.2021, 13:01
А Вы считали реально возможный темп опроса? По симптомам Вы опрашиваете чаще чем это возможно по реальной сети.

mitroshkin
18.06.2021, 18:05
А Вы считали реально возможный темп опроса? По симптомам Вы опрашиваете чаще чем это возможно по реальной сети.

Здесь получается нужно укладываться в (длину посылки+таймаут) * количество запросов (считаю что таймаут будет дольше ответа). И если я поставлю период больше максимального цикла опроса, то обмены должны стать ровно?
Как ПЛК формирует запросы? он упаковывает данные или каждый регистр читает раздельно?

Посчитал без упаковки 5 секунд. Если без таймаутов - 2 секунды... Это в идеале.

mitroshkin
18.06.2021, 21:44
А посчитал 1.13 секунды. Быстрее таки.

Я может исходные не очень верно внес. У меня 3 слейва с 40 DWORD всего и 10 слейвов с 60 WORD всего. Получается 40 посылок по 12 байт и 60 по 10 байт. Округлим 100 по 12 - при 9600 и байте = 10 бит: 1/9600 * 100 * 12 * 10 = 1,25 сек в одну сторону. Ответ на байт больше, т.е. + 10% с задержкой на ответ. Итого ~2,7сек. Проектанты козлы. Демпингуют на разработку, автоматчика нет, еще и госконтракт... Они туда еще и счетчики электроэнергии повесили, которые на гостовском протоколе и стартуют на 300 бодах.... пока выкинули, может не вспомнят...
Я так понимаю самому писать смысла нет, быстрее не будет.

Еще по ходу таймаут он считает с начала запроса и фиксирует в конце ответа.

Филоненко Владислав
19.06.2021, 09:45
не точно укладываться, а посчитать пропускную способность шины (на 115200) это 11520 байт в секунду для передачи в одну сторону без пауз, чего не бывает.
Обычно паузу запрос-> ответ берем 10мс, паузу между запросами 1 мс, длина посылки+ответа 20 байт.
1,7мс+10+1=13 мс на запрос. 76 запросов в секунду.
Для построения надёжных сетей нужен запас, берем 66% пропускной способности, 50 запросов в секунду.

Далее считаем, если мастер имеет период опроса 100мс, то 50 запросов в секунду реализуется при опросе 5 параметров в мастере.
Если Slave гарантированно (а не самый быстрый вариант) отвечает за 3 мс, то можно будет 70-80 запросов в секунду.
Для мастеров с TCP может быть еще быстрее, однако даже теоретически более 500 запросов в секунду невозможны.

Однако я наблюдал у клиентов мастера с 10 мс периодом опроса и 300-ми опрашиваемыми параметрами.

Филоненко Владислав
19.06.2021, 09:46
Здесь получается нужно укладываться в (длину посылки+таймаут) * количество запросов (считаю что таймаут будет дольше ответа). И если я поставлю период больше максимального цикла опроса, то обмены должны стать ровно?
Как ПЛК формирует запросы? он упаковывает данные или каждый регистр читает раздельно?

Посчитал без упаковки 5 секунд. Если без таймаутов - 2 секунды... Это в идеале.

ПЛК при опросе из конфигурации каждый параметр опрашивает независимо. Если нужны групповые запросы и сложная логика прореживания - welcome в библиотеку мастера, конфигурация для простых задач.

Филоненко Владислав
19.06.2021, 09:49
Я может исходные не очень верно внес. У меня 3 слейва с 40 DWORD всего и 10 слейвов с 60 WORD всего. Получается 40 посылок по 12 байт и 60 по 10 байт. Округлим 100 по 12 - при 9600 и байте = 10 бит: 1/9600 * 100 * 12 * 10 = 1,25 сек в одну сторону. Ответ на байт больше, т.е. + 10% с задержкой на ответ. Итого ~2,7сек. Проектанты козлы. Демпингуют на разработку, автоматчика нет, еще и госконтракт... Они туда еще и счетчики электроэнергии повесили, которые на гостовском протоколе и стартуют на 300 бодах.... пока выкинули, может не вспомнят...
Я так понимаю самому писать смысла нет, быстрее не будет.

Вы люто не учитываете паузы между запросом и ответом. А на некоторых протестированных мною приборах они легко были и в 300 мс...

mitroshkin
19.06.2021, 11:42
Вы люто не учитываете паузы между запросом и ответом. А на некоторых протестированных мною приборах они легко были и в 300 мс...

Пока в тех слейвах что висят в тех. доке четко прописаны задержки ответа со ссылкой на стандарты по модбас....
У меня вся проблема что 3 слейва имеют максимум 9600, а это капец.

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

Какое максимальное количество слейвов можно повесить? у меня на 26 все встало....

Spawn
20.06.2021, 03:41
Пока в тех слейвах что висят в тех. доке четко прописаны задержки ответа со ссылкой на стандарты по модбас....
У меня вся проблема что 3 слейва имеют максимум 9600, а это капец.

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

Какое максимальное количество слейвов можно повесить? у меня на 26 все встало....

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

Сначала опрос всех "быстрых" слейвов на скорости 115200, например, потом, переоткрываем порт со скоростью 9600 и опрашиваем "медленных", и так по кругу...

И да... как указал Филоненко Владислав, на библиотеках можно организовать групповой опрос, что позволит повысить "производительность"...

mitroshkin
20.06.2021, 15:36
Если перейти на библиотечный вариант, переоткрывать порт с разными скоростями для разных слейвов (разбить их по группам), не быстрее получится?

Сначала опрос всех "быстрых" слейвов на скорости 115200, например, потом, переоткрываем порт со скоростью 9600 и опрашиваем "медленных", и так по кругу...

И да... как указал Филоненко Владислав, на библиотеках можно организовать групповой опрос, что позволит повысить "производительность"...
Ну у нас вторая группа тока 19200:). Потом пооизводители оборудывания считают что только им понятен принцип адресации регистров, потому группы не складываются почти ни как... Сейчас пока работает, с тормозами... Нет времени писать библиотечно. Хотя там можно очень производительно поделить запросы, как то медленные запросы выставлять по очереди после цикла опроса всех быстрых.
Запустим обьект, можно сесть переписать.