Основные понятия языка SFC¶
Язык SFC использует следующие структурные элементы для создания
программы: шаг (и начальный шаг), переход, блок действий, прыжок и связи
типа дивергенция и конвергенция.
После вызова программного модуля, описанного языком SFC, первым
выполняется начальный шаг. Шаг, выполняемый в данный момент, называется
активным. Действия, связанные с активным шагом, выполняются один раз в
каждом управляющем цикле. В режиме выполнения активные шаги выделяются
салатовым цветом. Следующий за активным шагом шаг станет активным,
только если в переходе между этими шагами условие будет истинно.
В каждом управляющем цикле будут выполнены действия, содержащиеся в
активных шагах. Далее проверяются условия перехода, и, возможно, уже
другие шаги становятся активными, но выполняться они будут уже в
следующем цикле.
Далее описывается каждый элемент SFC диаграммы.
Наиболее важным элементом языка SFC является шаг, который описывает одну
операцию. Шаг изображается в виде прямоугольника с собственным именем
внутри (см. рис. 7.1).
Рис. 7.1 – Графическое представление «Шага» языка SFC
У каждого шага может быть 3 контакта. Сверху и снизу для соединения с
переходом и справа для соединения с блоком действий. Шаг предваряется
переходом, который определяет условие для активации данного шага в
процессе выполнения программы и отображается в виде горизонтальной черты
на ветви диаграммы процесса с указанием имени и условия. Два шага
никогда не могут быть соединены непосредственно, они должны всегда
отделяться переходом (см. рис. 7.2).
Рис. 7.2 – Шаги «step2» и «step3», соединённые переходом «tr2_3»
Любая SFC диаграмма должна содержать начальный шаг (шаг, выделенный
двойной рамкой), с которого начинается выполнение диаграммы.
Между шагами находятся так называемые переходы. Условием перехода может
быть логическая переменная или константа, логический адрес или
логическое выражение, описанное на любом языке. Условие может включать
серию инструкций, образующих логический результат, в виде ST выражения,
например:
(i<= 100) AND b
либо на любом другом языке.
На рис. 7.3 приведён пример перехода между шагом «Step3» и «Step5» с
именем «transition4».
Рис. 7.3 – Переход между шагами «Step3» и «Step5» с предопределённым
условием «transition4»
В данном случае «transition4» это имя для предопределённого перехода,
который может использоваться многократно на SFC диаграмме для
определения переходов между несколькими шагами. Код для него может быть
представлен, например, на языке ST:
:= (flag = True AND level > 10);
На рис. 7.4 представлен переход между шагами «Step6» и «Step7» в виде
обычного условия:
level > 10
Рис. 7.4 – Переход между шагами «step6» и «step7» с предопределённым
условием «transition4»
На рис. 7.5 представлен переход между шагами «Step8» и «Step9» в виде
значения логического выражения «AND» на языке FBD:
Рис. 7.5 – Переход между шагами «step8» и «step9», заданный «логическим
И» на языке FBD
Условие не должно содержать присваивания, вызов программ и экземпляров
функциональных блоков.
Каждый шаг имеет нулевое или большее количеством действий, объединённых,
как правило, на диаграмме, в блок действий. На рис. 7.6 показан примера
шага «evaluateStep» и связанный с ним блок действий.
Рис. 7.6 – Шаг «evaluateStep» и связанный с ним блок действий,
содержащий 3 действия
Блок действий определяет операции, которые должны выполняться при
активации (выполнении) шага. Шаги без связанного блока действий
идентифицируются как ждущий шаг. Блок действий может состоять из
предопределённых действий. Каждому предопределённому действию
присваивается имя (на рис. 7.6 это «action0» и «action1»). Одно действие
может использоваться сразу в нескольких шагах. Действие может
выполняться непрерывно, пока активен шаг, либо единожды. Это
определяется специальными квалификаторами, описание которых приведено в
таблице 6. Квалификаторы также могут ограничивать время выполнения
каждого действия в шаге.
Шаг может быть также заменён «прыжком». Последовательности шагов всегда
ассоциируются с прыжком к другому шагу той же самой последовательности
шагов. Это означает, что они выполняются циклически. Переход на
произвольный шаг – это соединение на шаг, имя которого указано под
знаком «прыжка». Такие переходы нужны для того, чтобы избежать
пересекающихся и идущих вверх соединений. На рис. 7.7 показана SFC
диаграмма, содержащая два «прыжка».
Рис. 7.7 – SFC диаграмма, содержащая «прыжки»
Первый делает переход к шагу «init» в случае выполнения условия
«transition4», второй делает переход к шагу «step1», в случае выполнения
условия «transition2».
Лестничная логика
Пример лестничной логической схемы
В схематических диаграммах для логических схем релейных часто называют линейные диаграммы, потому что входы и выходы, по существу , обращены в серии линий. Релейная логическая схема — это электрическая сеть, состоящая из линий или звеньев, в которых каждая линия или звено должны иметь непрерывность, чтобы включить выходное устройство. Типичная схема состоит из нескольких ступеней, каждая из которых управляет выходом. Этот выход управляется комбинацией условий входа или выхода, например входными переключателями и управляющими реле . Условия, которые представляют входы, подключаются последовательно, параллельно или последовательно-параллельно для получения логики, необходимой для управления выходом. Схема релейной логики образует электрическую принципиальную схему для управления устройствами ввода и вывода. Логические схемы реле представляют собой физическое соединение устройств.
Каждая ступень будет иметь уникальный идентификационный ссылочный номер, а отдельные провода в этой ступени будут иметь номера проводов, производные от номера ступени. Таким образом, если звено было обозначено как 105, первый независимый провод был бы 1051, второй — 1052 и так далее. Провод будет назван в честь самой верхней перекладины, к которой он подключен, даже если он разветвляется на более низкие ступени. При проектировании системы было обычной практикой пропускать номера ступенек, чтобы можно было добавлять их позже по мере необходимости.
Когда стойка была изготовлена, при установке провода каждый конец должен был быть помечен этикетками для проводов (также называемыми маркерами проводов). Это также применимо для протягивания проволоки на завод через кабелепровод или лотки, где каждый провод имеет соответствующие номера. Этикетки для проводов обычно представляли собой кусочки белой ленты с напечатанными на них числами или буквами, которые собирались в небольшие буклеты карманного размера. Полоска с номером отклеивалась и наматывалась на провод ближе к концу. Номера проводов состояли из серии полосок с номерами, поэтому провод 1051 будет состоять из четырех полос. Существуют также карманные принтеры, которые печатают на этикетке с клейкой основой, которую можно обернуть вокруг проволоки.
Базовый формат логических схем реле следующий:
1. Две вертикальные линии, соединяющие все устройства на логической схеме реле, обозначены L1 и L2. Пространство между L1 и L2 представляет напряжение цепи управления.
2. Выходные устройства всегда подключены к L2. Любые электрические перегрузки , которые должны быть включены, должны отображаться между выходным устройством и L2; в противном случае устройство вывода должно быть последним компонентом перед L2.
3. Управляющие устройства всегда отображаются между L1 и выходным устройством. Управляющие устройства могут быть подключены последовательно или параллельно друг другу.
4. Устройства, выполняющие функцию STOP, обычно подключаются последовательно, а устройства, выполняющие функцию START, подключаются параллельно.
5. Электрические устройства показаны в их нормальном состоянии. NC контакт будет показано , как правило , закрыты, и NO контакт будет выглядеть как нормально открытого устройства. Все контакты, связанные с устройством, изменят состояние, когда устройство будет под напряжением.
На рисунке 1 показана типичная логическая схема реле. В этой схеме станция STOP / START используется для управления двумя контрольными лампами . При нажатии кнопки СТАРТ включается управляющее реле, и его связанные контакты изменяют состояние. Теперь зеленый индикатор горит, а красный погаснет. При нажатии кнопки STOP контакты возвращаются в состояние покоя, красный индикатор горит, а зеленый гаснет.
3.1 Скрипты линкера
Язык управления линкером (ЯУЛ) LD — это набор команд; некоторые
из этих команд устанавливают отдельную опцию, некоторые используются
для выбора группы входных файлов или для установки имени выходного
файла. Два типа управления имеют фундаментальное значение в процессе
линковки.
Самая фундаментальная команда LD — это команда SECTIONS (см.
3.4). Каждый осмысленный скрипт линкера должен иметь команду SECTIONS:
она определяет «карту» выходного файла и изобилует множеством деталей.
Ни одна другая команда ЯУЛ не является необходимой в таком большинстве
случаев, как эта.
Команда MEMORY дополняет команду SECTIONS описывая доступную
память в целевой архитектуре. Эта команда не является обязательной.
Если Вы не будете использовать команду MEMORY, тогда LD выделит
необходимый блок доступной памяти для всего вывода (см. 3.3).
Вы можете вставлять комментарии в скрипты линкера, как в языке C,
используя для начала комментария символы ‘/*’ и для завершения —
символы ‘*/’. Как и в языке C комментарии синтаксически эквивалентны
пробелу.
Принцип работы ПЛК
ПЛК предназначены для автоматического управления дискретными и непрерывными технологическими процессами.
Основные принципы работы ПЛК:
- Цикличность
- Работа в реальном масштабе времени, обработка прерываний
Цикличность работы ПЛК
В одном цикле ПЛК последовательно выполняет следующие задачи:
- Самодиагностика
- Опрос датчиков, сбор данных о текущем состоянии технологического процесса
- Обмен данными с другими ПЛК, промышленными компьютерами и системами человеко-машинного интерфейса (HMI)
- Обработка полученных данных по заданной программе
- Формирование сигналов управления исполнительными устройствами
Время цикла
Время выполнения одного цикла программы зависит от:
- размера программы
- количества удалённых входов-выходов
- скорости обмена данными с распределённой периферией
- быстродействия ЦПУ
Время цикла (время квантования) должно быть настолько маленьким, чтобы ПЛК успевал за скоростью изменения переменных процесса (см. теорию автоматического управления),
в противном случае процесс станет неуправляемым.
Watchdog
Строжевой таймер следит за тем, чтобы время цикла не превышало заданное.
Обработка прерываний
По прерываниям ПЛК запускает специальные программы обработки прерываний.
Типы прерываний:
- Циклические прерывания по времени (например, каждые 5 секунд)
- Прерывание по дискретному входу (например, по сработке концевика)
- Прерывания по программным и коммуникационным ошибкам, превышению времени цикла, неисправностям модулей, обрывам контуров
Модули ПЛК
- Корзина для установки модулей
- Стабилизированный блок питания AC/DC (~220В/=24В)
- Центральное процессорное устройство (ЦПУ) с интерфейсом для подключения программатора,
переключателем режимов работы, индикацией статуса, оперативной (рабочей) памятью, постоянной памятью для хранения программ и блоков данных - Интерфейсные модули для подключения корзин расширения локального ввода-вывода и распределённой периферии
- Коммуникационные модули для обмена данными с другими контроллерами и промышленными компьютерами
- Модули ввода-вывода
- Прикладные модули (синхронизация, позиционирование, взвешивание и т.п.)
Функции устройств ввода
- Электрическое подключение и питание технологических датчиков (дискретных и аналоговых)
- Диагностика состояния (обрыв провода, контроль граничных значений, короткое замыкание и т.п.)
- Формирование цифровых значений (машинных слов) технологических параметров
- Передача этих данных в память ПЛК для дальнейшей обработки
Функции устройств вывода
- Электрическое подключение исполнительных устройств
- Диагностика состояния (обрыв провода, контроль граничных значений, короткое замыкание и т.п.)
- Приём управляющих машинных слов из памяти ПЛК
- Формирование управляющих сигналов (дискретных и аналоговых)
Типы устройств ввода-вывода
- Модули локального ввода-вывода располагаются:
- в одной корзине с ЦПУ
- в соседних корзинах в одном шкафу с ЦПУ
- в корзинах в соседних шкафах в одном помещении с ЦПУ
- Модули распределённого ввода-вывода (децентрализованная периферия) располагаются удалённо (в другом здании или в поле по по месту управления)
и связываются с ЦПУ по промышленной полевой шине. Станции удалённого ввода-вывода могут иметь взрывозащищённое исполнение или повышенный
класс защиты корпуса (например, IP67) и устанавливаться без шкафа
Функции коммуникационных модулей
Коммуникационные модули предназначены для обмена данными:
- с удалёнными модулями ввода-вывода (Profibus, Modbus и др.)
- с программаторами, панелями оператора (HMI) и другими контроллерами
- с полевыми устройствами (HART, Foundation Fieldbus и др.)
- с сервоприводами (SERCOS)
- с промышленными компьютерами верхнего уровня (Industrial Ethernet и др.)
- по радиоканалам (GSM, GPRS)
- по телефонным линиям
- по Internet (встроенные web-серверы публикуют на своих страницах статусную информацию)
Дизайн релейной логики
Во многих случаях можно разработать логическую схему реле непосредственно из повествовательного описания последовательности управляющих событий. В общем, следующие предложения относятся к разработке логической схемы реле:
1. Определите контролируемый процесс.
2. Нарисуйте эскиз в процессе эксплуатации. Убедитесь, что на чертеже присутствуют все компоненты системы.
3. Определите последовательность выполняемых операций. Как можно более подробно перечислите последовательность рабочих шагов. Запишите последовательность в предложениях или в виде таблицы.
4. Напишите логическую схему реле из последовательности операций.
The Binary Concept Applied to Ladder Logic
Microprocessors, like the ones found in PLCs and personal computers operate on the binary concept. You’ve probably heard of the term ‘binary’. It refers to the principle that things can be thought of in one of two states. The states can be defined as:
True or False
1 or 0
On or Off
High or Low
Yes or No
Microprocessors love binary….. 10101011101000111010001010100010100100101010010011.
I don’t know about you, but my head hurts just looking at that. Luckily ladder logic uses symbolic expressions and a graphical editor for writing and reading ladder diagrams making it easier for us mere humans to comprehend.
In a PLC, binary events are expressed symbolically using ladder logic in the form of a normally open contact (NO) and normally closed contact (NC). The normally open contact (NO) is TRUE when the event is active and FALSE when the event is NOT active. While the normally closed contact (NC) is FALSE when the event is active and TRUE when the event is NOT active.
Let me explain NO and NC contacts a little further …..
Normally Open Contact (NO) in Ladder Logic
The event associated with a normally open contact (NO) can be TRUE or FALSE. When the event is TRUE then it is highlighted green and the logic flow can move past it to the next logic expression. Just like the current flow in an electric circuit when a switch is turned on.
Let’s call a certain PLC input event ‘A’. This PLC input event could be something like a button being pushed, a limit switch being activated or a temperature switch being triggered.
PLC input event ‘A’ follows the binary concept and has one of two states, TRUE or FALSE. The ladder logic truth table for a normally open contact (NO) which denotes PLC input event ‘A’ is shown below….
Ladder Logic Truth Table – Normally Open Contact (NO)
Normally Closed Contact (NC) in Ladder Logic
The event associated with a normally closed contact (NC) can be TRUE or FALSE. The result of the normally closed contact (NC) is basically the opposite state of an event that occurs. So, if PLC input A is FALSE the result will be TRUE. And vise versa when PLC input A is TRUE the result will be FALSE.
The normally closed contact (NC) is considered to be a ladder logic NOT function. It is sometimes referred to as reverse logic. Check out the truth table below….
Truth Table – NOT Function
If we translate a NOT function into a ladder logic diagram we express it symbolically in the form of a normally closed contact (NC) as seen in ladder logic truth table shown below….
Ladder Logic Basics Truth Table – NOT Function
Dia Diagram Editor
Dia Diagram Editor is a free open source ladder diagram software for Windows. Using this software, you can easily create a ladder diagram. Not just the ladder diagram, but a lot of different types of diagrams such as ERD, Network Diagram, Use Case Diagram, UML Diagrams, etc., can also be created in it. To deal with different types of diagram, it provides various dedicated sections containing tools to create a specific type of diagram like Assorted, Chronogram, Cybernetics, Database, etc. For the ladder diagram, you can use its Ladder section that has all essential shapes and elements like if ladder contact, if not ladder contact, simple output variable, negative output variable, receptivity output variable, and more.
You can easily select and drop ladder diagram elements from the ladder section to canvas to start building the diagram. The canvas available in it is also quite handy as it provides helpful features namely grid lines and a scale for precise diagram building. After dropping required elements to the canvas, you need to properly structure them by placing all elements on their right place. After making the structure, name each element of the ladder diagram to finish the diagram. After completion, you can export the ladder diagram in formats like PDF, SVG, PNG, TIFF, JPG, BMP, etc.
Ladder Diagram for Motor Control
Motor control can be done with a PLC program. In fact, the PLC is a common choice for controlling AC motors. Here are some examples of ladder diagrams for motor control.
Star Delta PLC Ladder Diagram
One of the most common ways to start an AC motor is by first starting the motor in star connection. When the motor speed is sufficient, the connection is switched to delta. This is due to the high current AC motors use when starting.
Star/delta motor control can be done in several ways. To switch between the star and the delta relay, a timer is used. The ladder logic for a star/delta motor control is quite simple, and that is one of the advantages of using a PLC for motor control.
Another great example of how to use a PLC for star/delta start of an AC motor is example #5 in the PDF file below. It includes a lot explination and a lot of great power and control circuit diagrams. Example #5 is on page 30.
Star/delta start PLC example (PDF)
Ladder Diagram for DOL Direct On Line Motor Starter
Still commonly used in many factories the DOL or direct on line motor starter is another way of starting AC motors. The DOL is made of a contactor (usually 3-phase contactor), an overload relay like the thermal relay, and some connections in between.
Controlling the DOL motor starter with a PLC program is simple. This video below shows an example of how to control a DOL with a PLC program. In the example the PLC Zelio from Schneider Electric is used. But any PLC with digital inputs and outputs can be used, even the mini PLC Siemens S7-200 or the later Siemens S7-1200. Sometimes you might have to use a smaller relay between the PLC output and the coil of the contactor. Make sure you always check the ratings of the PLC outputs you are using.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ LAD, STL И FBD
Каждый вход и выход имеет абсолютный адрес, предопределенный конфигурацией аппаратуры. Этот адрес указывается непосредственно, например: I 1.5 (вход-байт 1-бит 5). Абсолютный адрес может быть заменен символическим именем по вашему выбору (рис.53).
Рис. 53 Распределение адресов
Лучше использовать только абсолютное программирование, если в программе S7 не нужно обращаться ко многим входам и выходам.
Создание программы в OB1
В STEP 7 программы S7 создаются на стандартных языках программирования: контактный план (LAD), список операторов (STL) или функциональный план (FBD), рисунок 54. На практике необходимо решить, какой язык использовать.
Программные модули¶
Добавление программных модулей (программ, функций, функциональных
блоков) осуществляется с помощью всплывающего меню дерева проекта,
в котором необходимо выбрать пункт «Функция», «Функциональный
блок» или «Программа». Далее появится диалог «Создать новый POU».
Проект «First steps» представляет собой основной программный модуль,
написанный на языке FBD, в котором используются 5 функциональных блоков,
написанных на пяти разных языках IEC 61131-3. Каждый функциональный блок
это счетчик, увеличивающий значение выхода на единицу до тех пор, пока
на входе Reset не будет установлено значение True. Инкрементация
значения происходит в каждом цикле основной программы. Регулировать
интервал цикла можно изменяя длительность задачи для экземпляра основной
программы в панели ресурсов.
В созданный проект необходимо добавить программу program0, функцию и 5
функциональных блоков: CounterST, CounterLD, CounterFBD, CounterSFC,
CounterIL. Если при создании проекта основной программный модуль
program0 не был добавлен, его следует добавить вручную. Далее
рассмотрено добавление каждого программного модуля в отдельности.
Программа
Ниже будет приведён пример добавления в проект программы, написанной на
языке FBD. Логика и алгоритм работы данного программного модуля
следующие: определена переменная Reset типа BOOL, отвечающая за сброс
каждого из пяти счетчиков, определены пять переменных Cnt1..Cnt5 типа
INT, в них хранится значение каждого из пяти счетчиков, и добавлены пять
функциональных блоков, представляющих собой инкрементирующий счетчик на
пяти языках IEC 61131-3. При запуске программы начальное значение
переменной Reset устанавливается по умолчанию False. Значения счетчиков
начнут увеличиваться, начиная со значения по умолчанию (для типа INT
равно 0). Для сброса счетчиков переменную Reset необходимо форсировать
значением True, затем вернуть значение False. Переменным Cnt1..Cnt5
будет присвоено начальное значение конфигурационной константы
ResetCounterValue, таким образом значения счетчиков
сбросятся, и начнется отсчет начиная с 17.
Сначала следует добавление программы в проект, осуществляемое с помощью
меню дерева проекта, выбором пункта «Программа» (см. ):
Рисунок 107 — Добавление программы в проект
В появившемся диалоге (см. ) выберем язык FBD и тип POU
«программа».
Рисунок 108 — Диалог добавления программы в проект
Добавим в панели переменных и констант переменную Reset типа BOOL,
отвечающую за сброс каждого из пяти счетчиков, а так же пять переменных
Cnt1..Cnt5 типа INT, в которых будут храниться значения каждого из пяти
счетчиков. Далее необходимо обратиться к редактору языка FBD. Для
написания алгоритма и логики выполнения данной программы нам понадобятся
функциональные блоки счетчиков, создание которых рассмотрено в п. 6.3.2.
Для удобства редактирования FBD диаграмм в редакторе существует функция
Drag&Drop , необходимые функциональные блоки и
переменные можно добавить в поле редактирования из библиотеки функций и
функциональных блоков и таблицы переменных путем
перетаскивания в поле редактирования. необходимо левой
клавишей мыши зажать столбец «#» для переменной в панели переменных и
констант, далее перенести указатель на область редактирования FBD
диаграммы и отпустить кнопку мыши (Drag&Drop).
Перенесем 5 экземпляров переменной Reset и все переменные Cnt1..Cnt5 в
поле редактирования диаграммы как показано на :
Рисунок 109 — Перенос переменных в поле редактирования
Из библиотеки функций и функциональных блоков добавим пользовательские
функциональные блоки. Добавление данных функциональных блоков удобнее
осуществить переносом соответствующей функции с помощью мыши (Drag&Drop)
из панели библиотеки функций и функциональных блоков в область
редактирования FBD диаграммы данного программного модуля как показано
на :
Рисунок 110 — Программа на языке FBD без связей
Добавим связи между функциональными блоками и входными и выходными
переменными.
Рисунок 111 — Основной программный модуль на языке FBD
Применение контроллеров
Современный ПЛК, недорогой и надежный, находит применение в ПИД-регуляторах, счетчиках типа «Меркурий», промышленных устройствах серии DVP. Компактность блоков позволяет встраивать их в бытовую технику, монтировать в щитах и шкафах совместно с прочим электрооборудованием.
Энкодер, подключенный к контроллеру, применяется в автомобилестроении, реагируя на изменение угла поворота руля. Удобно использовать ПЛК при создании комплексов с ЧПУ, автоматизированных систем запуска аварийной откачки сточных вод в канализации. Видеонаблюдение, интегрированное в охранный пост, создаст полноценный обзор зоны наблюдения для оператора.
Все требуемые данные при этом будут сохранены на носителе информации (переданы в сеть), а в случае опасности сигнал тревоги будет подан автоматически. Цепочке контроллеров под силу управлять работой цеха металлообработки, пошивочной мастерской. В домашнем варианте ПЛК без участия человека включит свет, накачает воду из колодца в бак до требуемого уровня.
Место ПЛК в системе управления
До создания миниатюрных интегральных схем рука оператора буквально не успевала переключать режимы на пульте цепи управления. Использование контроллерных блоков «Сегнетикс», «Дельта» и подобных способствовало снятию нагрузки с человека.
Ее переложили «на плечи» машин с выводом на экран данных мониторинга, отображенных в виде мнемосхем и изменяемых параметров. На ПЛК возлагаются задачи по опросу датчиков и регистров, обработке поступающей информации.
Без микроконтроллеров не было бы РСУ, АСУ, сложных автоматных комплексов управления технологическими процессорами. Используя сетевой трафик, ПЛК анализируют данные, успевая проверять состояние портов входа. Главный недостаток, особенность микроконтроллеров состоит в необходимости прошивки, создания программы для работы.
Впрочем, его следует воспринимать двояко: индивидуально создаваемое ПО позволяет проектировать узкоспециализированные изделия под конкретные задачи.
Техническое задание
Создание и утверждение технического задания (ТЗ) – очень важная часть разработки ПО. От грамотно составленного ТЗ зависит, насколько эффективно будет вестись разработка.
Опытные программисты знают, что программа не пишется за один раз. Как правило, софт корректируется и приближается итерациями к конечному варианту в соответствии с пожеланиями конструкторов, инженеров, электриков, механиков и технологов
Поэтому очень важно на этапе составления ТЗ плотно взаимодействовать со всеми заинтересованными специалистами, которые подписывают ТЗ, а по окончании принимают работу