Видеоинформационная система токарного станка с интеллектуальным управлением тема диссертации и автореферата по ВАК РФ 05.03.01, кандидат технических наук Носенков, Дмитрий Анатольевич

  • Носенков, Дмитрий Анатольевич
  • кандидат технических науккандидат технических наук
  • 2000, Ростов-на-Дону
  • Специальность ВАК РФ05.03.01
  • Количество страниц 201
Носенков, Дмитрий Анатольевич. Видеоинформационная система токарного станка с интеллектуальным управлением: дис. кандидат технических наук: 05.03.01 - Технологии и оборудование механической и физико-технической обработки. Ростов-на-Дону. 2000. 201 с.

Оглавление диссертации кандидат технических наук Носенков, Дмитрий Анатольевич

ВВЕДЕНИЕ

1. АНАЛИЗ СОСТОЯНИЯ ВОПРОСА.

1.1. РИ и проблемы обеспечения качества механической обработки.

1.2 Методы и системы контроля состояния режущего инструмента.Л.

1.3. Применение видеоинформационных систем для контроля \ состояния РИ.33\

1.4. Выводы по разделу. Цели и задачи работы.

2. ВИДЕО ИЗМЕРЕНИЯ РЕЖУЩЕГО ИНСТРУМЕНТА.

2.1.Точность видео-измерений и методы её повышения.

2.2. Математическая модель видео-измерения формы контура.

2.2.1. Аналитическое описания формы объекта.

2.2.2. Расчёт распределения яркости в плоскости видео-датчика.

2.2.3. Расчёт сигнала элемента растра.

2.3. Метод уменьшения погрешности определения координат контурных точек.

2.4. Сравнительный анализ погрешности определения контура.

2.5.Выводы по разделу.

3. АЛГОРИТМИЧЕСКОЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВИДЕОИЗМЕРИТЕЛЬНОЙ СИСТЕМЫ.

3.1. Общая характеристика и структура программного обеспечения

3.2. Создание эталона контролируемого РИ.

3.3. Обработка визуальной информации в цикле контроля состояния РИ.

3.4. Базовые алгоритмы обработки визуальной информации в ВИС.

3.4.1. Алгоритм сегментации изображения РИ.

3.4.2. Алгоритм построения функции отклонения формы РИ.

3.4.3. Алгоритм выделения параметров отклонения формы РИ и распознавания состояния инструмента.

3.5. Геометрическая калибровка видео-датчика.

3.6. Оптическая калибровка видео-датчика.

3.7. Выводы по разделу.

4. ЭКСПЕРИМЕНТАЛЬНОЕ ИССЛЕДОВАНИЕ ВИДЕОИЗМЕРЕНИЯ РИ.

4.1. Экспериментальный, стенд.

4.2. Определение зависимости расстояние - сигнал элемента растра.

4.3. Исследование погрешности определения базовой точки РИ.

4.4. Исследование погрешности определения контурных точек.

4.5. Экспериментальная проверка точностных характеристик ВИС в составе ИСУ.

4.6. Выводы по разделу.

Рекомендованный список диссертаций по специальности «Технологии и оборудование механической и физико-технической обработки», 05.03.01 шифр ВАК

Введение диссертации (часть автореферата) на тему «Видеоинформационная система токарного станка с интеллектуальным управлением»

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

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

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

Один из перспективных методов контроля состояния РИ основан на фиксации изображения рабочей части инструмента с помощью одного или нескольких видео-датчиков. Видео - информационные системы (ВИС), реализующие данный метод, обладают потенциально высокими характеристиками, бесконтактностью измерения и высокой информативностью, позволяющими использовать их в ИСУ. В настоящее время, в связи с достижениями в области микропроцессорной техники и технологии изготовления фото преобразователей с зарядовой связью ВИС получают всё более широкое распространение.

Наиболее полно состояние РИ в интеллектуальной технологической системе может быть оценено и учтено при реализации в ВИС контроля РИ следующих функций:

• Контроль поломки или повреждения инструмента;

• Контроль величины износа;

• Размерная настройка и контроль координат вершины РИ;

• Прогнозирование поломки РИ;

• Распознавание типа РИ;

• Управление технологической системой по состоянию РИ;

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

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

• Метод повышения точности определения формы лезвия режущего инструмента (РИ).

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

Работа выполнена на кафедре "Робототехника и Мехатроника" Донского государственного технического университета в соответствии с федеральной межвузовской научно-технической программой «Механика, машиноведение и 6 процедуры управления», по гранту «Экспертная система станка для обеспечения точности обработки» Российской программы «Машиностроение» и единому заказ-наряду Министерства образования РФ. Основные результаты работы внедрены на ФГУП «ПО Азовский оптико-механический завод».

Похожие диссертационные работы по специальности «Технологии и оборудование механической и физико-технической обработки», 05.03.01 шифр ВАК

Заключение диссертации по теме «Технологии и оборудование механической и физико-технической обработки», Носенков, Дмитрий Анатольевич

5. ОБЩИЕ ВЫВОДЫ ПО РАБОТЕ

Проведённые исследования и полученные результаты позволяют сделать следующие основные выводы

• Построен алгоритм обработки визуальной информации ВИС, позволяющий определять состояние РИ на основе анализа изображения проекции его режущей кромки.

• Разработана математическая модель измерения формы и положения лезвия РИ на основе сигнала изображения, формируемого элементом растра ФПЗС видео-датчика. При этом функция распределения яркости в окрестности фото-ячейки определяется на основе аналитического описания формы и положения контура объекта.

• Разработан новый метод повышения точности видео-измерения формы лезвия РИ, основанный на обмене амплитудного и пространственного разрешения видео-датчика и использовании линейного участка рассчитанной зависимости расстояния от сигнала R=f(U) , что позволяет сохранить поле зрения, достаточным для обеспечения функциональных возможностей ВИС.

• Определены классифицирующие признаки состояния РИ по его топологическим характеристикам - отклонению формы контура РИ от эталонных контуров.

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

• Все разработанные алгоритмы реализованы в виде законченного программного средства, включающего процедуры оптической и

Список литературы диссертационного исследования кандидат технических наук Носенков, Дмитрий Анатольевич, 2000 год

1. Палей С.М. Автоматический контроль работоспособности режущего инструмента / // Экспресс-информация. - Сер. ХМ-9. Технология химического и нефтяного машиностроения. -№5. М.: ЦИНТИхимнефтемашД985.

2. Палей С.М. Некоторые особенности эксплуатации токарных станков с ЧПУ на участке АСВ-20,- В сб.'.Автоматизированные участки из станков с ЧПУ, управляемые ЭВМ, М„ ЭНИМС, 1981. С. 27-31.

3. Kinnander А/ Machining reliability in NC Turning/ -"Annals of the CIRP", 1979, 28, №1, p.263-265.

4. Г. M. Гольдрайх, А. Г. Деревянченко, Т. Г. Джугугян, Л. В. Капительман./ Управление технологической системой прецизионных станков по состоянию режущих инструментов. Станки и инструмент- 1995. №5 с.10 -17.

5. Деревянченко А.Г. Высокие технологии и некоторые проблемы контроля состояний лезвий режущих инструментов. Резание и инструмент н.т. сб. Харьков -1993. Вып. 47.

6. Л. Г. Хайет, А. Г. Деревянченко, Э. И. Попов. Морфологический анализ состояний режущего инструмента в задачах его контроля и диагностирования. Одесский Гос. Политех. Университет. 1996.

7. Рыжкин А.А., Дмитриев B.C., Климов М.М., Щучев К.Г., Боков.А.И. Физические основы обработки материалов резанием: Издательский центр ДГТУ. 1996 г.

8. Палей С.М., Васильев С. В. Контроль состояния режущего инструмента на станках с ЧПУ. Обзор.-М: НИИмаш, 1983.

9. Tool wear and failure monitoring techniques for turning-a review/ International journal of machine tools and manufacturing. 1990. - 30, 4. - p. 579-598.

10. Ю.Бобров В.Ф. Основы теории резания металлов. М., Машиностроение, 1975.

11. Палей С.М. Состояние и тенденции способов прогнозирования периода стойкости лезвийного режущего инструмента. -М. ВНИИТЭМР. 1985.

12. Лоладзе Т.Н. Прочность и износостойкость режущего инструмента. М. Машиностроение, 1982.

13. Хайет Г.Л. Надёжность режущего инструмента и его прочность. В сб. 'Надёжность режущего инструмента'. Киев, Техника, 1972, с. 3-20.

14. Negashi Н., Sata Т. Study on tool failure of carbide tools in interrupted turning. -Annals of the CIRP, 1981, 30, №1, p. 43-46.

15. Общемашиностроительные нормативы резания. Токарные и карусельные работы (выбор инструмента, режимов резания, определение расхода инструмента).-М.: ВНИИТЭМП, 1985.

16. Worsley. R То set or preset? That is the question //Metalworking Production. -1993. -137, №2, 27-34.

17. Der Wirkungrgradzahlt // Maschinen und Werkzeug. 1995. - 96, №10. - c. Q6 -Q9.A.

18. В. Кибальченко. Контроль состояния режущего инструмента. М.: ВНИИТЭМР, 1986.

19. For good measure //Cutting Tool Engineering. 1995. - 47, №9. - p. 46 - 51.

20. Rohrle J. Kostengunstiges Messen in NC-Maschinen mit vorhandenen Mabstaben.-Maschinenmark, 1984, 90, № 69. s. 1561-1563.

21. Назаров Н.Г., Архангельская E.A. Современные методы и алгоритмы обработки измерений и контроля качества продукции: учеб. пособие. М.: Издательство стандартов, 1995.

22. J. G. Baldoni, S. Т. Buljian, V. К. Sarin, Continious tool wear monitoring in turning. -Sci. Hard. Mater. Proc. Int. Conf. Jackson, Wyo., 23 -28 aug.1981. New York; London 1983. - c. 991 - 1002.

23. Lierath F., Sharfenorth U. Geratesystem zur Erfassung des Werschleibes an spanenden Werkzeugen bei bedienarmer Fertigung. -Faingerate-technik, 1984, 33, №3.-s.l05-107.

24. Sicheres Drehen mit Schneidenbruch-Sensor. -VDI-Z., 1982,124, №22. -s. 862.

25. Устройство для обнаружения поломки инструмента. Симаддзучу Хироаки, То-мита Такабуми, Беллу Сэёдзи, Ота Йосихиро. Заявка 58-4908 (Япония).- Опубл. 27.07.1983. МКИ В 17/00.

26. Способ контроля состояния инструмента на токарном станке. Вакаи Хидэюки, Касимото Масатакэ, Сакамото Тиаки, Мидзутани Эйдзи. Заявка 57-21251 (Япония).- опубл. 3.02.1982. МКИ В 23 Q 17/00.

27. Iwata Kzuaki, Morivaki Tochimichi/ Cutting State Identification and In-Process Tool Wear Sensing by Acoustic Emission Analysis/ Bull. Of Japan Sociey of Precision Engineering., 1978, 12, №4. - p. 213-215.

28. Инадзаки Исиро. Контроль целостности инструмента на металлорежущих станках. Кикай то Когу. 1984, 28, №2 с.93-98.

29. ЗО.Заковоротный B.JL, Бузик Л.Б. Контроль износа инструмента при растачивании высокопрочных сталей. Станки и инструмент, 1983, №9, с.32-33.

30. Menz Peter, Richeter Hans. Verchleibmessung an Drehwerkzeugen durch recherbew-ertete Temperaturmessung. Wiss.Z. Tech. Hochsch. О Guericke Magdeburg, 1984, 28, №5.-s. 85-88.

31. Палей С. M. Использование электрических явлений при резании для контроля состояния режущего инструмента: Метод. Рекоменд.-М. : ЭНИМС, 1984.

32. Зориктуев В. Ц., Исаев Ш. Г. Устройство для измерения электрической проводимости контакта инструмент деталь в системах управления процессом резания. -Измерительнаятехника, 1984, №4. -с. 16-17.

33. Micheletti G. F., Koenig W., Victor H. R. In process tool wear sensors for cutting operation. 'Annals of CIRP\ 1976, 25, №4. P. 483-496.

34. Cook N. Subramian K. Micro-isotope tool wear sensor. Annals of the CIRP, 1978, №1, p.73-78.

35. Monitor d'outils. Tra. Metal. -1998, №31, c.67.

36. Pitter F., Thomas. Mykrosystem zur automatisierten werkzeuguberwachug in Drehmasciner uber die Erfassung von Vibration? Kraft und Temperature / Technichen Messung. -1999, -66, №5. -p. 191-202.

37. Haschizume Hitoshi, Shinno Hidenor, Ito Joshimi. Nihon kikaigakkai ronbunschu / Jap. Soc. Mechanical Engineering. -1998. 64, №619. -p 1072-1076.

38. Деревянченко А. Г. Алгоритмы автоматического контроля износа лезвий инструментов в гибких производственных системах. Металлорежущие станки, 1985, № 13.-с. 37-46.

39. Мер system zur Werkzeugenstellung und Bruchkontrolle //VDI-Z: Integrated production. 1996. -138. №9. C.33-35.

40. А. Г. Деревянченко, JI.B. Роткоп, В. А. Власенко, A.K. Краснопёрое. Система автоматического контроля износа и диагностики режущего инструмента.- Измерительная техника. 1990. -№8.

41. Spitze der Genauigkeit // Fertigung. -1997. 25., -№10. -с. 57.

42. Vertical pre-setters // Machine and production Engineering. -1998. -156, -№3959.

43. Leinz R., Herkrath T.Universelles PC-gestutrtez Werkzeugmebsystem: Multicheck PC500 /wt Production und Management. -1996. -86, -№11 -12. -c. 601-602.

44. Komplettvermessung von werkzeugen / Zoller Eberhard // VDI-Z: Integrated Production-1999. Spec3.-c.66.

45. Настольный прибор для настройки инструментов. Bench-top model // Tool. And Prod. 1996. -62, -№5 -c.225.

46. Optishes Werkzeugmebsystem areitet vollautomatisch // Mascinenmarkt -1998, -52, -№10 -№45. -c. 43.

47. Standvermogen voll nutzbarr // Mascinenmarkt -1998, -104, -№14, c.26.

48. Fichter. D, Schulz G/ Wekzeuge optish uberwachen // wt Production und Managment. -1996,-86,-№11-12, c.608.

49. Nobushige Sawai, Joonyeob Song, Hwayoung Pare. Automated Measurement of Tool Wear using an Image Processing System. Int. Japan Soc. Prec. Eng.,1996, 30, №2. -p.112-117.

50. Hajime Yamacina, Susumi Okumura, Hiromitsu Kumamoto. Automatic detection of wear and chipping of cutting tools by image processing techniques. Int. J. of production research. - 1990, -28, -№4, p. 647-660.

51. A.C. 1188906 СССР, МКИ H04 N 7/18. Телевизионная система/ С. А. Иванов, В.А. Михайлов. Опубл. 1984, Бюл. № 43.

52. Миленин Н. К. Матричные преобразователи свет сигнал и цветные ТВ камеры на их основе. 4.2 // Техника кино и телевидения. - 1989. - №12. - с.67 - 73.

53. Salamon P. М., Gloss W. S. A Microprocessor Controlled CCD Star Tracker/ - AIAA Paper 1976, № 116,p.l.

54. Лебедев H. В., Измерение координат точечного объекта видеокамерой на ПЗС. -ТСС ТТ, 1978, вып.6, с. 25-34.

55. Хромов JI. И., Лебедев Н. В., Цыцулин А. К., Куликов А. Н. Твёрдотельное телевидение М.: Радио и сЬязь, 1986.

56. Быков Р. Е., Манцветов А. А., Степанов Н.Н., Эйссенгардт Г.А. Преобразователи изображения на приборах с зарядовой связью. М., 1992.

57. Меркишин Г.В. Многооконные оптико электронные датчики линейных размеров. - М.: Радио и связь, 1986.59.3аказнов Н.П. Прикладная геометрическая оптика. М. .Машиностроение, 1984.

58. Бабенко В. С. Оптика телевизионных устройств. М. Радио и связь 1982.

59. Стенин В.Я. Применение микросхем с зарядовой связью. М.: Радио и связь, 1989.ъ

60. Дьяконов В.П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник. М.: Наука. Гл. ред. физ.-мат. лит., 1987.

61. Генкин В.Л. и др. Системы распознавания автоматизированных производств /В.Л. Генкин, И.Л. Ерош, Э.С. Москалев. Л.: Машиностроение. Ленингр. Отд-ние, 1988.

62. В.И. Мошкин, А.А. Петров, B.C. Титов, Ю.Г. Якушенков. Техническое зрение роботов. -М. : Машиностроение, 1990.

63. Фу.К., Гонсалес. Р., Ли. К. Робототехника. -М.: Мир, 1989.

64. ГореликА.Л., Скрипкин В.А. Методы распознавания: учебное пособие для вузов. 3-е изд., перераб. и доп. - М.: Высшая школа, 1989.

65. Пью. А. Техническое зрение роботов. М.: Машиностроение, 1987.

66. Носенков Д.А., Мартынов В.В. Применение подсветки параллельными лучами для видео-измерений координат режущего инструмента в сб. Информационное обеспечение и управление в мехатронных производственных системах. Ростов н /Д.: 1998.

67. П.И. Ящерицын, Е. И. Махаринский. Планирование эксперимента в машиностроении. -Минск.: "Вышейная школа", 1985.

68. А. Д. Макаров. Оптимизация процессов резания. М. "Машиностроение", 1976.

69. А. Д. Макаров. Износ и стойкость режущих инструментов. /'Машиностроение", 1966.

70. Лукьянов Е.А, Носенков Д.А, Коротков Е.А. Видеоизмерительная система размерного контроля инструмента на базе специализированной экспертной системы.158

71. Динамика технологических систем: Тез. докл. 5-ой межд. конф. Ростов-на-Дону, ДГТУ. 1997г. с. 106-108.

72. Тугенгольд А.К., Герасимов В.А., Лукьянов Е.А., Носенков Д.А. Прогностическое интеллектуальное управление технологическими движениями в мехатронных системах.// Отчёт НИОКР по фундаментальному направлению. Инв. N 0299003878. Г.Р. ВНТИЦ 19.05.99.

73. Носенков Д.А, Череватенко В. А., Череватенко Ю.В. Метод повышения точности видеоизмерительной системы диагностики состояния режущего инструмента. // Оптимальное управление мехатронными станочными системами: Межвуз.сб. на-учн. ст. Уфа, 1999. с.25-29.

74. Корн Г.А., Корн Т. М. Справочник по математике. Для научных работников и инженеров. Определения, теоремы, формулы. -М.: Наука, 1974.

75. Исходный текст основного модуля ПО ВИС.

76. Program VIS8 { 12.08.2000 }; { Прототип ВИС размерной настройки и контроля степени износа инструмента }

77. Uses crt,graph,dos,stz3,mygraphl;typesgmnt=record

78. No:byte; { число отверстий в сегменте } S:word; {площадь сегмента }

79. UO,DnO,LO,RO:word; { координаты описанной оболочки сегмента }

80. Вх, By integer; { координаты начальной точки сегмента }end;

81. PeakDelta=record { данные на 'пик' функции отклонения }

82. Znak:real; { признак 'пика' износ -1 / нарост +1 }b:real; {-ширина }1. S:real; { площадь }

83. М:геа1; { -максим, значение }dV:real; {-расстояние до вершины }end;

84. ErrReaction=(Stop,Waurning, Blind, Question); var

85. ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ВСЕЙ СИСТЕМЫ }

86. Vx,Vy:real; { коэффициенты пиксел/мм в поле зрения камеры}

87. KECPoint; { координаты начала с.к. камеры в с.к.станка }

88. EName: string; { полное имя файла эталона }exit '.boolean; { признак окончания контроля }

89. ViSErrword; { Все процедуры и функции относящиесяк ВидеоИзмерительнойСистеме возвращают в этойпеременной номер возникшей ошибки. Если возвращается 0,то ошибок не было }1. ErrMode:errReaction;переменные сегментации}

90. NSegm:byte; { число сегментов в текущем списке }segment:array1.50. of sgmnt; { данные по каждому обнаруженному сегменту }

91. Вспомогательные переменные } j,Num:integer;

92. FNum: string; { символьный номер опыта при загрузке кадров из файла }1. DataSavePath:string;

93. Nexp.word; { число экспериментов }

94. ExpName:string; { имя эксперимента }1.3:word; { индекс точки контура, ближайшей к базовой точке }

95. Peaksl:array 1.10. of PeakDelta; { массив текущих эл-тов } Peaks2:array [1.10] of PeakDelta; { массив текущих эл-тов }1. Переменные эталона }

96. Яркость (STZ.Brightness) } { 2. Контраст (STZ.Contrast) } Sup.Koord; { 3,4. Координаты суппорта для вывода РИ в контрольную позицию X,Y } NRE:byte; { 5. Номер позиции револьверной головки с контролируемым РИ } BinLev:byte; { 6. Порог бинаризации }

97. CUTl.real; { 7. Участок определения линии по главн.реж.кр.) CUT2:real; { 8. Участок определения линии по вспом.реж.кр.}

98. EType:string30.;{ 9. Тип эталоного РИ } FE:real; { 10. Главный угол в плане (эталона) } FlE:real; (11. Вспомогательный угол в плане } WE:real; {12. Угол при вершине }

99. False НЕ использовать алгоритм уточнения координат} KTT:boolean; { 20. True - Использовать коррекцию темнового тока

100. False НЕ использовать коррекцию темнового тока } KSS .boolean; {21. True - Использовать коррекцию коэффициента свет-сигнал False - НЕ использовать коррекцию коэффициента свет-сигнал }записываются в отдельный файл }

101. E01,ERol:real; { параметры базовых линий эталона }1. E02,ERo2:real;

102. Переменные настройки цикла контроля } { U: -Уточнение }

103. SV:boolean; { вкл/выкл протоколирование переменных } BPMl:boolean; { совмещать зону износа алгоритм регерессия } ВР М2 .boolean; { совмещать зону износа алгоритм регрессия с отбросом } ВР МЗ :boolean; { алгоритм перебор }

104. Переменные оценки износа } type Delta=array 1.200. of real; var

105. DeltaZI.Delta; { Функция расстояния точек износа от эталона } ODeltaZI:Delta; { Функция расстояния точек износа от эталонана предыдущем цикле контроля } Peak:point; { Координаты вершины РИ } IPeak:word; { Индекс вершины } { параметры приближения линии }

106. SkvM,SkvA:real; { Среднеквадратичное отклонение точек контура от прямой } ExtM,ExtA:real; { максимальное отклонение точек от прямой } В0,В1:геа1;{ Коэффициенты линейной зависимости } i.word;

107. CutMin:real;{ Миннимальная и максимальная длины участка контура, по которым }

108. Записать параметры уравнения линии } procedure SaveLines; var T:text; TSV:string; ECode:integer; beginassign(T,BasePath+'Lines.dat'); rewrite(T);1. Writeln(T,RNit(01,5));

109. Writeln(T,RNit(RO 1,5)); Writeln(T,RNit(02,5)); Writeln(T,RNit(R02,5)); close(T); {$1+} end;сохраним исходное изображение } procedure ImSave(NameAr:byte;FN:string); type

110. Header=record a:array 0.4. of char; X:word; Y:word;b.array 0.6. of char; end;var c:byte; f:file; H:Header; begin

111. IOResultoO then write('OIIIHEKA ЗАПИСИ!') else write('Фaйл ',FN,' записан успешно'); close(F); {$1+} end;

112. Строим Каталог } Procedure BDir; var

113. Dirlnfo: SearchRec; Files:array1.20. of string; NFile.byte; i.byte; c:char; begin CLRSCR; gotoxy(25,2);write('BbIBOP ФАЙЛА ЭТАЛОНА'); NFile:=0;

114. FindFirst('C:\VIS\ETALONS\*.RI', Archive, Dirlnfo); while (DosError = 0) and (NFile<20) do begin inc(NFile);

115. Files NFile.:=DirIiifo.Name;1. FindNext(DirInfo);end;1. NFile=0 then beginsound(700); delay(350); nosound; gotoxy(30,16);write('HeT файлов эталонов');readkey;exit;end;

116. Функция возвращает расстояние между двумя точками }

117. Function Distance(P 1 ,Р2 :point) :real;begin

118. Distance:=sqrt(sqr(P 1 ,X-P2.X)+sqr(P 1 .Y-P2.Y)); end;

119. Функция возвращает расстояние между двумя точками в мм}

120. Function DistanceM(P 1 ,Р2 :point) :real;begin

121. DistanceM:=sqrt(sqr((P 1 .X-P2.X)* Vx)+sqr((P 1. Y-P2. Y)*Vy)); end;function sign(N:real):real; begin1. N=0 then sign:=0;

122. N>0 then sign:=l; If N<0 then sign:=-l; end;

123. Функция возвращает расстояние от контурной точки до эталонного контура, заданного точкой ближайшей к контролируемой и её соседями справа и слева }

124. Загрузим функцию RU} Procedure LoadRU(fn:string); label ml; var i.word; c:char; s:string; FD:file of char; E.integer; begin

125. Fori:=l to 121 do RU1.:=0; assign(FD,'C:\VIS\UR\'+fn); Reset(FD); For i:=l to 121 do begin s:=";ml:1. Read(FD,c);1. c=chr($0d) then Goto ml; If c=chr($0A) then Goto ml; while c<>'' do begin s:=s+c; Read(FD,c); end;val(S,RU1.,E); end;close(FD); end;

126. Функция зависимости сигнала с фотоячейки от положения перепада Область допустимых значений U<1 and U>0 }

127. Function RU(U:real):real; var1.,I2:integer; Rl,R2:real; Ul,U2:real; begin1. VisErr:=15;

128. U<0.01 then begin;RU:=-65;exit;end;

129. U>0.99 then begin;RU:=43 ;exit;end;1.:=Trunc(U*121);1.:=I1+1;1. R1:=RUI1.;1. R2:=RUI2.;1. U1:=I1/121;1. U2:=12/121;

130. RU:=RUIl.+121*abs((RU[I2]-RU[Il])*(U-Ul));1. VisErr:=0;end;

131. Процедура выводит на дисплей характеристику R(U) в масштабе Мх(180),Му(3)} Procedure DrawRU(Mx,My:word); var T.real; begin T:=-0.1; While T<1.1 do begin T-T+0.001;putpixel(round(T*Mx)+20,round(180-RU(T)*My),15); end; end;

132. B:word; { начало отрезка } E:word; { конец отрезка }

133. Nsg:byte; { номер сегмента,к которому принадлежит отрезок } end;var j,i,k,l,m:integer; { Индексы по строке и столбцу }

134. СЕГМЕНТАЦИЯ } j:=l; i:=l; 1:=1; m:=0; N0tr:=0; NSegm:=0; CSegm:=0; repeat repeat k:=l;

135. Найдём отрезок прямой объектов (чёрный отрезок на белом фоне) } { Г.Найдём начальную точку строки } BS:=-1: { начальная точка не обнаружена }

136. While (j<=300) and (BS<0) do begin

137. ReadAr(Outarl j,i)=0 then BS:=j;inc(j);end;

138. CSegin:=Otreskik.Nsg; If OldSegmoO then begin

139. CSegm=01dSegxn then inc(SegmentCSegm.NO) else beginубрать сегмент (слить с предыдущим) }

140. SegmentCSegm.S:=Segment[CSegm].S+Segment[01dSegm].S;

141. SegmentCSegm.N0:=Segment[CSegm].N0+Segment[01dSegm].N0;

142. Otreskim.Nsg=0 then Otreski[m].Nsg:=CSegm; If Otreskil [m].Nsg=0 then Otreskil jm].Nsg:=CSegm; end;dec(NSegm); { уменьшим число сегментов } 01dSegm:=CSegm; end; end;1. NewSeg:=false;

143. SegmentCSegm.LO>BS then Segment[CSegm].LO:=BS;

144. SegmentCSegm.RO<ES then Segment[CSegm].RO:=ES;1. SegmentCSegm. DnO :=i;

145. SegmentCSegm. S :=Segment[CSegm]. S+1+ES-B S;inc(k);1. 01dSegm=0 then begin Otreskill.B:=BS; Otreskil 1.E:=ES;

146. Otreskil l.Nsg:=CSegm; inc(l); end;01dSegm:=CSegm; end;4: Если отрезок не принадлежит ни к одному из существующих сегментов,создадим новый сегмент }1.NewSegthenbegin1. VisErr:=22;1. NSegm=50 then exit;inc(NSegm);

147. With SegmentfNSegm. do begin

148. No:=0; { число отверстий в сегменте } S:=1+ES-BS; { площадь сегмента } UO:=i; DnO:=i; LO:=BS; RO:=ES; Bx:=BS; By:=i; end;

149. Создадим новый отрезок } Otreskil 1.B:=BS; Otreskil 1.E:=ES; Otreskil p].Nsg:=NSegm; inc(l); end; until false; ml:

150. Оставим активными только те сегменты, которые обновлялись в данной строке } Notr:=l-l; j:=l; 1:=1; inc(i);

151. For ш:=1 to Notr do Otreskim.:=Otreskil[m];until i>210;1. VisErr:=0;end;

152. POC:array 1.20. of Koord; { координаты точек отсечения сегмента полем зрения } T:Koord; const

153. PFS:array 1.4. of Koord=((X:l;Y:0),(X:0;Y:l),(X:-l;Y:0),(X:0;Y:-l)); U:array [1.4] of ba=((a:true;b:false;c:false;d:false),(a:false;b:false;c:true;d:false), (a:false;b:true;c:false;d:false),(a:false;b:false;c:false;d:true)); begin NP:=0;

154. VISErr:=4; { Обнаружено больше одного сегмента } { тест числа сегментов >

155. NSegniol then exit; { в кадре нет ни одного сегмента }тест оболочки } NS:=0;1. segmentl.LO=l then inc(NS); If segment[l].RO=300 then inc(NS); Ifsegment[l].UO=l theninc(NS); If segment[l].DnO=210 then inc(NS);

156. ViSErr:=5; { 'Оболочка' сегмента опирается на четыре границы поля зрения } If NS>3 then exit; { оболочка опирается более чем на три стороны поля зрения } { тест площади сегмента } VisErr:=6; { Мала площадь сегмента }

157. Segmental.S<500 then exit; { площадь сегмента недопустимо мала } PrevP ~ReadAr(0utar 1,1,1); j:=l; i:=l;1. For k:=l to 4 do

158. While ((j<300) and Uk.a) or ((j>l) andU[k].b) or ((i<210) and U[k].c) or ((i>l) and U[k].d) do beginj:=j+PFSk.X; i:=i+PFS[k].Y;

159. ReadAr(Outarl,j,i)oPrevP then begin inc(NP);

160. PrevP=63 liven begin PrevP:=0; POCNP.X:=j; POC[NP].Y:=i; end else begin PrevP:=63;

161. POCNP.X:=j-PFS[k].X; POC[NP].Y:=i-PFS[k].Y; end; end; end;

162. VISERR:=7; { Отверстия в теле сегмента } If (NP<>2) or (Segmentl.NOoO) then exit;

163. Procedure TestSegment2; begin

164. ViSErr:=7; { Сегмент не может являться изобржением резца для наружной обработки } If ((ВРС.ХО300) and (BPC.Y<>210)) or ((ЕРС.ХоЗОО) and (EPC.Yol)) then exit; VisErr:=0; end;

165. Функция вычисления угла перпендикуляра в уравнении линии Р1-начальная точка; Р2- конечная точка }

166. Функция вычисления параметра RO в уравнении линии } Function CalcRO(Angle:real;LPoint:Point):real; begin

167. CalCRO:=LPoint.X*cos(Angle)+LPointY*sin(Angle); end;

168. N:=abs(EI-BI+l); For i;=BI to EI do begin A:=A+Contur1.X; B:=B+Conturi. Y; C:=C+SQR(Contur[i].X); D :=D+Contur [i] .X* Contur[i]. Y; E:=E+SQR(Contur[i]. Y); end;

169. B1 :=(A*B-N*D)/(SQR(A)-N*C); B0:=(B-B1*A)/N;

170. B1=0 then 0:=Pi/2 else 0:=arctan(-l/Bl); RO:=B0*sin(O);

171. Skv:=Sqrt((E-BO*B-Bl*D)/N); { среднеквадратичное отклонение }1. For i:=BI to EI dobegin

172. Et:=abs(Contur1.X*cos(0)+Conturi.Y*sin(0)-RO); If Et>Ext then Ext:=Et; end;1.ne(Nx+round( 1 *Vx*M);Ny+roimd((B 1 * 1 * Vx+B0)*M),

173. N:=abs(EI-BI+l); For i:=BI to EI do begin A:=A+Contur1.Y; B:=B+Conturi.X; C:=C+SQR(Contur[i].Y); D:=D+Contur[i].X*Contur[i].Y; E:=E+SQR(Contur[i] .X); end;

174. В1 :=(A*B-N*D)/(SQR(A)-N*C); B0:=(B-B1*A)/N;

175. B1=0 then 0:=Pi/2 else 0:=arctan(-l/Bl);1. RC):=B0*sin(O);1. 0<0thenbegin0:=-Pi/2-0;1. RO:=-l*RO;endelsebegin0:=Pi/2-0; { коррекция вертикальной регрессии } end;

176. Skv:=sqrt((E-BO*B-Bl*D)/N); { среднеквадратичное отклонение }1. For i:=BI to EI dobegin

177. Et:=abs(Contur1.X*cos(0)+Conturi.Y*sin(0)-RO); If Et>Ext then Ext:=et; end;1.ne(Nx+round((B 1 * 1 * Vy+BO)*M),Ny+round( 1 *Vy*M),

178. Mx:=Conturj.X+Mx; My:=Contur(j].Y+My; end;

179. EvalRo:=Мх/ (1+I2-11 )*cos(0)+My/(1 +12-11 )* sin(O); end;

180. Определим конечный индекс по первой граниэтот индекс равен индексу точки контура лежащей на расстоянии Cutlот точки Conturl.) }1.l:=l;

181. While (Ie 1 <=NPoint) and (Distance(ConturIel.,Contur[l])<Cutl) do inc(Iel); VisErr:=9; { Мало точек контура } If Iel>NPoint then exit;

182. Определим конечный индекс по второй граниэтот индекс равен индексу точки контура лежащей на расстоянии Cuts2от точки ConturfNpoint.) }1.2:=NPoint;

183. While (1е2>=1) and (Distance(ConturIe2.,Contur[Npoint])<Cut2) do dec(Ie2);

184. Ie2<l then exit; If Iel>Ie2 then exit;

185. Ro 1 :=EvalRo(l,Ie 1,01); { Определим Rol} Ro2:=EvalRo(Ie2,NPoint,02); { Определим Ro2} end;

186. Определим точку пересечения рёбер }1. Отладка }1. CrossPoint.X:=0;1. CrossPoint.Y:=0;

187. CalcCrossPoint(01,R01,02,R02,CrossPoint);with CrossPoint dobeginval(RNit(X,4),X,EC); val(RNit(Y,4),Y,EC); end;readkey;}1. ErrHandler;1. SetFillStyle(l,15);

188. VisErr:=13; { недопустимое расположение РИ (камеры) }1. (CrossPoint.X< 1 * Vx) or (CrossPoint.X>300*Vx) or (CrossPoint.Y<l*Vy) or (CrossPoint.Y>210*Vy) then exit;1. ((BPC.Y=210) or (BPC.X=300)) and ( (EPC.X=300) or (EPC.Y=1)) thenbegin

189. RITYPE:=RiTypesl.; If 01>0 thenF:=Pi-01 else F:=abs(01); If 02>0 then F1 :=02 else F1 :=Pi+02; VisErr:=0; end;1. ((BPC.Y=1) or (BPC.X=1)) and ((EPCX=1) or (EPC.Y=210)) then begin

190. RITYPE:=RiTypes2.; If 02>0 then F:=02 else F:=Pi+02; If 01>0 thenFl:=Pi-01 else Fl:=abs(01); VisErr:=0; end;1. ((BPC.X=300) and (EPC.X=1)) or ((BPC.Y=1) and (EPC.Y=1)) then begin

191. RITYPE:=RiTypes2.; If 01>0 then F:=Pi/2+02 else F:=Pi/2-02; If 02<0 thenFl:=Pi/2-01 else Fl:=Pi/2+02; VisErr:=0;end;

192. W:=Pi-F-Fl; { угол при вершине }1. VisErr:=0;gotoxy(l,3);угке(Тлавная режущая кромка'); gotoxy(l,4);write('CKB-om=',RNit(SkvM* 1000,3),' мкм'); gotoxy(l,5);write('Ext-om=',RNit(ExtM* 1000,3),' мкм'); gotoxy(l,6);

193. Процедура строит функцию отклонения расстояния точек контура от базовой точки } Procedure BuildZI; var Iel,Ie2,i,j:word; begin

194. На главной режущей кромке найдём точку удалённую на величину Sizlот точки пересечения }1.l:=l;

195. While ((Iel<=NPoint) and (Distance(ConturIel.,CrossPoint)>Sizl)) do inc(Iel);

196. VisErr:=16; { В поле зрения нет необходимых для корректной отработки участков РИ } If Iel=l then exit; If (lel>NPoint) then exit;

197. VisErr:=17; { Износ превысил безъизносный участок } {If (ConturIel.X*Cos(01)+Contur[Iel].Y*Sin(01)-R01>MDExt) then exit; { На вспомогательной режущей кромке найдём точку удалённую на величину Siz2 от точки пересечения }

198. Скорректируем номер вершины } IPeak:=IPeak-Iel+l;

199. Скорректируем номер точки ближайший к точке пересечения } 1еЗ:=1еЗ-1е1+1; Ie2:=NPoint;

200. While (1е2>=1) and (Distance(ConturIe2.,CrossPoint)>Siz2) do dec(Ie2);

201. В поле зрения нет необходимых для корректной отработки участков РИ }1. VisErr:=16;1. (1е2<1) then exit;1. Ie2=NPoint then exit;}

202. VisErr:=17; { Износ превысил безъизносный участок } {If (ConturIe2.X*Cos(02)+Contur[Ie2].Y*Sin(02)-R02>MDExt) then exit;} VisErr:=0; j:=l;

203. For i.-Iel to Ie2 do begin

204. ZI|j.X:=Contur1. ,X-CrossPoint.X; ZIj]. Y:=Contur[i]. Y-CrossPoint. Y; inc(j); end;1. NpZI:=Ie2-Iel+l; end;procedure VisZI; var i,c:byte;1.ur,MCur:word; constсмещение текущей точки контура на экране }1. Сх=320;1. Су=230;

205. For i:=l to NPZI do { выводим точки зоны износа } beginputpixel(Cx+round((Zi1.X-EZiICur.X)*MCur), Cy+round((Zi [i]. Y-EZi[ICur]. Y)*MCur), LightRed); If I=IPeak then begin

206. SetLineStyle(DottedLn Д NormWidth);1.ne(Cx+round((Zi1.X-EZiICur.X)*MCur),0,Cx+round((Zi[i].X-EZi[ICur].X)*MCur),479); Line(0,Cy+round((Zi[i].Y-EZi[ICur].Y)*MCur),639,Cy+round((Zi[i].Y-EZi[ICxir] Y)*MCur)); end; end;

207. U:=UReadar(Inar,j,i); (U:=ReadAr(Inar,j,i);} LGist(Inar,j,i,9,9); {DrawGist(103,478,1);} k:=63;while Gistk.<=MinBr do If k=l then break else dec(k); VisErr:=14;1. k<30 then exit; { Большое 'затемнение' в данной точке } Um:=k;

208. For k:=Um downto Um-NEG+1 do begin

209. Sl:=Sl+k*Gistk.; S2:=S2+Gist[k]; end;

210. Ui:=U*S2/Sl; { отладка } (gotoxy(20,5);write('S2/Sl=',RNit((Sl/S2),2),' Ui=',RNit(Ui,3),' Ubk=',RNit(U/63,3),' U=',RNit(U,l)); readkey;} VisErr:=0; RelU:=Ui; end;

211. Процедура, уточняющая координаты точек контура по величине сигнала от фотоячеек, на которые проецируется перепад фон-объект } Procedure Utochn; var CurU:integer; a:real; i:word; R:real; U.real; begin

212. For i:=l to NPoint do begina:=GAngle(Inar,round(Contur1.X),round(Conturi.Y));

213. U:=RelU(round(Contur1.X),round(Conturi.Y));1. ErrHandler;1. R:=RU(U);

214. Contur 1. X:=Contur i. X-cos( A) *R/19; Contur [i]. Y:=Contur[i]. Y-sin( A)*R/19; end; end;

215. Процедура, переводяклцая координаты точек контура из пикселов в милиметры пространства объектов } Procedure KonvertKoord; begin

216. For i:=l to NPoint do begin

217. Contur1.X:=Conturi.X*Vx; Contur[i]Y:=Contur[i] ,Y*Vy; end; end;

218. Procedure KonvertKoordl; begin

219. For i:=l to NPoint do begin

220. Contur1.X:=(Conturi.X-0.5)*Vx; Conto[i].Y:=(Contur[i].Y-0.5)*Vy; end; end;

221. Procedure TraceContur(bp,ep:koord); { Процедура прослеживания точек контура } const dltarray 1.8. of Koord=((x:-l;v:-I),(x:0;y:-l),(x: l;y:-l), (х:-1;у:0),(х: 1;у:0),(х:-1;у: l),(x:0;y: l),(x: l;y: 1)); var x,y,newx,newy,i,newdir:integer;

222. MaxWP,CurWP:byte; { число белых соседей,текущее и максимальное }begin

223. Procedure SaveContur(FCN:string); var i:word; FD:text; s:string; beginassign(FD,'C:\Temp\'+FCN); Rewrite(FD); For i:=l to NPoint do begin str(Contur1.X,S); writeln(FD,S); str(Conturi.Y,S); writeln(FD,S);end;close(FD); end;1. ОСНОВНЫЕ ПРОЦЕДУРЫ }

224. MakeMultiKadr(Inar,Outar2,NKadrs); ConvertMultiKadr; end;

225. KTT then writeln('BKJI') else writeln('BblKJT); gotoxy(59,8);

226. KSS then writeln('BKTI') else writeb('BbllOI'); gotoxy(59,10);

227. U then writeln('BKJI') else writeln('BblKn'); c:=ord(readkey); until c=13; If U then begin MDSkv:=1.5*Vy; MDExt:=1 {0.7} * Vy; end else begin

228. MDSkv:=3*Vy; MDExt:=2 {1.4} * Vy; end;

229. KTT then { если контролируется темновой ток }1. KSS then; end;

230. MakeMultiKadr(Inar,Outar3 ,NKadrs*2);1. ConvertMultiKadr;sound(lOOO);delay(500);nosound;gotoxy(10,20);writeln('Co3flaeTCfl файл коррекции темнового тока ','C:WIS\BLCUR\'+EName);

231. Save(Outar3,'C:WIS\BLCURV+copy(EName,l,length(EName)-3)+'.map');gotoxy(20,21);writeln('Чиcлo кадров ',NKadrs*2);readkey;readkey;end;

232. Procedure SoftSettingl; var c:byte; label UK; begin CLRSCR;

233. SetWindow(5,100,l,1,300,210,1,1,1);1. FastDraw(Inar);

234. SetWindow(3I0,100,1,1,300,210,1,1,1); с:=49; repeat case с of49:If BinLev<63 then inc(BinLev); 50:If BinLev>l then dec(BinLev); else goto UK; end;

235. Binar(Inar,Outarl,BinLev); { получим бинаризованное изображение в массиве OUTAR1 }gotoxy(19,23);write(BinLev,'');1. Fastdraw(Outarl);

236. Segm; { Выделим сегменты }1. ErrHandler;gotoxy(51,23);write(NSegm,'');

237. TestSegment; { Протестируем сегменты }1. ErrMode:=Waurning;

238. ErrHandler; { Обработаем предупреждения }1. ErrMode:=Question; UK:if VISErr=0 then c:=ord(rcadkey)else c:=50; until c=13; end;

239. Procedure SoftSetting2; var c:byte;i:word; label UK; begin

240. Сохраним коэффициенты уравнений базовых линий } SaveLines; end;

241. Procedure SoftSetting3; var c:byte; i,j:word; Iel,Ie2:word; label UK;const StpSiz=0.2; { Шаг изменения размера зоны износа } begin CLRSCR;

242. While ((Iel<=NPoint) and (Distance(ConturTe 1 ., CrossPoi nt)>Si z 1)) do inc(Iel); If Iel=l then Sizl:=Sizl-StpSiz; If Iel=NPoint+l then Sizl:=Sizl+StpSiz; Ie2 :=NPoint;

243. While (Ie2>=l) and (Distance(ConturIe2.,CrossPoint)>Siz2) do dec(Ie2); If Ie2=NPointthen Siz2:=Siz2-StpSiz; If Ie2=0 then Sizl :=Sizl+StpSiz;

244. SetLineStyle(SolidLn,0,NormWidth);1.ne(0,239,639,239);1.ne(20,0,20,479);

245. For i:=Iel-3 to Ie2+3 do begin

246. ZIj. X:=Contur1. .X-CrossPoint.X; ZI[j].Y:=Contur[i].Y-CrossPoint.Y; inc(j); end;

247. NpZI:=Ie2-Iel+7; Fori:=l toNPZI doputpixel(round(ZI 1. ,X*7/Vy)+20,round(ZIi. Y*7/Vx)+23 9,15): gotoxy(l,23);writeCftra продолжения -<ENTER>');readkey;end;

248. U then writelnCBIOI') else writeln('Bbliai'); gotoxy(59,8);

249. SV then writeln('BKJI') else writeln('BbllOI'); gotoxy(59,10);

250. BPM1 then vvriteln('BKJI') else writeln('BblKJT);gotoxy(59,12);

251. BPM2 then \vriteln('BKJT ') else writeln('BbIKJT);c:=ord(readkey); until c=13; If U then begin

252. MDSkv:=1.5*Vy; MDExt:=T{0.7}*Vy; end else begin

253. MDSkv:=3*Vy; MDExt:=2 {1.4 } * Vy; end; end;

254. U then writeln('20. УТОЧНЕНИЕ') else writeln('20. БЕЗ уточнения');

255. U then writeln(T,'20. УТОЧНЕНИЕ') else writeln(T,'20. БЕЗ уточнения');

256. КТТ then writeln(T,'21. КОРРЕКЦИЯ TTOK') else writeln(T,'21. БЕЗ КОРРЕКЦИИ');

257. KSS then writeln(T,'22. КОРРЕКЦИЯ СВСИ') else writeln(T,'22. БЕЗ КОРРЕКЦИИ');

258. IORESULT=0 then writeln('®aftn образа резца ',FNE,' записан успешно!') else writeln('Onni6Ka записи'); {$1+}gotoxy(10,22); \\'гке('Жми кнопу'); readkey; EName:=FEN; end;

259. TSV='20. УТОЧНЕНИЕ' THEN U:=True else U:=False;1. Readln(T,TSV);

260. TSV='21. КОРРЕКЦИЯ TTOK' THEN KTT:=True else KTT:=False; Readln(T,TSV);

261. TSV='22. КОРРЕКЦИЯ СВСИ' THEN KSS:=Trae else KSS:=False;close(T);1. U thenbegin

262. Readln(T,TSV); val(TSV,EZI1. .X,ECODE); Readln(T,TSV); val(TS V,EZIi. Y,ECODE); end;close(T);1. (IOresultoO) or (ECODEoO) then exit; VisErr:=0; end;

263. Процедура сравнения вычисленных углов и типа РИ с эталоном }1. Procedure CompareAngles;begin

264. Процедура рассчитывает функцию износа } procedure BuildIznos; var i,j,IMD:word;1. CD,MD:real; begin1. For i:=l to NPZI do begin1. MD:=10000;1. For j:=l to NPEZI dobegin

265. CD :=Distance(ZI 1. ,EZI j.); If CD<MD then begin IMD~j; MD:=CD; end; end;

266. DeltaZi 1.:=EtDist(EZI IMD -1 . ,EZI [IMD] ,EZI [IMD+1 ] ,ZI [i]) * 1000; end; end;

267. Процедура визуализации износа } procedure VisJZNOS; var c:byte; i:integer;

268. ScaleY:real; { масштаб мкм- пиксел дисплея по Y} ScaleX.real; { масштаб мкм- пиксел дисплея по X} 01dVis,CurVis:boolean; { переключатели визуализации 'предыдущего' и текущего графиков } BI:integer; begin BI:=2; ScaleX:=3; ScaleY:=2; repeat CLRSCR;

269. Нарисуем систему координат } Line(23,1,23,479); ' SetLineStyle(DottedLn, 0, NormWidth);1.ne(23+round(ScaleX*(IPeak-BI+2)),50,23+round(ScaleX*(IPeak-BI+2)),400); gotoxy(round(((IPeak-BI+2)*ScaleX)/8),5); {точка вершины } write('BepnuiHa'); SetColor(7);

270. For i:=0 to 30 do { линии сетки } begin1.ne(20,240+round((i-15)*5*ScaleY),639,240+round((i-15)*5*ScaleY));

271. MoveTo(l,240+round((i-15)*5*ScaleY-3));1. OutText(NIT((15-i)*5));end;

272. SetLineStyle(CenterLn, 0, NormWidth); Line(20,240,639,240); SetLineStyle(SolidLn, 0, NormWidth);1. OldVis then begin1. SetColor(9);

273. MoveTo(23,round(240-ODeltaZIBI-l.*ScaleY));нарисуем функцию износа полученную на предыдущем цикле }

274. For i:=BI to ONPZI do Lineto(23+round(ScaleX*(i-BI)),240-round(ODeltaZI1.*ScaleY));end;1. Cur Vis then begin1. SetColor(15);

275. MoveTo(23 ,round(240-DeltaZI BI-1 . * ScaleY)); { нарисуем функцию текущую износа }

276. For i:=BI to NPZI do Lineto(23+round(ScaleX*(i-BI)),240-round(DeltaZI1.*ScaleY)); end;

277. NPeaks:=0; While i<=NPZI do begin1. abs(DeltaZIfi.)>Porog then begin

278. NPeaks< 10 then inc(NPeaks); with Peaks lNPeaks. do begin S:=0; IB:=i;

279. Znak:=sign(DeltaZi1.); M:=0;while sign(DeltaZi i |)=Znak do begin1. S:=S+abs(DeltaZi1.);1. abs(DeltaZi1.)>abs(M) thenbegin1. M:=DeltaZi1.;dV:=IPeak;dV:=(dV-i)/NPZI;end;inc(i);end;

280. B:=(i-IB)/NPZI; end; end; inc(i); end; end;

281. For i:=l to NPeaks do with Peaks l1. do begingotoxy(2,3+i*2); write(i);gotoxy(8,3+i*2);

282. ВИС не может определить состояние РИ по нек. причинам

283. Норма, размерная коррекция не нужна

284. Норма, нужна размерная коррекция положения РИ

285. Недопустимая ошибка позиционирования РИ

286. Явление нароста, скорректировать скорость резания

287. Канавочный, концентрированный износ, скорректировать подачу

288. RiType=RiTypesl. then begin

289. Peak.X:=100000; For i:=l to NPoint do If Contur 1.X<Peak.X then begin

290. Peak:=Contur1.; IPeak:=i; end; end;

291. RiType=Ritypes2. then begin Peak.X:=0;

292. For i:= 1 to NPoint do If Conturfi. ,X>Peak.X then Peak:=Contur1.; end;

293. RiType=Ritypes 3 . then begin1. Peak.Y:=0;

294. For i:=l to NPoint do If Conturfi., Y<Peak.Y then Peak:=Contur1.; end;

295. ГЙе('Координата X ',RNit(Peak.X,4),' мм'); gotoxy(10,22);д¥Гйе('Координата Y ',RNit(PeakY,4),' мм'); end;

296. Процедура одного цикла контроля РИ } procedure NextControl(fn:string); var c:char; i:word; Dist:real; begin

297. SoftSetting5; CLRSCR; If fn=" then begin ClearAr(Inar); ClearAr(Outar2);

298. MakeMultiKadr(Inar,Outar2,NKadrs); ConvertMultiKadr; end else beginэмуляция ввода кадра}

299. ClearAr(Outarl); ClearAr(0utar2);1.adKadr(Inar,BasePatii+'KadrsVkdr'+fn+'.map'); { эмулируем ввод основного кадра } LoadKadr(Outar2,BasePath+'Kadrs\kdv'+fn+'.map'); { эмулируем ввод кадра остатков } end;

300. SetWindow(5,5,1,1,300,210,1,1,1); { зададим атрибуты вывода изображения } FastDraw(Inar); { выведим исходный массив на дисплей }

301. SetWindow(310,5,1,1,300,210,1,1,1);{ зададим атрибуты вывода изображения } FastDraw(Outar3); { выведим на дисплей массив темн.тока}

302. КТТ then (DecKadrs(Inar,Outar3); { Скорректируем темновой ток } If KSS then;

303. SetWindow(310,220,l,l,300,210,l,l,l);{ зададим атрибуты вывода изображения } FastDraw(Inar); { выведим на дисплей Скорректированный массив }

304. Binar(Inar,Outarl,BinLev); { получим бинаризованное изображение в массиве OUTAR1 }

305. SetWindow(5,220,1,1,300,210,1,1,1); { зададим атрибуты вывода изображения } FastDraw(Outarl); { выведим бинаризованный массив на дисплей }

306. Segm; { Сегментируем кадр }

307. ErrHandler; { Обработаем ошибки }

308. TestSegment; { Протестируем сегменты }

309. ErrHandler; { Обработаем ошибки }

310. TraceContur(BPC.EPC); { Определим координаты точек контурабинаризованного изображения } ErrHandler; { Обработаем ошибки }

311. U then Utochn; { на основе исходного полутонового изображения уточним координаты контура}1. KonvertKoord;readkey;1. CLRSCR;

312. For i:=l to NPoint do { визуализируем полученный контур } putpixel(NX+round(Contur1.X*M),NY+round(Conturi.Y*M),15); EvalAngles(not(BPM2)); { рассчитаем углы базовых линий }

313. Если координаты базовой точки и базовых линий не рассчитываются }1. Not(BPMl or ВР М2) thenbegin1. CrossPoint:=EBase;1. F:=FE;1. F1:=F1E;1. W-WE;1. RiType:=EType;end;

314. Определим координату вершины контура РИ (в с.к. станка)} EvalPeak;

315. SV then { Протоколирование определенных параметров в файлах} begin

316. DataSave('F',RNit(F,4),0);

317. DataSave('F l',RNit(F 1,4),0);

318. DataSave('W',RNit(W,4),0);

319. DataSave('CrPX',RNit(Crosspoint.X,4),0);

320. DataSave('CrPY',RNit(Crosspoint.Y,4),0);

321. DataSave('NUMERIC',NiT(Num), 1);

322. DataSave('PeakX',RNit(Peak.X,4),0);

323. DataSave('PeakY',RNit(Peak.Y,4),0);

324. ErrHandler; { Обработаем ошибки }end;readkey;1. CLRSCR;

325. CompareAngles; { Сравним безъизносные участки РИ с эталонными значениями }1. ErrHandler;readkey;1. CLRSCR;1. Colorl6;определение точки контура, ближайшей к базовой точке } Dist:=100;1. For i:=l to NPoint do

326. Distance(Conturi|,CrossPoint)<Dist then begin Ie3:=i;

327. Dist:=Distance(Contur Ie3 . ,CrossPoint); end;

328. BuildZI; { построить зону износа } ErrHandler;

329. VisZi; { визуализировать зону износа } CLRSCR;

330. Buildlznos; { Рассчитать функцию отклонения точек контура } VisIznos; { визуализировать функцию отклонения } {CompareZI;}

331. Extract; { выделим параметры износа }

332. Save(Inar,BasePath+'Kadrs\kdr'+FNUM+'.map');1. ClearAr(Outar2);сохраним исходный образ в файле kdvN.map (вспомогательный массив)}

333. Save(Outar2,BasePath+'Kadrs\kdv'+FNUM+'.map');end;1. Grayl6;end;

334. Сформируем Мульти-кадр } repeat

335. ClearAr(Inar); ClearAr(Outarl); ClearAr(Outar2);

336. MakeMuMKadr(Inar,0utar2,NKadrs); ConvertMultiKadr;получим бинаризованное изображение в массиве OUTAR1 } Binar(Inar,Outar 1 ,BinLev); { Сегментируем кадр } Segm;

337. Обработаем ошибки } ErrHandler;

338. Протестируем сегменты } TestSegment; { Обработаем ошибки } ErrHandler;

339. Определим координаты точек контура бинаризованного изображения }1. TraceContur(BPC,EPC);1. Обработаем ошибки }1. ErrHandler;until VisErr=0;1. KonvertKoord;

340. Формируем буферы } { Формируем отсчеты 'регрессия' без уточнения } EvalAngles(trae);regr:=regr+RNit((CrossPoint.X-EBase.X)* 1000,2)+' '+RNit((CrossPoint.Y-EBase.Y)* 1000,2)+'';

341. Формируем отсчеты 'средняя точка',без уточнения } EvalAngles(false);

342. MidPoint:=MidPoint+RNit((CrossPoint.X-EBase.X)* 1000,2)+' '+RNit((CrossPoint.Y-EBase. Y)* 1000,2)+'';

343. Binar(Inar,Outarl,BinLev); { Сегментируем кадр } Segm;

344. Обработаем ошибки } ErrHandler;

345. Определим координаты точек контура бинаризованного изображения } TraceContur(BPC,EPC); { Обработаем ошибки } ErrHandler;

346. Utochn; { уточняем координаты } KonvertKoord;

347. Формируем отсчеты 'регрессия', с уточнением } EvalAngles(true);regrU:=regrU+RNit((CrossPoint.X-EBase.X)*1000,2)+"+RNit((CrossPointY-EBase.Y)*1000,2)+''; { Формируем отсчеты 'средняя точка', с уточнением } EvalAngles(false);

348. MidPointU:=MidPointU+RNit((CrossPoint.X-EBase.X)*1000,2)+' '+RNit((CrossPoint.Y-EBase.Y)*1000,2)+' end;скинем буферы }

349. DataSave('BasePoint',RNit(CHAS,3),0);

350. DataSave('BasePoint' ,Regr,0); DataSave('BasePoint',RegrU,0); DataSave('BasePoint',MidPoint>0); DataSave('BasePoint',MidPointU,0); end; end;

351. Процедура одного цикла контроля РИ только для записи эксперементальных данныхбез вывода на дисплей) }procedure NextControll;begin1. CLRSCR;1. ClearAr(Inar);1. ClearAr(Outarl);

352. MakeM ultiKadrfln a r, Outar2,NKadrs); ConvertMultiKadr;

353. KTT tlien DecKadrs(Inar,Outar3); { Скорректируем темновой ток }

354. Binar(Inar,Outarl,BinLev); { получим бинаризованное изображение в массиве OUTAR1 }

355. Segm; { Сегментируем кадр }

356. EnrHandler; { Обработаем ошибки }

357. TestSegment; { Протестируем сегменты }

358. ErrHandler; { Обработаем ошибки }

359. TraceContur(BPC,EPC);{ Определим координаты точек контура бинаризованного изображения } {ErrHandler; { Обработаем ошибки }на основе исходного полутонового изображения уточним координаты контура }1. UthenUtochn;1. KonvertKoord;

360. EvalAngles; { Определим углы резца:}

361. ErrHandler; { Обработаем ошибки }

362. DataSave('F',RNit(F,4),0);

363. DataSave('F 1 ',RNit(F 1,4),0);

364. DataSave('W',RNit(W,4),0);

365. DataSave('CrPX',RNit(Crosspoint.X,4),0);

366. DataSave('CrPY',RNit(Crosspoint.Y,4),0);

367. EvalPeak; { Определим координату вершины контура РИ (в с.к. станка) }

368. DataSave('PeakX',RNit(Peak.X,4),0);

369. DataSave('PeakY',RNit(Peak.Y,4),0);end;}

370. U then writeln('YT04HEHHE') else writeln(' '); gotoxy(34,23);write(' Разрешение (X,Y):',RNIT(Vx,3),' мм/пикс ',RNit(Vy,3),' мм/пикс'); gotoxy(5,24);

371. KTT then write('KOPP. TTOK'); while (t<48) or (t>57) do t:=ord(readkey); MainMenu:=t-48; end;

372. Procedure Geo Kal; { геометрическая калибровка }beginend;

373. Procedure OptJfCal; { оптическая калибровка }beginend;procedure LoadCFG; var F:text; S: string; Err:integer; begin

374. Vx:=18; {предварительные коэффициенты пиксел/мм}

375. CutMin."5*Vy; { Миннимальная и максимальная длины участка контура, по которым }

376. CutMax:=170*Vy; { определяются параметры режущих кромок (01,ROl,02,R02)}увеличение, создаваемое оптической системой } New Ar; { Объявить доп.массив для бинаризации Outarl } New Ar; { Объявить доп.массив для мульти кадра - Outar2 }

377. New Ar; { Объявить доп.массив для организации коррекции темнового тока Outar 3}

378. ClearAr(0utar3); ClearAr(0utar3);

379. EName:-resec.ri'; ErrMode:=Question;1.adRU('UR25.dat'); { Загрузим функцию координаты контура от величины сигнала } LoadEtalon(EName); { загрузим эталон }загрузим соответствующий файл коррекции темнового тока }

380. KIT then LoadKadr(OutarЗ,'C:\VIS^BLCURV+copy(EName,l,length(EName)-3)+'.map,);1. NormKadr(Outar3);}1. ErrHandler;

381. ONPZI:=0; { обнулим число отсчётов функции износа полученной в предыду1. УТВЕРЖДАЮ

382. Проректор по НИР Донского государственного техничес1. УТВЕРЖДАЮ

383. Главный инженер ПО "Азовский оптико -механический завод"1. ТЕХНИЧЕСКИЙ АКТ ВНЕДРЕНИЯ

384. Годовой экономический эффект составит 9 тысяч 180 рублей.1. От ДГТУ1. От АОМЗ1. А.К. Тугенгольд1. А.Н. Зацепилин1. Е.А. Лукьянов1. Д.А. Носенков

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