Главная страница Цифровые системы [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [ 48 ] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] Порядковая часть функциональной карты в соответствии с IEC 848 cocxq столбца пронумерованных блоков, изображающих одиночные шаги. BeptHKajl" линия, соединяющая каждый блок с последующим, изображает активные со ния (прямые связи). Каждый переход от шага к шагу связан с логическим усло называемым условием перехода (transition condition) или преемственно"* (receptivity). Булево выражение для условия перехода записано рядом с мален* горизонтальной чертой, пересекающей связь между блоками. Если условие удоь ворено, т. е. соответствующее булево выражение истинно, происходит перехода тема выполняет следующий шаг. На рис. 7.25 приведен пример функциональной карты управления дозатором Ре зервуар необходимо заполнить жидкостью, после чего его содержимое должно бьц! нагрето до определенной температуры. Через установленный промежуток времещ резервуар опорожняется и процесс начинается заново. Сигнал "пустой" указывает на то, что резервуар пуст и его можно наполнить снова. Этот сигнал связан с сигналом "старт" для того, чтобы можно было начать выполнение последовательности операций. На Шаге 2 донный клапан закрывается» запускается насос. Сигнал "полный" вырабатывается, когда достигнут предельный уровень жидкости. Программа переходит к Шагу 3; насос отключается и включается нагреватель. Нагреватель работает, пока не будет достигнута заданная температура (сигнал "температура"). В этот момент происходит переход к Шагу 4, нагреватель отключается и запускается таймер. При истечении времени ожидания ("timejui) происходит переход к Шагу 5, где подается команда на открытие выпускного клапана. Затем вся последовательность повторяется с самого начала. Синтаксис функциональных карт подразумевает, что в любой момент времени каждый шаг может быть либо активным, либо неактивным. "Активный" означает, что шаг исполняется. Начальный шаг выделяется на функциональной карте двойной рамкой "Действие" - это описание команд, которые необходимо выполнить на каждом шаге С шагом может быть связано логическое условие, шаг становится активным, и соош ствующие команды будут выполняться только тогда, когда логическое условие уД летворено. Условное выполнение обеспечивает безопасность управления. С одним шагом можно связать несколько команд. Это могут быть как простые ко манды управления, так и более сложные функции - таймер, счетчики, регуляторе-процедуры фильтрации или команды для внешнего обмена. Как уже было показ в функциональной карте присутствует функция перехода, т. е. своего рода гран между двумя шагами, которую можно перейти только после завершения шествующего ей активного шага. После перехода новый шаг становится актив а предыдущий - неактивным. Переход управляется логическим условием и пр ходит только при его выполнении. ря- Синтаксис функциональных карт позволяет гораздо больше, чем просто ющееся исполнение одних и тех же управляющих операторов. Все три функцио ных элемента - начальный, шаг(и) и переходы - могут быть связаны разлйч способами, что позволяет описывать большое количество сложных процессов-можны три типа комбинаций: - простые последовательности; - ветвление (альтернативная параллельная последовательность); - расщепление (синхронная параллельная последовательность). остой последовательности (simple sequence) существует только один переход юбого шага и только один шаг после любого перехода. В альтернативной парал-по-.ч последовательности (alternative parallel sequence) существуют два или более .те. льнои: после одного шага (рис. 7.26). В этом случае исполнение может пойти по " ветвям в зависимости от внешних условий. Обычно это условия типа "если- наче" которые полезны при описании, например, аварийных ситуаций. if...then else (condition) NOT (condition) прин • 7.26. Альтернативные параллельные ветви - выполняются только действия. адлежащие одной ветви ч.Р"гив"ОЙ параллельной последовательности очень важно удостоверить-РУгими выбора одной из ветвей программы непротиворечиво и однозначно; етвьа вами, альтернативные ветви нельзя запускать одновременно. Каждая Огичр Риативной параллельной последовательности должна всегда начинаться g ским условием перехода, "осле Рой параллельной последовательности (simultaneous parallel sequence) \\щ Рехода предусматриваются два или более шагов, которые могут быть актив-Чатеп °Овременно (рис. 7.27). Таким образом, синхронная параллельная последо-"сть представляет собой одновременное исполнение нескольких действий. I лава л комоинационное и последовательностное управ функциональные карты Рис. 7.27. Синхронные параллельные ветви Двойные горизонтальные линии указывают на параллельное исполнение. При выполнении условия перехода обе ветви становятся активными одновременно и вы полняются независимо и параллельно. Переход к шагу, расположенному после ни ней двойной горизонтальной линии, может произойти только после завершения одновременно выполнявшихся ветвей. Это соответствует нотации cobegin-c" языков программирования реального времени (раздел 10.1.3). Все три типа конструкций можно использовать вместе, но с известной осторо -л.-------„ U.-ntTMJTMAn рспи ветви алы Все три типа конструкций можно использовать вместе, но с известной vjv.. стью, чтобы избежать потенциальных конфликтов. Например, если ветви альтн тивной последовательности оканчиваются графическим символом конца парал" ного исполнения - две горизонтальные черты, - то дальнейшее развитие У невозможно, так как компьютер будет ждать завершения работы обеих ветвеи. из-за альтернативного условия была запущена только одна из них. Возможна т "сти q., лим» -----......,котопые должны закончиться одяо» Тп.„„ ратных особенностей среды. gqHO, компилятор обычно распознает такие несоответствия начала и конца пукции и выдает предупреждение пользователю до запуска программы. Но g при использовании лучших компиляторов многие ошибки остаются скрытыми дораспознаваемыми. Структурный и методичный подход к программирова-" всегда является важным требованием. 4 2. Реализация функциональных карт Программы, написанные с помощью функциональных карт, работают в режиме ального времени, и аналогичными свойствами должен обладать порождаемый ими 1,1ашинный код (соответствующие детали обсуждаются в главе 10). Обычно реализация систем реального времени требует больших усилий и значительных затрат времени и труда. Однако в этом конкретном случае большая часть бремени ложится на разработчика компилятора языка функциональных карт, а пользователь может писать сложные управляющие последовательности сравнительно простым способом. Все проблемы программирования в реальном времени, обсуждаемые в главе 10, имеют значение и при разработке программируемых логических контроллеров, однако конечного пользователя они касаются опосредованно и в достаточно малой степени. Компиляторы функциональных карт существуют для многих платформ промышленного управления. Широко применяется метод кросс-компиляции - программа разрабатывается и компилируется на одной платформе, обычно на ПК, а затем готовый исполняемый код загружается в ПЛК. Некоторые компиляторы включают средства эмуляции, которые показывают процесс исполнения программы на экране компьютера без подключения к ПЛК. Кроме того, существуют ПЛК со встроенными компиляторами. Очевидное преимущество абстрактного описания в виде функциональных карт - это независимость от конкретной аппаратной части и ориентация на выполняемую задачу, а не на компьютер. К сожалению, языки высокого уровня типа функциональ-чь1х карт пока не имеют той популярности, которую заслуживают. Странно, что так ного программистов все еще продолжают работать на ассемблере или на С даже тех случаях, когда задачу можно намного проще решить на языках описания функ-"иВДальныхкарт. Как в любом сложном описании системы, диаграмма или программа должны быть •1ение" РУГУРированы. Реализация функциональных карт должна позволять де-гичес небольшие части. Например, каждый станок сложной техноло- нескод°" может иметь свой собственный граф (номограмму), а затем графы Резвы -Танков должны объединяться. Такое иерархическое структурирование чаино важно при программировании больших и сложных систем (глава 12). ""знь"" карты применяются не только для сложных операций, но очень Ha"" простых задач. Неспециалисту проще понять функциональные карты. тивной последовательности оканчиваются ipatpnic.xv...v.>,,......яитие оУ .Наппи».» сосци»!..-. ";щ-1шня1ьфункциональные карim, ного исполнения - две горизонтальные черты, - то дальнейшее Раз , Фимер, принципиальные схемы. Достоинством общепринятого стандарта яв- „„г. л„„».г-*-паткяяветнения работы обеих BBi ,е ). "Рносимость исходного кода между различными платформами вне зависи- из-за альтернативного условия была запущена .и.... и... ... " :„„„т.ься од№ обратная ошибка: если параллельные ветви, которые должны закончиться менно соединены знаком завершения альтернативы - одна горизонтальная то множество разных шагов могут остаться активными, а дальнейшее развит цесса может принять неуправляемый характер. Пт •чия функциональных карт в машинный код зависит от специфики ПЛК и ?15/РУМентария (системного программного обеспечения), так как не все устрой-S" компиляторы. Тем не менее, даже если функциональные карты не преоб-ся в программный код, сами диаграммы исключительно полезны, поскольку они предоставляют пользователю инструмент для анализа и структурирования чи. Некоторые компании используют функциональные карты для описания в ностей и методики применения своего оборудования. Конечно, было бы н "" проще, если бы функциональные возможности карты применялись на всех эт технического задания до непосредственного программирования. 7.4.3. Применение функциональных карт в промышленном управлении В этом разделе рассмотрено применение функциональных карт для преград мирования задачи управления порядком операций на участке гибкой произво ственной линии. Пусть участок состоит из трех станков с числовым программны управлением, например сверлильного, токарного и фрезерного, робота для пода материалов, а также промежуточного склада - буфера (рис. 7.28). робот Рис. 7.28. Структура производственного участка На уровне участка не рассматриваются конкретные контуры управления станками или роботом - каждый из них имеет свою систему управления, - а цель заключа ется в координации их работы. Задача из управления порядком операций и ихсинх ронизации в режиме реального времени (глава 10). Ниже приведен пример описания алгоритма управления средствами функциональной карты. Исполняемый код и с налы управления зависят от аппаратной платформы и компилятора. Деталь должна быть обработана в заданном порядке каждым из трех станков, дача робота - перемещение деталей между станками. Синхронизация станков производится с помощью графа "Диспетчер", стрУ - ра которого показана на рис. 7.29. Диспетчер взаимодействует с каждым "gH с роботом и определяет, когда станок может начинать работу и когда робот до переместить деталь. Функции диспетчера похожи на функции планировщика стеме реального времени (глава 10), хотя в действительности это разные в Диспетчер производственного участка должен наиболее эффективно п°ей между станками общий ресурс - в данном случае робота, - при этом он ° у-гарантировать отсутствие блокировок, связанных с этим ресурсом. Если, н мер, робот взял обработанную деталь со станка и ему некуда ее положить, то ра участка остановится. Следовательно, диспетчер должен сравнивать запросЫ- няе от станков, с доступными ресурсами - занятостью робота и объемом диспетчер
Рис 7.29. Коммуникационная структура производственного участка Граф "Диспетчер" производственного участка содержит несколько параллельных 8ехБей - по одной на каждый станок, для робота и для буфера. Поскольку все устройства работают одновременно, диспетчер должен управлять ими параллельно, обмениваясь синхронизирующими сигналами типа "Начать" и "Готов". Когда станок получает от диспетчера команду начать работу, он должен выполнить задачу, описанную в функциональной карте. Когда станок заканчивает исполнение, он по-сы,яает диспетчеру сигнал "Готов". На рис. 7.29 показано, что ни один станок не взаимодействует с роботом напрямую. Вместо этого все коммуникационные сигналы передаются через диспетчера. Сигналы служат условиями перехода по каждой ветви функциональной карты. Такая структура графа позволяет добавить новый станок на участок, не меняя программу для других станков. Должен быть модифицирован только алгоритм управления роботом, в который добавляются операции для обслуживания нового станка. Хорошая реализация функциональных карт поддерживает иерархическое структурирование задачи управления. Работа производственного участка состоит из операций по управлению отдельными станками. Эти операции, в свою очередь, можно разделить на более мелкие части. Порядок управления каждым станком определяется отдельной функциональной артой. Управляющая последовательность для сверлильного станка показана на рис. 7.30. нок° "ачаоть сверление" представляет собой сигнал от диспетчера. Если ста-Щк Р- сигнал в течение времени tim \, то возникает аварийная си-сли происходит переход к альтернативной параллельной ветви. Аналогично, Рийн° достигло заготовки за определенное время, то возникает другая ава-щ Туация. Карта для сверлильного станка может показаться слишком длин-lep содержит необходимые проверки допустимости очередного шага и аль- або"" следствие аварийных ситуаций. После завершения станком Чна" - Детали переменная "Сверлильный станок готов" принимает значение "ис-apxg переменная является логическим условием перехода в функциональной ь "™етчера. Диспетчер теперь может послать роботу сигнал взять деталь со «льного станка. Ьтр ° выполняет операции, которые описываются в функциональной карте как Рнативные параллельные ветви, например: Зять деталь со станка; [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [ 48 ] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] 0.0131 |