Передача данных между контроллерами

Отправлено viewtek от пн, 05/16/2022 - 17:37

            Программирование ПЛК SIEMENS на Simatic step7

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

            Для начала в одном проекте конфигурируем 2 контроллера и их внутренние программы. Открываем «NetPro» на панели управления в SIMATIC Manager’е.

            В открытом окне представлены сконфигурированные контроллеры и сети связи. Во-первых, в зависимости от того, будет ли происходить связь через сам ПЛК или коммуникационный процессор (КП), необходимо настроить устройства связи в одной выбранной вами сети (Ethernet, MPI, Profibus). В данном окне сети связи обозначены линиями, нужная линяя должна быть связана с конфигурациями обоих контроллеров. Во-вторых, нужно создать между ними соединение. Для этого выберите любую конфигурацию и в ней нажмите ЛКМ на CPU. Внизу высветится таблица соединений - кликните ПКМ и «Создать новое соединение». Во всплывшем окне появится иерархия с проектом, существующими в ней конфигурациями, контроллерами. Необходимо выбрать тот ПЛК, с которым предполагается организовать связь. Тип соединения выбирается в зависимости от используемого типа связи, но Siemens советует «S7 connection». Step7 автоматически присвоит локальный адрес обоим ЦПУ, но его также можно задать вручную. Соединение установлено.

            Теперь рассмотрим конфигурирование самой программы.

Создаем 2 блока данных: 1 будет отвечать за приём, другой — за отправку. Далее создаем функциональный блок, который будет отвечать за прием/передачу. В нем сначала создаем функцию переноса значений и присваиваем некой переменной значение длины будущего сообщения в 16-ой системе исчисления: например. если длина 100, то присваиваемое значение W#16#64, так как 64 (в 16-ной системе счисления)= 100 (в десятичной). Далее «достаем» из библиотеки блоки BSEND/BRCV. Причем важно для контроллеров 300-ой серии использовать ветку Standard libraryCommunication blocksBSEND/BRCV, а для 400-ой серии -  Standard librarySystem function blocksBSEND/BRCV. Даже когда нужно связать 300 и 400-ый контроллеры, требуется «доставать» из своей библиотеки.

            Рассмотрим переменные функций.

            Переменные функции BSEND. Req – переменная bool, взвод которой означает начало передачи. R – сброс передачи данных, можно оставить пустым. ID – локальный адрес, присвоенный при создании связи контроллеров, чтобы не ошибиться ПКМ-Connections, появится окно со всеми соединениями, выберем необходимое. R_ID – номер, который должен совпадать и передающей и принимающей функции, записывается в формате DW#16#8. SD_1 – здесь заполняется блок данных, который собираемся отправлять. LEN – длина передаваемого сообщения, заполняется переменной, значение которой присвоили ранее. DONE – переменная bool, которая взводится при успешной отправке. ERROR – переменная bool, которая взводится при ошибке. STATUS – переменная word, при ошибке показывает код ошибки.

            Переменные функции BRCV. En_R – переменная bool, взвод которой означает начало приёма. ID – локальный адрес, присвоенный при создании связи контроллеров, чтобы не ошибиться ПКМ-Connections, появится окно со всеми соединениями, выберем необходимое. R_ID – номер, который должен совпадать и передающей и принимающей функции, записывается в формате DW#16#8. RD_1 – здесь заполняется блок данных, в который собираемся записывать полученные данные. LEN – длина передаваемого сообщения, заполняется переменной, значение которой присвоили ранее. NDR – переменная bool, которая взводится при успешном приеме. ERROR – переменная bool, которая взводится при ошибке. STATUS – переменная word, при ошибке показывает код ошибки.

            Симуляция.

            Для симуляции передачи данных, в окне симуляции нажимаем File-New PLC - появится второе окно симуляции для каждой конфигурации Загружаем контроллеры в симуляцию, переводим состояние в RUN-P для отладки.

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