Страница
18

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

Расчет осуществляют в такой последовательности. Сначала в конце каждой графы проставляют продолжительность работы бри­гад Σt i(, для чего суммируют продолжительности их работ на всех захватках. Так, для 1-й бригады эта продолжительность равна 8 ед. времени, для 2-й – 12 ед. и т. д.

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

Так как время окончания работы на I захватке считается нача­лом работы этой бригады на II, то это время без изменений пере­носится в левый верхний угол второй клетки этой же графы (см. рис. 5.9). Суммируя это время с продолжительностью работы на II захватке, определяют время окончания работы. Это время запи­сывают в нижний правый угол второй клетки. Таким образом рас­считывают начала и окончания работ на всех захватках 1-й брига­ды. Дальнейший расчет по графам ведут в зависимости от продол­жительности работы бригад. Если продолжительность работы по­следующей бригады больше продолжительности работы предыду­щей, то расчет ведут сверху вниз, а если меньше, то снизу вверх.

Рис. 5.9. Матрица с результатами расчета разноритмичного потока

Так как общая продолжительность работ 2-й бригады в рас­сматриваемом примере больше продолжительности работ 1-й бри­гады (12>8), то расчет начал и окончаний работ 2-й бригады на захватках начинают сверху, т. е. с момента, когда освободится I захватка. Для этого из нижнего угла первой клетки первой гра­фы время, характеризующее окончания работ на I захватке, пере­носят в левый верхний угол первой клетки второй графы. Далее расчет аналогичен предыдущему.

Так как продолжительность работы 3-й бригады меньше про­должительности работы 2-й бригады (4<12), то расчет начал и окончаний работ 3-й бригады следует вести снизу вверх. Для этого вначале в левый угол последней клетки третьей графы переносят время окончания работ 2-й бригады на последней захватке. Одно­временно это время переносят в правый нижний угол вышележащей клетки, где это время соответствует окончанию работы 3-й бригады на предыдущей захватке. Начало работы бригады на этой захватке определяют как разность между этим временем и продол­жительностью работы бригады на захватке. Аналогичным образом заполняют все клетки матрицы. Цифра в нижнем углу последней клетки матрицы показывает общую продолжительность выполне­ния работ. В нашем примере она равна 20 ед. времени.

После расчетов параметров потока с использованием матрицы целесообразно для наглядности построить циклограмму потока (рис. 5.10).

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

Рис. 5.10. Циклограмма разноритмично­го потока, рассчитанного

с использова­нием матрицы

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

В качестве примера рассчитаем параметры неритмичного потока, информация

о котором представлена в матрице (рис. 5.11). На первом этапе расчета определяют места критических сближений каждой пары смежных бригад (частных потоков). Для этого нахо­дят наибольшую продолжитель­ность выполнения работ на за­хватках этими двумя бригада­ми путем суммирования продолжительностей их работ на захватках при условии, что критическое сближение нахо­дится вначале на I, далее на II и т. д. захватке. Результа­ты суммирования записывают в последнюю строку матрицы в виде столбца. Например, для 1-й и 2-й бригад эти продолжи­тельности равны следующим значениям: при условии, что крити­ческое сближение находится на I захватке-3+1+2+2+2=10;

на II--3+1+2+2+2=10; на 111-3+1+1+2+2=9 и, наконец, на IV --3+1+1+1+2=8. Наибольшее значение из полученных сумм равно 10. Это значит, что критическое сближение двух рас­сматриваемых бригад находится на I и II захватках. Аналогично находят места критических сближений всех других бригад (част­ных потоков).

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

Циклограмма неритмичного потока, рассчитанного на матрице (рис. 5.11), приведена на рис. 5.12.

Оценку качества запроектированных потоков производят с ис­пользованием различных критериев, к которым относятся: продол- жительность потока; степень совмещения работ; уровень ритмич­ности потребления ресурсов; уровень равномерности строительного

Критерий продолжительности потока является важнейшим, так как продолжительность оказывает влияние на эффективность строительства.

Рис. 5.11. Матрица с результатами расчета не­ритмичного потока

Оптимизация неритмичных потоков по времени

Продолжительность потока зависит от общей трудоемкости ра­бот, численного состава бригад, а для неритмичного потока также от очередности включения в работу захваток (участков), на кото­рых функционирует поток. Расчеты показывают, что разница меж­ду продолжительностями выполнения работ в неритмичных пото­ках при наименее и наиболее рациональных очередностях включе­ния в работу захваток (участков) достигает 15-20%.

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

работают бригады, число вариантов достигает 479001600. Поэто­му при организации неритмичных потоков возникла задача в раз-"ютке алгоритма направленного перебора очередностей вклю­чения в работу захваток (участков).

Первый обоснованныйалгоритм направленного перебора пред­ложен в 1954 г. Сущность его заключается в минимизации перио­да развертывания потока, состоящего из двух частных за счет пе­рехода от случайной очередности освоения фронтов работ к упоря­доченной. Упорядоченная очередность достигается тем, что фронты работ для 1-го частного потока располагают в матрице по возрас­танию продолжительности работ, а для 2-го - по убыванию. Для этого рассматривают все строки матрицы, состоящей из двух столбцов (частных потоков), и выявляют работу с меньшей про­должительностью (если их несколько, то дальнейшие действия на­чинают с любой из них). Если эта работа расположена в первом (левом) столбце матрицы, т. е. принадлежит 1-му частному пото­ку, то вся строка с данным и соседним правым элементом перено­сится на первое место формируемой матрицы. Если же работа с минимальной продолжительностью расположена во втором (пра­вом) столбце, т. е. принадлежит 2-му частному потоку, что вся стро­ка с данным и соседним левым элементом переносится на послед­нее место формируемой матрицы. Операция повторяется с оставши­мися строками исходной матрицы до полного ее перестроения.

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

Оптимизация времени как упражнение Дистанции

Как упражнение Дистанции, оптимизация времени состоит из следующих заданий:

1) Налажен анализ «Дело – сервис – пустота»,

2) Вижу свои Развлечения, решения приняты;

3) Пустоту перевожу в сервис, сервис – в дела;

4) Люблю устраивать параллельные дела.

Как пример сдачи упражнения, смотри:

Прошу зачесть мне упражнение «Оптимизация времени». 1) Файл с фиксированием времени существует и в нем учтено не менее 3 дней за неделю (в составном варианте: утро одного дня, день другого, вечер третьего и так далее) 2) Брала обязательства: "Четко могу фиксировать себя в "пустоте", без самообмана. Факт: "Зафиксировать себя в пустоте не удается по причине почти полного отсутствия пустоты". 3) Брала обязательство: "Превращаю "пустоту" в "сервис" не менее 70% случаев". Факт: Превращать в сервис нечего, опять же по причине отсутствия пустоты. 4) Ставлю себе следующую задачу – планирование времени и перевод сервиса в дела.

Файл «оптимизация времени» помогает следить за тем, чтобы отдых занимал достойную часть времени. При этом оказалось, что отдых для меня может быть и сервисом и делом. Например: просто отойти от компьютера, поболтать с подружками – сервис; 15 минут прогулки в магазин – дело (покупаю продукты на обед и домой). Это - открытие, которое расширяет возможности.

Прилагаю иллюстрации: статистика по 3 дням по группам Дело/Сервис/Пустота и полная статистика по 1 дню. Статистика, конечно, приблизительная, поскольку часть дел можно отнести и к рабочим задачам, и к учебным (например: конспект игры «Воздушный шар – это и творческая работа для УПП и подведение итогов тренинга на работе). При этом общая ситуация все равно становится понятнее.

Если вы хотите вести такой же документ, : Наталья Дворкина дарит вам уже готовую форму со встроенными формулами расчета.

Оптимизация времени умное, но женское


Цели: 1) Проанализировать основные направления растрачивания временного ресурса, ужаснуться и начать жить разумно и осознанно, как учит великий и горячо любимый Николай Иванович. 2) Свести к минимуму занятия откровенной фигней.

ОЗР: 1) 1-ая неделя: пассивное отслеживание куда, зачем, с каким результатом, с какими ощущениями трачу драгоценные мгновения моей не менее драгоценной жизни. На этой базе разработать бюджет времени на 2-ую и 3-ю недели. 2) 2-3-недели: вписаться в разработанный бюджет времени, свести к нулю пустое времяубивание. Выявить “узкие места” и разработать способы их корректировки.

Режим работы: активный, время нахождения на дистанции – время бодрствования.

Ведение дневника: ежедневно, записи сразу по факту (интервал – каждые 15 минут).

1. Основное время занимает, как ни крутись, сон (попытки его сокращения привели к снижению эффективности дневной деятельности). Второе место – “прорыв” (изучение буржуйского языка – надо для максимума жизни). Третье место - всякого рода текущие дела (магазины, приготовление, уборка квартиры, всякие там стирки-глажки и пр.). По мере привыкания к столь чуждому для меня занятию время стало заметно экономиться. А, кроме того, оказалось, что можно чистить картошку и бубнить про себя неправильные глаголы, от чего и ума палата, и желудок доволен J

2. Под пунктом “Я” подразумеваются всякого рода дамские занятия, как-то: рисование автопортрета на лице, посещение личного психотерапевта (парикмахера), верчение перед зеркалом всеми частями прекрасного тела и пр. Сокращать время на эти чрезвычайно важные занятия мне представилось делом абсолютно вредным и бессмысленным.

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

4. Анализируя временные затраты на спорт и дураковаляние пришлось спортом заниматься больше, а остальными полезными вещами – меньше. Ну, чем не подвиг?!

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

Радует только то, что на откровенную фигню времени уходит не так уж много. Хотя Николай Иванович и думает иначе...

Первоначально изобразим на циклограмме длительность первой операции 200 мин, т.к. первая операция является самой длительной. Также метками изобразим время изготовления каждой транспортной партии. (рис 3.6.) Всего транспортных партий в нашем примере n/p=10/2=5 партий

Далее изобразим на циклограмме обработку первой транспортной партии на 2, 3 и 4 операции. Начало обработки первой транспортной партии на второй операции совпадает с окончанием ее обработки на первой (рис 3.7.)

Рис. 3.7

Рис. 3.8

Рис. 3.9

Рис. 3.10

Рис. 3.11

Таким образом, циклограмма технологического цикла при параллельной обработке деталей будет иметь вид (рис.3.12)

Рис. 3.12. Циклограмма ТЦ при ппараллельной обработке деталей

Расчет ПЦ при параллельной обработке деталей:

Определение длительности производственного и технологического цикла при параллельно-последовательной форме движения.

Определение длительности циклов начнем с расчета технологического цикла.

Расчет ТЦ при параллельно-последовательной обработке деталей:

Рассчитаем - частичное перекрытие времени выполнения каждой пары смежных операций.

Длительность Тц(посл)=650мин.

Расчет длительности ТЦ при последовательно - параллельной обработке деталей:

Τц(nар-nосл) = 650 – (120 + 80 + 80) = 370мин.=6,17ч.

Построение циклограммы технологического цикла

Первоначально изобразим на циклограмме длительность первой операции 200 мин. (рис 3.13.)

Рис. 3.13.

Рис. 3.14.



Рис. 3.15.

Рис. 3.16.

Рис. 3.17.

Рис. 3.18.

Рис. 3.19.

Таким образом, циклограмма технологического цикла при параллельно-последовательной обработке деталей будет иметь вид (рис.3.20)

3.20. Циклограмма ТЦ при параллельно-последовательной обработке деталей

Расчет ПЦ при параллельно- последовательной обработке деталей:

Рассчитаем длительность производственного цикла, подставив данные в формулу (5):

Задание

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

Порядок выполнения работы

Для выполнения работы необходимо:

а) повторить правила техники безопасности при работе с вычислительной техникой;

б) изучить раздел «Организация производственного процесса» лекционного курса, а также теоретическую часть настоящего методического указания;

в) выполнить расчеты согласно описанной в пункте 3 методике в соответствии с вариантом задания;

г) сделать выводы по полученным результатам

д) в соответствии с требованиями, приведенными в разделе 6 оформить отчет по лабораторной работе;

е) защитить лабораторную работу.

Требования к отчету

Отчет по лабораторной работе должен содержать:

1) титульный лист;

2) название лабораторной работы, цель;

3) расчеты технологических и производственных циклов, циклограммы технологичнеских циклов с описаниями и комментариями

4) выводы по проделанной работе.


Варианты заданий

Варианты
Кол-во календарных дней
Кол-во рабочих дней
Продолжительность рабочей смены, ч 7,8 7,8 7,9 7,85 7,9 7,85 7,9 7,85
Коэффициент сменности
Среднее время межопера­ционное tmо 45мин 15мин 30мин 45мин 15мин 30мин
Длительность естественных процессов tе 30мин 12ч. 3ч. 30мин 6ч. 12ч
Размер партии деталей
Размер передаточной партии

Деталь А

Параметры технологического процесса изготовления детали А представлены в табл. А1, А2

Таблица А1

Технологический процесс изготовления детали А

N оп. Наименование операции Вариант
Нормы времени, мин
Фрезерная
токарная
Расточная
сверлильная
Шлифовальная

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

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

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

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

Существуют два подхода к оптимизации программ: «чистка» и перепрограммирование. Оба подхода имеют как достоинства, так и недостатки.

Первый подход заключается в исправлении очевидных неб­режностей в исходной программе. Его достоинство - данный метод требует мало времени. Однако повышение эффективности при этом обычно незначительно.

Второй подход состоит в переделке исходной программы. Можно переделать часть программы, которая, например, рас­ходует наибольшую часть времени. Этот подход обеспечивает обычно наилучший результат, но и самый дорогой. Он приемлем, если оптимизируемая программа подвергалась значительным изменениям.

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

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

Рассмотрим основные Машинно-независимые приемы опти­мизации программ.

1) Заголовки сообщений . Если большая часть сообщений со­держит пробелы (или другие повторяющиеся символы), то для экономии памяти ЭВМ следует использовать команды, выпол­няющие заполнение этой части сообщения пробелами (сим-волами).

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

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

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

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

Встречаются случаи, когда переменная, которой присвоено значение, в дальнейшем нигде не используется, или же между двумя определениями одной переменной нет ни одного ее ис­пользования. Такие определения переменных назовем неис­пользованными. Оптимизационная процедура в этом случае заключается в удалении из программы лишних присваиваний значений неиспользованным переменным.

Рост числа временных и неиспользованных переменных обыч­но происходит у начинающих и неаккуратных программистов. Их типичная ошибка - выбор первой пришедшей в голову структуры данных. Считается хорошим стилем программирования, если в программе нет лишних переменных.

4) Выбор типов данных . Переменные разных типов данных в
ЭВМ обрабатываются с разной затратой времени и памяти. В
данном случае требуется минимальное понимание особенностей
программы.

Например, если элемент массива А(1) - целочисленная, то в операторе FOR I :=l ТО 1000 DO A (I ):= 0.0; произойдут 1000 преобразований типов из вещественного в целый. Здесь надо написать: А(1):= 0;.

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

С1:= 5. + B 1*D **2;

С2:= В+ SIN (R );

С3:= 5.+ А(1)*А(2);

С:= (С1 + С2)*СЗ;

можно заменить одним

С: = (5 + B 1*D **2 + В + SIN (R ))*(5 + А(1)*А (2));

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

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

6) Отождествление переменных . Если в программе имеется
оператор вида А:=В, то во всех последующих операторах прог­раммы можно заменить переменную А переменной В или чис­ловым значением переменной В, а оператор А: = В удалить.

Если переменная А является индексируемой переменной, то оператор А: = В остается в программе, а переменная А в неко­торых операторах заменяется переменной В.

7) Удаление тождественных операторов . Суть этой процедуры
состоит в удалении из программы тождественных операторов, т.е.
операторов вида А: = А. Такие операторы могут появляться в
программе в результате выполнения оптимизационных и других
преобразований.

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

Появление таких операторов можно объяснить двумя при­чинами:

1) в. процессе отладки программы или ее модификации программист либо забывает о таких операторах, либо не хочет их искать, либо просто не в состоянии проследить за всеми пос­ледствиями, вызванными исправлениями некоторых участков программы;

2) большая логическая или информационная сложность программы не позволяет программисту «увидеть» такие опе-раторы или даже целые невыполняемые участки программы.

Смысл рассматриваемой процедуры состоит в удалении из программы невыполняемых операторов.

9) Использования ввода-вывода. Операции ввода-вывода зани­мают много времени и должны быть сокращены до минимума. Данные, которые можно вычислить внутри программы, вводить не надо!

Две последовательные команды ввода-вывода для одного и того же устройства можно объединить в одну команду. Это сокращает количество обращений к системным подпрограммам ввода-вывода, что, естественно, сокращает время выполнения программы.

Не забудьте после отладки программы изъять все лишние (обычно отладочные) операторы ввода-вывода.

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

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

Лучше все же использовать не процедуры, а отдельные мо- дули.

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

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

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

Сокращение числа процедур (функций) выполняется заменой операторов их вызова телами этих процедур (функций) и заменой

формальных параметров соответствующими им фактическими парамет-рами. Зато увеличивается текст программы на соот­ветствующее число команд.

Описанная процедура является примером того, как два кри- терия оптимизации - время счета программы и объем зани­маемой ею памяти - противоречат друг другу.

12) Альтернативы. Когда одну переменную нужно сравнить с несколькими значениями, некоторые программисты пишут так (очень плохой стиль программирования):

IFA= 1THEN... ;

IFA=2THEN... ;

IFA= 3THEN... ;

В этом случае, даже если А = 1, будут выполнены все условные операторы IF .

При использовании конструкции ELSE сравнение будет прекращено, как только будет найдено истинное условие:

IF A=1 THEN...

ELSE IF A=2 THEN...

ELSE IF A =3 THEN ...;

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

То же замечание касается конструкции выбора (CASE ).

13) Арифметические операции. Арифметические операции выполняются с разной скоростью.

Перечислим их в порядке возрастания времени их выпол­- нения:

1) сложение и вычитание;

2) умножение;

3) деление;

4) возведение в степень.

Иногда бывает целесообразно заменить одну операцию другой. Например, 3*1 может быть заменено I +I +I или Х**2 можно заменить на Х*Х. Тем более, что для возведения в степень обычно требуется библиотечная программа.

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

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

Вместо А/5 можно написать 0.2*А;

Вместо А1 = B /D /E + С можно написать А1 = B /(D *E ) + С;

SQRT (A ); выполняется быстрее и точнее, чем А**0.5;

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

Например, X : = 2*У + 2*Т; можно заменить на X : = 2*(У + Т);

Последнее преобразование исключило одну операцию ум­ножения.

15) Оптимизация выражений. Суть процедуры состоит в замене всех сложных семантически эквивалентных подвыражений на одно простое.

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

Оптимизационный эффект в этом случае заключается в сокращении времени выполнения программы и уменьшении объема занимаемой ею памяти.

16) Предварительное вычисление арифметических подвыра­жений. Вместо, например:

А: = (M *B *C )/(D -E );

К: = D -E -B *C *M ;

можно написать:

Т: = N *B *C ;

U : = D -E ;

А: = T /U ;

К: = U -T ;

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

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

18) Устранение лишних меток . По ряду причин в программах встречаются метки перед операторами, на которые нет передач управления.

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

19) Устранение лишних операторов перехода. После многих опти-мизационных переделок программы, в ней могут появиться операторы безусловного перехода (GO TO ), которые передают управление оператору с несуществующей меткой. Их надо удалить.

20) Неявные операции. Операция Т:= М(1) требует в 1,5-2 раза больше времени и памяти, чем Т: = А;, а если М - параметр или функция, то в 2,5-3 раза больше.Там, где часто используется М(1), можно использовать прос­тую переменную MI : = M (I ) и т. д.

Но если индекс I - константа, то индексация выполняться не будет: при трансляции вычисляется сдвиг элемента относи­тельно начала массива, и в процессе выполнения программы он обрабатывается как простая переменная.

21) Чистка циклов. Немного о памяти. Обычно программисты
не заботятся о памяти до тех пор, пока не превысят ее размеры.
Тогда становится очевидным, что память не безразмерна. Име-ются прогнозы, что скоро будем располагать достаточной памятью для решения любой задачи. Но размеры решаемых задач также растут по мере увеличения размера памяти ЭВМ.

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

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

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

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

FOR I: = 1 ТО 100 DO FOR J: = 1 ТО 10 DO X: = Y*Z + C;

Здесь Y *Z будет вычисляться тысяча раз, а в следующем примере - только один раз:

YZ: = Y*Z;

FOR I: = 1 ТО 100 DO FOR J: = 1 TO 10 DO X: = YZ + C;

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

Интересной разновидностью чистки циклов является изме­нение порядка циклов:

ЦиклFOR I: = 1 ТО N DO FOR J: = 1 ТО М DO...

при N < М выполняется быстрее, чем цикл

FOR I: = 1 ТО М DO FOR I: = 1 ТО N DO...

т.к. в первом случае выполняется M *N + N операций орга­низации циклирования, а во втором - M *N + М.

22) Использование циклов . Циклы требуют некоторого допол­нительного количества памяти на инициирование, проверку, изменение управляющей переменной и установку всех констант.

Иногда бывает полезным отказаться от использования циклов.

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

23) Объединение циклов . При трансляции любого цикла с языка высокого уровня в машинные коды в объектной программе появляются операции, реализующие заголовок цикла, т. е. увели-чение управляющей переменной цикла на значение его шага; сравнение управляющей переменной с граничным значением; передачу управления.

Процедура объединения циклов производит соединение нес­кольких циклов с одинаковыми заголовками в один. Например:

FOR I: = 1 ТО 500 DO X[I]: = 0;

FOR J: = 1 ТО 500 DO Y[J]: = 0;

можно объединить в один цикл, что сокращает как время выполнения программы, так и память:

FOR I: = 1 ТО 500 DO BEGIN X[I]: = 0; У: = 0 END;

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

FOR I = 1 ТО 200 DO

IF К = 2 THEN A(I) = B(I)*C(I) ELSE A (I) = В (I) + 2;

Тогда исходный цикл можно заменить двумя циклами, соот­ветствующими двум частям исходного цикла:

IF К = 2 THEN FOR 1=1 ТО 200 DO A(I) = B(I)*C(I);

ELSE FOR 1=1 TO 200 DO A (I) = В (I) + 2...

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

25) Удаление пустых циклов. Суть этой процедуры состоит в
удалении из программы пустых циклов.

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

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

В общем случае выполнение процедуры устранения пустых циклов экономит время выполнения программы и объем зани­маемой ею памяти.

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

FOR I = А ТО В DO IF I<= С THEN R(I) = P(I);

Процедура сжатия циклов осуществляет перенос таких огра­ничений в заголовок цикла:

DO I = А ТО С DO R(I) - P(I);

Здесь предполагается, что А <: С < В.

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

27) Управление по выбору . В операторе выбора выполняется первая группа команд, у которой условие выбора истинно.

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

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

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

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

На рис. 2.74 представлена циклограмма работы АСМ с использованием ПР модели МП20.40.01, оснащенного механическим захватным устройством (схватом). Перед построением циклограммы составляется таблица, в которой указывается характер перемещений, номер цикла и время его выполнения по программе, заданной роботу. Время работы станка с ЧПУ допускается указать общим отрезком, без разбиения на отдельные технологические переходы, т. к. оно известно и рассчитывается в технологической части проекта. Время удобнее всего задавать в секундах (с.). Расчет и построение временных отрезков следует производить с достаточной точностью, равной 0,1 с.

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

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

В табл. 2.13 приведено содержание технологических переходов, выполняемых элементами ГПМ и время, затрачиваемое на их выполнение.

Табл. 2.13. Содержание технологических переходов, выполняемых элементами АСМ

Номер цикла Содержание выполняемых команд Время цикла, с
t 1 Опускание руки робота вертикально вниз на 0,1 м 0,5
t 2
t 3 Поворот руки на 90º и одновременный поворот кисти на 90º против часовой стрелки 1,5
t 4 1,5
t 5 Движение контр-шпинделя станка влево и зажатие заготовки кулачками механизированного патрона 1,5
t 6 Срабатывание схвата ПР на «разжим»
t 7 1,5
t 8 Выдвижение руки в горизонтальном направлении вперед по оси ОХ на 0,79 м 1,5
t 9 Срабатывание схвата на «зажим»
t 10 Разжим кулачков механизированного патрона
t 11 Втягивание руки в горизонтальном направлении по оси ОХ назад на 0,79 м 1,5
t 12 Поворот руки на 135º и одновременный поворот кисти против часовой стрелке на 90º 2,25
t 13 Срабатывание схвата на «разжим»
t 14 Поворот руки ПР на 45º и одновременный подъем руки по вертикали на 0,1 м 0,75