Работа с сервером протокола МЭК 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.7.1.1). По умолчанию в этой секции уже активированы два параметра — SINGLE POINT и SINGLE POINT CP56.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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