Программное обеспечение ПЛК Современные системы промышленной и лабораторной автоматизации позволяют решать широкий круг задач, которые можно разделить.

Презентация:



Advertisements
Похожие презентации
Языки программирования. Стандарт МЭК устанавливает пять языков программирования ПЛК, три графических и два текстовых. Продвижением стандарта занимается.
Advertisements

FBD В cреде CoDeSys Язык FBD Язык FBD (Functional Block Diagram, Диаграмма Функциональных Блоков) является языком графического программирования,
Язык релейных диаграмм(LD) Графический язык Программа состоит из схем Использовался для программирования практически всех классических ПЛК Удобен для программирования.
Программное обеспечение компьютера. Совокупность программ, хранящихся в долговременной памяти компьютера, составляют программное обеспечение (ПО) компьютера.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Этапы решения задач на компьютере.
ВЫПОЛНЕНИЕ АЛГОРИТМОВ КОМПЬЮТЕРОМ. Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой. Программа данные, предназначенные.
Алгоритмизация и программирование. Языки программирования высокого уровня. Технологии программирования Алгоритмизация и программирование. Языки программирования.
ОСНОВНЫЕ ПОНЯТИЯ АЛГОРИТМИЗАЦИИ ЛЕКЦИЯ 11. ОПРЕДЕЛЕНИЯ Алгоритм Алгоритм - это конечная последовательность команд (предписаний) исполнителю совершить конечную.
Алгоритм. Алгоритм это точно определённая инструкция, последовательно применяя которую к исходным данным, можно получить решение задачи. Для каждого алгоритма.
Операционная система MS-DOS Не управляя оборудованием, программа остается всего лишь литературным произведением, написанным на особом формальном языке.
ОСНОВЫ АЛГОРИТМИЗАЦИИ И ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ СВОЙСТВА АЛГОРИТМА И ЕГО ИСПОЛНИТЕЛИ.
Исполнение программы Энциклопедия учителя информатики Газета «Первое сентября»
Что такое программирование? Совокупность процессов, связанных с разработкой программ и их реализацией. В широком смысле к указанным процессам относят все.
Электронная таблица. Excel-это программа для автоматизации расчетов, построение графиков, для табличных документов, для создания базы данных.
БЭСТ Дизайнер проектов Введение Концепции Основные понятия.
Алгоритмизация и требования к алгоритму Алгоритм и алгоритмизация Алгоритм и алгоритмизация.
Использование языка Си для программирования ЦСП TMS320C67x.
Лекция 6. Способы адресации в микропроцессорных системах.
когда компьютер еще назывался ЭВМ (электронно-вычислительная машина), он мог только вычислять. Процесс обработки информации состоял в операциях над числовыми.
Транксрипт:

Программное обеспечение ПЛК Современные системы промышленной и лабораторной автоматизации позволяют решать широкий круг задач, которые можно разделить на несколько групп, имеющих свои особенности: автоматизация управления технологическими процессами (АСУ ТП); взаимодействие системы с диспетчером (оператором); автоматизированный контроль и измерения (мониторинг); обеспечение безопасности; дистанционное управление, измерение, сигнализация (задачи телемеханики). Для решения этих задач первоначально использовались универсальные языки программирования высокого уровня и команда профессиональных программистов. Однако практика показала крайне низкую эффективность такой разработки. Оказалось, что разработка системы должна выполняться не программистами, а специалистами той предметной области, которая нуждается в автоматизации, т.е. технологами, а также системными интеграторами, которые осуществляют комплексное внедрение системы. История развития программных средств автоматизации показала, что все особенности отдельных применений можно учесть путем настройки нескольких универсальных программ на выполнение конкретной задачи. К таким универсальным программам относятся: средства МЭК-программирования контроллеров; ОРС сервер; SСАDА-пакеты. Разделение труда но созданию программных средств для систем автоматизации: фирмы, специализирующиеся на программном обеспечении, создают универсальные системы программирования задач автоматизации (SСАDА-пакеты и средства МЭК-программирования), а инжиниринговые фирмы (системные интеграторы) адаптируют эти средства к нуждам конкретного заказчика. Благодаря существенному упрощению процесса адаптации по сравнению с классическим программированием изменения в алгоритмы управления могут быть внесены, например, технологом эксплуатирующей организации без привлечения системных интеграторов или программистов. В настоящее время заказные программы естественным путем вытеснены с рынка промышленной автоматизации SCADA-пакетами и аналогичными универсальными средствами автоматизации, а также средствами программирования контроллеров на языках стандарта МЭК

Системы программирования на языках МЭК Первые языки программирования алгоритмов работы систем автомати­зации были нестандартными. Каждая фирма, создававшая контроллер или SСАDА-пакет, предлагала свой язык. Поэтому появление в 1993 г. стандарта на языки программирования контроллеров МЭК было большим шагом в направлении создания открытых систем автоматизации и обеспечило снижение стоимости разработки, сокращение сроков, повышение качества реализации алгоритмов автоматизации и возможность детального изучения языков программирования, пригодных для любого контроллера. МЭК устанавливал стандарты для пяти языков программирования ПЛК, рассчитанных на специалистов разных профессий, не связанных с программированием: три графических и два текстовых. Основной целью стандарта было повышение скорости и качества разработки программ для ПЛК, а также создание языков программирования, ориентированных на технологов, обеспечение соответствия ПЛК идеологии открытых систем, исключение этапа дополнительного обучения при смене типа ПЛК. Системы программирования, основанные на МЭК , характеризуют­ся следующими показателями: надежностью создаваемого программного обеспечения. Надежность обеспечивается тем, что программы для ПЛК создаются с помощью специально предназначенной для этого среды разработки, которая содержит все необходимые средства для написания, тестирования и отладки программ с помощью эмуляторов и реальных ПЛК, а также множество готовых фрагментов программного кода; возможностью простой модификации программы и наращивания ее функциональности; переносимостью проекта с одного ПЛК на другой; возможностью повторного использования отработанных фрагментов программы; простотой языка и ограничением количества его элементов.

Системы программирования на языках МЭК Языки МЭК появились не как теоретическая разработка, а как результат анализа множества языков, уже используемых на практике и предлагаемых рынку производителями ПЛК. Стандарт устанавливает пять языков программирования со следующими названиями: структурированный текст (SТ- Structured Техt); последовательные функциональные схемы (SFС Sequential Function Chart); диаграммы функциональных блоков (FBD – Function Block Diagram); релейно-контактные схемы, или релейные диаграммы (LD – Ladder Diagram); список инструкций (IL – Instruction List). Графическими языками являются SFC, FВD, LD). Языки IL и SТ являются текстовыми. В стандарт были введены несколько языков (а не один) для того, чтобы каждый пользователь мог применить наиболее понятный ему язык. Программисты чаще выбирают язык IL, (похожий на ассемблер) или SТ (похожий на язык высокого уровня Паскаль); специалисты, имеющие опыт работы с релейной логикой, выбирают язык LD, специалисты по САУ и схемотехники выбирают привычный для них язык FBD. Выбор одного из пяти языков определятся не только предпочтениями пользователя, но и смыслом решаемой задачи. Если исходная задача формулируется в терминах последовательной обработки и передачи сигналов, то для нее проще и нагляднее использовать язык FBD. Если задача описывается как последовательность срабатываний некоторых ключей и реле, то для нее нагляднее всего будет язык LD. Для задач, которые изначально формулируются в виде сложного разветвленного алгоритма, удобнее будет язык SТ.

Принципы построения языков МЭК Языки МЭК базируются на следующих принципах: вся программа разбивается на множество функциональных элементов Рrogaram Organization Units (РOU), каждый из которых может состоять из функций, функциональных блоков и программ. Любой элемент МЭК-программы может быть сконструирован иерархически из более простых элементов; стандарт требует строгой типизации данных. Указание типов данных позволяет легко обнаруживать большинство ошибок в программе до ее исполнения; имеются средства для исполнения разных фрагментов программы в разное время, с разной скоростью, а также параллельно. Например, один фрагмент программы может сканировать концевой датчик с частотой 100 раз в секунду, в то время как второй фрагмент будет сканировать датчик температуры с частотой один раз в 10 с; для выполнение операций в определенной последовательности, которая задается моментами времени или событиями, используется специальный язык последовательных функциональных схем (SFС); стандарт поддерживает структуры для описания разнородных данных. Например, температуру подшипников насоса, давление и состояние «включено- выключено» можно описать с помощью единой структуры «Роmр» и передавать ее внутри программы как единый элемент данных; стандарт обеспечивает совместное использование всех пяти языков, поэтому для каждого фрагмента задачи может быть выбран любой, наиболее удобный, язык; программа, написанная для одного контроллера, может быть перенесена на любой контроллер, совместимый со стандартом МЭК

Язык релейно-контактных схем LD Графический язык релейной логики впервые появился в виде электрических схем, которые состояли из контактов и обмоток электромагнитных реле (рис. 9.9). Такие схемы использовались в автоматике конвейеров для сборки автомобилей до эры микропроцессоров. Язык релейной логики был интуитивно понятен людям, слегка знакомым с электротехникой и поэтому оказался наиболее распространенным в промышленной автоматике. Обслуживающий персонал легко находил отказ в оборудовании, прослеживая путь сигнала по релейной диаграмме. Однако язык LD проблематично использовать для реализации сложных алгоритмов, поскольку он не поддерживает подпрограммы, функции, инкапсуляцию и другие средства структурирования программ с целью повышения качества программирования. Эти недостатки затрудняют многократное использование программных компонентов, что делает программу длинной и сложной для обслуживания.

Язык релейно-контактных схем LD Для выполнения арифметических функций в язык LD были добавлены функциональные блоки, которые выполняли операции сложения, умножения, вычисления среднего и т.д. Сложные вычисления в этом языке невозможны. Недостатком является также то, что только маленькая часть программы умещается на мониторе компьютера или панели оператора при программировании. Несмотря на указанные недостатки, язык LD относится к числу наиболее распространенных в мире, хотя используется для программирования только простых задач. Программы, написанные на языке LD, состоят из ступеней, которые выполняются ПЛК последовательно, слева направо. Ступень состоит из набора графических элементов (ячеек), ограниченных слева и справа условными шинами питания. Набор графических элементов языка LD включает: входы и выходы ПЛК – кнопки, контакты реле, конечные выключатели, сигналы датчиков, индикаторные лампы и т.д.; стандартные управляющие системные функции – таймеры, счетчики и т.д.; арифметические, логические и специальные операции; внутренние переменные ПЛК. Дискретные входы ПЛК и результаты выполнения логических операций представляются в виде условных контактов реле, нормально разомкнутых (нормально открытых - Sw1, Sw2) и нормально замкнутых (нормально закрытых - Sw3). Нормально разомкнутые контакты замыкаются при появлении сигнала на соответствующем входе или истинности поставленного в соответствие данному контакту логического выражения (Start). Логика работы нормально замкнутых контактов – обратная, он размыкаются при появлении сигнала или истинности логического выражения. На языке LD могут быть запрограммированы логические операции «И», «ИЛИ», «НЕ» и др. Последовательное соединение контактов равнозначно логической операции «И», параллельное «ИЛИ». Операция «НЕ» реализуется инверсным контактом. Дискретные выходы ПЛК или результаты выполнения данной ступени представляются в виде обмотки реле, питание на которой появляется после прохождения сигнала от левой условной шины питания через все находящиеся на ступени элементы. Левая шина соответствует исходному питанию схемы, ток через обмотку реле протекает в направлении от левой шины питания к правой. Ток в обмотке реле появляется после замыкания (размыкания) контактов и выполнения всех логических условий. Для ступени рис. 9.9, а можно записать логическое уравнение функционирования: Start = (Sw1 AND (Sw2 OR (NOT Sw3))).

Графические элементы языка LD Графические элементы языка LD можно условно разделить на базовые элементы, функциональные и операционные блоки. Каждый базовый элемент занимает одну ячейку (одну колонку в одной строке). Блоки могут занимать несколько ячеек. Ступень содержит до 7-ми строк и до 11-ти колонок, разделенных на две зоны проверочную зону и зону действий. Каждая ступень может быть снабжена меткой и комментарием. Метки могут быть использованы для идентификации ступени внутри программного объекта (головной программы, подпрограммы и т. д.), но не являются обязательными. Метки имеют синтаксис %Li (где i от 0 до 999) и располагаются в левом верхнем углу перед шиной питания. Каждая метка может присваиваться только одной ступени в пределах данного программного объекта. Система сканирует ступени в том порядке, как они были введены, независимо от порядка нумерации меток. Ступень изображается в форме, похожей на релейные диаграммы. Простейшие проверочные элементы и элементы действия занимают одну строку и одну колонку ступени. Все линии контактов начинаются от левой шины питания и должны заканчиваться на правой шине питания (правая шина питания может не показываться). Проверочные операции всегда располагаются в колонках с 1 по 10. Операции действия всегда располагаются в колонке 11. Предполагается, что между шинами питания протекает ток, который имеет следующее направление: по горизонтальным связям слева направо; по вертикальным связям в обоих направлениях. Проверочная зона содержит контакты, которые могут быть помечены любым битовым объектом, функциональные блоки и блоки сравнения. Зона действий содержит: прямые, инверсные, фиксирующие и инверсно-фиксирующие обмотки, которые могут быть помечены любым битовым объектом; операционные блоки; другие «обмотки» (Саll, Jump, Наlt, Return). На одной линии возможно до 10-ти контактов. В одной колонке максимально может проверяться параллельно до 7-ми контактов. До 7-ми обмоток могут быть вклю­чены параллельно. Ступень может быть разделена на несколько независимых линий контактов, причем каждая линия управляет независимой обмоткой. Операционные блоки всегда расположены в зоне действий. Внутри блока записывается фраза на языке SТ. Операционный блок должен быть присоединен непосредственно к правой шине питания. Ступени исполняются последовательно друг за другом. Каждая ступень исполняется слева направо. В тех случаях, когда встречается вертикальная связь, выполняется подступень, соответствующая этой связи, и только после этого возобновляется исполнение оставшейся части ступени.

Пример 1 - схема включения пускателя с помощью контактов реле Каждому контакту в языке LD ставится в соответствие логическая переменная ТRUЕ (контакт замкнут) или FАLSЕ (контакт разомкнут). Контактом реле управляет булева величина. При поступлении логической 1 по адресу %I2.2 нормально разомкнутые контакты реле замыкаются. Результат, полученный в проверочной зоне, устанавливает прямую обмотку (%Q3.1) в логическую 1, т.е. пускатель срабатывает. При этом контакты пускателя %I2.1 замыкаются и через обмотку пускателя будет протекать ток удержания до тех пор, пока не разомкнутся контакты реле %I2.3.

Пример 2 – автоматика наполнения бака водой При достижении уровнем воды верхней отметки (Мах) сигнализатор верхнего уровня выдает на вход контроллера дискретный сигнал 1. По истечении интервала времени (5 с), необходимого для успокоения уровня жидкости и исключения ложных срабатываний, контроллер должен включить насос для откачки жидкости. При достижении уровнем нижней отметки (Мin) сигнализатор нижнего уровня должен выдать дискретный сигнал для остановки насоса. Если уровень достигнет верхней отметки (Мах =1), насос включится с задержкой 5 с. При достижении уровнем нижней отметки (Мin =1) насос выключится. Эта же задача может быть запрограммирована с помощью устанавливающей и сбрасывающей обмоток. В следующей программе с приходом сигнала Мах битовый объект (насос) устанавливается в 1. С приходом сигнала Мт битовый объект (насос) сбрасывается в 0 (насос выключается).

Список инструкций IL Язык IL наломинает ассемблер и используется для реализации функций, функциональных блоков и программ, а также шагов и переходов в языке SFС. Основным достоинством языка является простота его изучения. Наиболее часто язык IL используется в случаях, когда требуется получить оптимизированный код для реализации критических секций программы, а также для решения небольших задач с малым количеством разветвлений алгоритма. В основе языка лежит понятие аккумулятора и переходов по меткам. Начинается программа с загрузки в аккумулятор значения переменной. Дальнейшие шаги программы состоят в извлечении содержимого аккумулятора и выполнении над ним ограниченного числа допустимых действий (их в языке всего 24). Программа на языке IL представляет собой последовательность инструкций (команд). Программы списка инструкций выполняются последовательно инструкция за инструкцией. Первой инструкцией обязательно должен быть либо оператор LD («загрузить значение операнда в буфер»), либо безусловная инструкция перехода (например, JМР). Все инструкции (за исключением LD и безусловных инструкций перехода) используют булевский результат предыдущей инструкции. Скобки изменяют порядок выполнения инструкций. Открывающая скобка ставится в инструкции после операции, а закрывающая скобка ставится в отдельной строке. Инструкции, заключенные в скобки, выполняются в первую очередь. Пример программы на языке IL с комментариями приведен в листинге 4.

Примеры Для большей наглядности ниже приводятся примеры на языке LD и соответствующие им программы на языке IL, состоящие из кодов инструкций и операндов.

Структурированный текст ST Язык SТ является текстовым языком высокого уровня. Сильно напоминает Паскаль. Он содержит множество конструкций для присвоения значений переменным, для вызова функций и функциональных блоков, для написания выражений условных переходов, выбора операторов, для построения итерационных процессов. Этот язык предназначен в основном для выполнения сложных математических вычислений, описания сложных функций, функциональных блоков и программ. Программы на языке SТ составляются из выражений. Каждое выражение языка состоит из метки, комментариев и инструкций. Каждый из этих элементов может отсутствовать. К числу инструкций языка SТ относятся битовые инструкции, арифметические и логические инструкции для слов и двойных слов, арифметические инструкции для чисел с плавающей точкой и др. Пример выражения на языке SТ: ! SЕТ %МW6; (установить в 1 внутреннюю переменную слово; 6 адрес ячейки памяти).

Примеры Для большей наглядности ниже приводятся примеры на языке LD и соответствующие им программы на языке SТ.

Диаграммы функциональных блоков FBD FBD является графическим языком и наиболее удобен для программирования процессов прохождения сигналов через функциональные блоки. Язык FBD удобен для схемотехников, которые легко могут составить электрическую схему системы управления на «жесткой логике», но не имеют опыта программирования. Функциональные блоки представляют собой фрагменты программ, написанных на IL, SFС или других языках, которые могут быть многократно использованы в разных частях программы и которым соответствует графическое изображение, принятое при разработке функциональных схем электронных устройств (рис. 9.10). Язык FBD может быть использован для программирования функций, функциональных блоков и программ, а также для описания шагов и переходов в языке SFС. Функциональные блоки инкапсулируют данные и методы, чем напоминают объектно-ориентированные языки программирования, но не поддерживают наследование и полиморфизм. Типичным применением языка FBD является описание «жесткой логики» и замкнутых контуров систем управления. Язык функциональных блоков является удобным также для создания и пополнения библиотеки типовых функциональных блоков, которую можно многократно использовать при программировании задач промышленной автоматизации. К типовым блокам относятся блок таймера, ПИД-регулятора, триггера, генератора импульсов, фильтра и т.п.

Последовательные функциональные схемы SFC SFС называют языком программирования, хотя по сути это не язык, а вспомогательное средство для структурирования программ. Он предназначен специально для программирования последовательности выполнения действий системой управления, когда эти действия должны быть выполнены в заданные моменты времени или при наступлении некоторых событий. В его основе лежит представление системы управления с помощью понятий состояний и переходов между ними. Язык SFС предназначен для описания системы управления на самом верхнем уровне абстракции, например, в терминах «Старт», «Выполнение этапа 1», «Выполнение этапа 2». Язык SFС может быть использован также для программирования отдельных функциональных блоков, если алгоритм их работы естественным образом описывается с помощью понятий состояний и переходов. Например, алгоритм автоматического соединения модема с коммутируемой линией описывается состояниями «Включение», «Обнаружение тона», «Набор номера», «Идентификация сигнала» и переходами «Если длинный то ждать 20 сек», «Если короткий перейти в состояние «Набор Номера»» и т.д. Программа состоит из шагов и условий переходов. Шаги показываются на схеме прямоугольниками, условия переходов жирной перечеркивающей линией. Программа выполняется сверху вниз. Начальный шаг на схеме показывается в виде двойного прямоугольника. Условия переходов записываются рядом с их обозначениями. Каждый шаг программы может представлять собой реализацию сложного алгоритма, написанного на одном из МЭК-языков. SFС-диаграмма выполняется, как правило, сверху вниз. Начальный шаг (Init) должен присутствовать обязательно, но может быть пустым. Слева от прямоугольника, обозначающего действие, может указываться классификатор действий: N (Nоn-Stored) несохраняемое действие (выполняется при активности шага); S (Stored) сохраняемое действие; R (Reset) сброс; L (time Limited) ограничение во времени и др. Допускается ветвление (одновременное выполнение действий). Каждая параллельная ветвь должна начинаться и заканчиваться шагом.

Примеры

Программное обеспечение для программирования ПЛК Программирование ПЛК на языках МЭК осуществляется с помощью специализированного программного обеспечения, которое разрабатывается производителями ПЛК или фирмами, специализирующимися на создании ПО для систем автоматизации. Наиболее известными в мире являются системы СоDеSуs фирмы 3S и ISaGВАF фирмы ICS Тriрlех. СоDеSуs (Соntrоllеr Dеvеlорmеnt System) представляет собой комплекс программ для проектирования прикладного программного обеспечения, отладки в режиме эмуляции и загрузки программы в ПЛК. Основными частями системы являются среда разработки программы и среда ее исполнения (СоDеSуs SР), которая находится в ПЛК. В СоDеSуs входят графические и текстовые редакторы для всех пяти языков МЭК Этот комплекс полностью реализует требования стандарта и дополнительно вводит ряд оригинальных расширений, самым удобным из которых является объектно- ориентированные программирование. Программа, написанная на языках МЭК, компилируется системой СоDеSуs в машинный код, оптимизированный для заданной аппаратной платформы. Машинный код, сгенерированный компилятором СоDеSуs, загружается в ПЛК, после чего разработчик имеет возможность использовать широкий набор функций для быстрой и эффективной отладки приложения. Текущие значения переменных видны непосредственно в редакторах программ. Программу можно выполнять по шагам или по контроллерным циклам. Можно задавать точки останова программы, просматривать стек вызовов, подготавливать связные наборы значений переменных и загружать их одной командой. При отсутствии реального контроллера отладку программы можно выполнять с помощью встроенного программного эмулятора. Система имеет также встроенный многоканальный программный трассировщик (графический самописец) значений переменных. Он позволяет наглядно представить динамически изменяющиеся данные проекта. Данные аккумулируются в памяти ПЛК и могут синхронизироваться с определенными событиями. Трассировщик полезен не только при отладке, но и при анализе нештатных ситуаций в процессе эксплуатации оборудования.

Система исполнения CoDeSys Для того чтобы ПЛК можно было программировать с помощью СоDеSуs, в контроллере должна быть установлена система исполнения. Установку системы выполняет изготовитель контроллера. Изготовитель обеспечивает также поддержку всех модулей ПЛК, поэтому конечный пользователь может сосредоточиться на разработке только прикладной программы. Среда исполнения СоDеSуs может функционировать в ПЛК под управлением различных операционных систем или вообще без них, в том числе на обычном персональном компьютере. Собственное ядро реального времени может устанавливать контроллерный цикл с точностью до нескольких микросекунд. Прикладная программа остается работоспособной даже при зависании ОС. Помимо средств программирования, СоDеSуs имеет встроенную систему визуализации, которая применяется для операторского управления, а также моделирования на этапе разработки. Визуализацию можно запустить на компьютере, графической панели ПЛК или встроенном в контроллер web-сервере. Пользователь может самостоятельно расширять возможность СоDеSуs путем создания библиотек программных модулей. Например, он может реализовать поддержку нестандартных интерфейсов.

Система ISaGRAF Система ISaGВАF также состоит из среды разработки и среды исполнения. Среда исполнения может функционировать практически на любой операционной системе и любой аппаратной платформе, включая персональный компьютер. Среда разработки поддерживает все пять языков МЭК , имеет средства для редактирования, компиляции, документирования, управления библиотеками, архивирования, моделирования системы при отсутствии реального ПЛК и отладки с подключенным ПЛК. Среда исполнения создается и загружается в контроллер производителем ПЛК и является независимой от исполняемой в ней программы пользователя. Среда разработки имеет знакомый по Windows-приложениям интерфейс с подсказками, панелями инструментов, окнами, с функциями вставки и замены и т.п. Код, полученный на выходе среды разработки, может исполняться на любой аппаратно-программной платформе без изменений, если на ней предварительно установлена среда исполнения. Среда разработки может также транслировать пользовательскую программу, написанную на МЭК- языках, в текст на языке С.