Wiren Board 6: различия между версиями

Материал из Wiren Board
Строка 140: Строка 140:
<!--T:374-->
<!--T:374-->
'''[[CAN]]''' — это стандарт коммуникации по двухпроводной шине.  
'''[[CAN]]''' — это стандарт коммуникации по двухпроводной шине.  
На контроллере мультиплексирован (выведен на те же клеммники) со вторым портом RS-485. Может работать в режиме UART-CAN (также называемая иногда просто шиной CAN или RS-CAN) - используется физический уровень CAN для полудуплексного последовательного порта UART. Шина UART-CAN используется преимущественно в приборах учёта, таких как счётчики электроэнергии Меркурий.
На контроллере мультиплексирован (выведен на те же клеммники) со вторым портом RS-485.  
 
Может работать в режиме '''UART-CAN''' (также называемая иногда просто шиной CAN или RS-CAN) - используется физический уровень CAN для полудуплексного последовательного порта UART. Шина UART-CAN используется преимущественно в приборах учёта, таких как счётчики электроэнергии Меркурий.


<!--T:375-->
<!--T:375-->

Версия 15:12, 19 марта 2020





Контроллер Wiren Board 6 с боковыми модулями

Общие характеристики

Логическая блок-схема контроллера
Wiren Board 6 без корпуса (rev. 6.3)
Процессор NXP i.MX 6ULL 800 MHz Cortex A7 (версии 500MHz и 900MHz под заказ)
Память оперативная DDR3 SDRAM 512 MB
Память энергонезависимая 4 GB eMMC
Операционная система Debian Linux 9 Stretch. Mainline kernel 4.9.
Габаритные размеры Корпус на DIN рейку 6U

106.25x90.2x57.5 мм. Размер без корпуса: 103x87x20 мм.

Эксплуатация Рабочая температура 0...+70С/-40..+85С

(в зависимости от комплектации).


Страница продукта и магазин: Wiren Board 6



Для начала работы с контроллером рекомендуется прочитать статью Первое включение.


Как устроено ПО Wiren Board

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

Wiren Board работает под управлением Debian Linux. Для архитектуры используемого процессора есть официальный порт, поэтому любое стандартное Linux-приложение можно установить из репозитория одной командой apt install имя_пакета.

Все сервисы контроллера общаются между собой по общей «шине», в роли которой выступает Очередь сообщений MQTT.

По умолчанию установлены Веб-интерфейс Wiren Board, Движок правил wb-rules, а также драйвера и вспомогательные утилиты.

Опционально можно установить шлюзы для интеграции со SCADA-системами и сторонний софт. Полный список смотрите в Таблице поддерживаемых устройств, протоколов и программ.

Разработка своих решений

Вы можете разрабатывать своё ПО для контроллеров Wiren Board или собрать собственный образ прошивки с нужными вам настройками, лицензиями и пакетами. Свой образ прошивки можно установить в контроллеры самостоятельно штатными средствами, или мы можем делать это сразу на производстве при заказе отдельной партии.

Исходный код программного обеспечения контроллера доступен на GitHub. Там можно почерпнуть примеры для разработки собственного ПО.

Статьи:

Обновление прошивки и релизный цикл

Кратко о релизах

Релизный цикл ПО Wiren Board

Программное обеспечение контроллеров Wiren Board состоит из множества пакетов, которые мы объединяем в релизы:

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

Стабильные релизы имеют номер вида wb-YYMM, где YY — год, а MM — месяц выпуска. Например, wb-2104 — релиз, выпущенный в апреле 2021 года.

Мы будем рады, если вы сможете присоединиться к использованию testing, ведь кроме получения новых фич вы поможете уменьшить количество ошибок в stable.

Журналы изменений в релизах
Ветка Имя
stable wb-2401wb-2310wb-2307wb-2304wb-2207wb-2204wb-2201wb-2110wb-2108 • wb-2104
testing скользящий релиз, изменения

Какой релиз на вашем контроллере

Версия ПО в веб-интерфейсе контроллера
WebUIDevicesSystem

С завода на контроллерах Wiren Board установлен актуальный на момент производства стабильный релиз.

Узнать версию релиза можно в веб-интерфейсе контроллера в разделе Устройства в карточке устройства System или в консоли командой wb-release.

Переключение между релизами

Между релизами можно переключаться вручную. Сделайте резервную копию настроек, подключитесь к контроллеру через SSH и выполните одну из команд:

  • Переход со стабильного на тестовый:
    wb-release -t testing
    
  • Переход с тестового на стабильный:
    wb-release -t stable
    

После смены релиза рекомендуем перезагрузить контроллер на случай, если обновилось ядро, а также обновить страницу веб-интерфейса в браузере со сбросом кэша (Ctrl+F5 для Chrome), чтобы загрузилась обновленная версия.

Кроме этого, сменить релиз можно с помощью прошивки контроллера fit-файлом, способы и ограничения смотрите в инструкции по обновлению ПО для вашего контроллера.

Обновление прошивки контроллера и откат к заводским настройкам

Прошивку контроллера можно обновить или вернуть его к заводскому состоянию с удалением всех данных.

Все ревизии контроллера можно обновить через менеджер пакетов apt или веб-интерфейс, а в относительно свежих добавилась возможность обновления с флеш-накопителя и через Debug Network.

Инструкции:

Список сервисов и их назначение

Список сервисов, запущенных на контроллере, их статус и описание можно получить командой:

systemctl list-units --type=service

Про управление сервисами читайте в статье Диагностика ошибок в работе контроллера.

Имя сервиса Описание
avahi-daemon.service Avahi mDNS/DNS-SD Stack
bluetooth.service Bluetooth service
cgmanager.service Cgroup management daemon
cron.service Regular background program processing daemon
dbus.service D-Bus System Message Bus
dnsmasq.service dnsmasq - A lightweight DHCP and caching DNS server
getty@tty1.service Getty on tty1
hostapd.service LSB: Advanced IEEE 802.11 management daemon
kmod-static-nodes.service Create list of required static device nodes for the current kernel
knxd.service KNX Daemon
mosquitto.service Mosquitto MQTT v3.1/v3.1.1 Broker
netplug.service LSB: Brings up/down network automatically
networking.service Raise network interfaces
nginx.service A high performance web server and a reverse proxy server
ntp.service LSB: Start NTP daemon
rsyslog.service System Logging Service
serial-getty@ttymxc0.service Serial Getty on ttymxc0
ssh.service OpenBSD Secure Shell server
systemd-fsck-root.service File System Check on Root Device
systemd-fsck@dev-mmcblk0p6.service File System Check on /dev/mmcblk0p6
systemd-journal-flush.service Flush Journal to Persistent Storage
systemd-journald.service Journal Service
systemd-logind.service Login Service
systemd-modules-load.service Load Kernel Modules
systemd-random-seed.service Load/Save Random Seed
systemd-modules-load.service Load Kernel Modules
systemd-random-seed.service Load/Save Random Seed
systemd-remount-fs.service Remount Root and Kernel File Systems
systemd-sysctl.service Apply Kernel Variables
systemd-tmpfiles-setup-dev.service Create Static Device Nodes in /dev
systemd-tmpfiles-setup.service Create Volatile Files and Directories
systemd-udev-trigger.service udev Coldplug all Devices
systemd-udevd.service udev Kernel Device Manager
systemd-update-utmp.service Update UTMP about System Boot/Shutdown
systemd-user-sessions.service Permit User Sessions
user@0.service User Manager for UID 0
watchdog.service watchdog daemon
wb-configs-early.service prepare mounts and symlinks to config files
wb-configs.service watch config files
wb-gsm-rtc.service LSB: initscript to use GSM modem integrated RTC
wb-homa-ism-radio.service LSB: MQTT driver for WB HomA for RFM69 ISM radio
wb-hwconf-manager.service LSB: Hardware configuration with Device Tree overlays
wb-init.service LSB: board-specific initscript
wb-mqtt-adc.service MQTT Driver for ADC
wb-mqtt-confed.service LSB: Configuration Editor Backend
wb-mqtt-db.service Wiren Board database logger
wb-mqtt-gpio.service MQTT Driver for GPIO-controlled switches
wb-mqtt-knx.service LSB: : Wiren Board MQTT KNX bridge
wb-mqtt-logs.service Wiren Board journald to MQTT gateway
wb-mqtt-mbgate.service Wiren Board MQTT to Modbus TCP gateway
wb-mqtt-opcua.service Wiren Board MQTT to OPC UA gateway
wb-mqtt-serial.service MQTT Driver for serial devices
wb-mqtt-w1.service Kernel 1-Wire MQTT driver for WB-HomA
wb-prepare.service initialize filesystems at first boot
wb-repart.service prepare partitions at first boot
wb-rules.service MQTT Rule engine for Wiren Board
wb-systime-adjust.service Compensation of systime in PPM from value, stored in device-tree (with opposite sign)
wb-watch-update.service LSB: Firmware update monitor

Модульность контроллера

Модуль расширения microSD
Подключение модуля ввода-вывода к контроллеру
Контроллер Wiren Board 6.5: разъем micro SIM 1 перенесен на передний ряд клеммников

Внутренние модули расширения — это небольшие платы, устанавливаемые внутрь корпуса Wiren Board 6 и расширяющие его функциональность: дополнительные порты RS-485, RS-232, релейные выходы и т. д.

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


Модули ввода-вывода стыкуются с боковым разъемом на WB6 с правой стороны; каждый модуль добавляет к контроллеру от 8 до 16 цифровых или аналоговых портов.

Последовательно можно подключать до 8 модулей: до 4 модулей ввода (типа I) и до 4-х модуля вывода (типа O и IO).


Модуль резервного питания — дополнительная мезонинная плата, устанавливается вторым этажом в корпус на DIN-рейку. Содержит Li-Ion (Li-Pol) аккумулятором емкостью 2200 mAh, обеспечивает работу контроллера до 3 часов.

Беспроводные интерфейсы

Модуль сотовой связи — модем 2G (GPRS), 3G (UMTS) или NB-IoT устанавливается в контроллер при производстве. Требуется SIM-карта формата microSIM.

Модем позволяет отправлять и принимать SMS, подключаться к интернету. Работа с двумя SIM-картами в режиме мультиплексирования. В контроллерах Wiren Board 6.0 -6.4 Оба разъема находятся на боковой поверхности контроллера. В контроллере Wiren Board 6.5 разъем micro SIM 1 перенесен на передний ряд клеммников.


Модуль Wi-Fi в Wiren Board можно настроить на работу в одном из трёх режимов:

  • режим точки доступа, включён по умолчанию (имя WirenBoard, без пароля, адрес контроллера в созданной сети: 192.168.42.1)
  • режим клиента
  • одновременная работа в режиме и точки доступа, и клиента

Модуль Bluetooth 4.0 (Bluetooth Low Energy) — можно отслеживать приближение других Bluetooth устройств, например, мобильного телефона или Bluetooth-метки.


USB-стик Z-Wave - подключается в USB-разъем и обеспечивает поддержку устройств стандарта Z-Wave.


Пакетное радио 433 МГц — радиомодуль RFM69H устанавливается в контроллер при производстве (в версиях до 6.4). Позволяет подключать к контроллеру устройства Noolite, датчики Oregon.

В версии WB6.5 доступен в виде модуля расширения.


Антенны Wi-Fi, GSM и радио 315/433MHz подключаются к разъемам SMA.

При слабом сигнале GSM рекомендуется использовать выносную антенну и располагать ее вдали от контроллера.

Проводные интерфейсы

Интерфейс Ethernet поддерживает скорость 10/100 Мбит/с. Контроллер Wiren Board 6 комплектуется двумя интерфейсами Ethernet.


Контроллер оборудован двумя портами USB 2.0 (A/F). Оба порта работают в режиме USB Host; в следующих версиях контроллера первый порт (ближний к Ethernet-разъему) будет поддерживать загрузку прошивки контроллера. Управление питанием отдельных USB-устройств описано в статье Питание USB-портов.


Настройка происходит через страницу Configs веб-интерфейса

Интерфейс RS-485 — стандарт коммуникации по двухпроводной шине.

Контроллер имеет 2 порта RS-485 + можно добавить еще 2 порта модулями расширения RS-485 .

Статья RS-485:Физическое подключение поможет вам правильно выбрать и проложить кабели шины.

Настройка подключения устройств осуществляется в веб интерфейсе.

Стандартно в Wiren Board с подключёнными по RS-485 устройствами работает Драйвер wb-mqtt-serial через систему MQTT-сообщений.


CAN — это стандарт коммуникации по двухпроводной шине. На контроллере мультиплексирован (выведен на те же клеммники) со вторым портом RS-485.

Может работать в режиме UART-CAN (также называемая иногда просто шиной CAN или RS-CAN) - используется физический уровень CAN для полудуплексного последовательного порта UART. Шина UART-CAN используется преимущественно в приборах учёта, таких как счётчики электроэнергии Меркурий.

1-Wire — шина для подключения внешних датчиков по двум или трём проводам. Так как это шина, можно подключить несколько устройств на один порт 1-Wire. ПО контроллера поддерживает подключение температурных датчиков типа DS18B20.

Для питания датчиков удобно использовать выход +5V. Он защищен от короткого замыкания и подачи повышенного напряжения. При питании контроллера от аккумулятора выход +5V остается активным. Также поддерживается программное управление этим выходом (его можно отключать).

Универсальные входы/выходы A1-A4

Порты и интерфейсы Wiren Board 6
Работа с самозажимными клеммами

Универсальный канал Ах объединяет в себе три функции и может работать как:

Каналы W1-W2

Каналы W1 и W2 могут работать как интерфейс для подключения датчиков 1-Wire (по-умолчанию) или как дискретные входы типа "сухой контакт". Обратите внимание, что в режиме дискретного входа срабатывание происходит при замыкании сигнала Wx на землю (клеммник GND), в отличие от каналов A1-A4 (выше).

Режим каждого канала выбирается независимо в конфигурации контроллера. Через веб-интерфейс нужная настройка находится в разделе Configs => Hardware Module Configuration => W1 terminal mode .

К каждому каналу можно подключать шлейфом несколько датчиков температуры DS18B20: в зависимости от длины шлейфа максимальное число датчиков 10 — 20 (предельное число - 20 датчиков по 5м кабеля, соединенных звездой). Дополнительные датчики можно подключать через модуль WBE2-I-1-WIRE.

Клеммники

Часть клеммников может выполнять более одной функции — смотрите описание входов/выходов и статью Мультиплексирование портов.

подпись

Max. V, I cостояние по умолчанию Функции
Верхний ряд, левый блок
Vin 40V (WB6.3,6.4)

52V (WB6.5)

Входное напряжение, защита от переполюсовки
GND "земля", минус блок питания
Верхний ряд, правый блок
O1-O3 Входы/выходы 1-го модуля расширения
O1-O3 Входы/выходы 2-го модуля расширения
Нижний ряд, правый блок
A1-A4 40V , 1A High Z Выходы "открытый коллектор", ADC
GND Для удобства подключения внешних датчиков
W1 40V 5V 1-Wire, GPIO
W2 40V 5V 1-Wire, GPIO
5V out 5V, 0.5A 5V Выход 5V. Отключение при превышении тока. Программное включение-выключение.
A 40 V 0V порт RS-485 (/dev/RS-485-1)
B 40 V +5V
L 40 V 0V Порт CAN или RS-485 (/dev/RS-485-2) .

Подключение RS-485: A к клемме A|L, B к клемме B|H.

H 40 V +5V
Vout* 1A Выход питания. Входное напряжение, программное включение-выключение.


В версии контроллера WB6.3 в качестве интерфейсных клемм применены клеммы "тип 250". Это самозажимные клипсы. При вставке очищенного одножильного провода в гнездо, он автоматически зажимается пружинной защёлкой. Для вставки многожильных проводов необходимо отжать пружину, нажав на кнопку клипсы (или использовать изолированные штыревые наконечники НШВИ). Кнопка имеет паз под шлицевую отвертку. Для извлечения провода, нужно отжать пружину, нажав на кнопку клипсы, и вытащить провод.

В версиях начиная с WB6.4 в качестве интерфейсных клемм применены разъемные винтовые клеммы "серии 15EDG" с шагом 3,5мм. При завинчивании не прикладывайте больших усилий!

Другие интерфейсы

Отладочный порт — подключившись к нему можно получить прямой доступ к консоли контроллера. Через него можно также взаимодействовать с загрузчиком и следить за загрузкой операционной системы (последовательная консоль, serial console).

"Пищалка" — издает звуковой сигнал, частота настраивается.

Часы реального времени RTC питаются от внутренней резервной батарейки.

Сторожевой таймер

Контроллер содержит отдельный аппаратный watchdog, перезагружающий его целиком по питанию при зависании ПО.

Отключение аппаратного сторожевого таймера

Питание

На контроллере есть три внешних входа для подключения питания:

  • DC jack - стандартный штекерный разъем (5.5x2.1мм) на левой стороне корпуса.
  • Клеммники Vin и GND: две клеммы Vin, к которым можно подключить два независимых блока питания для резервирования. Земли блоков питания должны быть соединены и подключены к клемме GND.
  • Питание по кабелю Ethernet (Passive PoE). Подробнее в Power over Ethernet.

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


Для резервного питания можно подключить внутренний модуль WBMZ-BATTERY2 с Li-Ion (Li-Pol) аккумулятором. Важно: при поставке контроллера с аккумуляторным модулем при подаче питания контроллер не включается сразу. Для его включения необходимо нажать на кнопку включения модуля под верхней крышкой контроллера. Смотрите статью WBMZ2-BATTERY.

Допустимый диапазон питания 9 — 36 В для версий WB6.1-6.4.1 , и 9 — 48 В для WB6.5 и старше. Среднее потребление платы - 1,5 — 2 Вт. Но так как модуль GSM потребляет импульсно до 8 Вт, рекомендуется использовать блоки питания с мощностью не менее 10 Вт.

Поддерживаемые устройства

Устройства нашего производства с интерфейсом RS-485

Поддерживаемые устройства

Подключение периферийных устройств

Монтаж проводов в клеммниках устройств Wiren Board


Особенности сетевых настроек контроллера

Wirenboard 6: сетевые настройки контроллера на удаленном объекте

Подробное тех.описание платы контроллера

Размеры платы контроллера

В статье Wiren Board 6: Схемотехника описаны некоторые особенности работы и устройства входов, схемы питания контроллера.

Аппаратные ошибки/особенности Wiren Board 6 найденные при эксплуатации контроллера.

Wiren Board: Аппаратные ревизии — описание изменений в плате контроллера.

Таблицы соответствия GPIO процессора и сигналов на плате для ревизий: Wiren Board 6.0.1, Wiren Board 6.1, Wiren Board 6.2 и свежее

Работа с GPIO — как работать с GPIO напрямую.

Обновление прошивки. Для сброса Wiren Board 6 к заводским настройкам (factory reset) используйте инструкцию из раздела Обновление прошивки#Сброс Wiren Board 6 к заводским настройкам

Wiren Board 6: Восстановление пароля пользователя root

Сводная таблица характеристик

Общее
Процессор NXP i.MX 6ULL 800 MHz Cortex A7 (версии 500MHz и 900MHz под заказ)
Память оперативная DDR3 SDRAM 512 MB
Память энергонезависимая 4 GB eMMC
Габаритные размеры Корпус на DIN рейку 6U

106.25x90.2x57.5 мм. Размер без корпуса: 103x87x20 мм.

Эксплуатация Рабочая температура 0...+70С/-40..+85С

(в зависимости от комплектации).

Клеммники и сечение проводов
Рекомендуемое сечение провода с НШВИ, мм2 0,75 — 1
Длина стандартной втулки НШВИ, мм 8
Момент затяжки винтов, Н∙м 0,2
Интерфейсы
RS-485 2
CAN 1 (мультиплексирован с RS-485)
Порты Wx (Интерфейс 1-Wire/дискретный вход) 2
Порты Ax (Дискретный вход / аналоговый вход / выход «открытый коллектор») 4
Коммуникации
Ethernet 10/100 2 (с passive PoE)
USB Host 2
Wi-Fi 802.11n 1 (AP, client)*
Bluetooth 4.0 1*
Сотовая связь 2G / 3G / 2G+NB-Iot или без модема *
SIM-карты 2 x micro SIM, одновременно в сети одна
Питание
Напряжение 9 - 36V DC
Схема питания от входа с бОльшим напряжением
Входы на клеммах 2
DC джек 1
питание по Ethernet 1 (первый порт)
Выходы для питания внешних устройств
Vout входное питание - с ограничением тока, программным отключением и контролем состояния
5Vout 5V - с ограничением тока, программным отключением, измерением выходного напряжения
Модульность
Слоты для внутренних модулей расширения типа WBE2 и WBE2R 2
Слоты для внутренних модулей расширения типа WBE2S и WBE2R 1
Разъём для внешний модулей ввода-вывода WBIO
Разъём для мезонинного модуля питания (АКБ, суперконденсаторов, фильтров) 1
Программное обеспечение в комплекте
Операционная система Debian Linux 9 Stretch. Mainline kernel 4.9.
Поддержка протоколов последовательных портов Modbus RTU, протоколы Меркурий, Милур, Пульсар, ИВТМ и т.д.
Поддержка протоколов при установке модулей расширения Z-Wave, KNX
Поддержка протоколов по IP KNX IP, Modbus RTU-over-TCP, SNMP
Встроенный Web-интерфейс Добавление устройств, настройки, визуализация, мнемосхемы
Сценарии Правила wb-rules на JavaScript, редактирование через Web-интерфейс. Поддержка сценариев на Node-RED
Визуализация Табличное представление, мнемосхемы в встроенном Web-интерфейсе.
Мобильные устройства Адаптивный веб-интерфейс. Интеграция со сторонними мобильными приложениями: MQTT Dash, iRidium. Поддерживается сообществом пользователей: home kit.
Архив Модуль хранения истории значений каналов wb-mqtt-db, до 1GB данных
Обновление ПО Отдельных компонентов через APT, целиком прошивки с сохранением резервной копии через Web и USB-флеш
Отправка данных в ПО верхнего уровня MQTT, Modbus TCP, Zabbix API и т.п.
Поддержка ПО верхнего уровня SAYMON, Zabbix, Nagios, Unimon, Grafana, Master SCADA, Rapid SCADA и другие
Прочее Простая установка тысяч пакетов из репозиториев Debian, nodejs, python и т.п.




Изображения и чертежи устройства

По ссылкам ниже вы можете скачать изображения и чертежи разных моделей контроллеров Wiren Board 6.

Модель CorelDRAW PDF CorelDRAW Autocad 2013 DXF Autocad PDF
Wiren_Board-6.5 Wiren_Board-6.5.cdr.zip Wiren_Board-6.5.cdr.pdf Wiren_Board-6.5.dxf.zip Wiren_Board-6.5.pdf
Wiren_Board-6 Wiren_Board-6.cdr.zip Wiren_Board-6.cdr.pdf Wiren_Board-6.dxf.zip Wiren_Board-6.pdf
Wiren_Board-6_KNX Wiren_Board-6_KNX.cdr.zip Wiren_Board-6_KNX.cdr.pdf Мы еще не подготовили чертеж этого устройства. Вы можете запросить чертеж устройства "Контроллер Wiren Board 6 KNX" на портале техподдержки Wiren Board (необходима регистрация).
Wiren_Board-6.4 Wiren_Board-6_new.cdr.zip Wiren_Board-6_new.cdr.pdf Wiren_Board-6_new.dxf.zip Wiren_Board-6_new.pdf
Wiren_Board-6_new_KNX Wiren_Board-6_new_KNX.cdr.zip Wiren_Board-6_new_KNX.cdr.pdf Мы еще не подготовили чертеж этого устройства. Вы можете запросить чертеж устройства "Контроллер Wiren Board 6.4 KNX" на портале техподдержки Wiren Board (необходима регистрация).
Wiren_Board-6_Zero Wiren_Board-6_Zero.cdr.zip Wiren_Board-6_Zero.cdr.pdf Мы еще не подготовили чертеж этого устройства. Вы можете запросить чертеж устройства "Контроллер Wiren Board 6 Zero" на портале техподдержки Wiren Board (необходима регистрация).
Блок питания MW-HDR-30-24 MW-HDR-30-24.dxf.zip MW-HDR-30-24.pdf