Работа с сервером протокола МЭК 60870-5-104 в CoDeSys 3.5

Версия драйвера 3.5.12.40

Для работы сервера протокола МЭК 60870-5-104 в проект программы контроллера необходимо добавить устройство Mega12_60870_5_104_Slave, которое устанавливается в репозиторий устройств с помощью файла Mega12-60870-5-104_Slave.devdesc.xml. В настройках соотнесения выбрать Вкл.2 (всегда в задаче цикла шины), для постоянного выполнения программы драйвера.

В драйвере МЭК 60870-5-104 поддерживается работа по следующим типам данных:

  1. SinglePoint с адреса 512
  2. SinglePointWithCP56Time2a с адреса 1024
  3. DoublePoint с адреса 1536
  4. DoublePointWithCP56Time2a с адреса 2048
  5. StepPosition с адреса 2560
  6. StepPositionWithCP56Time2a с адреса 3072
  7. BitString32 с адреса 3584
  8. BitString32WithCP56Time2a с адреса 4096
  9. MeasuredValueNormalized с адреса 4608
  10. MeasuredValueNormalizedWithCP56Time2a с адреса 5120
  11. MeasuredValueScaled с адреса 5632
  12. MeasuredValueScaledWithCP56Time2a с адреса 6144
  13. MeasuredValueShort с адреса 6656
  14. MeasuredValueShortWithCP56Time2a с адреса 7168

Под каждый тип выделено по 64 адреса, начинающихся с заданного значения. Чтение данных осуществляется блоками по 16 адресов каждого типа. Первые 16 адресов читаются командой Interrogated by general interrogation, следующие 16 Interrogated by interrogation group 1, далее Interrogated by interrogation group 2 и т.д.

В драйвере предусмотрено два типа переменных на каждый тип данных сервера – это входные и выходные переменные. Данные, передаваемые от сервера МЭК 60870-5-104 в программу CoDeSys имеют обозначение *InIEC, а передаваемые из программы CoDeSys в сервер МЭК 60870-5-104 - *ToIEC. Таким образом данные читаются и пишутся в два набора переменных, которые пользователь может совместить в программе CoDeSys.

Запись данных сервера МЭК 60870-5-104 в переменные драйвера производится с помощью следующего набора команд:

  1. C_SC_NA_1 Single Command с адреса 512
  2. C_DC_NA_1 Double Command с адреса 1536
  3. C_RC_NA_1 Step Command с адреса 2560
  4. C_SE_NA_1 Setpoint Command Normalized с адреса 4608
  5. C_SE_NB_1 Setpoint Command Scaled с адреса 5632
  6. C_SE_NC_1 Setpoint Command Short с адреса 6656
  7. C_BO_NA_1 Bitstring32 Command с адреса 3584
  8. C_SC_TA_1 Single Command WithCP56Time2a с адреса 1024
  9. C_DC_TA_1 Double Command WithCP56Time2a с адреса 2048
  10. C_RC_TA_1 Step Command WithCP56Time2a с адреса 3072
  11. C_SE_TA_1 Setpoint Command Normalized WithCP56Time2a с адреса 5120
  12. C_SE_TB_1 Setpoint Command Scaled WithCP56Time2a с адреса 6144
  13. C_SE_TC_1 Setpoint Command Short WithCP56Time2a с адреса 7168
  14. C_BO_TA_1 Bitstring32 Command WithCP56Time2a с адреса 4096

Клиентское приложение подключается по IP адресу контроллера на стандартный порт 2404, адрес ASDU 1. Драйвер протокола МЭК 60870-5-104 самостоятельно отслеживает изменения переменных *ToIEC и отправляет изменения на клиент не чаще чем раз в 100 мсек. Изменения отслеживаются по всем типам переменных по 64 адреса и отправляются блоками данных ASDU по 16 адресов каждого типа. Таким образом изменение одной переменной приводит к передаче одного блока данных. Для исключения постоянной передачи изменений вещественных чисел рекомендуется в программе пользователя производить фильтрацию вещественных значений, передаваемых в драйвер МЭК60870-5-104.

Версия драйвера 3.5.12.41

Увеличено количество адресов МЭК передаваемых в CoDeSys до 256 каждого типа. Для применения данной версии драйвера необходимо в ПО CoDeSys v3.5 установить шаблоны контроллера и драйвера МЭК версии 1 (название файлов ..._v1.devdesc.xml) и проекте программы пользователя обновить устройства.

Версия драйвера 3.5.12.42

Увеличено количество адресов МЭК и изменены стартовые адреса типов данных передаваемых в CoDeSys. Для каждого типа количество адресов имеет разное значение. Для применения данной версии драйвера необходимо в ПО CoDeSys v3.5 установить шаблоны контроллера и драйвера МЭК версии 2 (название файлов ..._v2.devdesc.xml) и проекте программы пользователя обновить устройства.

  1. SinglePoint с адреса 512 по 1531
  2. SinglePointWithCP56Time2a с адреса 1536 по 1909
  3. DoublePoint с адреса 2560 по 3579
  4. DoublePointWithCP56Time2a с адреса 3584 по 3957
  5. StepPosition с адреса 4608 по 5423
  6. StepPositionWithCP56Time2a с адреса 5632 по 5971
  7. BitString32 с адреса 6656 по 7165
  8. BitString32WithCP56Time2a с адреса 7680 по 7951
  9. MeasuredValueNormalized с адреса 8704 по 9383
  10. MeasuredValueNormalizedWithCP56Time2a с адреса 9728 по 10033
  11. MeasuredValueScaled с адреса 10752 по 11431
  12. MeasuredValueScaledWithCP56Time2a с адреса 11776 по 12081
  13. MeasuredValueShort с адреса 12800 по 13309
  14. MeasuredValueShortWithCP56Time2a с адреса 13824 по 14095

Версия драйвера 3.5.12.43

В данной версии драйвера применяется новая методология объявления переменных, основанная на редактировании XML-файла драйвера устройства. В отличие от предыдущих версий, где все переменные автоматически становились доступными пользователю (включая неиспользуемые), текущая архитектура предполагает явное определение только необходимых переменных, что устраняет избыточность и повышает эффективность работы системы.

Ключевым изменением является отказ от разделения переменных на входные и выходные – теперь используется единая универсальная переменная, поддерживающая как операции чтения, так и записи. Это исключает дублирование данных и упрощает структуру конфигурации. На этапе проектирования пользователь самостоятельно определяет функциональное назначение каждой переменной (чтение, запись или двунаправленный обмен), что обеспечивает более гибкое и осмысленное управление данными в рамках технологического процесса.

Реализован расширенный набор параметров управления переменными, включающий: гистерезис для настройки зоны нечувствительности аналоговых сигналов, флаг циклической передачи для управления периодичностью обмена данными, индикатор качества для оценки достоверности значений, квалификатор с управляющими битами состояния, а также механизм группировки переменных и дополнительные атрибуты (подробно описаны в приложении Е).

Добавлена возможность восстановления данных после обрыва связи посредством отправки отложенных файлов до 5000 файлов (85 пакетов в одном файле типа Lreal с меткой времени) по 4 килобайт каждый (с учетом выравнивания файлов на диске). При скорости запроса одной переменной Lreal с меткой времени один раз в секунду, файл записывается за 85 секунд, а вся очередь запишется примерно за 4 дня 20 часов.

Эти изменения направлены на повышение гибкости настройки, минимизацию избыточных объявлений и улучшение контроля над процессами передачи данных. Новый подход способствует более эффективной интеграции драйвера в распределённые системы управления, обеспечивая при этом прозрачность конфигурации и удобство сопровождения.

Для добавления параметров и/или изменения количества переменных необходимо отредактировать XML-файл устройства Mega12NW_IEC104_Slave_driver_vX.X.X.X_DDMMYY.devdesc.xml.

Добавление параметров выполняется в специальной области XML-файла, которая обозначена как «START OF USER AREA FOR PARAMETER DECLARATION» (см. Рис.3.6.1.1). По умолчанию в этой секции уже активированы два параметра — SINGLE POINT и SINGLE POINT CP56.

Рисунок 3.6.1.1 - Область редактирования параметров

Чтобы добавить новый параметр, нужно найти его в закомментированном списке доступных параметров. Каждый параметр в этом списке начинается с тега <Parameter ParameterId... и заканчивается </Parameter>. Для активации выбранного параметра необходимо убрать окружающие его комментарии, то есть удалить символы <!-- перед началом и --> после конца описания. Важно убедиться, что после раскомментирования параметр остаётся в корректном XML-формате.

Если какой-то из параметров больше не нужен, его можно отключить, закомментировав аналогичным образом — добавив <!-- перед его объявлением и --> в конце. При этом нужно следить, чтобы внутри самого параметра не осталось лишних символов комментариев, так как это может нарушить структуру файла.

После внесения изменений рекомендуется проверить, что XML-файл остаётся валидным и все параметры оформлены правильно.

Настройка количества переменных выполняется в области «START OF USER AREA FOR EDITING NUMBER OF VARIABLES» (см. Рис. 3.6.1.2). Каждая переменная в файле заключена между тегами <Component> и </Component>. По умолчанию для каждого параметра доступна одна активная переменная. Дополнительно в коде предусмотрено ещё по 9 закомментированных переменных — они отмечены символами <!-- в начале и --> в конце.

Рисунок 3.6.1.2 - Область редактирования переменных

Чтобы добавить новые переменные, можно либо раскомментировать готовые заготовки, удалив эти символы, либо вручную скопировать существующий блок <Component>...</Component> и вставить его в конец списка. В обоих случаях важно проверить, чтобы у каждой переменной были указаны:

Остальные параметры внутри блока НЕ менять. После внесения изменений нужно убедиться, что структура XML осталась правильной — все теги должны быть закрыты, а лишние символы комментариев удалены.

ВАЖНО! Для корректной работы драйвера каждый параметр должен содержать минимум одну активную (не закомментированную) переменную. Удаление всех переменных параметра приведёт к некорректной работе системы.

После внесения изменений в XML-файл необходимо обновить устройство в репозитории устройств CoDeSys:

  1. Перейдите в меню «Инструменты» → «Репозиторий устройств» (см. Рис. 3.6.1.3).
  2. Нажмите «Установить» и выберите обновленный XML-файл.
  3. Убедитесь, что устройство успешно добавлено в репозиторий. Если возникли ошибки, проверьте корректность внесенных изменений в XML-файл.

Рисунок 3.6.1.3. Репозиторий устройств

Для добавления драйвера в проект CoDeSys в дереве устройств (окно «Устройства») нажмите правой кнопкой мыши на пункт «Device». В появившемся контекстном меню выберите пункт «Добавить устройство...» (см. Рис. 3.6.1.4).

Рисунок 3.6.1.4. Добавление устройства в проект

В появившемся окне выберите «Mega12NW IEC104 Slave driver» (см. Рис. 3.6.1.5) и нажмите кнопку «Добавить устройство».

Рисунок 3.6.1.5. Выбор устройства

Если устройство уже присутствует в проекте, но требует актуализации после внесения изменений в XML-файл (и добавления обновленного XML-файла в репозиторий устройств), выполните следующие действия:

  1. В дереве устройств кликните ПКМ на целевом устройстве.
  2. В контекстном меню выберите «Обновить устройство...» и подтвердите действие нажатием кнопки «Обновить устройство».

Следующим шагом для работы с драйвером IEC104 Slave является добавление библиотеки драйвера в проект CoDeSys. Для этого:

  1. Перейдите в меню «Инструменты» → «Репозиторий библиотек» (см. Рис. 3.6.1.6).
  2. Нажмите «Установить» и выберите файл «Мега12NW_IEC104_Slave_driver_v2.1.0.0.compiled-library и подтвердите действие нажатием кнопки «Установить…».

    Рисунок 3.6.1.6. Репозиторий библиотек

  3. Убедитесь, что библиотека успешно добавлена в репозиторий и отображается в списках (см. Рис. 3.6.1.7). Закройте окно.

    Рисунок 3.6.1.7. Список установленных библиотек

  4. Далее необходимо добавить ранее установленную библиотеку непосредственно в проект CoDeSys. Для этого в дереве устройств два раза нажмите на пункт «Менеджер библиотек». Затем во вкладке «Менеджер библиотек» нажмите на «Добавить библиотеку» (см. Рис. 3.6.1.8).

    Рисунок 3.6.1.8. Добавление библиотеки в проект

  5. Нажмите на кнопку «Дополнительно…».
  6. Раскройте выпадающий список «Target» и выберите «Mega12NW_IEC104_Slave_driver». Нажмите кнопку «ОК».
  7. Убедитесь, что библиотека успешно добавлена в проект CoDeSys.

Для корректной работы драйвера IEC104 Slave в проекте CoDeSys необходимо использовать исключительно типы структур, предоставляемые библиотекой Mega12NW_IEC104_Slave_driver.library. Эта библиотека содержит предопределенные структуры данных (см. Рис. 3.6.1.9), которые полностью соответствуют переменным, объявленным в XML-файле конфигурации устройства. Важно понимать, что данные структуры содержат не только пользовательские поля, но и скрытые служебные параметры, необходимые для штатной работы драйвера.

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

Рисунок 3.6.1.9. Список предустановленных структур

Предположим, что для проекта необходимо создать переменную для передачи одноэлементной информации (SINGLE POINT). Для этого в области объявления переменных нужно создать экземпляр структуры (см. Рис. 3.6.1.10), назвав его «my_sp1» и присвоив соответствующий тип данных SinglePoint, используя шаблон из библиотеки Mega12NW_IEC104_Slave_driver.library (см. Рис. 3.6.1.9).

Рисунок 3.6.1.10. Объявление экземпляра структуры

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

Для передачи данных структуры «my_sp1» в драйвер требуется выполнить её привязку в конфигурации драйвера:

  1. В дереве устройств проекта найдите ранее добавленный драйвер и дважды кликните по нему левой кнопкой мыши.
  2. В окне настройки драйвера нажмите на вкладку «Internal Соотнесение входов/выходов».
  3. В столбце «Переменная» найдите нужный параметр (Single Point) и раскройте список переменных.
  4. Для привязки новой переменной дважды нажмите на пустую область напротив пустой строки (SP_1) (см. Рис. 3.6.1.11).

    Рисунок 3.6.1.11. Привязка переменной

  5. Нажмите на .
  6. В появившемся окне перейдите «Application» → «PLC_PRG», выберете «my_sp1» и нажмите на «ОК».

Рисунок 3.6.1.12. Соотнесенная переменная my_sp1.