PDA

Просмотр полной версии : MB Slave. Максимальное количество регистров



sanya0971
06.04.2023, 13:16
Добрый день!
ПЛК 160М02.
Сколько максимум переменных я могу создать в каналах MB Slave?
На одном контроллере у меня немного их - порядка 600. Все работает, сканеро и панелью я их вижу.
На втором их около 3000. Причем все 3000 не уместились в один канал Slave, пришлось создавать еще 2.
67055
Вот конечный адрес первого Slave:
67056
Второго:
67057
Третьего:
67058

Суть в том, что если я удалю второй и третий слейв (в каждом из которых по 1000 регистров), то связь с плк устанавливается и все ок.
Если добавляю второй третий Slave с парой регистров, тоже все работает (т.е то, что их три и они на одном порту 502 никакого конфилкта не вызывает).
Возникает ощущение, что превышаю максимальное количество регистров для ПЛК в целом...
При прогрузке ПЛК с 3000 регистрами - время отклика 100-250мс. (не время цикла, а через CMD Windows) что очень много.
Когда убираю до одного - 2-5мс, стандартно.
Подскажите, что не так, спасибо!

melky
06.04.2023, 13:24
Раньше были модификации ПЛК L и M у которых было разное ограничение при работе через Конфигурацию. Обходилось при работе через библиотеки. Как на новых не знаю, но вероятно принцип остался тем же.

По количеству сокетов на один порт вроде до 5-ти на новых версиях. В старых один порт, один сокет.

kondor3000
06.04.2023, 13:31
Ограничение по любому есть, а вот сколько, надо проверять. 6346 регистров, по любому уже перебор.
Сам не пробовал, но где то писали, что 3000 регистров работает.

Спорягин Кирилл
06.04.2023, 13:35
На размер конфигурации есть ограничения.
Подробнее читайте здесь: https://owen.ru/forum/showthread.php?t=25302&page=3&p=255741&viewfull=1#post255741

Николай Суриков
06.04.2023, 14:14
А как узнать размер конфигурации здесь: https://ftp.owen.ru/CoDeSys23/06_Documentation/Plc_EvaluationIoMemory.pdf

Спорягин Кирилл
06.04.2023, 14:32
А как узнать размер конфигурации здесь: https://ftp.owen.ru/CoDeSys23/06_Documentation/Plc_EvaluationIoMemory.pdf

Вот это класс, а то Владислав Филоненко упоминал, как это делать, да не очень понятно было, а тут все разложено!

sanya0971
06.04.2023, 15:27
Сам файл загрузочный минут 30 заливается, хотя на первом плк, с меньшим объемом за пару секунд улетел. Связь по TCP/IP.
67061
п.с у первого плк размер по вышеописанному мануалу - 70кб.
у этого он даже не создается после ожидания в 30 мин.
Просто каждый клапан, аналоговый датчик, мотор, мотор с ЧП имеет свою структуру в 10-15 регистров. И таких элементов там довольно много. Плюс настройки системы, плюс резервы возможные.

Николай Суриков
06.04.2023, 15:54
Опытным путем было установлено, максимальное количество регистров (причем не важно REAL это или WORD) 860 штук в пустом проекте да ПЛК160-М02.
Просто может быть, если такой большой проект надо использовать ПЛК210? Для него есть библиотека OwenCommunication. А как известно, что при использовании библиотеки для обмена, нет ограничения на область ввода-вывода. Хотя с 3000 регистров и библиотека может не справиться.

sanya0971
06.04.2023, 16:05
Опытным путем было установлено, максимальное количество регистров (причем не важно REAL это или WORD) 860 штук в пустом проекте да ПЛК160-М02.
Просто может быть, если такой большой проект надо использовать ПЛК210? Для него есть библиотека OwenCommunication. А как известно, что при использовании библиотеки для обмена, нет ограничения на область ввода-вывода. Хотя с 3000 регистров и библиотека может не справиться.
Благодарю за рекомендацию.
П.с размер 220кбайт получился((

Rask
06.04.2023, 16:11
67058

Такое в общем то громадное количество регистров - думаю куда столько?)))
Посмотрел картинки - такое ощущение что дискретный сигнал (бит - суда по названию) передаётся 2byte (1 регистр).
Если так конечно можно.
Может все таки оптимизировать проект?

sanya0971
06.04.2023, 16:22
Такое в общем то громадное количество регистров - думаю куда столько?)))
Посмотрел картинки - такое ощущение что дискретный сигнал (бит - суда по названию) передаётся 2byte (1 регистр).
Если так конечно можно.
Может все таки оптимизировать проект?
там задержка на появление аварии.
в целом есть где можно оптимизировать, но я сомневаюсь, что в 2 раза

Спорягин Кирилл
06.04.2023, 16:23
Благодарю за рекомендацию.
П.с размер 220кбайт получился((

Про 860 регистров - это все же не верная информация, я в своих проектах передаю на верх по 5 Кб (т.е. если в регистрах, то 2,5 тыс., но у меня все же это Кб, так как все по dword) и все работает.
Но, если Вы передаете 1 бит с помощью регистра, то оптимизировать проект разумеется надо.

Спорягин Кирилл
06.04.2023, 16:41
Привожу пример такой конфигурации в картинках.
На картинка видно, что проект содержит 2 Modbus Slave.
В первом слейве 981 dword (т.е. в регистрах 1962).
Во втором слейве 303 dword (т.е. 606 регистров).

Конфигурация при этом 146 Кб, если ее вычислять по указанному выше способу.
И все работает и грузится.

Читайте тему на форуме о размере конфигурации (то что выше). Там Филоненко говорит о каких-то блоках по 100 Кб.
В общем тут нужно методом проб, но как факт конфигурация может быть большой!

Спорягин Кирилл
06.04.2023, 16:42
Замечу также, что я разумеется не указываю имена переменным в конфигурации, а навожу на конфигурацию структуру данных, поэтому в конфигурации ничего, кроме "голых" элементов.

1exan
06.04.2023, 16:47
Привожу пример такой конфигурации в картинках.
На картинка видно, что проект содержит 2 Modbus Slave.
В первом слейве 981 dword (т.е. в регистрах 1962).
Во втором слейве 303 dword (т.е. 606 регистров).

Конфигурация при этом 146 Кб, если ее вычислять по указанному выше способу.
И все работает и грузится.

Читайте тему на форуме о размере конфигурации (то что выше). Там Филоненко говорит о каких-то блоках по 100 Кб.
В общем тут нужно методом проб, но как факт конфигурация может быть большой!

Подскажите, каким образом вы делаете "упаковку" данных в сетевые "dword"-ы (ну явно не вся же передаваемая информация имеет размер 4 байта) ?

Опоздал немного, а как производится "наводка"?

Спорягин Кирилл
06.04.2023, 16:59
Подскажите, каким образом вы делаете "упаковку" данных в сетевые "dword"-ы (ну явно не вся же передаваемая информация имеет размер 4 байта) ?

Опоздал немного, а как производится "наводка"?

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

Я создаю структуры для нужных мне элементов.
Например.
Struct Valve
Command : word;
State : word;
Mode : word;
Alarm : word;
end_struct

И общую структуру, которая включает в себя эти структуры.
Struct PanelData
Valve1 : Valve;
Valve2 : Valve;
Valve3 : Valve;
и т.д.
end_struct

Затем объявляю (обычно в глобальных данных) данную структуру следующим образом:

PanelData AT %QD7.1.0 : PanelData;

где %QD7.1.0 - адрес первого 4х байтового элемента в нужном мне Модбас слейве.

ВСЕ!

Далее, если в Valve1.Alarm := 1, она появляется в нужном месте в области передачи в слейв.

Желательно в панели тоже использовать средства "наведения", чтобы в панели самому не считать номер получившегося регистра.
Но не на всех панелях это работает, поэтому этот метод не всегда хорош.

Спорягин Кирилл
06.04.2023, 17:01
Но в любом случае, можно структуры внутренние (в моем примере Valve) огранизовать так, чтобы они были кратны чему-то, тогда можно их элементы легко рассчитывать по номеру "клапана" и элемента в нем. Ну, и тогда даже если в панели нет средств "наведения", то рассчитать номер регистра можно, без особых сложностей.

1exan
06.04.2023, 17:05
Где-то на форуме я это описывал, но уже сам не смог найти где, поэтому коротко повторю.

Я создаю структуры для нужных мне элементов.
Например.
Struct Valve
Command : word;
State : word;
Mode : word;
Alarm : word;
end_struct

И общую структуру, которая включает в себя эти структуры.
Struct PanelData
Valve1 : Valve;
Valve2 : Valve;
Valve3 : Valve;
и т.д.
end_struct

Затем объявляю (обычно в глобальных данных) данную структуру следующим образом:

PanelData AT %QD7.1.0 : PanelData;

где %QD7.1.0 - адрес первого 4х байтового элемента в нужном мне Модбас слейве.

ВСЕ!

Далее, если в Valve1.Alarm := 1, она появляется в нужном месте в области передачи в слейв.

Желательно в панели тоже использовать средства "наведения", чтобы в панели самому не считать номер получившегося регистра.
Но не на всех панелях это работает, поэтому этот метод не всегда хорош.

Понятно, спасибо!
Интересно, конфигурация, составленная из DWORD-ов и конфигурация из переменных нужного размера с одинаковым общим размером переменных будут иметь разницу в итоговом размере?

Спорягин Кирилл
06.04.2023, 17:11
Понятно, спасибо!
Интересно, конфигурация, составленная из DWORD-ов и конфигурация из переменных нужного размера с одинаковым общим размером переменных будут иметь разницу в итоговом размере?

Думаю, что способ с dword компактнее. Но не проверял.

1exan
06.04.2023, 17:24
Думаю, что способ с dword компактнее. Но не проверял.

Проверил, из ~22кб (212 регистров, в основном 2byte) получилось ~13.

sanya0971
15.04.2023, 10:45
Ужал в 6 раз количество регистров. При этом размер того самого файла после ключевого слова CommConf стал равен 85кбайт. Возможно будет меньше, если у каждого регистра убрать описание. Пока полет нормальный.
Есть несколько вопросов:
1) Создал загрузочный проект в онлайне. Контроллер стал уходить в бесконечный рестарт при сбросе питания со шкафа. Порт Ethernet перестает работать, USB остается рабочим. Подключаешься по USB к ПЛК и он перестает перезагружаться. Что это вообще за странное поведение?
Основную программу, в которой вызываются другие блоки, перенес из Freewheeling в Cyclic с временем t#40ms. Все стало ок. В чем может быть проблема ? Понимаю, что стоит выложить debug.txt, но возможность только во вторник будет...
2) Почему сохраняемые переменные (Retain) реинициализируются при загрузке изменной аппаратной конфигурации. Как сделать, чтобы этого не происходило?
3) Являются ли переменные MB Slave сохраняемыми?
4) Точно ли 160м02 считается плк для средних систем автоматизации ?
- Retain памяти слишком мало (16кб), что в 2 раза меньше, чем у малыша S7-312 и в 5 раз меньше, чем у самой базовой модели S7-1511.
- Нужно задумываться о размере некоего файла, который отвечает за описание аппаратной конфигурации. И не дай бог, чтобы он превысил 100кб. Это же абсурд.
- Отсутствие нормального диагностического буфера.
- Неработающие переключатели режимов на борту ПЛК. Переводишь в СТОП, он продолжает работать. Переводишь в Работа, он остается в СТОП. Режим менять получается только через Codesys.
- Рестарты плк. Программа без косвенной адресации, без обращения к несуществующим областям памяти. Все прописано строго через обращение к символьным именам переменным.
Спасибо.

In_Da_Cher_A
15.04.2023, 11:50
2) Почему сохраняемые переменные (Retain) реинициализируются при загрузке изменной аппаратной конфигурации. вы изменили аппаратную конфигурацию. И вы хотите, чтобы всё остальное при этом осталось как раньше? я сомневаюсь, что даже сименс позволяет такие фокусы

Как сделать, чтобы этого не происходило?откройте руководство по Кодесис, там подробно написано что и как проихсодит с ретейнами

Существуют два типа реманентных переменных:
Retain variables, сохраняющие свои значения при выключении питания и сбросе 'Онлайн' 'Сброс' ('Online' 'Reset') в CoDeSys.
Persistent variables сохраняют свои значения при сбросе без выключения питания, управляемом останове системы исполнения (стоп, старт).
только недавно кто-то уже страдал на эту тему

Переводишь в СТОП, он продолжает работать. Переводишь в Работа, он остается в СТОП.
откройте руководство, и прочтие, что там написано
67327
какие претензии к ОВЕНу? это руководство на КДС, которые вы не читали

Точно ли 160м02 считается плк для средних систем автоматизации ?а что в вашем понимании "средняя" система? 300-400 точек ввод/вывод - это средняя система, он спокойно работает, просто не надо насиловать его теми задачами, к которым он не предназначен

sanya0971
18.04.2023, 18:35
вы изменили аппаратную конфигурацию. И вы хотите, чтобы всё остальное при этом осталось как раньше? я сомневаюсь, что даже сименс позволяет такие фокусы

загрузка измененного железа никогда не терла сохраняемые переменные блоков данных, если вы не поменяли структуру самого дб.

откройте руководство по Кодесис, там подробно написано что и как проихсодит с ретейнами
ок, перечитаю


67327
спасибо за скрин.


Еще пара вопросов
1) Раз в час (может раньше, может позже) плк уходит в ребут по ошибке:

0 KERNEL LOADED
17 E PLC was reset by watchdog!
14 PCL was reseting by watchdog

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

2) На борту 160м02 есть аналоговые входа
Почему, настроив параметры MinFv = 0, MaxFv = 16 выдаются значениям из старого диапазона 0-20000 ?
Программу делал как загрузочную, питание скидывал. Не помогает.

kondor3000
18.04.2023, 19:38
1) watchdog может быть по разным причинам, в том числе время цикла превысило допустимую величину. Проверьте блоком статистики.
2) После изменения параметров входов и создания Загрузочного проекта, блок надо перезагрузить по питанию, а например для входов по напряжению, можно поставить 0-10 ( то есть 10 В),
проверить можно и на простеньком проекте не заливая туда по 100 Кбайт

sanya0971
18.04.2023, 19:46
1) watchdog может быть по разным причинам, в том числе время цикла превысило допустимую величину. Проверьте блоком статистики.
2) После изменения параметров входов , блок надо перезагрузить по питанию, а например для входов по напряжению, можно поставить 0-10 ( то есть 10 В)
1) т.е час два работает, система стоит, никто ничего не запускал... и потом бац и превысило? В логах есть код ошибки какой может?
2) Дак это не отдельный модуль, если вы про это, это каналы на борту самого ПЛК. Питание скидывал, потом сразу подключался к нему в онлайн, без всяких прогрузок итд (прогу и конфигурацию запоминает).
Где-то нашел на форуме, что надо выхода в 0-10 аналоговые еще выставить. Тоже не помогло

kondor3000
18.04.2023, 19:57
1) т.е час два работает, система стоит, никто ничего не запускал... и потом бац и превысило? В логах есть код ошибки какой может?
2) Дак это не отдельный модуль, если вы про это, это каналы на борту самого ПЛК. Питание скидывал, потом сразу подключался к нему в онлайн, без всяких прогрузок итд (прогу и конфигурацию запоминает).
Где-то нашел на форуме, что надо выхода в 0-10 аналоговые еще выставить. Тоже не помогло

Я не про отдельный модуль, а про ПЛК160, тут на днях один тоже говорил, что не получается, потом ничего, сказал, всё заработало.
Проверить можно и на простеньком проекте не заливая туда по 100 Кбайт. 0-10 В на выходах надо выставить если ПЛК с букой У, не путайте со входами.

sanya0971
18.04.2023, 20:08
Я не про отдельный модуль, а про ПЛК160, тут на днях один тоже говорил, что не получается, потом ничего, сказал, всё заработало.
Проверить можно и на простеньком проекте не заливая туда по 100 Кбайт. 0-10 В на выходах надо выставить если ПЛК с букой У, не путайте со входами.
вот такие у меня 160-24.У-М

kondor3000
18.04.2023, 20:40
вот такие у меня 160-24.У-М

Вот вам и надо на выходах 0-10 В поставить. Буква У - выходы напряжения, буква И-ток, буква А- универсальные. https://owen.ru/product/plk160/specifications