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

В первой части статьи я рассказал какие бывают системы оповещения; где применяется модуль аудио оповещения; какую карту памяти можно использовать; какие бывают карты памяти и как управлять модулем DAO2ERA. А сейчас расскажу историю и процесс создания модулей аудио оповещения.

Разрабатывать систему аудио оповещения я начал много лет назад, ещё в 2008 году.
До первой версии аудио модуля была ещё, можно сказать, нулевая версия модуля аудио оповещения под названием SVOX, который можно найти в разделе Заказные разработки.

Аудио модуль 3VOX подключенный к контроллеру
Аудио модуль 3VOX подключенный к контроллеру

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

Схема и плата аудио модуля
Аудио модуль 3VOX на односторонней плате
Аудио модуль 3VOX на односторонней плате

В основе платы стоит микроконтроллер AVR ATMega16L, так же на плате держатель SD Card, линейный стабилизатор, создающий 3.3В для SD карты и моно-усилитель АВ класса в качестве предварительного усилителя.

К разъёму X7 подключался символьный ЖК дисплей 4 строчки по 20 символов и несколько кнопок. На этот дисплей выводилась информация о режиме работы модуля и параметры файлов.

При включении на индикатор выводится информация о карте памяти:

RD для VOX&VOX v1.1
SDC OK! SMSD
1951Мб,6FAT16,Кл= 64
AD=0300,AF=0F8,F=0F4

1 строка – информация о программе.
2 строка – Тест карты и обозначение (идентификатор) карты.
3 строка – Доступный объем памяти Mб, система FAT, Кл= количество секторов в кластере.
4 строка – AD= Адрес данных (в секторах), AF= Адрес FAT таблицы (в секторах), F= количество секторов в FAT таблице.
При воспроизведении на индикатор выводится следующая информация:

20      .WAV 20 0006
PLAY..0007  000522A8
MONO   11025Гц 08Б/С
14 093 20    0040  

1 строка – имя файла . расширение, атрибуты файла (HEX), первый кластер файла (HEX) (в кластерах).
2 строка – Режим работы, текущий кластер при воспроизведении (HEX) (в кластерах), длинна файла (HEX) (в байтах). Скорость смены кластеров зависит от количества секторов в кластере, свойств файла и скорости воспроизведения.
3 строка – Заголовок файла: MONO или STEREO, частота дискретизации Гц; число бит в сэмпле.
4 строка – Код команды, позиция файла в каталоге, имя файла для поиска, порядковый номер сектора в файле (в секторах).
Функции кнопок: 1 кнопка - переключение на предыдущий файл и воспроизведение;
2 кнопка - повторное воспроизведение текущего файла;
3 кнопка - переключение на следующий файл и воспроизведение;

Для подключения SD карты к микроконтроллеру может использоваться один из трех интерфейсов: режим SPI (однобитный), режим SDIO (1х битный) и режим SDIO (4х битный). Подключение SD Card было сделано через интерфейс SPI, потому что других интерфейсов в ATMega16 не было.
Если в режиме SDIO в интерфейсе уже все сделано за нас, то в режиме SPI необходимо учитывать некоторые особенности работы карты. Например, нужно послать большое количество тактовых импульсов прежде чем карта начнет отвечать.

Пример инициализации MMC карты в режиме SPI.

0. Подача напряжения;
1. Посылка 80 тактовых импульсов ;
2. Активация сигнала /CS, т.е. /CS=0 (так как активным уровнем является 0);
3. Посылка команды CMD0;
4. Байт ответа = 0x01? Если нет – ОШИБКА, если да – шаг 5;
5. Посылка 8 тактовых импульсов;
Инициализация (CMD1);
6. Посылка команды CMD1;
7. Байт ответа = 0x00? Если нет – вернуться на шаг 6, если да – перейти к шагу 8;
8. Посылка 8 тактовых импульсов.
На этом инициализация заканчивается.
На диаграмме: ТИ – тактовый импульс, N – неопределённое количество.

Процесс инициализации SD MMC карты
Процесс инициализации SD MMC карты
Процесс инициализации SD MMC карты
Процесс инициализации SD MMC карты

Далее 512 байтов считываются и передаются по SPI.

Процесс чтения и записи SD карты памяти

Карта читает и пишет секторами по 512 байт. И точно так же на карту нужно послать неопределенное количество тактовых импульсов, прежде чем она ответит. И это количество импульсов всегда разное.
Ниже приведены временные диаграммы процесса чтения и процесса записи.

Процесс чтения из SD MMC карты
Процесс чтения из SD MMC карты
Процесс записи на SD MMC карту
Процесс записи на SD MMC карту

Запись данных из буфера в память SD карты будет только после загрузки 512 байт. Поэтому, если данных меньше 512, то их необходимо дополнить единицами, что бы запись в карту была завершена.
Command Argument Resp Data Abbreviation Description
CMD0 40 None(0) R1 No GO_IDLE_STATE Програмный сброс.
CMD1 41 None(0) R1 No SEND_OP_COND для MMC.Initiate initialization process.
ACMD41 77+69 2 R1 No APP_SEND_OP_COND для SD. Initiate initialization process.
CMD8 48 3 R7 No SEND_IF_COND для SD V2. Check voltage range.
CMD9 49 None(0) R1 Yes SEND_CSD Чтение CSD register.
CMD10 4A None(0) R1 Yes SEND_CID Чтение CID register.
CMD12 4C None(0) R1b No STOP_TRANSMISSION Stop to read data.
CMD16 50 [31:0] R1 No SET_BLOCKLEN Change R/W block size. (Длинна блока)
CMD17 51 [31:0] R1 Yes READ_SINGLE_BLOCK Чтение одного сектора. (Адрес)
CMD18 52 [31:0] R1 Yes READ_MULTIPLE_BLOCK Чтение нескольких секторов. (Адрес)
CMD23 57 [15:0] R1 No SET_BLOCK_COUNT для MMC. Number of blocks
ACMD23 77+57 [22:0] R1 No SET_WR_BLOCK_ERASE_COUNT SD Number of blocks
CMD24 58 [31:0] R1 Yes WRITE_BLOCK Запись одного сектора. (Адрес)
CMD25 59 [31:0] R1 Yes WRITE_MULTIPLE_BLOCK Запись нескольких секторов.
CMD55 77 None R1 No APP_CMD Application specific command.
CMD58 7A None(0) R3 No READ_OCR Чтение OCR.

Программа была написана на IAR на языке C. В 2008 году я писал программу сам, а не на ARDUINO как сейчас пишут, который только появился в это время и был ещё не так хорошо развит. Я долго разбирался как работать с SD картой памяти. В результате разобрался как подключить эту карту, как идет чтение данных с карты, как устроена файловая система, как собирать из секторов файлы целиком, как полученный файл разложить по байтам и получить из него непрерывную аудио дорожку.
В результате этот модуль мог читать с карты и воспроизводить файлы формата PCM с расширением .wav. Такие файлы не нужно распаковывать, а можно сразу отправить в порт вывода. Это было идеальное решение, чтобы встроить его в микроконтроллер с маленьким объёмом флэш памяти.

Формат файла PCM с расширением .wav

Это файлы RIFF формата (Resource Interchange File Format), разработанные для хранения ресурсов мультимедиа. Это файлы без сжатия с прямой записью уровня сигнала, имеют размер гораздо больше, чем MP3, но его можно было очень легко отправить в порт вывода без алгоритма распаковки.
Основной элемент RIFF файла - т.н. чанк (chunk), но обычно используется только один чанк. В начале файла есть заголовок с таким форматом:
WORD wFormatTag; //(2б) Категория формата
WORD nChannels; //(2б) Число каналов
DWORD nSamplesPerSec; //(4б) Частота дискретизации
DWORD nAvgBytesPerSec; //(4б) Байт в секунду
WORD nBlockAlign; //(2б) Выравнивание данных в data-чанке
Отсюда и брал параметры воспроизведения.
Работать с таким файлом можно по следующей грубой схеме:
1. Проверяем сигнатуру 'RIFF' по смещению 0;
2. Проверяем сигнатуру 'WAVE' по смещению 8;
3. Проверяем wFormatTag=1 по смещению 14;
4. Читаем nChannels,nBitsPerSample по смещениям 16 и 22;
5. Если надо, читаем nSamplesPerSec по смещению 18;
6. Начиная со смещения 24, начинаем искать data-чанк. Этого можно было бы и не делать, а сразу читать сигнал по смещению 2E(2C), но я встречал wave файлы, у которых после fmt-чанка вставлен некий fact-чанк длины 4 (+4 на сигнатуру +4 на ckSize), о назначении которого мне, к сожалению, ничего не известно. Таким образом, после прочтения fmt-чанка надо пройти по всем таким чанкам, пока не упремся в data-чанк.
7. Читаем сигнал по смещению 2E(2С) или по смещению сигнатуры 'data' плюс 8 и до конца файла (или, если не лень, смотрим размер data-чанка и соответственно читаем, сколько надо).
А дальше идёт поток данных, которые транслировал в порт. В качестве порта использовался таймер в режиме ШИМ.

На выходе таймера в режиме ШИМ стояла интегрирующая цепь на резисторе с конденсатором и усилитель. ШИМ позволял легко менять частоту дискретизации и число бит в амплитуде сигнала.
Это решение для 2008 года было самым простым и дешевым. Но много времени ушло на написание программы. Его и сейчас можно повторить, только программу можно написать уже гораздо быстрее на Arduino при помощи какого ни будь ИИ.

Первая версия модуля аудио оповещения DAO1

Спустя несколько лет по заказу другой монтажной компании я разработал модуль для аудио оповещения о чрезвычайных ситуациях. Устройство принимало потоковое аудио от диспетчера и воспроизводило звуковые фрагменты из внутренней памяти устройства по команде от диспетчера. После разработки, сборки и отладки нескольких версий у меня получилось устройство аудио оповещения Razumdom DAO1ER. Эта версия оказалась довольно востребованная и долгое время пользовалась спросом. В названии устройства заложено его функциональное назначение и исполнение. D – корпус на DIN рейку, AO – аудио оповещение, 1 – версия, E – Ethernet, R – RS485, A - Amplifier

Нижняя сторона платы аудио модуля DAO1EM
Нижняя сторона платы аудио модуля DAO1EM

На плате был установлен микроконтроллер STM32, микросхема Ethernet PHY, микросхемы питания и интерфейса RS485, микросхема кодека VS1053. Первое время я использовал микроконтроллер STM32F207VET6, а потом заменил его на DG32F407VGT6. Кроме микросхем конечно кучка пассивных элементов, без которых все это работать не будет. Получилось законченное устройство с интерфейсами Ethernet, RS485, питанием от 24В и линейным аудио выходом. Были модификации модуля без усилителя и с усилителем.
Для воспроизведения звуков на акустику нужен ещё усилитель низкой частоты (УНЧ). Он занимает много места на плате и не уместился на плате управления.

Верхняя сторона платы аудио модуля DAO1EM
Верхняя сторона платы аудио модуля DAO1EM

Поэтому я развел для него ещё одну дополнительную вторую плату. Получился отдельно аудио усилитель мощности, который припаивается параллельно плате управления и таким образом добавляет мощный выход для внешних акустических систем. Поскольку УНЧ получился отдельный, то и использовать его можно отдельно, просто как усилитель. И я даже применял свой собственный усилитель в своих устройствах DIY с аудио.

Схема усилителя УНЧ на микросхеме TPA3118D2
Плата УНЧ на TPA3118D2
Плата УНЧ на TPA3118D2

Здесь видно, что на выходе нет дросселей. Они не стоят, потому что эта микросхема может работать без выходных фильтров, как описано в даташите. Хотя гармоники на высоких частотах все равно будут. Но на мой непрофессиональных слух она воспроизводит музыку в таком виде вполне достойно.
Периодически я эту плату усилителя встраивал в разные поделки акустических систем с Bluetooth модулем.

Описание второй версии модуля аудио оповещения DAO2

Спустя некоторое время я решил переделать модуль и пошел по принципиально другому пути. Я использовал основную плату от модуля диммера DDL44ER и добавил плату расширения с аудио кодеком и усилителем. Я считаю, что получилось оптимально с точки зрения производства. При этом можно заказывать одну плату для разных устройств и один трафарет для нанесения паяльной пасты, хотя программа для установщика все равно будет разная. Получилась следующая версия устройства DAO2ERA, выполненная по-разному на уровне железа, но одинаково с программной стороны.
Изначально цель была добавить этому диммеру и блоку реле DRM88ER ещё одну функцию аудио выхода. На плату диммера DDL44ER или на плату реле DRM88ER припаивается перпендикулярно плата расширения с источником питания, аудиокодеком VS1053B, УНЧем на TPA3110 и другими деталями. SD карту я перенес с нижней платы диммера на плату расширения и вывел на переднюю панель. На мой взгляд так удобнее пользоваться. Поэтому внизу получилась куча перемычек для SD карты. Так же на переднюю панель выводится аудио разъём 3.5мм для линейного выхода, к которому можно подключить наушники или активную акустику. И выводится 4х контактный клеммный блок для подключения внешней аудио акустики. Получается устройство с множеством разъёмов. На нижней стороне платы клеммный блок с 4 входами и 4 выходами, сверху питание, RS485 и Ethernet, а на передней панели клеммный блок для акустики.
Заодно поменял типы компонентов резисторы, конденсаторы, кварцы на более мелкие, т.к. мы перешли на другую технологию сборки, с ручной на автоматическую.

Конструкция аудио модуля DAO2ERA
Конструкция аудио модуля DAO2ERA

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

Нижняя сторона платы аудио модуля DAO2ERA
Нижняя сторона платы аудио модуля DAO2ERA

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

 Устройство и особенности работы модуля аудио оповещения

Модуль DAO собран на микроконтроллере ARM Cortex M4 со встроенным ОЗУ и флеш. Так же там стоит тот же аудио кодек VS1053 как на первой версии. УНЧ класса D поменял на другой поменьше мощностью 2х10Вт TPA3110 производителя TI. Я считаю это позволило сделать модуль с достаточно высоким качеством воспроизведением не только аудио фрагментов, но и для прослушивания стерео-музыки. Также есть интерфейс RS485 и стабилизаторы питания. Входное напряжение импульсным источником питания опускается до 5В, от которого питается интерфейс и следующий источник, опускающий напряжение до 3.3В, от которого питается вся цифровая часть. Есть ещё один источник питания от входного 24В до 11В для питания УНЧ и сделано это, что бы УНЧ работал при разном входном напряжении и не перегревался, хотя и мощность ограничилась значением 10Вт на канал.

Для подключения модуля используется несколько разъёмов.
- Разъёмный клеммник для подключения питания 12-24В и интерфейса RS485, через который передаются данные по протоколу обмена Modbus RTU.
- Разъём RJ45 с интерфейсом Ethernet, в котором используются протоколы HTTP и Modbus TCP.
- Разъёмный клеммник, к которому подключаются левый и правый выходы аудио колонок.

Подключение аудио модуля DAO2ERA
Подключение аудио модуля DAO2ERA

 

Можно использовать не только два интерфейса одновременно, но и один из них. Например, через Ethernet со страницы настроить модуль DAO, а через RS485 Modbus RTU управлять воспроизведением.
На передней панели аудио модуля есть гнездо Линейный выход аудио. К нему можно подключить наушники или внешний усилитель другого типа или мощности. Его можно использовать как вместо УНЧ, так и совместно с ним. Например, встроенный усилитель использовать для озвучивания внутри помещения, а внешний усилитель для озвучивания снаружи помещения.

Про классы усилителей я уже писал в другой статье про виниловый проигрыватель
https://habr.com/ru/articles/992514/
Из всего этого разнообразия разных классов, в модуле аудио оповещения используется УНЧ класса D мощностью 2х10Вт.

Воспроизведение файлов из карты памяти.

Для воспроизведения аудио фрагментов в модуле аудио оповещения DAO используется карта размера Micro SD Card или TF Card.

Выбор карты памяти

SD Card большое многообразие, но можно использовать карту только формата SDHC. Максимальный объём карт SDHC до 32 ГБ с файловой системой FAT32. Если использовать карту SDXC с объёмом 64 Гб и больше, то её нужно отформатировать с файловой системой FAT32, и она станет 32 ГБ, что на мой взгляд несколько избыточно, но вполне возможно.
SD карты поддерживают три разных типа интерфейса: в режиме SPI однобитном, в режиме SDIO 1х битном и в режиме SDIO 4х битном с более высокой скоростью. В модуле DAO2ERA используется режим SDIO с четырьмя битами данных, т.к. в микроконтроллер уже встроен этот интерфейс.
Модуль не сильно требовательный к типам карт памяти, но если возникают проблемы качеством воспроизведения или прерыванием воспроизведения файлов DAO2ERA, то можно заменить карту на другой тип, производителя или класса. Другая карта памяти может работать гораздо лучше.

Карту выбрали, теперь нужно на неё записать аудио фрагменты.
Последовательность действий для воспроизведения аудио файлов:
- Необходимо использовать карту памяти SDHC объёмом от 2Gb до 32Gb включительно и файловой системы FAT32. Объём меньше 2 Гбайт сейчас в продаже не найдешь, но на 2 ещё встречаются. Объём больше 32Gb не поддерживается.
- С помощью ПК записать на карту памяти аудио файлы в формате MP3. Сам модуль файлы не записывает. По протоколу Modbus файлы особенно не прокачаешь.
- Имена могут быть в формате DOS длиной 8 латинских символов, точка и 3 символа для расширения. Имя файла может не содержать никакого расширения, а иметь только имя, например, "12", но файл должен быть в формате mp3. Имя файлов может быть: 1.mp3, 2.mp3, ... 250.mp3.
- Файлы могут быть записаны в корневом каталоге или во вложенном каталоге. Если использовать вложенный каталог, тогда в имя файла нужно добавить имя каталога и слеш, например, для папки с именем "4" и того же файла без расширения имя будет "4/12". Для папки "dir" и файла "muz.mp3" имя будет "dir/muz.mp3" и оно должно поместиться в 13 регистров HR103-HR115.
- Затем карту с записанными файлами нужно вставить в модуль, подключить шину RS485, Ethernet, аудио выход, включить питание, установить адрес.
- Для воспроизведения файла возможно использовать любой из 3х вариантов:

Первый вариант – управление через браузер.

Открыть в браузере страницу модуля. В строке запроса URL адреса вписать 192.168.0.200. Страница попросит ввести логин и пароль. По молчанию стоит admin, admin. В дальнейшем его нужно поменять. Но если модуль стоит в локальной сети и доступа через Интернет к нему нет, то и смысла менять пароль тоже нет.
На странице нужно выбрать язык русский, из предложенных вариантов Русский или Английский.
На странице управления в поле Содержимое SD-карты выбрать имя файла, нажать кнопку ИГРАТЬ и установить нужный уровень громкости.

Второй вариант - управление через регистры Modbus.

Установить имя файла для воспроизведения. В регистры HR103 - HR115 записать имя файла кодами символов из таблицы ASCII. Это не очень удобный вариант записи и лучше использовать программу, преобразующую символы в эти коды.

Как записать имя файла в регистры Modbus

Например, файл 123.MP3 будет выглядеть так:
HR103 = 49 (код символа «1»), HR104 = 50 «2», HR105 = 51 «3», HR106 = 46 «.», HR107 = 77 «M», HR108 = 80 «P», HR109 = 51 «3».
Можно использовать имя файла без расширения "123", тогда нужно записать коды в регистры HR103-HR105 с именем файла, а остальные регистры HR106-HR115 должны быть 0. Если используется каталог, тогда должно быть записано имя каталога, код символа слеш ("/", 47, 0x2F) или ("\", 92, 0x5C) и имя файла, при этом вся строка вместе с каталогом должна поместиться в 13 регистров HR103-HR115.
Пример с вложенными каталогами: в корневой папке каталог "dir" внутри "a" внутри "b" внутри "c" в этом каталоге файл "5" без расширения. Строка будет выглядеть "sd://dir/a\b/c\5". Здесь я написал два типа слеша прямой и обратный и они могут использоваться одновременно, но лучше использовать один из них что бы не путаться. В регистрах HR103-HR113 будут следующие данные: «d» 0x0064, «i» 0x0069, «r» 0x0072, «/» 0x002F, «a» 0x0061, «\» 0x005C, «b» 0x0062, «/» 0x002F, «c» 0x0063, «\» 0x005C, «5» 0x0035. Поскольку регистры 16 битные, а значения 8 битные, то и дополняются они вначале нулями. Программа Modbus Poll для работы с Modbus позволяет задать тип данных, знаковый, без знаковый, короткий, длинный и в том числе символьный. Если указать в ячейке регистра тип символьный, тогда можно сразу увидеть символ и не расшифровывать его код.

В регистр Modbus HR101 нужно записать значение 1 - воспроизведение. Начнется воспроизведение, по окончании значение 1 поменяется на значение 0. Значение 2 соответствует команде Пауза.
Для воспроизведения следующего файла необходимо поменять в регистре HR10х код символа на другой. Остальные регистры останутся прежними и будут сохраняться до отключения питания. При изменении файла 9.MP3 на 10.MP3 символы расширения файла сдвинутся. Имена можно дополнить нулями, например, 09.MP3, 10.MP3. При такой записи 0 впереди тоже имеет символ и файлы с именами "09.mp3" и "9.mp3" будут иметь разные имена и разное содержимое.

Третий вариант - управление через функции Coil.

Нужно записать файлы с цифровыми именами, например, "10.MP3". Командой записи в регистр COIL 10 записать значение 1. Начнет воспроизводиться файл с именем, совпадающим с номером регистра COIL.
Имя файла может быть с любым номером от "0.mp3" до "65535.mp3". Файл должен быть обязательно с расширением ".mp3" или ".MP3". При записи файлов с именами "09.mp3" и "9.mp3" командой coil будет воспроизводиться только файл "9.mp3". Но не все файлы этой функцией будут воспроизводиться. Командой COIL не будут воспроизводиться файлы и вернет ошибку "02 Illegal Data Adress" при условии: номера с несуществующим именем; файлы без расширения, например, "10"; файлы с нулями вначале, например, с именем "05.mp3".
Затем можно установить общую громкость в регистре HR126 или на странице модуля сдвинуть слайдер.

Установка параметров сети

Для модуля можно установить любой IP адрес. Устанавливается в регистрах, например, HR2=0x10AC и HR3=0x5571 (172.16.113.85). Установить маску, например, HR4=0xFFFF и HR5=0x00FE (255.255.254.0). Установить шлюз, например, HR6=0x10AC и HR7=0x4D70 (172.16.112.77). Затем записать в регистр HR120 значение 1, эта команда перепишет данные из ОЗУ в ЕЕПРОМ. Отключить и снова включить питание модуля. Изменение адреса после перезагрузки сделано специально что бы не потерять связь с модулем, пока меняются часть значений. После перезагрузки модуль будет работать с уже другим IP адресом.

Интерфейс REST API

Модуль общается со страницей через HTTP - GET запросы (REST API), которые можно использовать и для своих целей.

Формат записи GET запроса

В строке запроса адреса браузера можно ввести следующие строки:
http://192.168.0.200/play.cgi?url=URL - воспроизвести файл с заданного в URL источника. Формат URL: sd://filename;
    http://192.168.0.200/pause.cgi - пауза воспроизведения;
    http://192.168.0.200/stop.cgi - остановить воспроизведение;
    http://192.168.0.200/volume.cgi?val=volume - установить громкость.
Запросы должны подтверждаться аутентификацией по Basic authorization. Что бы сделать авторизованный удаленный GET запрос нужно набрать следующую строку: http://username:password@example.ru/somewhere. И это можно использовать не только модулем DAO, но и с большинством других Интернет ресурсов.
Например, https://admin:admin@192.168.0.45:8080/pause.cgi.
Для выхода из текущего логина и входа в другой нужно в строке запроса добавить слово logout@ следующим образом: http://logout@192.168.0.200/

Интерфейс FTP

Для воспроизведения через FTP соединение нужно настроить FTP сервер.
В Windows нужно включить Службы IIS и FTP-сервер, указать папку и настроить анонимное соединение. Задать логин и пароль admin.
В регистрах HR200 = 1 - FTP сервер, HR103-HR115 - имя файла, HR400=0xA8C0, HR401 = 0x7500 - указать адрес IP к ftp, HR202-HR301 - путь и имя файла, HR402-HR421 = 97, 100, 109, 105, 110 – логин, HR402-HR421 = 97, 100, 109, 105, 110 – пароль, HR120 = 1 Сохранить, HR101 = 1 Включить воспроизведение.

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

Заключение.

Тема аудио оповещения, как и тема музыкальных устройств воспроизведения всегда интересна не только мне, но и многим другим. Много лет назад я делал простое устройство на ATMega16, способное воспроизводить WAV файлы через ШИМ выход. Сегодня это готовый модуль с Ethernet, RS485, аудио кодеком и усилителем класса D. За это время сменились микроконтроллеры, интерфейсы, подходы к трассировке, технология монтажа. Но главное осталось: возможность добавить голос станку или оповещение в систему автоматизации с привычным интерфейсом Modbus.
Если захотите обсудить доработку, интеграцию в вашу систему или неочевидный сценарий, где аудио решает проблему, — пишите в комментариях.

Комментарии (0)