Для выполнения ряда приведенных команд могут потребоваться права пользователя root (через sudo) в Linux или права администратора в Windows.

1. Назначение

Сервер CCU Relay позволяет запустить собственный приватный аналог сервиса CCU.SU для контроллеров:

  • CCU422-S

  • CCU825-S

  • CCU825-S+

  • CCU825-B

  • CCU706-G

И предоставляет следующие возможности:

  • Удаленное конфигурирование контроллеров с помощью веб-браузера

  • Управление контроллерами, получение данных и событий через HTTP API, интегрирование контроллеров в собственные программные комплексы

  • Подключение контроллеров к любой SCADA-системе через Modbus TCP

  • Удаленное подключение по TCP к любому RS-232 или RS-485 устройству через сквозной канал

  • Получение событий от контроллеров через SMS с помощью GSM модема

ccurelay web
Рисунок 1. Удаленное конфигурирование


ccurelay http
Рисунок 2. Управление через HTTP API


ccurelay modbus
Рисунок 3. Подключение к SCADA через Modbus TCP


ccurelay passthrough
Рисунок 4. Подключение через сквозной канал TCP


ccurelay gsm
Рисунок 5. Получение событий через SMS

2. Подключение контроллера

Контроллер может быть одновременно подключен к публичному серверу CCU.SU и трем приватным серверам CCU Relay (соединения 1-3).

2.1. Подключение к CCU.SU

Подключение к CCU.SU требуется для использования бота. Это подключение разрешается в конфигураторе контроллера на странице "Общие параметры соединений".

connect ccusu
Рисунок 6. Подключение к CCU.SU

2.2. Подключение к CCU Relay

В конфигураторе контроллера на странице "Общие параметры соединений" необходимо выбрать режим соединения с приватным сервером "CCU Relay и GuardTracker". На странице "Соединения" (соединения 1-3) необходимо разрешить оповещение через CCU Relay, ввести IP-адрес (или доменное имя) и TCP-порт. IP-адрес должен соответствовать внешнему адресу компьютера, на котором работает CCU Relay, либо адресу роутера. Порт должен совпадать со значением ccu_port, заданным в файле конфигурации CCU Relay (см. Раздел 5.1). Если используется роутер, то в нем необходимо пробросить данный порт на адрес компьютера с CCU Relay. Порт должен быть разрешен в сетевых экранах компьютера и роутера.

connect relay
Рисунок 7. Подключение к CCU Relay

3. Установка

Сервер CCU Relay поставляется в виде файла. Поле <version> задает версию. Поддерживается только 64-битная архитектура.

Таблица 1. Файлы CCU Relay
Файл Операционная система Архитектура

ccu_relay-<version>-linux.tar.gz

Linux

x86-64

ccu_relay-<version>-windows.zip

Windows

x86-64

3.1. Для Linux

mkdir -p /opt/ccu_relay
tar xf ccu_relay-<version>-linux.tar.gz -C /opt/ccu_relay --no-same-owner

После этого необходимо настроить сервис systemd (см. Раздел 5.3).

3.2. Для Windows

Сначала необходимо установить пакет Update for Visual C++ 2013 Redistributable Package. Файл vcredist_x64.exe. В таблице для скачивания необходимо выбрать язык, например, Russian - Russia.

vcredist x64
Рисунок 8. Файл vcredist_x64.exe

Распаковать файл ccu_relay-<version>-windows.zip в директорию C:\ccu_relay (путь может быть любым, но не должен содержать пробелы). После этого необходимо настроить службу (см. Раздел 5.4).

4. Обновление

  1. Если ccu_relay запущен, то перед обновлением его необходимо остановить (см. Глава 9).

  2. Для Windows необходимо удалить службу (см. Раздел 5.4).

  3. Сохранить директорию config, если в ней были изменения.

  4. Распаковать новую версию вместо старой.

  5. Восстановить директорию config, если это необходимо.

  6. Для Windows необходимо добавить службу (см. Раздел 5.4).

  7. Запустить ccu_relay (см. Глава 7).

5. Настройка

5.1. Файл конфигурации

config/ccu_relay.config
{host, "nohost"}.
{ccu_port, 30000}.
{https_port, 8443}.
%% {ssl_cacertfile, "ssl/cacert.pem"}.
{ssl_certfile, "ssl/cert.pem"}.
{ssl_keyfile, "ssl/privkey.pem"}.
{ssl_dhfile, "ssl/dh.pem"}.
{http_api_key, "nokey"}.
{modbus, [{1, 502}]}.
{modbus_read_disabled, false}.
{gsm, [{"gsm1", "/dev/ttyUSB0"}]}.
{license_keyfile, "license.key"}.

Строка, которая начинается с символа %, является комментарием и игнорируется.

Таблица 2. Параметры конфигурации
Параметр Тип Описание

host

строка

Имя хоста

ccu_port

число

CCU TCP-порт

https_port

число

HTTPS TCP-порт

ssl_cacertfile

строка

Файл корневого сертификата (опционально)

ssl_certfile

строка

Файл сертификата

ssl_keyfile

строка

Файл приватного ключа сертификата

ssl_dhfile

строка

Файл DH-параметров

http_api_key

строка

HTTP API ключ доступа

modbus

список пар {число, число}

Каждая пара: {адрес шлюза, TCP-порт шлюза}

modbus_read_disabled

true/false

Чтение запрещенных входов и выходов

gsm

список пар {строка, строка}

Каждая пара: {идентификатор, имя порта}

license_keyfile

строка

Файл лицензии

Имя хоста host используется при получении URL для входа в CCU Shell (см. Раздел 12.4).

TCP-порт ccu_port используется для подключения контроллеров CCU. Это же значение должно быть задано в конфигураторе контроллера (см. Раздел 2.2).

TCP-порт https_port используется для HTTP API.

TCP-порт со значением меньше 1024 считается привилегированным. Требуется запуск с правами пользователя root или администратора.

Для HTTPS требуется SSL-сертификат. В поставку входит самоподписанный сертификат. При необходимости данный сертификат можно пересоздать (см. Раздел 5.2), либо использовать сертификат, выданный центром сертификации (CA). Сертификат и ключ сертификата должны быть в PEM-кодировке.

Путь к файлу может задаваться как:

  • относительный путь (относительно директории config)

  • абсолютный путь

Параметры конфигурации modbus и modbus_read_disabled описаны в Раздел 13.1.

Параметр конфигурации gsm описан в Раздел 15.1.

5.2. Создание самоподписанного сертификата и DH-параметров

openssl req -x509 -days 36500 -newkey rsa:2048 -nodes -keyout privkey.pem -out cert.pem
openssl dhparam -out dh-params.pem 2048

5.3. Настройка сервиса systemd в Linux

Для автозапуска в современных системах Linux используется systemd.

/etc/systemd/system/ccu_relay.service
[Unit]
Description=Runner for ccu_relay
After=network.target

[Service]
WorkingDirectory=/opt/ccu_relay
ExecStart=/opt/ccu_relay/bin/ccu_relay daemon
ExecStop=/opt/ccu_relay/bin/ccu_relay stop
User=root
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Необходимо создать unit-файл сервиса:

cp /opt/ccu_relay/config/systemd/ccu_relay.service /etc/systemd/system/

Разрешить сервис:

systemctl daemon-reload
systemctl enable ccu_relay.service

После перезагрузки сервис должен запуститься автоматически. Для контроля см. Глава 8.

5.4. Настройка службы в Windows

Для добавления службы необходимо выполнить в командной строке cmd:

C:\ccu_relay\bin\ccu_relay.cmd install

Для удаления службы необходимо выполнить в командной строке cmd:

C:\ccu_relay\bin\ccu_relay.cmd uninstall

6. Лог

Директория лог-файлов:

  • Linux: /opt/ccu_relay/log

  • Windows: C:\ccu_relay\log

Основные типы лог-файлов:

  • info.log — информационные сообщения

  • error.log — сообщения об ошибках

7. Запуск

Для Linux:

/opt/ccu_relay/bin/ccu_relay daemon

Для Windows:

C:\ccu_relay\bin\ccu_relay.cmd start

В случае успешного запуска в info.log будет сообщение: System started.

В случае ошибки в error.log будет сообщение: System startup failed.

Для контроля см. Глава 8.

8. Проверка состояния

Для Linux:

  • идентификатор процесса

    /opt/ccu_relay/bin/ccu_relay pid
  • проверка ping

    /opt/ccu_relay/bin/ccu_relay ping
  • статус сервиса systemd (см. Раздел 5.3)

    systemctl status ccu_relay

Для Windows:

  • проверка состояния в Службах.

9. Остановка

Для Linux:

/opt/ccu_relay/bin/ccu_relay stop

Для Windows:

C:\ccu_relay\bin\ccu_relay.cmd stop

В случае успешной остановки в info.log будет сообщение: System stopped.

10. Перезапуск

Перезапуск требуется после изменения файла конфигурации, если ccu_relay был запущен.

Для Linux:

/opt/ccu_relay/bin/ccu_relay restart

Для Windows:

C:\ccu_relay\bin\ccu_relay.cmd restart

11. Лицензия

11.1. Получение

Все используемые контроллеры CCU должны быть зарегистрированы в лицензии. Для получения файла лицензии необходимо сделать запрос на support@radsel.ru, в котором указать список IMEI контроллеров с необходимыми опциями. Стоимость опций указана в прайс-листе в разделе Программное обеспечение.

Доступные опции
  • HTTP API

  • Modbus TCP

  • Сквозной канал TCP

Команды license_reload и license_info работают только после запуска ccu_relay.

11.2. Обновление

Путь к файлу лицензии задается параметром конфигурации license_keyfile (см. Таблица 2). Полученный файл лицензии необходимо разместить по данному пути и выполнить следующую команду.

Для Linux:

/opt/ccu_relay/bin/ccu_relay license_reload

Для Windows:

C:\ccu_relay\bin\ccu_relay.cmd license_reload

В случае успешного обновления в info.log будет сообщение: License file loaded.

В случае ошибки в error.log будет сообщение: Failed loading license file.

11.3. Информация

Данная команда выдаст список IMEI контроллеров, которые зарегистрированы в лицензии.

Для Linux:

/opt/ccu_relay/bin/ccu_relay license_info

Для Windows:

C:\ccu_relay\bin\ccu_relay.cmd license_info

12. HTTP API

12.1. Ключ доступа

Запрос должен содержать заголовок Authorization: Bearer <key>. Ключ доступа <key> задается параметром конфигурации http_api_key (см. Раздел 5.1).

12.2. Типы запросов

Поддерживаются следующие типы запросов:

  • GET — получение данных

  • POST — передача данных

Формат обмена данными JSON. Запрос POST должен содержать заголовок Content-Type: application/json. Параметры запроса POST передаются в теле запроса.

12.3. Ошибки

В случае ошибки ответом на запрос будет объект с параметрами error_code и error_description:

Таблица 3. Ошибки HTTP API
error_code error_description Описание

1

"CCU not found"

Контроллер с данным IMEI не найден

2

"CCU disconnected"

Контроллер отключился

3

"Timeout"

Превышено время ожидания ответа

4

"Too many requests"

Слишком много запросов

5

"Internal error"

Внутренняя ошибка

Пример ответа:
{
    "error_code": 1,
    "error_description": "CCU not found"
}

12.4. URL для входа в CCU Shell

Запрос:
GET /api/ccu/<imei>/auth

Ответ: строка/URL (действителен в течение 5 минут).

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/auth
Пример ответа:
"https://nohost/login/3093c8ce5c3c7baf7decd55546f3fcf93316ece42eec410d9ec
20bf4f1fe303fe0cf28bcd745bfe8b07eca9c4a9cc5a8219fbe674e7360f6d00d94728433
3e8784dabe863a5cefc78748206f51a859885b470a0f08ca7fd23def56c009e9913fcd604
2de954562031c7a71590f645bd17e028fabe5f97b8ea726a8f14d695e5db184a06c8476"

12.5. Контроллеры онлайн

Запрос:
GET /api/ccu/online

Ответ: массив строк/IMEI.

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/online
Пример ответа:
["865609024314173","869158009723061"]

12.6. Идентификация контроллера

Запрос:
GET /api/ccu/<imei>/id

Ответ:

Таблица 4. Идентификация контроллера
Параметр Значение Описание

id_dev_type

строка

Тип контроллера

id_dev_mod

строка

Модификация контроллера

id_ext_board

строка

Плата расширения

id_hw

строка

Аппаратная версия

id_fw

строка

Версия прошивки

id_boot_loader

строка

Версия загрузчика

id_build_date

строка

Дата сборки прошивки

id_country

строка

Код страны

id_sn

строка

Серийный номер

id_imei

строка

IMEI

id_gsm

строка

GSM

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/id
Пример ответа:
{
    "id_boot_loader": "04.00",
    "id_build_date": "May 24 2019",
    "id_country": "RUS",
    "id_dev_mod": "S",
    "id_dev_type": "CCU825",
    "id_ext_board": "--",
    "id_fw": "02.20",
    "id_gsm": "M680_1232_LQS13001_V018",
    "id_hw": "14.01",
    "id_imei": "865609024314173",
    "id_sn": "0BE0FF18469C2DAEB0550953871E00F5"
}

12.7. Системная информация и режим охраны

Запрос:
GET /api/ccu/<imei>/sysinfo

Ответ:

Таблица 5. Системная информация и режим охраны
Параметр Значение Описание

sysinfo

Таблица 6

Системная информация

mode

Таблица 9 и Таблица 10

Режим охраны

Таблица 6. Системная информация
Параметр Значение Описание

sysinfo_gsm_signal

[Таблица 7, число]

Статус и уровень GSM сигнала [дБм]

sysinfo_ext_pwr

число/null

Внешнее питание [В]

sysinfo_bat

[Таблица 8, число/null]

Статус и заряд батареи [%]

sysinfo_temp

число/null

Температура платы [°C]

sysinfo_case

true/false/null

Корпус открыт/закрыт

sysinfo_balance

число/null

Баланс SIM-карты

Если null, то значение не определено. Например, для sysinfo_ext_pwr это означает, что внешнее питание отключено.

Таблица 7. Статус GSM сигнала
Статус Описание

"gsm_signal_weak"

Низкий

"gsm_signal_average"

Средний

"gsm_signal_good"

Хороший

"gsm_signal_excellent"

Отличный

Таблица 8. Статус батареи
Статус Описание

"bat_ok"

В норме

"bat_not_used"

Не использовалась

"bat_disconnected"

Отключена

"bat_discharge_level1"

Разряжена до 1 уровня

"bat_discharge_level2"

Разряжена до 2 уровня

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/sysinfo
Пример ответа:
{
    "mode": "disarm",
    "sysinfo": {
        "sysinfo_balance": 3019.989990234375,
        "sysinfo_bat": [
            "bat_not_used",
            null
        ],
        "sysinfo_case": true,
        "sysinfo_ext_pwr": 15.199999809265137,
        "sysinfo_gsm_signal": [
            "gsm_signal_excellent",
            -75
        ],
        "sysinfo_temp": 31
    }
}

12.8. Режим охраны

12.8.1. Получение

Запрос:
GET /api/ccu/<imei>/mode

Ответ:

  • Если контроллер работает в однораздельном режиме, то режим охраны представлен строкой:

    Таблица 9. Режим охраны
    Режим охраны Описание

    "disarm"

    НАБЛЮДЕНИЕ

    "arm"

    ОХРАНА

    "protect"

    ЗАЩИТА

  • Если контроллер работает в многораздельном режиме, то режим охраны разделов представлен объектом:

    Таблица 10. Режим охраны разделов
    Номер раздела Значение Описание

    число в строковом представлении

    Таблица 9

    Режим охраны раздела

    Количество разделов от 1 до 4. Если в конфигураторе контроллера ни один раздел не имеет связанных входов, то объект mode будет пустым.

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/auth
Пример ответа:
"arm"

12.8.2. Изменение

Запрос:
POST /api/ccu/<imei>/mode

Параметр: см. Таблица 9 и Таблица 10.

Ответ: см. Таблица 9 и Таблица 10.

Пример запроса curl:
curl -k -X POST -d '"arm"' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/mode
Пример ответа:
"arm"

12.9. Входы

Запрос:
GET /api/ccu/<imei>/inputs

Ответ:

Таблица 11. Состояние входов
Номер входа Значение Описание

число в строковом представлении

Таблица 12

Состояние входа

Таблица 12. Состояние входа
Значение Описание

false

Дискретный вход ПАССИВЕН

true

Дискретный вход АКТИВЕН

[false, число]

Аналоговый вход ПАССИВЕН, числовое значение

[true, число]

Аналоговый вход АКТИВЕН, числовое значение

[_, null]

Показания недостоверны

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/inputs
Пример ответа:
{
    "1": [
        false,
        2099.0
    ],
    "2": true,
    "3": [
        true,
        52.368743896484375
    ],
    "8": false
}

12.10. Границы входов

12.10.1. Типы тревожных диапазонов

Таблица 13. Типы тревожных диапазонов
Тип Количество границ

Низкий или высокий

2

Низкий

1

Средний

2

Высокий

1

Низкий гистерезисный

2

Высокий гистерезисный

2

12.10.2. Получение

Запрос:
GET /api/ccu/<imei>/inputs/limits

Ответ:

Таблица 14. Границы входов
Номер входа Значение Описание

число в строковом представлении

[]

Для дискретного входа

[число]

Для аналогового/RTD входа с одной границей

[число, число]

Для аналогового/RTD входа с двумя границами

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/inputs/limits
Пример ответа:
{
    "1": [
        1430.0
    ],
    "2": [],
    "3": [
        30.097679138183594,
        70.4884033203125
    ],
    "8": []
}

12.10.3. Изменение

Запрос:
POST /api/ccu/<imei>/inputs/limits

Параметр: см. Таблица 14.

Ответ: см. Таблица 14.

Пример запроса curl:
curl -k -X POST -d '{"1":[1000.0],"3":[20,55.5]}' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/inputs/limits
Пример ответа:
{
    "1": [
        1000.0
    ],
    "3": [
        19.98779296875,
        55.4945068359375
    ]
}

12.11. Выходы

12.11.1. Типы выходов

Таблица 15. Типы выходов
Номер выхода Тип

1

Реле 1

2

Реле 2

3

Выход 1

4

Выход 2

5

Выход 3

6

Выход 4

7

Выход 5

12.11.2. Получение

Запрос:
GET /api/ccu/<imei>/outputs

Ответ:

Таблица 16. Состояние выходов
Номер выхода Значение Описание

число в строковом представлении

0

Выключен

1

Включен

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/outputs
Пример ответа:
{
    "1": 1,
    "2": 1,
    "3": 0,
    "4": 0,
    "5": 0,
    "6": 0
}

12.11.3. Управление

Запрос:
POST /api/ccu/<imei>/outputs

Параметр:

Таблица 17. Управление выходами
Номер выхода Значение Описание

число в строковом представлении

0

Выключить

1

Включить

2

Сценарий 1

3

Сценарий 2

4

Сценарий 3

5

Сценарий 4

6

Сценарий 5

7

Сценарий 6

8

Сценарий 7

9

Сценарий 8

10

Сценарий 9

11

Сценарий 10

12

Сценарий 11

13

Сценарий 12

14

Сценарий 13

15

Сценарий 14

Ответ: см. Таблица 16.

Пример запроса curl:
curl -k -X POST -d '{"1":0,"6":1}' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/outputs
Пример ответа:
{
    "1": 0,
    "6": 1
}

12.12. Профили

Запрос:
POST /api/ccu/<imei>/profile

Параметр: число (номер профиля для применения).

Ответ: число (номер примененного профиля)/null (если профиль запрещен).

Пример запроса curl:
curl -k -X POST -d 1 \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/profile
Пример ответа:
1

12.13. События

12.13.1. Источники событий

Для получения событий через HTTP API необходимо в конфигураторе контроллера в нужном соединении выбрать источники событий.

http api events
Рисунок 9. Выбор источников событий для HTTP API

12.13.2. Получение

Для получения событий используется технология Server-Sent Events.

Запрос:
GET /api/ccu/events

Ответ:

Таблица 18. Событийный объект
Параметр Значение Описание

imei

строка

IMEI контроллера (опционально)

event

Таблица 19

Событие

ack

число

Код подтверждения события (опционально)

Если событийный объект содержит параметр ack, то событие должно быть подтверждено (см. Раздел 12.13.3).

Таблица 19. События
Значение Описание

"keepalive"

Периодическое событие для поддержания соединения

"online"

Контроллер подключился

"offline"

Контроллер отключился

"event_power_on"

Внешнее питание включено

"event_power_off"

Внешнее питание отключено

["event_battery_low", число]

Батарея разряжена, значение [%]

["event_balance_low", число]

Баланс снизился, значение

["event_temp_low", число]

Температура платы упала, значение [°C]

["event_temp_normal", число]

Температура платы вернулась в допустимый диапазон, значение [°C]

["event_temp_high", число]

Температура платы поднялась, значение [°C]

"event_case_open"

Корпус контроллера открыт

["event_test", системная информация (Таблица 6), режим охраны (Таблица 9 и Таблица 10)]

Тестовое сообщение

["event_info", состояние входов (Таблица 11), состояние выходов (Таблица 16)]

Информационное сообщение

["event_disarm", источник события (Таблица 20), число/null]

Переведен в режим НАБЛЮДЕНИЕ, номер раздела или null

["event_arm", источник события (Таблица 20), число/null]

Переведен в режим ОХРАНА, номер раздела или null

["event_protect", источник события (Таблица 20), число/null]

Переведен в режим ЗАЩИТА, номер раздела или null

["event_input", число, состояние входа (Таблица 12)]

Вход: АКТИВЕН/ПАССИВЕН, номер входа

["event_profile_applied", число]

Профиль применен, номер профиля

"event_device_on"

Контроллер включен

"event_device_restart"

Контроллер перезапущен

"event_firmware_upgrade"

Прошивка обновлена

["event_ext_runtime_error", число]

Ошибка выполнения программы EXT, код ошибки

Таблица 20. Источник события (изменение режима охраны)
Источник события Описание

"source_button"

Кнопкой

["source_touch_memory", строка]

Ключом, идентификатор ключа или пользователь

"source_input"

С помощью входа

"source_scheduler"

Планировщиком задач по времени

["source_dtmf", строка]

Через голосовое меню, пользователь

["source_sms", строка]

С помощью SMS команды, пользователь

["source_csd", строка]

Через CSD соединение, пользователь

["source_call", строка]

С помощью вызова без установки соединения, пользователь

["source_ccu_shell", строка]

Через CCU Shell, пользователь

"source_modbus"

Через GuardTracker RS-485

["source_bot", строка]

С помощью бота, пользователь

"source_ext"

Через программу EXT

Пример запроса curl:
curl -k -X GET -H 'Authorization: Bearer <key>' https://<host>/api/ccu/events
Примеры событий:
data:{"event":"online","imei":"865609024314173"}
data:{"ack":17696,"event":["event_arm",["source_ccu_shell","admin"],
      null],"imei":"865609024314173"}
data:{"event":"keepalive"}
data:{"ack":1792,"event":["event_input",1,[true,5.155066967010498]],
      "imei":"865609024314173"}

12.13.3. Подтверждение

Запрос:
POST /api/ccu/<imei>/events/ack

Параметр: массив чисел.

Ответ: нет.

Пример запроса curl:
curl -k -X POST -d '[1,2]' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <key>' https://<host>/api/ccu/<imei>/events/ack

13. Modbus TCP

13.1. Настройка

Параметр конфигурации modbus (см. Таблица 2) позволяет настроить до 255 шлюзов Modbus TCP. Адрес шлюза задается числом от 1 до 255. Соответствующий адрес шлюза и адрес устройства также должны быть заданы в конфигураторе контроллера на странице "Общие параметры соединений" (см. Рисунок 10). Настройка более одного шлюза позволяет обойти ограничение Modbus (адрес устройства ограничен диапазоном от 1 до 247) и при необходимости подключить более 247 контроллеров.

Пример настройки двух шлюзов Modbus TCP
{modbus, [{1, 502}, {2, 503}]}.

После запуска в info.log будут сообщения вида: Modbus TCP {gate: 1, port: 502} started.

modbus
Рисунок 10. Настройка Modbus TCP в конфигураторе контроллера
Пример настройки, когда Modbus TCP не используется
{modbus, []}.

Если параметр конфигурации modbus_read_disabled имеет значение true, то разрешается считывание запрещенных в конфигурации контроллера входов и выходов. Для запрещенных дискретных входов и дискретных выходов будет считываться значение 0 (OFF). Для запрещенных аналоговых входов будет считываться значение 7FFFFFFF16, что соответствует NaN (не число) в стандарте IEEE 754.

Если параметр конфигурации modbus_read_disabled имеет значение false, то считывание запрещенных в конфигурации контроллера входов и выходов приведет к ошибке Illegal Data Address (код 02).

13.2. Функции

Учитывая особенности работы 2G, рекомендуется задавать в SCADA период опроса каждого контроллера не менее 10 секунд.

13.2.1. Read Coils (01)

Дискретные выходы контроллера отображаются на Coils (Регистры флагов).

Таблица 21. Дискретные выходы
Адрес Имя

0

Реле 1

1

Реле 2

2

Выход 1

3

Выход 2

4

Выход 3

5

Выход 4

6

Выход 5

13.2.2. Read Discrete Inputs (02)

Дискретные входы контроллера отображаются на Discrete Inputs (Дискретные входы).

Таблица 22. Дискретные входы
Адрес Имя

0

Вход 1

1

Вход 2

2

Вход 3

3

Вход 4

4

Вход 5

5

Вход 6

6

Вход 7

7

Вход 8

8

Вход 9

9

Вход 10

10

Вход 11

11

Вход 12

12

Вход 13

13

Вход 14

14

Вход 15

15

Вход 16

13.2.3. Read Input Registers (04)

Таблица 23. Типы данных
Тип Размер (бит) Описание

int16

16

Целочисленный

float

32

Плавающий, одинарной точности, стандарт IEEE 754

Порядок байтов: от старшего к младшему (big-endian).

Аналоговые входы

Аналоговые входы контроллера отображаются на Input Registers (Регистры ввода). Один вход занимает два регистра.

Таблица 24. Аналоговые входы
Адрес Имя Тип

0

Вход 1

float

2

Вход 2

float

4

Вход 3

float

6

Вход 4

float

8

Вход 5

float

10

Вход 6

float

12

Вход 7

float

14

Вход 8

float

16

Вход 9

float

18

Вход 10

float

20

Вход 11

float

22

Вход 12

float

24

Вход 13

float

26

Вход 14

float

28

Вход 15

float

30

Вход 16

float

Системная информация

Системная информация контроллера отображается на Input Registers (Регистры ввода).

Таблица 25. Системная информация
Адрес Имя Тип Значение отсутствует

100

Уровень GSM сигнала [дБм]

int16

-

101

Внешнее питание [В]

float

0

103

Заряд батареи [%]

int16

-1

104

Температура платы [°C]

int16

-1

105

Баланс SIM-карты

float

-1

13.2.4. Write Single Coil (05)

13.2.5. Write Multiple Coils (15)

13.3. Ошибки

Таблица 26. Ошибки Modbus
Код Ошибка Описание

01

Illegal Function

Функция не поддерживается

02

Illegal Data Address

Неверный адрес

03

Illegal Data Value

Неверное значение

04

Slave Device Failure

Ошибка передачи данных

06

Slave Device Busy

Слишком много запросов

10

Gateway Path Unavailable

В лицензии не включена поддержка Modbus для данного контроллера

11

Gateway Target Device Failed To Respond

Контроллер не в сети или превышено время ожидания ответа

14. Сквозной канал TCP

Данная функция позволяет организовать удаленный доступ по TCP к любому RS-232 или RS-485 устройству. В контроллере должна быть установлена соответствующая плата расширения. Для подключения устройства по RS-232 необходима плата расширения E01.3. Для подключения устройства по RS-485 необходима плата расширения E03.1.

Одно из возможных применений сквозного канала TCP — дистанционное считывание показаний счетчика электроэнергии. Счетчик подключается к контроллеру по RS-232 или RS-485. При подключении контроллера к CCU Relay на сервере открывается TCP-порт (номер порта задается в конфигурации контроллера). Программа для считывания показаний счетчика подключается к данному TCP-порту. Таким образом организуется полнодуплексный сквозной канал к счетчику. Данные передаются прозрачно между TCP-портом на стороне CCU Relay и интерфейсом RS-232 или RS-485 на стороне контроллера.

config passthrough
Рисунок 11. Настройка порта сквозного канала TCP в конфигураторе контроллера
config passthrough ext board
Рисунок 12. Выбор платы расширения для сквозного канала TCP в конфигураторе контроллера
Статус сквозного канала
  • ожидается подключение по сквозному каналу TCP

  • соединение по сквозному каналу TCP установлено

  • заданный TCP порт не может быть использован

  • опция сквозного канала TCP не включена в лицензии CCU Relay

  • нет соединения с CCU Relay

15. GSM модем

Поддерживается GSM модем RGM-M12.

15.1. Настройка

Параметр конфигурации gsm (см. Таблица 2) позволяет задать список подключенных GSM модемов. Идентификаторы и имена портов должны быть уникальными. Идентификатором является произвольная строка. Данный идентификатор будет отображаться в логе обмена с GSM модемами.

find port linux
Рисунок 13. Определение имени порта (/dev/ttyUSB0) в Linux
find port windows
Рисунок 14. Определение имени порта (COM4) в "Диспетчере устройств" Windows
Пример настройки двух GSM модемов (для Linux)
{gsm, [{"gsm1", "/dev/ttyUSB0"}, {"gsm2", "/dev/ttyUSB1"}]}.
Пример настройки двух GSM модемов (для Windows)
{gsm, [{"gsm1", "COM1"}, {"gsm2", "COM2"}]}.

После запуска в info.log будут сообщения вида: GSM {id: gsm1, port: /dev/ttyUSB0} started.

Протокол обмена с GSM модемами записывается в gsm.log.

Пример настройки, когда GSM модем не используется
{gsm, []}.

15.2. События

Для получения событий через SMS необходимо в конфигураторе контроллера в нужном соединении выбрать источники событий и установить язык SMS: CCU Relay.

sms events
Рисунок 15. Выбор источников событий для SMS

15.2.1. HTTP API

Событийный объект (см. Раздел 12.13.2), полученный через SMS, не содержит параметр ack. Подтверждение не требуется.

Если в конфигураторе контроллера в соединении настроено оповещение через CCU Relay (см. Рисунок 9) и оповещение через SMS (см. Рисунок 15), то событие будет доставляться через SMS только в том случае, если оно не будет подтверждено через HTTP API (см. Раздел 12.13.3) в течение времени, которое задано параметром "Снять данные с передачи, если не переданы за" (см. Рисунок 9). В этом случае SMS является резервным видом доставки событий.

15.2.2. Modbus TCP

Если в конфигураторе контроллера настроено оповещение через SMS (см. Рисунок 15) и также настроен Modbus TCP (см. Рисунок 10), то состояние входов и выходов, содержащееся в полученном событии (информационное сообщение, переход входа в активное или пассивное состояние), а также системная информация контроллера (тестовое сообщение), могут быть считаны запросом через Modbus TCP. Это позволяет получать информацию в SCADA через SMS. Например, в контроллере может быть настроена периодическая отправка информационного и тестового сообщений, содержащих состояние входов, выходов и системную информацию.