Показано с 1 по 8 из 8

Тема: Задание больших адресов в Конфигураторе ПЛК (Modbus Slave)

  1. #1

    По умолчанию Задание больших адресов в Конфигураторе ПЛК (Modbus Slave)

    Всем здравствовать. Стоит задача связи SCADA и ПЛК 110-30М по Modbus TCP/IP.

    Для отладки разрабатываемой SCADA, я создаю стенд (ПК+ПЛК) и мне необходимо в точности повторить адресацию переменных в памяти ввода/вывода контроллера, какую использует подрядчик на нижнем уровне. Знаю, что он работает с библиотеками типа SysLibSockets, но я пока так не умею: мне понятен лишь стандартный механизм конфигурирования ПЛК. Таким образом нужно адресовать порядка 600 переменных в пределах (c запасом) 21000 регистров.

    Опытным путем обнаружил, что модуль Modbus (slave) позволяет создавать до 999 подэлементов вне зависимости от их типа. Также выяснил, что в корневом модуле Modbus slave можно создавать до 2 вложенных подмодулей того же типа: при большем числе начинает ругаться, не компилируется (да даже и во втором вложенном Modbus (slave) в элементе 8 bits при раскрытии его уже некорректно начинают отображаться символы % в адресах каналов, однако, падла, компилируется). Итого, вручную реализовал структуру разработчика нижнего уровня, широко задействуя принцип вложенности и копирования-вставки. (С используемой конфигурацией адресов и типов переменных при рациональном подходе это получилось не слишком сложно.) Причем в структуре Modbus[FIX] элемент ТСР[VAR] добавил лишь в корневой модуль Modbus (slave). В итоге получилось что-то вроде:

    Modbus (slave)[VAR]
    Modbus[FIX]
    ТСР[VAR]
    Float
    Float
    Float
    ...
    Modbus (slave)[VAR]
    Modbus[FIX]
    2 byte
    Float
    4 byte
    ...
    Modbus (slave)[VAR]
    Modbus[FIX]
    2 byte
    Float
    8 bits <при раскрытии битов в адресах на местах % нечитаемые знаки>
    Float
    ...
    Modbus (slave)[VAR]
    Modbus[FIX]
    Float
    4 byte
    ...

    Предварительно сделал пробный проект, повторяющий самый принцип вложенности (с двумя вхождениями Modbus (slave), с руганью в адресах 8 bits последнего). Проект работал, SCADA видела.

    Для функционального проекта мне потребовалось в Настройках целевой платформы увеличить выделение памяти на область выходов и под стать тому -- общую память. 21000 регистров -- это 42000 байт: итого, учитывая запас, округлил до 16#A400 размер области выходов и 16#E400 взял как общий размер памяти. Проект стал компилироваться, но вот незадача. Загружает, падла, программу, загрузил, ждет, и тут Ошибка (#0), мол, произошло отключение. Нажимаю опять "Подключиться" и все как ни в чем не бывало. Даже, бывает, вижу значения дискретных входов, могу устанавливать дискретные выходы. Но SCADA при этом ни в какую не видит контроллер: выдает ошибку 10061.

    Простой проект

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

    видит, сука, а почти такой же проект, но с программой и с 21000 адресуемых регистров, падла, не видит. Читал, что размеры памяти входов и выходов с 16 кБ можно увеличить при желании до 32 кБ, но, что это предел, явно нигде не пишут. У меня, стало быть, с 16#A400+16#1FFF где-то за 49 кБ получается. Ну, 41 кБ на выходы мне железно надо использовать. Думал бы, что проблема именно в этом, но ведь, сука, простой проект с таким же выделением памяти работает, падла... и ошибки не появляется, да даже если и появляется, то при повторном включении SCADA все равно видит ПЛК, читает и пишет переменные, а вот с полнофункциональным проектом -- нет. Я начал искать границы применимости, удалил половину элементов в области ввода-вывода, порезал и связанные с этим POU и визуализацию: так вообще перестал загружаться: компилируется, заливается и сразу вылетает, и так постоянно. Последнее связываю с тем, что при удалении столь большого числа элементов неизбежно нарушается структура адресов и происходят ошибки выравнивания, о чем без стеснения предупреждает OWEN (cм. Рук-во).

    Автоматическая адресация выставлена, проверка перекрытия тоже.

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

    PS: Связываюсь и с CoDeSys, и cо SCADA напрямую через Ethernet. Как прямым шнуром, так и кроссом 8 pin (только 2 перекрестные пары) -- результат один.
    Последний раз редактировалось Nikita_; 26.02.2019 в 23:14. Причина: Уточнение

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    потратили бы несколько месяцев на изучение работы с библиотекой, чем впихивать не впихуемое
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    Capzap, "невпихуемое" наверняка или вам неизвестно в точности о границах применимости такого подхода? Ведь с несколькими сотнями адресуемых регистров при том же "шаманстве" все работает. Тогда до какого предела, так сказать на скорую руку, можно пользоваться подобными извращениями, не прибегая к библиотекам?
    Последний раз редактировалось Nikita_; 27.02.2019 в 20:38.

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    я пользуюсь библиотеками, поэтому размер конфигуратора не знаю
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5

    По умолчанию

    Размер конфигурации (не ОЗУ под регистры, а описания) ограничен 100кБ. Вы многократно вышли за пределы, в результате ПЛК отбрасывает выходящую за пределы 100кБ информацию.
    Вам правильно подсказали, что надо использовать библиотеку Slave.
    А вот ругаться не следует.

    P.S. А SCADA система с 21000 регистров - это прямой путь в ад отладки. Если Вы делаете реальный проект, а не пилите бабло - пора бы пересмотреть концепцию.
    По опыту пользователи даже с 1000 регистров уже имели колоссальные проблемы с временем цикла, т.к. их надо обрабатывать, использовать в коде, менять значения. Либо эти тысячи были для галочки и реально никогда не использовались.
    Да даже забить несколько сотен переменных, задать им имена (работа через %Q - это гарантия проблем со стабильностью кода), описать, добавить код контроля диапазона и др. банальные и нужные вещи - объём работы слишком велик.
    И объект с 21000 (да пусть и с 600) переменными - это что-то типа большого курятника, свинарника с датчиками в каждой курице. Явно задача для распределённой системы, а не вешать всё на 1 ПЛК, экономя 100000 и потеряв миллионы, когда пьяный монтажник по ошибке залезет не в тот шкаф.
    Не говоря уже об количестве труднообнаруживаемых ошибок в таком большом проекте.
    Тролль-наседка, добрый, нежный и ласковый

  6. #6
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Вопрос старый. Почитайте, например, вот это.

  7. #7

    По умолчанию

    Владислав, Кирилл, спасибо: это уже по делу. Действительно, использование вложенных модулей дает лишь мнимый выход за ограничение в 999 каналов на модуль. Но и это число для меня пока имеет мифический характер. Так, в моем случае, с ПЛК 110-30М и одним Modbus slave TCP, удалось (без усечения имен элементов) достичь предела в 817 каналов вне зависимости от их типов. Также выявлено, что при включении вложенных Modbus slave (по крайней мере, не для разграничения доступа, а в качестве своеобразных "папок" для структуризации области ввода-вывода) модуль первого уровня вложенности можно грубо считать за 1 kanal а модуль второго -- за 2. (О третьем уровне не идет и речи, т.к. вы попросту погубите свой проект.) При достаточно широком использовании вложенных модулей-папок вам, в силу набежавшей погрешности, таки удастся накинуть еще немного каналов к рассчитанному таким образом числу, но если (во всяком случае, с моим ПЛК), высчитав количество элементов, вы получили число за пределами 817, да даже и близкое к тому, -- лишний раз стоит задуматься, а стоит ли свеч шаманство с именами каналов или позволит вам пара-тройка лишних модулей или отказ от структуризации обеспечить должный задел к расширяемости вашей программы? Ибо уже с 817 сконфигурированными каналами программа загружается через раз. Обеспечит ли это подобающую надежность?! Поэтому отдельно попросил бы многоуважаемую публику тем же образом поделиться полезной ссылкой для освоения работы с "Бибками" практически с нуля.

    Теперь по замечаниям. Еще раз: идеологию нижнего уровня придумал не я. Нижний уровень лежит на отдельной организации. В головном контроллере для обмена по сети в пределах 21000 регистров адресного пространства "размазано" порядка 1500 переменных, что называется мне на выбор. Разумеется, добрая их доля являются локальными в программе контроллера. При этом часть алгоритмах реализуется в подчиненных контроллерах для коих головной является лишь посредником для связи с верхним уровнем. Из предоставленного списка -- для обработки SCADA я выбрал немногим более 600 переменных. Объект во всех смыслах большой, сложный. Практически все данные в SCADA функциональны, а не заведены "на всякий случай". Основные технологические параметры, задания, уставки, тревоги и параметры работы алгоритмов ПЛК -- ничего, я считаю, не является лишним. Неужели вы видите принципиальную ошибку в таком подходе?
    Последний раз редактировалось Nikita_; 02.03.2019 в 13:18.

  8. #8

    По умолчанию

    Nikita, возможно ли Вас попросить составить структурную схему?
    +79104444236
    С уважением,
    Лапшин Вячеслав

Похожие темы

  1. Задание уставки на Delta VFD CP2000 по Modbus
    от zandaqo в разделе Трёп (Курилка)
    Ответов: 14
    Последнее сообщение: 11.05.2023, 16:30
  2. Ответов: 10
    Последнее сообщение: 27.07.2016, 22:37
  3. Ответов: 9
    Последнее сообщение: 04.09.2015, 20:24
  4. ПЛК150+ИП320(slave) задание уставок
    от Anth в разделе Панели оператора (HMI)
    Ответов: 11
    Последнее сообщение: 26.07.2013, 22:19
  5. Ответов: 5
    Последнее сообщение: 14.10.2010, 14:42

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •