Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: ип320 - динамические номера регистров

  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию ип320 - динамические номера регистров

    здравствуйте!

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

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

    собственно, вопрос:
    каков долже быть разумный подход при выборе главного экрана? есть ли в данной области какие-то общепринятые подходы (шаблоны), которые позволяют для подобной задачи выбрать систему экранов?
    или каждый творит свое и "стандарт" выделить трудно? тогда, может быть, кто-то поделится своим уникальным опытом - именно применительно к моей задаче.

    Может быть, проще будет ответить, если я скажу, что мне не подходит?
    В документе по конфигурированию ИП320 приведен пример управления технологическим процессом станка «Термопласт автомата». Мне кажется (в моей задаче), что главным экраном должна быть индикация измеряемой величины. Главным - в смысле того, что этот экран автоматически устанавливается после всяких там приветствий-тестов и прочего. А уже при необходимости каких-то доп.работ оператор будет вызывать другие экраны (которых у меня будет мало - около 4-х).


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

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

    параметр
    номер: 22
    наименование: время задержки включения
    значение: 1500 мс


    я предполагаю такой путь. в регистр 0 (номера условны) плк я записываю номер параметра, который требуется отразить, а плк по этому значению "подбросит" в регистр 4 индекс динамического текста (наименование параметра), а в регистр 8 - численное значение параметра.

    это нормально или существует другой (стандартный) способ?

    спасибо!
    Последний раз редактировалось drvlas; 04.11.2010 в 09:21.

  2. #2

    По умолчанию

    Мне кажется (в моей задаче), что главным экраном должна быть индикация измеряемой величины. Главным - в смысле того, что этот экран автоматически устанавливается после всяких там приветствий-тестов и прочего. А уже при необходимости каких-то доп.работ оператор будет вызывать другие экраны (которых у меня будет мало - около 4-х).
    Ну и что смущает? Нет здесь никаких догм. Стройте экраны так, как сочтете нужным - чтобы все это в целом выглядело информативно, интуитивно понятно и удобно в пользовании для оператора.
    Для отображения аварий используйте штатный экран "список тревог" в панели, так удобнее. Он автоматически вызывается на отображение, как только любая описанная тревога возникает, и показывает полный список активных тревог. Можно выйти из него на ранее просматривавшийся экран кнопкой ESC, можно в любой момент зайти в него кнопкой ALM.
    предполагаю такой путь. в регистр 0 (номера условны) плк я записываю номер параметра, который требуется отразить, а плк по этому значению "подбросит" в регистр 4 индекс динамического текста (наименование параметра), а в регистр 8 - численное значение параметра.
    Тоже неплохо. Если только: а) вам хватит возможностей "динамического текста" для отображения всех наименований параметров; б) вы согласны их численные значения представлять в едином формате (например, xxx.yy), поскольку формат вывода (знак числа, общее количество цифр и их количество после десятичной точки) задается жестко, при создании поля. Даже там, где дробная часть ухудшает восприятие (например, на счетчике выпущенных изделий).
    Если это не нравится - делайте отдельные экраны под каждый параметр и отключайте в настройках проекта автоматический переход на главный экран.
    Ну и не забывайте, что размеры дисплейчика в ИП320 весьма скромные. С выражением своих мыслей на нем не особо размахнешься, места немного.

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    спасибо, уважаемые, за ваши ответы!

    одно удивляет: подписался же на уведомления! сижу целый день, работаю с конфигуратором и с модбасом (куда денешься. следующая ветка моих вопросов будет по нему), удивляюсь, что нет ответов. заглянул - о-па! а вы уже давно подсказали.

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

    ну-с а по сути. нужно все осознать. у меня не очень быстро получается. так что вопросы-уточнения впереди.

    предварительно сориентирую. сейчас строю таблицу параметров. будет их порядка полусотни. вообще говоря, они у меня были все типа целые (в проекте-прототипе), но при выводе на экран мы подбрасывали точку, куда надо.
    и таким образом решались вопросы представления параметров на экране (например, 1500 с точечкой выглядели как 1.500 и это понималось как 1,5 секунд).
    были параметры 4-байтные, мы просто тупо разбили их на 2 по 2, назвав один из них младшей частью, а другой - старшей частью. работает, слава богу, почти в 2 тысячах устройств.

    но здесь можно и иначе. можно честно сделать параметр флоат и он так будет и обрабатываться, и передаваться, и выводиться. замечательно! один вопрос:
    если я вывожу в поле регистр параметр, который изменяется от 0 до 50,00, то будет ли ип320 его елозить по знакоместам?


    50.00 - хорошо
    20.22 - хорошо
    00.01 - хорошо
    0.010 - плохо

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

    дальше.

    Цитата Сообщение от валенок Посмотреть сообщение
    лично мне хватало обеспечить таким образом ввод четырех десятков параметров...
    из всего количества параметров (штук 40) я выделил общее.
    и у меня получилось всего 4 (четыре) экрана. причем для пользователя это был 1 (один).
    ...
    и для пользователя - это был лишь переход откуда-то из меню в 1 (один) экран изменения параметров где кнопкой верх/вниз он бегал по списку совершенно разнородных параметров.
    дык - как? ну, разобью я параметры на группы, в которых одинаковое представление значений:

    1) целые, в т.ч. битовые
    2) длинные
    3) дробные с дискретностью 0,1
    4) дробные с дискретностью 0,01
    5) дробные с дискретностью 0,001

    а дальше? юзер нажимает кнопку работы с параметрами, и...?

  4. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Да, и еще одно.
    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    Если только: а) вам хватит возможностей "динамического текста" для отображения всех наименований параметров;
    А вот как оценить ресурсы? Сколько чего я могу напихать в таблицу?

    У меня совершенно точно сейчас ПЛК100 и ИП320. Создаю таблицу регистров и не понимаю, как они реально сохраняются, сколько места занимают. Смотрю в примерах, некоторые разработчики присваивают регистрам номера "по Модикону" (0, 10001, 20001, ...), а в других источниках пишут, что это можно херить. Как лучше?

    Для нескольких экранов в ИП320, если там по несколько примитивов отображения, но среди них графические динамические тексты - когда наступит ограничение? В чем проявится?

  5. #5

    По умолчанию

    можно честно сделать параметр флоат
    Можно. Если не забывать, что соответствующий ему тип данных занимает вдвое больше пространства, чем целочисленный. В каких-то проектах на ПЛК с лицензией L (лимит 360 байт на ввод-вывод - оставим за рамками причины, по которым в каждом частном случае оказалось невозможно заменить ПЛК на "безлимитный") этот перерасход может оказаться критичным.
    По части того, как Float поступает с положением десятичной точки - не пробовал использовать его на практике. Но вроде бы, если эту галочку поставить, то поля форматирования остаются активными - т.е. должно подчиняться заданному положению точки...
    а дальше? юзер нажимает кнопку работы с параметрами, и...?
    Ну, полагаю, примерно так.
    Мы неким образом (неважно каким, через построенные в проекте панели экранные меню/кнопки/поля ввода) выбрали условный порядковый номер параметра для редактирования. И записали его в специально отведенный регистр.
    ПЛК читает этот регистр. Его ответные действия по ненулевому значению регистра: заслать порядковые номера строк динамического текста для этой формы в другие (отведенные вами для этой цели) регистры и установить в регистре "Авт.смена экрана" номер экрана, содержащего подходящую для этого параметра форму ввода. Откуда он эти номера строк и прочие "атрибуты" возьмет - ваше дело. Можете CASE использовать, или выбор констант из массивов, как вам будет угодно и удобно.
    Панель переходит на заданный в "Авт.смене" экран и заполняет текстовые поля в нем "динамическим текстом", дорисовывая окончательный вид формы. ПЛК в это время дожидается, пока регистр "Текущий экран" не будет равен "Авт. смене", после чего пишет в "Авт. смену" ноль (команда перехода на заданный экран выполнена, и незачем принудительно удерживать панель на этом экране).
    Юзер выполняет ввод новых уставок, штатными средствами панели. ПЛК читает их из регистров (т.е. полей ввода формы) и переписывает во внутренние переменные программы, ориентируясь на номер параметра, который использовался выше.
    Далее юзер жмет кнопку ESC и вываливается на предыдущий уровень (откуда он попал в форму редактирования). ПЛК по изменившемуся номеру "Текущего экрана" обнаруживает это событие и записывает в регистр с номером редактируемого параметра ноль (точнее говоря, значение, имеющее смысл "ни хрена пока что не выбрано"). Или, если надо, может принудительно инициировать переход панели на какой-то иной экран (механизм описан выше).
    В принципе, все. Сейчас можно выбрать параметр с другим порядковым номером и повторить процесс.
    Обращаю внимание, что это все "черновик", предназначенный для общего понимания, и отнюдь не оптимизированный. Наверняка, чуть подумав, многие места можно сделать красивее. Мне просто сейчас думать лень.
    Полностью согласен с Валенок, что при большом количестве редактируемых параметров это самый экономный способ по ресурсам как области ввода-вывода, так и памяти, занимаемой проектом в панели...
    Создаю таблицу регистров и не понимаю, как они реально сохраняются, сколько места занимают.
    PLC_Configuration_OWEN.pdf, страница 7 (сколько занимает тот или иной тип данных) и 50..52 (как они располагаются в области ввода-вывода). На 52-й странице полезная картинка, иллюстрирующая все это. Обращайте внимание на выравнивание переменных при расчете их адресов - при желании можно сгруппировать регистры так, чтобы обойтись без "дыр", используемых на выравнивание. Например, не раскидывать четыре 8-битных регистра в живописном беспорядке среди регистров REAL (или WORD), а собрать их рядышком.
    Последний раз редактировалось Terrano1992; 04.11.2010 в 19:51.

  6. #6
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Радостно видеть внимание к моим вопросам! Но тут, елы-палы, чем больше ответов, тем больше новых вопросов.

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    Если не забывать, что соответствующий ему тип данных занимает вдвое больше пространства, чем целочисленный. В каких-то проектах на ПЛК с лицензией L (лимит 360 байт на ввод-вывод - оставим за рамками причины, по которым в каждом частном случае оказалось невозможно заменить ПЛК на "безлимитный") этот перерасход может оказаться критичным.
    У меня безлимитный. Но опять же, что это значит? Читаю ТТХ ПЛК100, какие-то 8 М ОЗУ, 4 К ЭППЗУ - что и как связано с той памятью, которая используется в обсуждаемой области памяти ввода-вывода?
    Вообще-то и тут же новая непонятка. Если мне нужно, чтобы (многие, почти все) регистры сохранялись при выключении питания, то что? - Загружать их после включения из ЭППЗУ или можно объявить переменную области ввода-вывода как Retain?

    Манипуляции с экранами для работы с параметрами - буду вкуривать постепенно. Похоже, что здесь боль-мень проясняется.

    А вот интересный момент по отражению параметров от третьего устройста. Представим себе, что есть ИП320, который по RS232 работает Мастером с ПЛК100. Отлично, создаем у ПЛК100 нехилую такую область размером в несколько сот байт, которая доступна Мастеру - и он ее отображает, позволяет пользователю смотреть и редактировать параметры и прочее.
    А в системе еще есть некий модуль (пусть АЦП), который также имеет много параметров, задаваемых пользователем. И я хочу, чтобы он конфигурировался прямо тут, при работе с ПЛК и ИП320. То есть, его параметры - такие же, как и параметры ПЛК100, их нужно уметь смотреть и редактировать с ИП320.
    Сначала я думал связать АЦП (я его еще не выбрал, поэтому называю условно, но считаем, что это тоже стройство с Модбасом) с ПЛК по 485 и в этой паре чтобы ПЛК был Мастером. Однако, прочтя вот это:
    "во внутреннее пространство этой памяти можно вставить не только переменные, но и устройство, отображаемое как память", подумал о другом варианте.
    Может быть, сделать ПЛК Слейвом в квадрате? Пусть ИП320 берет из него данные и записывает на их место редактированные значения, а тот самый АЦП пусть просто складывает свои параметры в область ввода-вывода ПЛК100, доступную и для ИП320. Тогда нет проблем с редактированием параметров АЦП с панели ИП320. Все, что нужно АЦП для работы, он возьмет из своего ЭППЗУ (если у него есть) и вдует в самом начале работы в ПЛК100. Эти параметры свободно доступны ИП320 для отображениея и редактирования - и их изменение станет видно модулю АЦП, он втянет измененные параметры в свою память.
    А результаты непосредственно работы АЦП (результаты измерения) тоже будут складываться в область ввода-вывода. И ПЛК100 может оттуда черпать что ему нужно для работы (преобразование, сравнение, принятие тех или иных решений), что-то изменять в своих регистрах, которые пойдут для отображения на панель. И все счастливы.

    Что вы можете сказать о модели, в которой самый умный (ПЛК) - с обеих сторон Слейв?

  7. #7

    По умолчанию

    Читаю ТТХ ПЛК100, какие-то 8 М ОЗУ, 4 К ЭППЗУ - что и как связано с той памятью, которая используется в обсуждаемой области памяти ввода-вывода?
    "Железо" у ПЛК с лицензиями L и M одно и то же. Просто в лицензии L искусственно ограничен максимальный размер области памяти, используемой для организации ввода/вывода (на программном уровне).
    Если мне нужно, чтобы (многие, почти все) регистры сохранялись при выключении питания, то что?
    То заведите себе столько retain-переменных, сколько вам требуется. Лишь бы они в упомянутые 4 килобайта энергонезависимой памяти уместились. Скорее всего, ограничение в 1024 переменных типа REAL или 2048 типа WORD для вашего проекта не будет критичным.
    Есть на форуме пример эмуляции ТРМ1 на ПЛК100 (слэйв) и ИП320 (мастер) - там работа с сохранением уставок в retain наглядно показана.
    Что вы можете сказать о модели, в которой самый умный (ПЛК) - с обеих сторон Слейв?
    Оставляя в стороне вопрос "а на хрена такие хитрости", отмечу, что подавляющее большинство измерителей и регуляторов попросту не способно работать Modbus-мастером. Не заложен в них такой уровень "неестественного интеллекта".
    Операторские панели, способные читать данные из одного слэйва и пересылать их в другой, в природе вроде бы существуют. Но это уже не ИП320, а совсем иной класс, на порядок дороже по цене. Да и как-то не очень разумно возлагать на HMI несвойственные ему задачи.
    Или вам просто не хватает интерфейсов для связи с периферийными железками? Так вроде бы их в ПЛК100 с избытком - RS485, RS232, RS232-Debug (тоже можно задействовать для общения с периферией, поскольку для программирования и отладки есть еще и USB-device порт) и Ethernet. Куда уж больше?

  8. #8
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    "Железо" у ПЛК с лицензиями L и M одно и то же.
    Это я понимаю. Я уже со вчерашнего дня даже понял суть ограничения при L

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    То заведите себе столько retain-переменных, сколько вам требуется
    И при этом кто и когда их черпает из 4К ЭППЗУ? Могу ли я вмешиваться в этот процесс?
    Например, я поработал с параметрами - и хочу сохранить в ЭППЗУ новые значения. Именно сейчас, а не каждый раз, когда параметр изменяется.
    Как "исполнитель" в ПЛК реально реализует запись изменений? Где это описано?

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    Есть на форуме пример эмуляции ТРМ1 на ПЛК100 (слэйв) и ИП320 (мастер) - там работа с сохранением уставок в retain наглядно показана.
    Ну, посмотрю. Хоть бы ветку указал В "полезностях"?

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    Оставляя в стороне вопрос "а на хрена такие хитрости"
    Ну вот, простая система:

    АЦП (контроллерный, с параметрами)
    ПЛК100
    ИП320

    Я решил, что конфигурирование АЦП с помощью компа - отстой. У меня достаточно опыта, чтобы знать, что некоторые вещи недопустимы.
    "Хочу, чтобы окна можно было закрывать мышью. И открывать тоже" (И.Сталин)
    Поэтому и решил, что мое устройство будет конфигурироваться (читай: параметры могут редактироваться) прямо на объекте. С использованием штатных модулей (собсно, ПЛК и ИП320).
    Отсюда подзадача: параметры работы АЦП должны быть доступны для ИП320. Но они также должны быть быстро доступны и ПЛК100. Поэтому получать их в ПЛК через ИП320 - низзя!
    Вот и получается, что должна быть область в памяти то ли ПЛК100, то ли АЦП, в которой видно параметры (и результаты) работы АЦП, но которая видна и ИП320.

    Вариант 1. 2 контура: ИП (Мастер) - ПЛК (Слейв) + ПЛК (Мастер) - АЦП (Слейв)
    Вариант 2. 2 контура: ИП (Мастер) - ПЛК (Слейв) + ПЛК (Слейв) - АЦП (Мастер)
    Вариант 3. 1 контур: ИП (Мастер) - ПЛК (Слейв) - АЦП (Слейв)

    Как раз вариант 3 не катит из-за сложного доступа ПЛК к самым свежим результатам АЦП.
    Вариант 1, вроде как стандартный (хотя, что я знаю о стандартности в этом новом для меня деле?). Собственно, в моем прототипе так и есть (только ИП не существует отдельно, индикация есть частью контроллера).
    ПЛК в общении с АЦП должен выдавать запросы достаточно часто, видит и параметры, и результаты. Но ИП320 как видит параметры АЦП? Просит ПЛК, тот обращается к АЦП, кладет результаты в указанные регистры и тогда они становятся доступными ИП320. Как-то заковыристо.

    А в Варианте 2 все выглядит проще.
    Оба Мастера напихивают в память ввода-вывода ПЛК все, что может представлять интерес для коллеги Мастера и для собственно главного скромного контроллера, т.е. ПЛК. И считывают то, что кому интересно.
    То есть, я хочу создать в памяти ввода-вывода ПЛК актуальную копию всх параметров, которые нужны для работы и для индикации-редактирования. Это плохо?

    Цитата Сообщение от Terrano1992 Посмотреть сообщение
    Или вам просто не хватает интерфейсов для связи с периферийными железками?
    Видишь уже из вышесказанного, что не в этом дело? Хотя тоже, мне, как новичку, не ясно, какой лучше выбрать. Поясняю конструктив:

    АЦП - далеко и без вариантов там 485.
    А вот ИП320 находится рядышком с ПЛК. Как лучше их связать? Например, 232 или дебаговый 232? В чем плюсы и минусы?

    С уважением!
    Последний раз редактировалось drvlas; 05.11.2010 в 11:18.

  9. #9
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

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

    Цитата Сообщение от валенок Посмотреть сообщение
    плетка, наручники.. попробуйте. так интересней.
    что-то не вкурил. я ж новичек, не забывай. давай, как блондину?

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

    плк100, допустим, слейв в квадрате. но на верхнюю асу у него есть дырка (тот же етернет). если у него какие-то проблемы - может и пожаловаться системе. если он просто умер и некому будет отвечать на запросы ип320 и ацп (двух мастеров в системе) - дык, а толку детектировать эту ситуацию? умерла, так умерла. надо ремонтировать.

    если умер кто-то из мастеров. допустим, ацп. тогда плк100 может увидеть по вторичным половым признакам, что ему новых результатов никто в область ввода-вывода не кладет - узнает. что еще надо?
    ну, а если ип320... тут интересно. я хочу обдумать вариант, когда плк + ацп могут по включению разобраться, что ип320 нет в системе - и работать без него. там задача управления, в которой оператор не обязательно и смотрит на индикатор. теоретически можно работать без индикации. ну, это решение еще впереди...

  10. #10

    По умолчанию

    при этом кто и когда их черпает из 4К ЭППЗУ? Могу ли я вмешиваться в этот процесс?
    Зачем в него вмешиваться, когда контроллер сам это успешно делает? Отслеживает изменение переменной, своевременно записывает ее в EEPROM...
    Но если очень хочется бурной деятельности - можно следить за битом "Power" в модуле Statistics и как только он примет значение FALSE, скопировать рабочие переменные в те, которые объявлены как RETAIN. А при старте наоборот, скопировать значения из RETAIN в рабочие переменные. В ранее упомянутом эмуляторе ТРМ1, кажется, такой механизм реализован.
    решил, что мое устройство будет конфигурироваться (читай: параметры могут редактироваться) прямо на объекте. С использованием штатных модулей (собсно, ПЛК и ИП320).
    Отсюда подзадача: параметры работы АЦП должны быть доступны для ИП320. Но они также должны быть быстро доступны и ПЛК100. Поэтому получать их в ПЛК через ИП320 - низзя!
    Получить их в ПЛК "через ИП320" невозможно в любом случае, чисто по техническим ограничениям. Не умеет ИП320 взять данные из одного регистра и скопировать их в другой, ее таким операциям не научили.
    А посему единственный разумный вариант - это подцепить ИП320 мастером на RS232 (ее штатным кабелем КС4), а АЦП и прочие прибамбасы навесить на RS485, где мастером будет ПЛК. Тогда, если выбьете из разработчика АЦП все его "хау-ноу" , заполучив полную спецификацию на команды конфигурирования, сможете наваять нужную процедуру на ПЛК (и управлять ее выполнением через ИП320).
    В то же время, такая система хотя бы частично останется работоспособной при сбое/отказе ИП320 (сможет более или менее корректно управлять техпроцессом на последних введенных уставках).
    Я решил, что конфигурирование АЦП с помощью компа - отстой
    А как быть с тем, что кроме АЦП в этой системе есть еще ПЛК и панель, которые все равно без компьютера не запрограммировать? То есть, выезжая на ремонт установки, все равно придется тащить с собой ноутбук с установленным на него набором софта (и он не потяжелеет, если на него установить еще и конфигуратор для АЦП)?
    Или по условиям задачи необходимо какие-то отдельные рабочие настройки АЦП оперативно изменять?
    Хоть бы ветку указал. В "полезностях"?
    Ну да, разумеется. В "примерах и полезностях", "ТРМ1 модель 2".

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •