Нет это вот это (см. картинку).
Вид для печати
А когда я удалил значение поля Name для канала (см. картинку), то пустой проект с 999 dwordами стал весить еще меньше, а именно - 99 671 байт.
Да, теперь проект с 999 dwordами успешно работает.
Спасибо.
ну так то М02 нужно тогда сравнивать со своим старшим братом, а не с соткой чтоб о размерах говорить. На самом деле то что структура конфигурации будет отличаться должно быть понятно потому что контроллер обновленый, то что там много бесполезной информации, так все жеж делается на основе статистики за предыдущие годы, ни кому и в голову не приходит конфигуратор наполнять таким количеством регистров, вот и не задумывались об этом
Владислав, появились еще вопросы.
1. Как определить размер файла конфигурации без удаления всего из проекта, кроме конфигурации? Существует ли какой-либо другой способ?
2. Удаление имен модулей и каналов может ли как-то сказаться на выполнении программы? Для чего вообще эти переменные (никогда их не использовал)?
3. Теория с размером файла конфигурации в 100 кБайт, имеет, пример, показывающий, что это не совсем так.
Прикрепляю проект TestRegsCount2Slave.pro - это проект, полученный из выкладываемого ранее добавлением второго слейва Modbus (slave).
Во втором слейве сейчас сконфигурировано 200 dwordов. Размер пустого проекта (только конфигурация) составляет 122 444 байт, что явно больше 100 кБайт.
Но при этом данный проект успешно работает.
Прошу дать пояснения.
4. Какое ограничение размера конфигурации для ПЛК110 старой модификации (прошивка 2.15.9).
При 100кБайт контроллер ведёт себя корректно. Всё, что выше, будет вызывать пробьемы. Увеличьте количество переменных, добавьте код и контроллер может отключить отдельные порты, перезагружаться и отказываться подключаться к CODESYS.
Для старых контроллеров ограничение 25кБайт, на сайте это указано.
Описываю подробней.
Итак имеем с 998 регистрами (так удобней называть dwordы) работал, с 999 регистрами не работал, до тех пор пока я для проекта с 999 регистрами не удалил имена модулей и каналов, тем самым уменьшив размер конфигурации. Затем я в работающий проект с 999 регистрами добавляю еще одну область Modbus Slave с 200 регистрами (можно попробовать и другие значения). Проверяю размер конфигурации. Она оказывается больше 100 кБ, а именно 122 кБ. Но проект работает. Значит не совсем корректно говорить, что конфигурация должна быть не более 100 кБ. Или еще что-то.
Прошу дать пояснения. Проект с 2 Modbus Slavами прикреплен выше.
Пожалуйста: http://www.owen.ru/catalog/programmi...k_100/46885663
Вот информация из РЭ: Вложение 32828
С размером конфигурации до 100кБ ПЛК ведёт себя корректно. Всё, что выше используйте на свой страх и риск. О последствиях я уже рассказывал:
Бывает не видишь, а оно на самом видном месте)
Но не смотря на некоторую ясность, вопросов по-прежнему много.
1. Все же необходима, ясность. Как это так, размер конфигурации 122 Кб, 12 выход мигает, 998 регистр опрашивается. А потом, я программирую, программирую и раз все перестало работать?
На мой взгляд, необходимо при компиляции или еще где-то (как-то) выдавать сообщение, что конфигурация больше 100 Кб, если она превысила эти размеры.
2. В РП на ПЛК110 М02 на стр. 9 сказано, цитата: "По умолчанию суммарный объем
памяти ввода (%I) и вывода (%Q) установлен равным 16кБ. Этого доста-
точно для большинства задач, но этот объем может быть увеличен поль-
зователем до 32 кБ (на вкладке «Memory Layout» окна «Target Setting», в
строках Input и Output, см. рисунок 2.4)."
Так до 100 Кб или до 32 Кб?
3. Рисунка 2.4 я в РП так и не смог найти.
4. Все равно есть некоторая неточность. Если я конфигурирую 999 регистров по 4 байта, то для меня сконфигурированная область обмена по смыслу равна 999*4 = 3996 байт или 3,9 Кб. Но на деле, ввиду того, что в конфигурации еще масса каких-то дополнительных объявлений эти 3,9 Кб "съедают" все 100 Кб.
Требует пояснений в инструкции.
5. Желательно тогда дать возможность пользователю просто выделять кусок памяти в Modbus Slave, например, через объявление String или Array.
1. Да, было бы хорошо, но 3S перестала развивать 2-й КоДеСис и теперь только ручками. Но 99% пользователей никогда не добираются до предела.
2. Память I/O и размер конфигурации это 2 абсолютно разные вещи
4. Конфигурация - это описание всего, что вставили в дерево конфигурации, описание гораздо больше данных I/O, формат не "компактный" у КоДеСиса.
5. Welcome to library, young Padawan!
P.S. Второй slave проверьте!
1. Второй слейв проверю, но позже (понедельник, вторник). Сейчас не доступен ПК с CoDeSys.
Все же не понятно, как это так, что может работать с конфигурацией больше 100 Кб, а может не работать?
Было бы легче, если бы всегда не работал.
2. Если у меня не получается через конфигуратор организовать 999 регистров (без бубна имеется ввиду) для передачи на верхний уровень, то как я тогда организую 32 Кб памяти I/O.
И разве регистры для передачи на верхний уровень не являются памятью I/O?
Т.е. в РЭ имеется ввиду только I/O, когда ПЛК мастер?
3. Подправьте РП, там нет рисунка 2.4.
4. Уж больно не компактный формат у КоДеСиса.
5. Звездным войнам предпочитаю советские фильмы, а потому вопрос:
Для Modbus Masterа можно для модуля добавить String переменную, значит должно быть можно и для слейва.
Разве это зашивается не в таргет файл?
Быть может это решит все вопросы?
Провел тест.
В конфигурацию добавлено 2 слейва. 1-й с 999 регистрами (dwordами), второй с 500 регистрами (dwordами).
Размер пустого проекта (только конфигурация) составляет 148 611 байт (см. файл TestRegsCount2SlaveWith1500Regs.rar), что явно больше 100 Кб.
При этом проект прекрасно работает:
1. Из Modbus Master OPC сервера опрашиваются регистры 1-й и 999-й первого слейва, и 1-й и 500-й второго слейва (см. рисунок).
2. "Мигают" четные и нечетные дискретные выходы ПЛК (алгоритм мигания можно понять по коду программы см. "Весь код ПЛК".jpg)
3. После перезагрузки по питанию проект продолжает свою работу (выходы мигают, регистры опрашиваются).
Проект прикрепляю.
Итак, вопрос открытый:
Конфигурация больше 100 Кб, но все работает. Почему?
Конфигурация внутри разбирается по логическим частям. Если часть не лезет в 100к - происходит эпик фейл.
Владислав, тогда требует объяснения следующее.
В работающий проект с 1499 регистрами (dwordами), во второй слейв добавляю еще 499 регистров. Т.е. теперь в проекте 2 слейва с 999 регистрами каждый.
И такой проект уже не загружается (см. рисунок).
Пустая конфигурация с 2 слейвами по 999 регистров весит 196 515 байт (см. *.rar).
Если одна логическая часть с 999 регистрами весит меньше 100 Кб, то и другая должна, а не работает.
Прошу пояснений.
начали с 999 двордов, теперь уже 2 тысячи.
Кирилл - конфигурация более 100кБ ЗАПРЕЩЕНА и не поддерживается ПЛК. Ежели что-то как-то работает и свыше - радуйтесь. Но не факт что после добавления ещё параметра будет работать. Или после смены прошивки.
P.S. В следующую версию включу совсем жёсткое ограничение размера в 100кБайт. Что сразу рубило под корень. И не было тупых вопросов.
Так есть возможность добавить String или Array в Modbus Slave в таргет-файл?
А зачем? Откуда Вы берете данные на 1000 dword?
Это как минимум (если ПЛК работает как тупой коуплер) - 125 8-ми канальных аналоговых модулей или 1000 32-х канальных дискретных?
Реальные задачи (а не забить лицензию мастерскады) на 1 ПЛК с таким количеством данных - это нонсенс. Даже крупные крейтовые системы стараются сделать с меньшим количеством I/O.
32000 дискретных сигналов, это весть конвейер Автоваза раз 10 туда поместится! или 3-4 Ростовские АЭС (по 4 блока).
Мало получить эти 1000 двордов/флоатов - надо ещё их обработать. если условно взять 20 операций на дворд (что соответствует простейшей аварийной логике), получается 20000 операций или 80 кБайт кода.
Учитывая размер данных и кода в кэш мы не попадаем - 250мкс на обработку всех I/O только в режиме если дворд!=0 - включить сирену.
А ежели 1000 ПИД-регуляторов запустить? Тут и Corei7 может поплохеть.
Так что границы применимости ПЛК по конфигурации и размеру I/O и так находятся далеко за пределами здравого смысла.
А уж ежели ПЛК, работающий с 32к DI/DO или с 1000 AI/AO вдруг откажет (топор в щит прилетит), последствия увидят на орбите.
Не надо делать таких монстров, стройте распределённую систему.
Ведь сейчас, сделав 1-й шаг и выведя 2к двордов в скаду вы получите ТЗ на их обработку, опрос и т.п. и внезапно окажется, что ПЛК не тянет такое количество лог. операций.
Владислав, эта тема уже ни раз обсуждалась.
Поясняю.
На каждый аналоговый вход в СКАДе я создаю 10 тэгов:
1. Текущее значение;
2. Минимум диапазона датчика;
3. Максимум диапазона датчика (п. 2-3 позволяют менять датчик например с 0-6 атм на 0-10 атм и ничего не перепрошивать, только в СКАДе поменять диапазон);
4. Верхняя критическая граница;
5. Верхняя предупредительная граница;
6. Нижняя предупредительная граница;
7. Нижняя критическая граница (п. 4-7 позволяют мне в контроллере формировать признаки выхода за границы и по ним строить технологические алгоритмы);
8. Гистерезис снятия тревог;
9. Тревога (битовая маска тревог выработанных в ПЛК и переданных на ВУ);
10. Маска ввода/вывода технологических границ.
Таким образом 1000 тэгов - это все лишь 100 аналоговых датчиков.
У меня в системе, о которой идет речь, их 57.
Но зато еще есть 14 насосов с частотными преобразователями, для каждого из них я передаю в СКАДу 10 тэгов:
1. Состояние (включен, выключен, включается, выключается);
2. Режим (Автоматический, ручной, от пульта ЧП и т.п.);
3. Текущая частота;
4. Заданная частота;
5. Наработка насоса;
6. Тревога (ошибки ЧП и прочее);
7. Команда (включить, выключить, сбросить тревоги);
8. Коэф. П;
9. Коэф. И;
10. Коэф. Д (п. 8-10 для работы ПИД-регулятора).
Таким образом у меня 57 датчиков и 14 насосов - это уже 710 тэгов.
Цикл старого ПЛК110 при обработке 57 датчиков, 14 насосов и прочей технологической логики - 7 мс.
Дополню.
Есть проекты, которые успешно работают, когда в конфигурации в Modbus Slave у меня создано 230 Dword.
Я не ожидал, что увеличение с 230 до 950 будет проблемой.
А то как же Владислав, я Союзом-то управлять буду (http://www.owen.ru/forum/showthread....l=1#post207260).
в показанных Вами структурах половина тегов будет менятся раз в жизни. Даже если датчик какой то решили сменить, его диапазоны не поменяются от запроса к запросу, чтоб постоянно их передавать. Часть показаний вобще дальше скады может не уходить, архивирование, сигнализация всё это гораздо удобнее делать на ПК, а не в контроллере.
Вам пытаются объяснить что путешествовать из Москвы во Владивосток удобнее на самолете, а не пешком, а Вы доказываете что мы вживем в свободной стране что хочу то и делаю
Capzap, Вы не правы.
Я работаю через бибки, в моем распоряжении чуть больше 65 тысячи регистров для тегов, продолжайте искать свой предел через конфигуратор. За это время уже можно давно было перестроить свою программу и иметь ограничения только стандарта протокола
ЗЫ обед закончился, продолжу
в конфигураторе можно держать одну структуру для аналогово входа и одну для ПСЧ, дополнительно два регистра. В плк создать два массива структур, в скаде открыв окно для редактирования входа или псч, в контроллер посылается сигнал, изменяющий соответствующий регистр, по нему в слейв из программы пишется требуемый элемент массива, после редактирования либо по кнопке сохранить(подтверждение всегда являлось дополнительной безопасностью, защитой от дурака), либо по закрытию окна посылается обнуление регистра, по которому в программе плк из слейва записывается измененная структура в массив. Подобным способом я сокращу Ваш конфигуратор как минимум в 50 раз
Как видите можно пойти как по сокращению элементов, так и увеличению
1. 99% всех задаваемых параметров легко упаковываются
2. Выносить всё в скаду - зачем Вам ПЛК тогда, управляйте из скады напрямую модулями расширения.
Любая система управления - это пирамида и на вершину идёт 3-5% информации. Для настроек лучше иметь доступ к проекту, чем рулить горой параметров по ModBus.
Ну и как правильно заметили, для таких объёмов воспользуйтесь библиотекой, не придётся сканировать каждый цикл все 2000 параметров в поисках "что же поменялось..."
1. Что-то упаковать можно. Я бы оценил возможности сокращения тэгов в 20-30% не больше.
2. СКАДА, для отображения, архивации, сигнализации. Но все настройки доступны пользователю! Думал, что это прогрессивный способ. А оказывается, что нет. Нужно поменять настройку ?! Будь любезен подключайся к ПЛК и из среды программирования и меняй.
Реализую термоцикл: один шаг это - температура, время выхода, выдержка - и того 3 ворда (это если без влаги и битовой маски комутаций, тогда еще 2 ворда).
99 программ и 99 шагов в одной программе и того - 3 х 99 х 99 = 29403 слова.
Оператор соответственно имеет доступ к любому шагу любой программы, но по вашей логике я для этого должен реализовать обмен ПЛК с HMI минимум в 29403 регистра.
как то это больно не реально!
и не правильно.
вместо этого я за раз предоставляю доступ к пяти шагам и у меня получается: 3 х 5 + 1 номер страницы + 1 номер программы = 17 регистров вместо 29403.
ранее делал реализацию где за раз доступ предоставляется тока к одному шагу и того получалось: 3 регистра шага + 1 номер шага +1 номер программы= 5 регистров...
8 регистров настройки + 1 номер настраиваемого датчика = 9 регистров (ну пусть десять с командным регистром записи/чтения).
100 регистров на температуру + 100 регистров на аварии по датчикам + 10 регистров для настройки = 210 регистров. и того сокращение на 79%
Это если не объединять температуру и аварию в одном регистре...
Все же тема о том, сколько можно сэкономить тэгов не совсем та, которую я хочу обсуждать.
В предельном случае все настройки системы можно вообще передать в 3-4 тэгах. В качестве примера можно привести ТРМ, где с помощью 2 окошек и пары кнопок настраиваются все параметры ТРМ (программы, ПИД-регуляторы и т.д.).
Я с этим не спорю. Но у того способа, который описал я чуть выше (где на каждый элемент в системе используется 5-10 тэгов), есть свои преимущества.
Сведу свои вопросы к 2-м.
1. Теоретический.
Все же не понимаю, почему нельзя добавить в Modbus Slave переменную типа string, на подобии той, которая есть в Modbus Master. С помощью переменной string в Modbus Mastere можно успешно опрашивать группы регистров (см. тут).
На мой взгляд, это бы решило проблему, когда 4 Кб осмысленных данных "съедают" все 100 Кб конфигурации. И не пришлось бы спорить о том, сколько тэгов нужно.
2. Практический.
30.08.17 вечером отправил в тех. поддержку письмо, где описал, что для старого ПЛК110 уже с 450 dwordами в конфигурации контроллер реального объекта отказывался работать. При этом файл конфигурации был меньше 100 Кб.
Прошу пояснить и дать рекомендации. Хотелось бы ужиматься в максимальное число dwordов.
ПЛК110М02 появился как раз по тому, что старый уже не справлялся с задачами.