Управляющая программа высокого уровня

:: УПРАВЛЕНИЕ С КОМПЬЮТЕРА :: ЧАСТЬ 2 ::

Часть 1 — Управляемый компьютером вентилятор на базе микроконтроллера ATmega8
Часть 2 — Создаем управляющую программу для микроконтроллера (firmware)
Часть 3 — Монтаж электронной платы с микроконтроллером (hardware)
Часть 4 — Создаем управляющую программу на компьютере (software)
Часть 5 — Сборка устройства

Материалы статьи подготовлены на кафедре «Автоматика, Информатика и Системы Управления» (АИиСУ) Московского Государственного Индустриального Университета (ГОУ МГИУ).
(С 2011 года МГИУ носит название — ФГБОУ ВПО «МГИУ»).
Авторы: Крюков А.И., Шубникова И.С., Тройков С.М.

Кафедра АИиСУ уже более 35 лет готовит профессионалов в области разработки и эксплуатации электронных, микропроцессорных, компьютерных, робототехнических, мехатронных и информационных систем управления для автомобильной и аэрокосмической техники, машиностроения и бизнеса. Научно-исследовательская работа сотрудников кафедры ведется в областях, связанных с разработкой систем поддержки принятия решений на основе технологий искусственного интеллекта, анализа и синтеза процессов управления сложными системами, контроля и интеллектуального выявления сбоев аппаратуры. Важным направлением научной деятельности кафедры является проведение исследований в области автоматических и электронных систем транспортных средств.
Существует большое количество всевозможных приложений для написания управляющих программ для МК фирмы Atmel — это среды разработки и отладки на языках низкого уровня (например, бесплатный пакет AVR Studio для разработки программ на языке AVR Assembler), среды разработки на языках высокого уровня (такие как среда WinAVR для разработки программ на С-подобном языке) и есть даже графическая среда разработки и отладки программного обеспечения под названием «Algorithm Builder».

Algorithm Builder стоит особняком среди всех других сред и именно на нем мы и остановимся. Изюминка этого приложения даже не в том, что оно бесплатно, а в том, что код в нем даже не пишется, а рисуется в виде блок-схем алгоритмов, что значительно сокращает время на разработку приложения. Данная среда обеспечивает полный цикл разработки, начиная от ввода алгоритма, включая отладку, и заканчивая внутрисхемным программированием кристалла. В результате вся логическая структура программы становится полностью наглядной.

Разработка программного обеспечения в среде Algorithm Builder сводится к формированию таких блоков задач, размещению их на плоскости и установлению между ними связей из условных и безусловных переходов.

Дабы не переписывать весь мануал по работе со средой Algorithm Builder советую прочитать его самостоятельно, тем более, что приложение отечественного производства и содержит подробнейшее описание на русском языке на основе примеров по работе с ним. Основываясь на личном опыте, можно с уверенностью сказать, что данного мануала (кстати, далеко не объемного — всего на 20-30 мин. изучения) вполне хватает, чтобы полностью понять и разобраться в данном программном продукте.

Скачать Algorithm Builder можно по адресу http://algrom.net/russian.html. А процесс разработки управляющей программы можно посмотреть по ссылке . Таким образом, представим далее готовую программу в описанной среде разработки с подробнейшими комментариями к ней.

Для начала необходимо выбрать тип кристалла (в нашем случае Atmega8) в меню Опции/Опции проекта и там же задать тактовую частоту 8000000 Гц (8 МГц). Далее выполняем сброс кристалла при запуске (Элементы/Прерывания/Reset). После чего инициализируем стек, выбрав Элементы/Настройщик…/Stack Pointer (SP), откроется окошко с которым нужно будет просто согласиться, нажав «ОК» (рис. 2).

Рис. 2. Настройщик стека

Следующим этапом следует инициализировать приемопередатчик USART (не стоит удивляться появлению буквы «S» в аббревиатуре – это более современный вариант UART, отличающийся от него возможностью передавать/принимать данные не только в асинхронном режиме, но и в синхронном) путем выбора меню Элементы/Настройщик…/USART. В открывшемся окошке (рис. 3) в разделе Receiver ставим галочки напротив Enable (включаем приемник данных) и Complete interrupt enable (разрешаем прерывания по окончании приема данных), далее ставим галочку напротив Double Speed, задаем размер символа Character Size: 8 – bit и выставляем скорость передачи данных Baud Rate = 9615 bps (когда нажмете на выбор скорости передачи данных в меню следует выбирать 9600 bps, 9615 bps получается в связи с пересчетом тактовой частоты на 8 МГц).

Рис. 3. Настройщик USART

Далее следует разрешить глобальные прерывания записав «1» во флаг глобальных прерываний I.

Основное тело программы будет состоять из последовательности проверок управляющих кодов (листинг №1). Идея в том, что ПК будет присылать по UART код операции, а МК принимать его и вырабатывать соответствующие управляющие воздействия на привод лопастей вентилятора и сервопривод. Всего таких кодов будет три (сами коды можно придумать абсолютно любые):

  • $31 — включить привод лопастей вентилятора;
  • $20 — выключить привод лопастей вентилятора;
  • $A1 — обращение к сервоприводу.
    Если с первыми двумя кодами все понятно, то с третьим не все так просто — $A1 — это только команда обращения к сервоприводу, далее необходимо получить еще код угла поворота. Экспериментальным путем было установлено, что он колеблется в приделах от $05AF до $154F. При чем отсылать с ПК и соответственно принимать со стороны МК будем начиная с младшего байта. Так же будем запрещать прерывания по приему данных по USART на время исполнения команды — иначе может получиться «каша» из данных.

    Листинг №1
    Основное тело программы

    На листинге №2 приведен код подпрограммы задержки (Delay). Временная задержка необходима для точной и полной отработки команды и формируется путем зацикливания программы на N циклов (методом проб и ошибок мы подсчитали, что в нашем случае наиболее удачное число циклов 84FF в 16-тиричной системе счисления).

    Листинг №2
    Подпрограмма задержки

    Окончание приема данных по UART вызывает прерывание USART_Receive_Complete (если оно в данный момент не запрещено в основном теле программы), которое в коде можно задать через меню Элементы/Прерывания/ USART_Receive_Complete. В теле обработчика следует сохранить все используемые в нем регистры в стек, а в конце обработчика обратно их восстановить из стека. Так же в этом обработчике можно получить байт статуса (регистр UCSRA) для проверки данных на ошибки и, естественно, сами данные из регистра UDR (листинг №3).

    Листинг №3
    Обработчик прерывания

    Угол поворота сервопривода зависит от ширины подаваемого на него импульса при сохранении периода постоянным (период 20 мс, а длительность управляющего импульса от 0,8 до 2,2 мс, хотя для разных сервоприводов эти значения могут немного отличаться) для этого нам и понадобится подпрограмма отработки угла поворота сервопривода (листинг №4). Время управляющего импульса и время паузы будем задавать аналогично подпрограмме задержки. Как мы уже писали выше, экспериментальным путем для частоты кристалла 8 МГц мы определили, что время импульса задается кодом в приделах от $05AF до $154F. Таким образом, зная время всего периода – $9E3C (определили так же экспериментально), можно рассчитать время паузы как разницу между длительностью периода и длительностью импульса. Остается только аналогично подпрограмме задержки отработать последовательно время импульса и время паузы, а затем повторить такой сигнал несколько раз (в нашем случае мы повторили сигнал $10 раз, т.е. 16 раз в десятичной системе счисления)

    Листинг №4
    Подпрограмма отработки угла поворота

    После написания кода (прорисовки алгоритма) управляющей программы необходимо ее откомпилировать и прошить в микроконтроллер. Компиляцию программы можно произвести нажатием Ctrl+F9 либо через меню Программа/Компилировать. В случае успешной компиляции появится информационное окно в котором будет указан объем занятой памяти МК.

    Далее необходимо прошить результат компиляции (файл с расширением *.hex без приписки «EE_» вначале, лежащий в той же папке, что и исходник программы) в контроллер. Это можно сделать с помощью бесплатной утилиты AvrProg, входящей в так же бесплатный пакет AVR Studio. Скачать ее можно с сайта mymcu.ru либо с atmel.com (англоязычный сайт).

    Помимо утилиты для прошивки МК потребуется еще и программатор. Его можно либо купить (простые версии стоят относительно недорого) либо спаять самостоятельно.

    Рис. 4. Схема LPT-программатора
    Самый простой из мне известных – LPT-программатор, но он соответственно потребует наличие порта LPT на компьютере, что на данный момент становится редкостью. Идея программатора проста и состоит в соединении порта LPT с интерфейсом ISP и линией Reset контроллера напрямую (рис. 4).

    Другой вариант программатора для самостоятельной сборки – USB-программатор (схема показана на рис. 5), он конечно сложнее, но в последствии может оказаться значительно более удобным. Тем не менее есть одно «но» – для его сборки все равно потребуется LPT-программатор, правда однократно. Он будет необходим для прошивки управляющего контроллера самого программатора с целью прошивки FUSE-битов. Необходимо, чтобы были запрограммированны (установленны в «0») биты SPIEN, CKOPT и SUT0. Обычно МК, идущие с завода, т.е. новые, имеют уже запрограммированный бит SPIEN. Так же желательно (но не обязательно) запрограммировать (установить в «0») бит BODEN. Остальные биты должны быть незапрограммированны (установленны в «1»). Для этого может потребоваться приложение Codevision AVR V2.03.4. Подробное описание сборки USB-программатора можно прочитать тут: http://modder-team.clan.su/publ/5-1-0-36 .


    Рис. 5. Схема USB-программатора

    Подключив программатор с МК к компьютеру (не важно какой программатор) нужно запустить AvrProg (адрес приблизительно такой для AVR Studio: C:Program FilesAtmelAVR ToolsAvrProg ) и если с программатором и МК все в порядке откроется окошко в котором нужно указать путь к Вашему hex-файлу и нажать кнопку «Program».

    Инструменты управления проектами: ТОП-10 самых используемых программ

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

    Инструменты управления проектами — это программы, которые позволяют автоматизировать популярные методики.

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

    Не существует какого-либо единственного «идеального» программного обеспечения, которое удовлетворило бы и IT-разработчиков, и производственников. Но большинство сервисов предлагают бесплатную «пробную» версию. Лучше всего протестировать несколько вариантов и понять, что действительно пригодится, а за что не стоит платить.

    Microsoft Project: надежный, проверенный, доступный инструмент

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

    • диаграммы Ганта;
    • возможность постановки задач и подзадач;
    • готовые шаблоны.

    С помощью Microsoft Project руководитель может распределять ресурсы, оценивать временные затраты, просчитывать критический путь, отслеживать контрольные точки.

    Плюсы: не нужно тратить много времени на освоение системы, интерфейс интуитивно понятен всем, кто пользовался другими программами MS Office. Microsoft Project используют даже крупные корпорации с целью курирования масштабных проектов.

    Минусы: интерфейс можно назвать устаревшим. Сервисом неудобно пользоваться с мобильных устройств.

    Trello: бесплатная программа для поклонников системы канбан

    Программное обеспечение Trello было создано для управления разноплановыми задачами больших проектных команд. Интерфейс интуитивно понятен. Руководитель формирует тематические доски, списки задач, карточки для каждого подчиненного.

    Пользователи могут обмениваться файлами, оставлять комментарии.

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

    К минусам относят отсутствие сводных отчетов, функции учета рабочего времени.

    Битрикс24: для тех, кто хочет поддержать российских разработчиков

    Интуитивно понятная, бесплатная программа для управления проектами, которая пригодится и для выполнения других бизнес-задач. Битрикс24 целесообразно подключать малому бизнесу, владельцам интернет-магазинов, которые хотят перевести управление на одну платформу. Единственное ограничение: количество пользователей и объем хранилища. За расширение этих параметров придется доплатить.

    • формирование диаграмм Ганта;
    • отслеживание прогресса выполнения заданий в режиме онлайн;
    • оперативная русскоязычная поддержка.

    К минусам можно отнести причудливую графику. Например, разработчики сделали анимированное сглаживание переходов от страницы к странице. Это замедляет работу и отвлекает внимание.

    GanttPRO: если важно не только управление, но и планирование, презентация

    Программа позволяет строить графики, отслеживать ход выполнения работ, контролировать расходы финансов и времени. С помощью GanttPRO можно общаться со своей командой, получать уведомления в режиме реального времени. Готовые шаблоны помогут быстрее разобраться в интерфейсе.

    • множество инструментов управления разными видами ресурсов;
    • автоматическое построение и обновление графиков проекта;
    • возможность автоматизировать управленческие процессы.

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

    Todoist: веб-платформа для управления простыми проектами

    Фрилансерам, которые хотят организовать свой собственный рабочий день и реализовать микропроекты, необязательно тратиться на профессиональный софт. Бесплатная платформа Todoist проста, интуитивно понятна, отлично подходит для организации повседневных бытовых дел.

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

    • синхронизация с календарем Google;
    • работа на всех видах устройств, включая смартфоны, планшеты.

    Asana: инструмент для управления крупными проектами

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

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

    Минусы: слишком много «ненужных» функций для фрилансеров, высокая стоимость (около 25 долларов в месяц) за одного пользователя.

    Zoho Projects: облачная система для удаленного управления проектами

    Инструмент подходит для компаний с головным офисом и разветвленной сетью филиалов. Zoho Projects позволяет отслеживать прогресс выполнения бизнес-задач, комментировать ошибки, создавать интуитивно понятные инструкции, отчеты. Вся информация хранится в облаке, что позволяет получить доступ к нужной информации в любое время из любого места.

    Преимущества Zoho Projects:

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

    Недостатками инструмента называют ограниченное количество отчетов, отсутствие русскоязычной поддержки.

    Redbooth: удобная платформа для оптимизации работы небольшой команды

    Тем, кто ищет инструмент для курирования простых, но многочисленных задач, подойдет ресурс Redbooth. Программа имеет простой и удобный интерфейс. Не нужно разбираться в корневых папках, выстраивать сложные взаимосвязи.

    • построение диаграмм Ганта;
    • чаты;
    • 2 ГБ памяти в бесплатном тарифе.

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

    Paymo: лучший вариант для управления проектными ресурсами

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

    Преимущества Paymo: практически полный функционал, включая выгрузку отчетов и хранилище на 1 Гб, в бесплатной версии.

    К минусам относят стоимость: 10 долларов за пользователя. За эту цену можно получить гораздо больший набор функций у других сервисов.

    Podio: программного обеспечение для ведения проектов и клиентских баз

    Разработчик ориентировался на менеджеров интернет-магазинов, поскольку большинство инструментов связано именно с продажами. Через Podio можно обмениваться сообщениями, отслеживать статус выполнения каждого заказа.

    • интеграция с Evernote, Google Drive;
    • до 5 участников в бесплатной версии;
    • онлайн-чат.

    Минусом называют низкий уровень автоматизации. Пользователю приходится вручную загружать и выгружать информацию.

    Hitask: онлайн-менеджер для небольших команд

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

    • формирование календарей;
    • синхронизация списка задач;
    • полноценный функционал в бесплатной версии.

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

    Общие рекомендации по выбору лучшей программы

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

    Канбан-доски.

    Главная рабочая область программы. Поле должно хорошо «читаться», вмещать не только отдельные задачи, но и отображать полную картину продвижения проекта.

    Список задач.

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

    Отслеживание прогресса.

    Очень важно чтобы проект был реализован в срок, и не вышел за рамки установленного бюджета. Желательно, чтобы выбранная программа автоматически «напоминала» о том, сколько дней остается до завершения, какое количество финансов затрачено.

    Формирование отчетов.

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

    Можно сказать, что разные программы очень похожи друг на друга. Нужно найти именно ту, в которой будет комфортно работать.

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

    Структура программы в различных ПЛК

    И з языков высокого уровня программисты предпочитают использовать Pascal и С, которые хорошо структурированы благодаря встроенным в них конструкциям, а к «неструктурированным» языкам, таким как BASIC или FORTRAN, относятся несколько пренебрежительно. Это отчасти несправедливо; и на языке BASIC можно писать отлично структурированные программы, но ответственность за это возлагается на программиста, а программа на языках Pascal или С может легко выродиться в макаронную, если не принять меры, препятствующие этому.

    Аналогичные наблюдения можно сделать в отношении программ для ПЛК. Многие машины средних возможностей (и все малые машины) вообще не имеют встроенных структурных компонентов, предоставляя программисту самому решать, как разбить программу на модули и придерживаться строго установленного порядка. На рис. 3.5 приведена программа для небольшого ПЛК, входящего в состав системы управления трехступенчатым умягчителем воды; структура программы достаточно проста, и ошибку, скажем, в строке Fast Rinse (быстрая промывка) ступени 2 легко можно обнаружить в теле программы.

    Более крупные и более совершенные машины обладают встроенными структурными конструкциями. Они в значительной степени защищают программиста от совершения ошибок подобно тому, как это имеет место в языках Pascal или С. Эти ПЛК предоставляют программисту методы разбиения программы на небольшие, легко понимаемые модули (некоторые большие машины, такие как Allen Bradley 5/250, имеют конструкции Repeat/Until, Whiledo/Endwhile, For/Next, позволяющие многократно выполнять одну и ту же операцию над блоками данных).

    Наиболее структурированным языком, по-видимому, является ABB Master, который подобен компилируемым языкам высокого уровня в том, что все переменные и процедуры обязательно должны быть декларированы. Основная программа разбивается на более мелкие программы, обозначаемые PCI, РС2 и т. д. Рекомендуется, чтобы каждая из них относилась к определенной, отличной от других, сфере действия объекта, причем эти программы могут иметь различные скорости прогона.

    Эти программы содержат управляющие модули, которые могуь быть задействованы или заблокированы либо могут включаться на выполнение через определенные интервалы времени. Внутри управляющих модулей находятся функциональные модули и модули последовательности операций, причем последние содержат шаги, соответствующие диаграммам состояния, описанным в разд. 2.9.2. Функциональные модули или шаги последовательности операций реализуются при помощи реальных логических элементов. Таким образом, полная программа может выглядеть так, как на рис. 3.6 (а), а на рис. 3.6 (б) показано, какую древовидную структуру она имеет для конкретного примера (почти как в MSDOS или UNIX). Фактически структура является более гибкой по сравнению с тем, как здесь было описано: так, функциональные модули могут содержать управляющие модули, может быть образована иерархия модулей по принципу главный/подчиненный, но основная идея должна быть очевидной.

    Для обозначения модулей принят иерархический порядок вплоть до элементного уровня; так, на рис. 3.7 вентиль AND, обозначенный PC 1.2.3.2, представляет собой второй логический элемент функционального блока 3 в управляющем модуле 2 программы РС1 (и именно так должен быть продекларирован как часть построения базы данных). Это формальное правило обязывает программиста соблюдать определенную дисциплину.

    В ПЛК Siemens используется структура, состоящая из организационных блоков (ОВ), программных блоков (РВ), функциональных блоков (FB), файлов подпрограмм, которые мы рассмотрим чуть ниже, и блоков последовательностей (соответствующих диаграммам состояния). Основными структурными модулями являются программные блоки, которые эквивалентны элементам нижнего уровня в проектировании сверху вниз. При составлении программы все начинается с организационного блока ОВ1, из которого впоследствии могут быть вызваны программные блоки и функциональные блоки, как показано на рис. 3.8. Еще раз заметим, что подобное описание является несколько упрощенным.

    Рис. 3.8. Типичная внутренняя организация ПЛК Siemens

    Allen Bradley в своих PLC-5 использует аналогичную идею. Программист разбивает программу высокого уровня на более мелкие программные модули, к которым при необходимости можно обратиться из основной программы. В PLC-5 все программы связываются с помощью схемы последовательности функций (SFC), которая очень напоминает диаграмму перехода состояний, описанную в разд. 2.9.2. Каждое состояние и соответствующий переход — это небольшая программа типа многоступенчатой схемы; типичный пример приведен на рис. 3.9.

    ПЛК Allen Bradley и Siemens поддерживают концепцию подпрограмм (в Siemens они называются функциональными блоками). Это небольшие программы, которые используются для выполнения определенных задач и которые могут многократно вызываться из программы более высокого уровня (рис. 3.10). Например, некоторые ПЛК непосредственно обеспечивают вычисление тригонометрических функций (синус, косинус, тангенс). Синус угла достаточно просто вычислить, используя разложение в ряд

    где значение угла х задается в радианах. В большинстве прикладных задач для достижения приемлемой точности достаточно первых трех членов. Например, синус угла 6 (theta) в градусах можно найти с помощью последовательности операций, изображенной на рис. 3.11, используя всего несколько звеньев многоступенчатой схемы или логических элементов. Давайте создадим подпрограмму под именем Sine (а как же иначе?), которая имела бы на входе угол в градусах и возвращала значение синуса предназначенной для этого переменной, как на рис. 3.11. Входная и выходная переменные называются параметрами. Каждый раз, когда нам необходимо вычислить синус угла, мы теперь можем вызвать подпрограмму Sine.

    Мы можем пойти еще дальше. Косинус угла определяется выражением

    где угол в (theta) задается в градусах, поэтому мы можем написать еще одну подпрограмму для вычисления косинуса, она представлена на рис. 3.12 (а). Заметим, что она имеет всего два блока и вызывает подпрограмму Sine (которая выполняет большую часть работы). Наконец, зная, что

    мы можем создать подпрограмму Tangent, представленную на рис. 3.12 (б). Она вызывает как подпрограмму Sine, так и Cosine. Подпрограммы, вызываемые из подпрограммы более высокого уровня, называются «вложенными».

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

    Многие ПЛК позволяют разбивать программу на исполняемые блоки; в PLC-5 Allen Bradley это можно сделать с помощью инструкции MCR (сокращение от Master Control Relay), а в GEM-80 — с помощью команды Start/End Block. Они позволяют пропустить (игнорировать) ряд звеньев, если управляющая инструкция на входе блока не является истинной, как показано на рис. 3.13. Эти инструкции кроме того, что позволяют разбить программу на небольшие блоки, способствуют также сокращению времени ее выполнения за счет игнорирования звеньев, которые в данный момент не являются необходимыми. Однако они могут среди ночи привести в замешательство обслуживающий персонал, поскольку разбиение программы является далеко не очевидным.

    Управляющая программа высокого уровня

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

    9.1. Функции системных программ

    Несмотря на то, что наличие аппаратуры и прикладных программ является минимальнодостаточным условием для решения задач по переработке информации, ЭВМ, состоящие только из этих двух подсистем, на практике не используются. Обязательной подсистемой любой ЭВМ являются также системные программы. Благодаря им и пользователи ЭВМ, и их прикладные программы имеют дело не с реальной («голой») аппаратурой, а взаимодействуют с виртуальной (кажущейся) ЭВМ.

    На рис.34 показано наиболее укрупненное представление ЭВМ, в том числе наиболее важные системные интерфейсы. При этом интерфейс пользователя ЭВМ с аппаратурой представляет собой клавиши мыши и клавиатуры, поверхность экрана, а также различные кнопки на системном блоке и на периферийных устройствах. Интерфейс между пользователем и системными программами представляет собой язык управления операционной системой, называемым также командным языком или языком директив. Одна команда этого языка задаёт выполнение одной обрабатывающей программы (прикладной программы, утилиты или лингвистического процессора). Интерфейс пользователя и прикладной программы представляет собой язык диалога этой программы.

    Рис. 35. Укрупненное представление ЭВМ

    Интерфейс между аппаратурой и программами представляет собой язык машинных команд. Системный программный интерфейс – множество машинных команд, называемых системными вызовами, посредством которых прикладные программы обращаются за помощью к системным программам. При выполнении прикладной программы в среде DOS в качестве системных вызовов используются исключительно команды int.

    Совокупность интерфейсов, используемых пользователем или прикладной программой, и представляет собой соответствующую виртуальную машину. Например, прикладная программа «выполняется» на виртуальной ЭВМ, предоставляемой языком машинных команд, а также совокупностью системных вызовов. При этом каждый системный вызов может рассматриваться как команда виртуальной ЭВМ, которой в действительности соответствуют многие десятки или сотни машинных команд, образующие вызываемую системную подпрограмму.

    На рис.35 приведена классификация системных программ. Обрабатывающие системные программы отличаются от управляющих программ как по своим функциям, так и по способу их инициирования (запуска). Основные функции обрабатывающих программ:

    1) перенос информации. Перенос может выполняться между различными устройствами или в пределах одного устройства. При этом под устройствами понимаются: ОП, устройства ВП, устройства ввода-вывода;

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

    Рис. 35. Классификация системных программ

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

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

    Трансляторы делятся на компиляторы и ассемблеры. Исходная программа для транслятора–ассемблера записывается на языке-ассемблере. Один оператор данного языка транслируется в одну машинную команду. Исходная программа для компилятора записывается на языке программирования высокого уровня. Каждый оператор такого языка транслируется в несколько машинных команд. Примерами языков высокого уровня являются Паскаль и Си.

    Интерпретатор в отличие от транслятора не выдаёт машинную программу целиком. Выполнив перевод очередного оператора исходной программы в соответствующую совокупность машинных команд, интерпретатор обеспечивает их выполнение. Затем преобразуется тот исходный оператор, который должен выполняться следующим по логике алгоритма, и так далее.

    Примером интерпретатора является интерпретатор командного языка (ИК). Другие названия этого модуля: командный процессор, командная оболочка. ИК представляет собой лишь “видимую”, сравнительно небольшую часть операционной системы. На самом деле, чтобы интерпретировать, т.е. выполнить (преобразовав в совокупность машинных команд), очередную команду пользователя, ИК инициирует многие другие модули ОС. Одни из них ищут текст требуемой прикладной программы на диске, другие выделяют необходимые аппаратные ресурсы, третьи загружают программу в ОП и инициируют её. Попутно заметим, что, так как одна команда пользователя задаёт выполнение целой программы (прикладной, утилиты или системы программирования), то язык управления ОС может рассматриваться как язык программирования очень высокого уровня.

    Утилиты – обрабатывающие системные программы, которые выполняют:

    1) перенос данных с одного периферийного устройства на другое или перенос данных в пределах одного устройства. Примеры: программа копирования данных на магнитном диске; программа ввода данных с клавиатуры терминала на диск; программа распечатки информации на диске;

    2) программы изменения расположения данных. Это различные программы сортировки;

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

    Примером сложной утилиты является DOS Navigator. Эта утилита переносит с диска на экран информацию, содержащуюся в любом каталоге любого логического диска. По запросу пользователя она выводит на экран файловую структуру любого логического диска. Кроме того, она предоставляет пользователю удобный язык управления операционной системой DOS за счет того, что она переносит имя исполняемого файла программы из позиции экрана, отмеченной пользователем с помощью курсора-маркера, в то место памяти, откуда это имя может взять интерпретатор команд ОС. Курсор-маркер – светящийся прямоугольник, генерируемый не аппаратурой экрана (как настоящий курсор), а получаемый программно. Ниже мы еще вернемся к рассмотрению DOS Navigator.

    В отличие от лингвистических процессоров, утилиты используются не только программистами, но и пользователями–непрограммистами. Эта наиболее многочисленная категория пользователей ЭВМ работает на виртуальных машинах, предоставляемых готовыми прикладными программами, а также утилитами. При этом заметим, что запуск любой обрабатывающей системной программы (утилиты или лингвистического процессора) аналогичен запуску прикладной программы. Более того, с точки зрения других системных программ, а также аппаратуры, системные обрабатывающие программы ничем не отличаются от обычных прикладных программ.

    Основные функции управляющих программ:

    1) оказание помощи прикладным и системным обрабатывающим программам в использовании ими ресурсов ЭВМ. При этом различают информационные, программные и аппаратные ресурсы. Данная функция реализуется во всех системах;

    2) обеспечение однопользовательской мультипрограммности – одновременное выполнение нескольких прикладных и (или) системных обрабатывающих программ в интересах одного пользователя. Эта функция реализуется лишь в мультипрограммных системах. В однопользовательских однопрограммных системахэта функция отсутствует;

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

    Управляющие системные программы делятся на две группы: программы BIOS и программы операционной системы. BIOS – базовая система ввода-вывода. Сюда относятся системные программы, находящиеся в ПЗУ (постоянное запоминающее устройство). Эти программы выполняют многие функции обмена с периферийными устройствами, участвуя, таким образом, в выполнении первой из перечисленных выше функций управляющих программ.

    Операционная система (ОС) – множество управляющих программ, предназначенных для выполнения всех трех перечисленных выше функций. Примером однопользовательской однопрограммной ОС является любая DOS. Примерами однопользовательских мультипрограммных ОС являются различные WINDOWS. Операционная система UNIX является примером многопользовательской системы.

    При рассмотрении любого командного языка, а этим мы займемся чуть позже, невозможно обойтись без понятия файла. В отличие от многих других объектов, управляемых ОС, файлы «видимы» для пользователя и используются им при формировании своих команд для ОС.

    Составление управляющей программы программируемого контроллера

    Программируемые контроллеры предназначены для циклового программного управления станками и различным технологическим оборудованием, оснащенным датчиками и исполнительными устройствами, которые работают по двухпозиционному принципу: «включен-выключен». В статье процесс составления управляющей программы рассмотрен на примере контроллера модели МКП-1.

    В зависимости от исполнения этот контроллер позволяет управлять 16, 32 или 48 устройствами. Количество входных цепей для подключения датчиков соответствует числу выходов. Каждый вход и выход имеет свой адрес.

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

    Проектирование управляющего устройства сводится к двум этапам: 1 – составление схемы подключения датчиков и исполнительных устройств к контроллеру, 2 – составление управляющей программы по схеме алгоритма.

    Двухпозиционные кнопки и датчики подключаются к входным разъемам контроллера в соответствии с Таблицей 1. Каждому входу соответствует свой адрес.

    Для питания входных цепей необходим источник питания с выходным напряжением Un =20…30 В. Срабатыванию датчика соответствует замыка¬ние входной цепи (уровень двоичной 1), разомкнутое состояние цепи эквивалентно уровню двоичного 0.

    Пример подключения контакта датчика к входу контроллера приведен на рис.1

    Рис.1. Схема подключения контакта датчика

    Таблица 1. Цепи входных сигналов контроллера

    Подключение исполнительных устройств

    Исполнительные устройства (катушки реле, входные цепи бесконтактных аппаратов) подключаются к выходным разъемам контроллера в соответствии с таблицей 2.

    Таблица 2. Цепи выходных сигналов контроллера

    Пример подключения катушек реле к выходам контроллера приведен на рис.2.

    Рис.2. Схема подключения катушек реле

    Пример полной схемы подключения внешних устройств к контроллеру

    Система счисления контроллера

    Контроллер оперирует с цифрами, выраженными в шестнадцатеричной системе счисления. Основанием системы является десятичное число 16, алфавит состоит из десяти цифр (0…9) и шести латинских букв (A, B, C, D, E, F). Буквы соответствуют десятичным числам 10, 11, 12, 13, 14, 15.

    Подробнее о шестнадцатеричной системе счисления: Системы счисления чисел

    При программировании все числовые величины задаются шестнадцатеричными значениями. В таблице 3 приведен ряд чисел в шестнадцатеричной системе N16 и их десятичные эквиваленты Nl0.

    Таблица 3. Числа в шестнадцатеричной системе счисления

    Система команд контроллера

    Программируемый контроллер оснащен системой команд, предназначенной для решения задач программного управления. В таблице 4 приведены небольшая часть команд контроллера.

    Команда состоит из двух частей: кода выполняемой операции (КОП) и операнда, в котором указывается адрес объекта, над которым производится операция. При этом в качестве такого объекта выступают как датчики и исполнительные устройства, так и команды самой программы. При задании временных интервалов операндом является длительность этих интервалов.

    Таблица 4. Система команд контроллера

    Составление схемы алгоритма

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

    Рис. 3. Вершины схемы алгоритма

    Вершина «Начало» соответствует исходному состоянию устройства управления до воздействия на него органами управления, например, кнопкой «Пуск».

    Вершина «Конец» соответствует окончанию процесса управления, например, после нажатия кнопки «Стоп».

    Операционная вершина соответствует выполнению определенной элементарной операции над приборами, входящими в состав устройства управления, например включение или выключение реле. На схеме внутри значка вершины записывается выполняемая операция.

    Условная вершина определяет условие перехода от одной операционной вершины к другой. Условие задается датчиком, кнопкой управления или другим устройством. Состояние датчика или кнопки и соответственно выходы вершины обозначаются цифрами 1 или 0.

    Например: путевой выключатель «включен» – 1; «выключен» – 0.

    Составление схемы алгоритма сводится к соединению вершин в соответствии с требуемым порядком работы автоматизируемого устройства. Фрагмент схемы алгоритма показан на рис.4. На схеме символом Х1 обозначен переключатель, Δt – временной интервал.

    Составление управляющей программы

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

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

    Составление программы следует начинать с вершины схемы «Начало» и далее последовательно программировать операции вплоть до вершины «Конец».

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

    Включение или выключение аппаратов выполняется командами соответственно 05 или 06. В операнде записывается номер коммутируемого аппарата

    Задание временных интервалов осуществляется командой 07. В операнде записывается коэффициент, который при умножении на 0,1 сек. дает требуемое время задержки.

    Например, при задании t = 2,6 сек. в операнде записывается число 1А (26 в десятичной системе счисления). Максимальное значение выдержки времени, задаваемое одной командой 07, равно 25,5 сек (команда 07 FF). Если необходимо получить временную задержку большую, чем 25,5 секунд, то в управляющей программе следует последовательно включить несколько команд 07, суммарно обеспечивающих требуемый временной интервал.

    Для реализации в программе условных переходов (в схеме алгоритма условная вершина с операциями как по «1», так и по «0») следует сначала задать команду проверки этой вершины 04.

    Если датчик, соответствующий этой вершине, находится в состоянии «1», то сформируется бит условия БУ = 1. Если датчик в состоянии «0», то сформируется БУ = 0.

    Следующей задается команда ОА, которая, если в предыдущей команде установлен БУ = 1, переведет контроллер на выполнение команды, указанной в операнде этой команды.

    При БУ = 0 контроллер будет выполнять команду, идущую следом за командой ОА.

    При составлении программы рекомендуется сначала записать последовательность команд, которую будет выполнять контроллер при БУ = 0, не указывая операнда в команде ОА. После записи всех команд, выполняемых контроллером по условию «0», в программу заносится команда, выполняемая по условию «1». Адрес этой команды указывается в операнде команды ОА.

    ПРИМЕЧАНИЕ: Для бита условия исходным состоянием является БУ = 1, которое устанавливается после включения питания контроллера и после исполнения команд условных переходов.

    Пример записи программы для фрагмента схемы алгоритма по рис. 4 показан в таблице 5.