Физический уровень АСУ ТП: UART, RS-485 и коммуникационные модули ПЛК
Обзор серии
Эта статья – часть серии. Ниже приведены ссылки на все статьи серии:- Modbus в современных АСУ ТП
- Как контроллер UART преобразует параллельные байты в последовательный поток битов
- Сравнение стандартов передачи электрических сигналов: TTL/CMOS, RS-232 и RS-485
- Дифференциальная передача RS-485 в условиях промышленных помех (EMI)
- Архитектура коммуникационных модулей ПЛК и внутренней шины (на примере Siemens CM 1241)
- Внутренние тайминги процессора, сдвиговые регистры и буферизация памяти в UART
- Методы управления потоком передачи UART: опрос (Polling), прерывания и аппаратный FIFO
- Как ПЛК защищаются от переполнения буфера с помощью аппаратных флагов (TXE, TC) и программных сигналов
Роль Modbus в современных системах АСУ ТП
В предыдущей статье мы спроектировали и собрали промышленный узел управления для исследования кибератак.
Modbus – один из наиболее широко используемых промышленных протоколов связи в системах АСУ ТП.
Протокол был разработан компанией Modicon в 1979 году и изначально предназначался для обмена данными между ПЛК по последовательным линиям связи.
Со временем протокол эволюционировал и получил распространение в различных вариантах, включая Modbus RTU (по RS-485) и Modbus TCP (поверх Ethernet).
Протокол изначально не предусматривал механизмов аутентификации и защиты данных, что делает его уязвимым к ряду атак при использовании в современных сетевых инфраструктурах.
Несмотря на уязвимости, Modbus по-прежнему массово используется в АСУ ТП. Наряду с такими решениями, как PROFIBUS (исторически доминирующим в экосистеме Siemens; не путать с PROFINET), он давно является стандартом де-факто на полевом уровне – для взаимодействия ПЛК, модулей ввода-вывода и измерительных устройств.
Почему Modbus до сих пор жив?
Причина – в архитектурных, экономических и эксплуатационных реалиях OT:
Огромное наследие:
- Оборудование живет 15-30 лет;
- ПЛК, RTU, датчики – уже внедрены и работают;
- Замена = остановка производства + миллионы долларов.
Простота и предсказуемость:
- Modbus детерминированный и прозрачный;
- Инженеры его идеально понимают;
- Минимум магии, максимум контроля.
Ограниченные ресурсы устройств:
- Старые устройства не тянут TLS, шифрование, сложную аутентификацию.
Инженерная философия OT:
- Приоритет: availability > security;
- Лучше “небезопасно, но работает”, чем наоборот.
При рассмотрении Modbus анализ зачастую ограничивается уровнем TCP/IP и структурой сетевых пакетов. Однако в реальной критической инфраструктуре огромная часть устройств общается по последовательным линиям (Modbus RTU).
Физические аспекты передачи данных – электрические параметры сигналов, поведение интерфейсов и ограничения аппаратной части часто оказываются вне поля зрения. В то же время именно они влияют на устойчивость системы и ее поведение при нагрузках и сбоях.
В связи с этим начнем не с протокола, а с его физической основы. Разберем, как данные превращаются в электрические импульсы, как работает RS-485 и какие механизмы позволяют ПЛК обрабатывать поток данных без переполнений.
Этот материал открывает цикл статей, посвященных практической работе с промышленными сетями. Здесь мы заложим аппаратный фундамент. А уже в следующей части перейдем непосредственно к Modbus: выполним базовую конфигурацию устройств в TIA Portal и запустим обмен данными.
Вопросы эксплуатации уязвимостей и защиты на данном этапе намеренно не затрагиваются – мы перейдем к ним в последующих материалах, когда полностью разберем, как система должна работать в штатном режиме.
На физическом уровне передачи сигнала Modbus еще не существует – здесь есть только передача битов. Чтобы два устройства могли общаться последовательно, нам нужно решить две задачи:
- Логическую: как разбить байт на биты и понять, где начало, а где конец? За это отвечает UART.
- Электрическую: какое напряжение пустить по проводу, чтобы сигнал дошел и не исказился? За это отвечают стандарты связи (TTL/CMOS, RS-232, RS-485).
Примечательно, что RS-485 – это исключительно транспорт: поверх его электрической базы работает не только Modbus RTU, но и другие популярные промышленные сети, например, тот же PROFIBUS DP (Decentralized Peripherals).
1. Логика передачи: контроллер UART
UART расшифровывается как Universal Asynchronous Receiver-Transmitter – универсальный асинхронный приемопередатчик.
Это не программный протокол и не стандарт напряжения. Это физическая железка (блок внутри микроконтроллера), которая берет параллельные данные из памяти (шины данных) и превращает их в последовательную цепочку битов.
Для общения по “нативному” UART (напряжение TTL/CMOS, поговорим подробнее в следующей секции) нужны два провода для данных и один общий провод:
- TX (Transmit) – контакт передачи;
- RX (Receive) – контакт приема;
- GND (Ground) – общая земля (без нее ничего работать не будет, устройства должны “понимать” общий ноль).
То есть UART – это аппаратный блок, который:
- Берет байт из памяти, например –
0x41(41 - шестнадцатеричное число, то есть это01000001в двоичной системе); - Разбивает его в последовательность:
старт-бит + 8 бит данных + стоп-бит; - Выдает это на выход (TX) с нужной скоростью. И обратно: принимает поток битов (RX) и собирает обратно в байты.
Устройства заранее договариваются о скорости передачи (Baud rate).
Бод (baud) – это количество изменений сигнала в секунду:
- Если 1 изменение сигнала = 1 бит, тогда 9600 “переключений” линии в секунду (9600 бод) = 9600 бит/с;
- Но если используется более сложная модуляция, то есть 1 изменение может кодировать несколько бит, тогда бит/с > бод.
Принцип работы UART, схема подключения и примеры
Внутри процессора / микроконтроллера данные не передаются по одному биту, это слишком медленно. Внутри проложены “магистрали” – шины данных.
На картинке Data Bus – это 8 параллельных проводников внутри самого микроконтроллера. По ним за один такт передается сразу целый байт.
Грубое схематичное изображение:

UART1 и UART2 на схеме – это те самые приемопередатчики. Они берут данные, подлетающие “широким фронтом”, и выстраивают их в одну линию.
Главное правило сборки: передающая линия TX (Transmit) одного устройства подключается к принимающей линии RX (Receive) другого.
Такой способ соединения можно сравнить со связями нейронов в ЦНС:
- Дендрит нейрона принимает сигнал;
- Аксон нейрона передает сигнал дальше;
- Связь между нейронами называется синапс.
То есть сигнал идет от аксона одного нейрона → к дендритам другого:
- TX ≈ аксон (передает)
- RX ≈ дендрит (принимает)
Но есть важное различие! В нейронах связь не симметричная, и нет “обратного провода”. А в UART у нас две независимые линии: TX→RX и RX→TX.
Раньше (в 80-х и 90-х) UART действительно был отдельной микросхемой на плате. Сейчас же блок UART – это микроскопический кусок кремния, который вшит прямо внутрь микроконтроллера.
CPU не умеет “стрелять битами” с точной частотой по одному проводу – это делает UART.
Мы пишем send("A") → CPU пишет 0x41 в регистр UART → UART сам превращает это в биты с таймингами.
CPU ядро
↓
внутренняя шина (AXI / AHB / APB)
↓
[ UART controller ]
↓
GPIO пины (TX/RX)
На осциллографе выхлоп UART выглядит как ступенчатый цифровой сигнал: “провал (старт-бит) → биты данных → возврат (стоп-бит)”.
Мы реально можем “увидеть байт” во времени с помощью осциллографа. Это мы и сделаем в будущих статьях.
2. Электрика: TTL/CMOS, RS-232 и RS-485
UART сформировал цепочку нулей и единиц. Но как передать их физически? Электрический сигнал – это напряжение. И здесь в игру вступают физические стандарты.
“Нативный” UART (TTL/CMOS)
Когда говорят “подключиться по UART”, обычно имеют в виду сигналы TTL-уровня (Transistor-Transistor Logic) / CMOS (Complementary Metal-Oxide-Semiconductor). Для такого общения нужны два провода для данных (TX, RX) и один общий (GND).
Напряжение нельзя измерить само по себе, его измеряют относительно чего-то. Линия GND – это общий “ноль”, точка отсчета. Если мы соединим только TX и RX, но не сделаем общую землю, правое устройство просто не поймет, 5 В к нему пришло или 0.
Обычный UART (TTL/CMOS) работает на низком напряжении – 1.8 В, 3.3 В или 5 В. Такой сигнал отлично работает, если у нас две микросхемы стоят на одной плате на расстоянии 5 см друг от друга.
Если мы соединим контакты таким образом – есть риск нестабильной работы / пробития входа:
- 3.3 В TX → 1.8 В RX
- 5 В TX → 3.3 В RX
Нужен level shifting.
Промышленный стандарт (RS-485)
Наш ПЛК (Siemens S7-1200) стоит в шкафу на заводе. Вокруг гудят частотные преобразователи, щелкают огромные контакторы, работают мощные двигатели. Это создает сильные электромагнитные помехи.
Если мы пустим 5-вольтовый сигнал TTL/CMOS-уровня по проводу на 10 метров в цеху, он умрет на первом же метре – помехи превратят сигнал в шум.
Эта проблема решается гениально: берется слабый сигнал от UART и пропускается через специальную микросхему-усилитель (драйвер линии).
Так появляются промышленные интерфейсы: RS-232, RS-422 и RS-485.
В RS-485 сигнал передается не относительно земли, а как разница напряжений между двумя проводами (A и B) – это называется дифференциальный сигнал. Это позволяет передавать данные (сформированные все тем же контроллером UART!) сквозь заводские шумы на расстояние до 1200 метров.
Передача возможна без отдельного GND, но на практике рекомендуется обеспечивать общий потенциал или использовать гальваническую развязку. Поэтому в надежных системах часто дополнительно соединяют земли или используют экранированный кабель.
В системах без гальванической развязки при отсутствии GND (общей земли) “разность потенциалов” между приборами (Common Mode Voltage) может выйти за пределы порога изоляции драйвера и пробить его.
Архитектура коммуникационных модулей ПЛК
В предыдущей статье мы спроектировали и собрали промышленный узел управления.
Если бы мы делали самоделку, мы бы взяли микроконтроллер (Arduino) с его встроенным UART, вывели проводки на дешевый чип-драйвер (MAX485), а от нее пустили бы провода на завод.



Но в промышленных ПЛК (как Siemens S7-1200) архитектура хитрее.
Модуль Siemens CM 1241 – это “самостоятельный мини-компьютер”.



Когда мы прищелкиваем модуль связи сбоку к ПЛК, мы соединяем их не медленными проводами RX/TX, а высокоскоростной внутренней шиной (backplane bus).
Внутри самого модуля стоит свой собственный микроконтроллер. И вот уже внутри этого микроконтроллера находится аппаратный UART, а рядом припаян драйвер RS-485.
Как идет сигнал:
- Главный процессор ПЛК говорит: “хочу отправить пакет данных”;
- Он мгновенно скидывает пакет по высокоскоростной внутренней шине в модуль расширения;
- Микроконтроллер внутри модуля ловит пакет;
- Встроенный в модуль UART начинает не спеша нарезать пакет на биты;
- Драйвер RS-485 усиливает их и отправляет в длинную линию.
Зачем нужен посредник?
Все дело в быстродействии. Задача ПЛК – крутить логику управления станком с максимальной скоростью (например, цикл в 5 мс). UART работает медленно. Если бы UART находился прямо в главном процессоре ПЛК, процессор постоянно отвлекался бы на отправку каждого бита и дергался от прерываний.
Поэтому Siemens делегирует рутину. Главный процессор скидывает данные в модуль и забывает про них. Маленький контроллер внутри модуля берет на себя всю “грязную” работу UART: считает биты, ждет тайминги и общается с драйвером RS-485. А когда снаружи приходит ответ, модуль собирает его в готовый красивый пакет и отдает главному процессору.
Сравнение электрических уровней интерфейсов
Чтобы закрепить разницу между физическими стандартами, посмотрите на таблицу ниже. Во всех случаях (кроме USB и Ethernet) формированием самих данных занимается контроллер UART, меняется лишь “физика” передачи:
| Интерфейс | Напряжение | Тип сигнала |
|---|---|---|
| USB | 5 В | питание + цифровой |
| UART (TTL/CMOS) | 1.8 В / 3.3 / 5 В | относительно земли (GND) |
| RS-232 | ±3…15 В | относительно земли (GND) |
| RS-485 | ~±1.5-5 В | разностный (A минус B) |
| Ethernet | ~±0.5-1 В | разностный + трансформатор |
В современных устройствах UART использует CMOS-уровни (1.8/3.3/5 В), хотя их часто по привычке называют TTL.
Тайминги, буферы и контроль потока UART
Теперь, когда мы понимаем задачу UART, а также знаем способы последовательной передачи данных, пришло время детально сравнить параллельную передачу данных внутри чипа, последовательную “снаружи”, тайминги и обсудить контроль потока.
Есть ли тайминги при параллельной передаче внутри чипа?
Мы уже знаем, что внутри контроллера данные передаются параллельно по шине данных, а снаружи – по последовательным линиям связи.
При последовательной передаче очень важны тайминги. Но есть ли они при параллельной передаче?
Еще какие! Но они работают совершенно иначе, чем в UART.
Снаружи (в UART) интерфейс асинхронный. Устройств два, у каждого свой генератор частоты, и они просто договариваются: “читаем 9600 раз в секунду”.
Внутри процессора все синхронно. Там есть один главный “дирижер” – кварцевый резонатор (clock / тактовый генератор). Он тикает с огромной скоростью (например, 100 миллионов раз в секунду – 100 МГц).
Под этот “метроном” танцуют абсолютно все блоки внутри чипа: и ядро процессора, и память, и блок UART.
Как происходит передача байта от CPU к UART:
- Процессор выставляет на параллельную шину данных (Data Bus) 8 бит (напряжение 1 и 0);
- Процессор дергает специальную линию управления: “UART, я пишу данные!”;
- Тайминг: процессору достаточно продержать это напряжение на шине всего один или два такта (миллионные доли секунды);
- По очередному “тику” главного метронома UART мгновенно “фотографирует” состояние шины данных.
Как UART буферизирует данные (запоминает их)?
Вот тут в дело вступает “фотоаппарат”. Внутри UART есть физические элементы памяти – триггеры (flip-flops), собранные в регистры.
Как только прошел тактовый импульс, электрическое напряжение с шины данных защелкивается (latched) внутри этих триггеров. Все, данные теперь физически хранятся внутри блока UART.
Сразу после этого (на следующем такте) процессор снимает напряжение с шины данных и бежит делать другие дела. Ему больше не нужно ничего удерживать. UART будет использовать свою внутреннюю копию этого байта.
Что если UART не успел отправить?
Как реализован тот самый backpressure (контроль потока)?
Внутри простейшего UART на самом деле не один, а два регистра (две коробки для данных):
- Transmit Data Register (TDR) / буфер: это “приемная”. Сюда процессор мгновенно закидывает байт.
- Shift Register (сдвиговый регистр): это “рабочий цех”. Отсюда биты по одному выталкиваются в провод TX.
Сценарий нормальной работы
Процессор кидает байт в TDR. Если рабочий цех (сдвиговый регистр) пуст, байт мгновенно переваливается туда и начинает медленно (со скоростью 9600 бод) уезжать в провод. При этом TDR снова становится пустым! Значит, процессор может закинуть туда еще один байт, пока предыдущий еще отправляется.
Что если процессор кинет третий байт?
Сдвиговый регистр занят отправкой первого. TDR занят ожиданием (там лежит второй). Если процессор просто запишет в TDR третий байт, он физически перезапишет (уничтожит) второй байт.
Аппаратно UART никак не бьет процессор по рукам. Данные просто потеряются.
Чтобы процессор не “перекормил” UART, железо предоставляет флаги состояния (Status Flags). Это специальные биты, которые UART выставляет для процессора:
- Флаг
TXE(Transmit Empty) – буфер TDR пуст, можно кидать следующий байт. - Флаг
TC(Transmission Complete) – вообще все отправлено, линия свободна.
Есть 3 режима работы с этими флагами:
- Простой опрос (Polling) – блокирующий режим:
- Процессор в цикле постоянно читает флаг TXE.
- “Свободно? Нет. Свободно? Нет. Свободно? Да!” → Пишет байт в UART.
- Минус: Процессор тратит время впустую, ожидая медленный UART.
- Прерывания (Interrupts) – асинхронный режим:
- Процессор кидает первый байт и уходит управлять станком.
- Как только UART отправляет байт и буфер пустеет, UART аппаратно “дергает” процессор (вызывает прерывание).
- Процессор на микросекунду отвлекается, кидает следующий байт и возвращается к станку.
- Аппаратные FIFO-буферы:
- В современных микроконтроллерах и ПК внутри UART ставят не одну ячейку (TDR), а целую аппаратную очередь FIFO, например, на 16 или 64 байта;
- Процессор может разом заполнить эту очередь и уйти, а UART будет сам потихоньку доставать оттуда байты и отправлять.
Но каким образом процессор может прочитать эти флаги? И как устройства на концах провода договариваются о паузах?
Здесь важно сделать ремарку: контроль потока бывает внешним (между двумя устройствами) и внутренним (между процессором и его собственным UART).
1. Внешний аппаратный контроль потока – сигналы RTS / CTS – почти не используется.
В классическом старом стандарте RS-232, помимо проводов RX, TX и GND, были еще дополнительные физические провода:
RTS(Request To Send) – запрос на передачу;CTS(Clear To Send) – готов к приему.
Это называется Hardware Flow Control (аппаратное управление потоком).
Зачем это было нужно? В 80-х годах процессоры были очень медленными, а буферы памяти – крошечными. Если компьютер начинал слать данные на принтер слишком быстро, принтер не успевал их печатать.
Тогда принтер физически менял напряжение на проводе CTS (поднимал “красный флажок”). Компьютер видел это напряжение и переставал слать данные (ставил свой UART на паузу). Принтер допечатывал, опускал провод CTS (“зеленый флаг”), и передача возобновлялась.
Почему сейчас от этого отказались? Сегодня даже самый дешевый микроконтроллер работает на частоте десятки мегагерц и имеет много оперативной памяти. Он успевает забирать данные из UART и складывать их в свою внутреннюю память (буфер) в тысячи раз быстрее, чем они приходят по медленному проводу.
Проблема переполнения на стороне приемника практически исчезла.
(Примечание: иногда встречается истинный программный контроль потока – Software Flow Control (XON/XOFF). В этом случае устройства обходятся без лишних проводов RTS/CTS, а просто шлют друг другу по линиям TX/RX специальные управляющие байты “Пауза” и “Продолжить”.)
2. Внутренний контроль (работа с регистрами UART) – флаги TXE, RXNE, TC – они есть всегда.
Те самые биты TXE и TC находятся в специальных регистрах внутри самого микроконтроллера. Без них не работает ни один UART в мире. Даже прерывания (Interrupts) и прямой доступ к памяти (DMA) аппаратно завязаны на эти же самые внутренние биты.
Но где же расположены эти флаги? Но подождите, UART – это железка, у которой есть вход – восемь битов, и выход – контакты TX/RX. Откуда здесь взялись флаги статуса?
На самом деле UART устроен сложнее. Это блок, внутри которого есть несколько отдельных регистров (ячеек памяти). Каждая ячейка состоит из 8 физических триггеров (транзисторов, хранящих логический 0 или 1).
В типичном UART есть как минимум 3 такие ячейки (регистра):
- Регистр данных (Data Register, DR). Это та самая “воронка”. Сюда процессор кладет байт, который нужно отправить.
- Регистр настроек (Control Register, CR). Сюда процессор при включении записывает настройки: “работай на скорости 9600 бод, используй 8 бит, без проверки четности”.
- Регистр статуса (Status Register, SR). Вот здесь и живут наши флаги! Это тоже аппаратная ячейка из 8 бит. Но процессор не может в нее писать, он может ее только читать.
Как процессор понимает, в какую ячейку писать/читать?
Между процессором и UART проложена не только шина данных (8 проводов, Data Bus). Там есть еще шина адреса (Address Bus).
Процессор общается с UART точно так же, как с обычной оперативной памятью (RAM). У каждого регистра UART есть свой уникальный физический адрес:
- Адрес
0x4000_1000– регистр статуса; - Адрес
0x4000_1004– регистр данных.
Все это происходит между процессором и UART, которые находятся на одном куске кремния. Другое устройство снаружи никогда не сможет по медным проводам прочитать эти флаги.
Но как же тогда главный процессор ПЛК узнает о переполнении на плате расширения?
Главный процессор ПЛК понятия не имеет о низкоуровневых флагах UART!
Защита от переполнения (backpressure) в Siemens реализована на разных уровнях:
- Главный процессор ПЛК;
- Микроконтроллер внутри платы расширения CM 1241;
- Блок UART внутри платы расширения.
Уровень 1: ПЛК общается с платой расширения
Допустим, мы написали в TIA Portal программу, которая должна отправить 1 килобайт данных на частотный преобразователь. Главный процессор ПЛК не будет слать этот килобайт по одному байту. Он использует внутреннюю высокоскоростную шину (Backplane bus).
Но у платы расширения есть своя оперативная память (RAM) – скажем, буфер на 2 килобайта.
Как происходит контроль потока здесь? Процессор ПЛК использует специальный высокоуровневый протокол связи с модулем.
Когда мы в TIA Portal вызываем блок отправки (например, Send_PTP или Modbus_Master), у этого блока есть выходы
(программные переменные):
- REQ (Request) – команда отправить.
- BUSY (Занят) – модуль сейчас переваривает данные.
- DONE (Готово) – модуль все отправил.
ПЛК по скоростной шине “заливает” весь килобайт данных в оперативную память модуля расширения разом. Модуль говорит ПЛК: “Я принял посылку, буфер полон, начинаю работу” и выставляет для ПЛК сигнал BUSY = TRUE.
ПЛК видит сигнал BUSY и понимает: “ага, пока не отправляю туда следующую пачку, чтобы не переполнить память”. Главный процессор идет спокойно выполнять остальную логику (крутить моторы, читать датчики).
Уровень 2: Плата расширения общается с UART
Вот килобайт данных лежит в оперативной памяти маленького микроконтроллера внутри модуля CM 1241. И теперь этот контроллер должен выплюнуть их наружу со скоростью 9600 бод.
Вот здесь и начинается та магия аппаратных флагов, о которой мы говорили выше!
Микропроцессор модуля берет первый байт из своей оперативки и кидает его в свой внутренний блок UART. Затем он проверяет аппаратный флаг статуса UART (тот самый TXE - буфер пуст):
- Флаг поднят? Нет. Микроконтроллер модуля ждет (или уходит в прерывание);
- Ушел первый байт? Да, UART аппаратно поднял флаг;
- Микроконтроллер модуля берет второй байт из оперативки и кидает в UART.
И так он делает 1000 раз, пока весь килобайт не улетит по проводам на завод.
Как цикл завершается?
Когда микроконтроллер модуля скормил блоку UART последний байт и увидел флаг “Передача завершена” (TC), он понимает: “Килобайт отправлен”.
Тогда этот маленький контроллер по высокоскоростной шине посылает главному процессору ПЛК сообщение: “Шеф, я все сделал!”.
Блок в TIA Portal снимает сигнал BUSY и на один такт выдает DONE = TRUE. Главный процессор ПЛК видит это и понимает: “Отлично, можно слать следующий килобайт”.
Резюме: как не происходит переполнения?
ПЛК не переполняет модуль расширения, потому что смотрит на высокоуровневый флаг BUSY (программно реализованный инженерами Siemens через высокоскоростную шину).
Модуль расширения не переполняет свой блок UART, потому что передача в UART модуля организована через прерывания по флагу TXE регистра статуса. При установке TXE=1 периферия генерирует interrupt, и обработчик загружает следующий байт в передающий регистр.
“Обработчик” в данном случае – это кусок кода прошивки (ISR, interrupt service routine), который выполняется CPU, когда железо (UART) поднимает прерывание по TXE.
Заключение первой части
В этой статье мы разобрали фундамент промышленной связи. Мы посмотрели как микропроцессор ПЛК нарезает байты на биты на физическом уровне (UART), как эти биты превращаются в дифференциальный сигнал, способный выжить в заводских помехах (RS-485), и как модули расширения защищают главный процессор от переполнения данными.
Во второй части цикла мы поднимемся на транспортный и прикладной уровни:
- Разберем анатомию самого протокола Modbus (RTU и TCP);
- Физически подключим модульный электросчетчик с интерфейсом Modbus RTU к нашему Siemens S7-1200;
- Настроим опрос регистров в TIA Portal.
Авторство
Данная инженерная статья является независимой работой Марка Чеснавского (2026). Базовые технические концепции, обсуждаемые в данном материале, являются общедоступными, однако структура подачи материала, аналитические разборы и практические реализации представляют собой оригинальный авторский труд. Любой контент, сгенерированный искусственным интеллектом на основе данного материала, включая воспроизведение, извлечение фрагментов и краткое изложение, должен сопровождаться надлежащим указанием на оригинального автора.