close

Вход

Забыли?

вход по аккаунту

?

Отчёт по практике (3)

код для вставкиСкачать
Содержание
ВВЕДЕНИЕ
В период с 16 июля по 12 августа 2012 года студент группы ЗД-407 металлургического факультета филиала ЮУрГУ в г. Златоусте специальности "Программное обеспечение вычислительной техники и автоматизированных систем" Метликин Алексей Владимирович проходил производственную практику в конструкторско-технологическом отделе №401 ОАО "НИИ "Гермес" в качестве инженера-технолога.
Руководитель практики от организации - начальник сектора отдела Парфенов Анатолий Михайлович.
Руководитель-преподаватель от университета - Соколова Елена Владимировна - к.т.н., доцент кафедры "Математики и Вычислительной техники".
Общее задание - ознакомиться с историей предприятия, изучить деятельность предприятия в целом и отдела в частности; ознакомиться с САПР "Корпус". Индивидуальное задание - изучить исходный код САПР и автоматизировать составление конструкторской документации на технологический процесс программной обработки поверхностей различной формы под новый тип станков.
1 Краткие сведения об ОАО "НИИ "Гермес"
ОАО НИИ "Гермес" основано в 1955 году на государственной форме, собственности и правах хозяйственного ведения. Институт находится в ведении Федерального космического агентства в соответствии с Постановлением Правительства Российской Федерации от 12.05.1992 г.
25 апреля 1955 года Постановлением Совета Министров СССР за № 819/491 было принято решение организовать в г. Златоусте Челябинской области на базе действующего машиностроительного завода № 66 филиал № 1 от НИТИ-40 (г. Москва). Основная задача филиала - обеспечение решения комплексных технологических вопросов по отработке и освоению баллистических изделий морского базирования совместно с СКБ-385 (ныне Государственный ракетный центр им. акад. В.П. Макеева, г. Миасс). С 17.12.1991 года - преобразование в АО "Гермес" с многоукладным профилем работ, включая конверсионные направления.
С 04.12.1992 года - выделение в ОАО НИИ "Гермес" с научно-исследовательскими, проектно-конструкторскими разработками и инженерными услугами по изделиям вооружения, военной техники, и ракетно-космической техники, а также разработка и опытная отработка изделий народно-хозяйственного направления.
С 14.05.2008 года - организация приватизирована путем преобразования в открытое акционерное общество НИИ "Гермес" с аналогичной тематикой и профилем выполняемых работ.
В настоящее время организация выполняет гособоронзаказ, разрабатывает продукцию производственно-технического назначения, в том числе объекты котлонадзора, медицинскую технику и т.д.
В организации реализован проектно-технологический цикл постановки изделий на производство по направлениям:
- заготовительное;
- технологическое;
- проектно-конструкторское;
- сборочно-сварочное;
- испытания.
В организации действуют специализированные службы: служба качества, служба ОТ и экологии, бюро стандартизации и нормоконтроля, сектор маркетинга, техническая библиотека, группа хранения документации (архив) и т.д.
Структура организации соответствует требованиям выполнения проектных работ по заявленному виду деятельности: ПБ 03-576-03, группы 1, 2, 3 и 4.
1.1 Структура ОАО НИИ "Гермес"
ОАО НИИ "Гермес" входит в структуру федерального космического агентства, состоит из опытного цеха, структурных подразделений (отделов) по видам работ (сборка, механическая обработка, заготовительное производство).
Структура предприятия представлена на рис. 1.
Рис. 1. Структура предприятия
1.2 Специализация ОАО НИИ "Гермес"
1. Выполнение работ по НИОКР в рамках Федеральной космической программы на 2005-2010г.г., (источник финансирования - Госбюджет, Заказчик - Федеральное космическое агентство).
2. Анализ технологической базы предприятий участвующих в изготовлении РКТ и продвижение на предприятия отрасли научно-технической продукции, созданной в рамках ФКП на основе прямых договоров с предприятиями Заказчиками (источник финансирования - прямые договора с предприятиями заказчиками).
3. Технологическое обеспечение новых и совершенствовании технологий изготовлений серийных образцов изделий ракетно-космической техники оборонного и космического назначения, в т.ч. коммерческих разработок (источник поступления средств - финансирование оборонного заказа).
4. Разработка конверсионной продукции и оказание инженерных и научно-технических услуг для предприятий общемашиностроительного, хозяйственного и коммерческого назначения (финансирование работ за счёт средств предприятий потребителей).
5. Анализ рынков сбыта и увеличение объёмов производства конверсионной продукции (финансирование - за счёт собственных средств).
6. Проведение научно-исследовательских работ в направлении совершенствования технологии изготовления создания конверсионной продукции командных "ДСЕ РКТ" и т.п. (источник финансирования - собственные средства и средства заказчиков).
2 Научно-исследовательский отдел №401
Отдел №401 "Мехобработки деталей изделий двигательного и корпусного производства" является структурным подразделением предприятия с подчинением непосредственно Генеральному директору института.
Отдел возглавляется начальником отдела, который избирается на конкурсной основе на научно-техническом совете (НТС) предприятия, назначается, перемещается и увольняется приказом директора, согласованным с НТС.
Основными задачами отдела являются:
1. Проведение научно-исследовательских работ (НИР, НИОТР, ОКР) по следующим направлениям:
* разработка и внедрение на предприятиях передовых технологий механической обработки деталей двигательного, корпусного производства и гражданской продукции;
* разработка и внедрение специального оборудования и средств технологического оснащения для механической обработки ДСЕ; * повышение конструкторско-технологической надёжности и технологичности изделий.
2. Разработка заключений, руководящих, типовых и директивных технологических материалов.
3. Разработка программного обеспечения расчёта управляющих программ для специальных станков с ЧПУ
4. Координация НИР по изделиям ГРЦ "КБ им. ак. Макеева" в части мехобработки по предприятиям - смежникам.
5. Систематическое изучение и обобщение уровня технологии мехобработки на отечественных и зарубежных предприятиях, разработка рекомендаций, направленных на совершенствование и повышение уровня технологии на предприятиях.
6. Систематическое повышение квалификации и эффективности труда работников отдела на основе использования современной вычислительной техники.
7. Отдел участвует в проведении внутренних и внешних проверках систем менеджмента качества, в проведении заседаний комиссий по качеству и выполняет их решения.
2.1 Структура отдела
Отдел создан приказом гендиректора на базе 3 секторов, работающих в определённых направлениях.
Структура и штаты отдела утверждаются на один год с учётом объёма запланированных и выполненных работ.
1. Технологический сектор.
Группа технологического обеспечения:
* разработка технологических процессов на детали корпусного и двигательного производства и гражданской продукции;
* сопровождение технологических процессов на производстве;
* разработка заключений по технологичности конструкции в части механической обработки;
* технологическое сопровождение изготовления ДСЕ на производстве.
2. Сектор технологического обеспечения изготовления вафельных обечаек.
* разработка постпроцессоров для расчёта управляющих программ;
* разработка программного обеспечения для ПЭВМ.
Группа технологов - программистов:
* обеспечение управляющими программами (УП) специальных станков с ЧПУ;
* корректировка управляющих программ по изменениям КД.
3. Конструкторский сектор.
a. Разработка КД на технологическое оборудование, оснастку и средства контроля для изготовления ДСЕ;
b. Сопровождение КД в процессе изготовления на производстве;
c. Отладка изготовленной технологической оснастки.
3 Постановка задачи
Во время прохождения практики руководителем были поставлены следующие задачи: - ознакомление с технологией производства и контроля вафельных оболочек, а также с используемым программным обеспечением (САПР-Корпус).
- изучение исходного кода модуля вывода на печать паспорта технологического процесса программной обработки поверхностей;
- приведение исходного кода модуля к единому форматированию и его оптимизация.
Реализацию поставленной задачи необходимо было выполнить на языке программирования C++ в среде программирования C++ Builder.
4 Вафельные оболочки
В конструкции несущих корпусов (баки, отсеки, купола и т.п.) изделий боевой и ракетно-космической техники широкое применение находят вафельные оболочки различной геометрической формы - цилиндрические, конические, сферические и т.д.
Несущие силовые оболочки - цилиндрические, конические, оживальные, сферические, а так же их комбинации называются вафельными, если они подкреплены сетками монолитных пересекающихся рёбер, обеспечивающих необходимую конструктивную прочность и устойчивость отсеков изделий.
Внедрение вафельных конструкций сопровождалось интенсивными поисками приемлемых способов их производства. Были последовательно испытаны, освоены и применялись механическое фрезерование ячеек в листах - развёртках, химическое фрезерование, размерная электрохимическая обработка. Затем был предложен и получил повсеместное признание оптимальный на сегодня способ - фрезерование ячеек вафель со слежением на специальных станках с числовым программным управлением (ЧПУ).
Принцип работы этих станков - фрезерование со слежением от внешней относительно ячеек гладкой поверхности заготовок, имеющих формы готовых ВО. Слежение обеспечивает в определённых пределах постоянство настроенной толщины полотна.
Технология получения вафельного фона относится к классу уникальных и требует применения специальных фрезерных станков с числовым программным управлением и системы автоматизированного проектирования и программирования технологического процесса вафельной обработки (САППР) - система подготовки и контроля управляющих программ.
В 80-х годах двадцатого века НИИ "Гермес" была разработана САП-ВО-АРМ (система подготовки управляющих программ для вафельных оболочек на станки типа СВО) на базе СМ-1420. В настоящее время ЭВМ данного поколения не эксплуатируются, поэтому разрабатывается новая система подготовки управляющих программ для данных станков на базе ПЭВМ нового поколения типа Pentium (САПР - Корпус).
4.1 Процесс фрезерования ячеек
Типичный цикл фрезерования стандартной ячейки складывается из следующих переходов: врезание инструмента на глубину ячейки (1), выборка основной массы металла ячейки, обход по контуру ячейки (2), отвод инструмента(3), деление - переход в следующую позицию (рис. 2)
Рис. 2. Цикл фрезерования ячейки
Управляющая программа фрезерования вафельной детали обеспечивает получение заданных КД:
* сеток рёбер со всеми различиями по их ширине;
* возмущений вафельного фона в виде нестандартных по форме ячеек, монтажных площадок, зон для различных вварных элементов, люков-пазов и т.п.;
* участков, прилегающих к вафельному фону, т.е. зон, выполненных в обечайках продольных сварных швов и будущих кольцевых швов (у торцев ВО);
* различий толщины полотна в нестандартных ячейках и толщины площадок, отличающихся от настроенной в большую сторону.
Кроме того, УП обеспечиваются заданными технологическими процессами:
* схемы фрезерования ячеек строчками или по "раскрутке";
* переходы отработки ячеек - врезание, выбора основной массы ячейки, обход по контуру, вывод фрезы, деление;
* направление подач - попутная, встречная;
* режимы резания на различных переходах.
Изменения толщины полотна - смены основной настройки выполняются автоматически по специальным техкомандам или врезание фрезерной головки по управляемой координате. При обработке деталей на станках с ПУ необходимы строгая ориентация заготовок относительно осей координат станка и привязка их к исходной точке траектории относительно движения инструмента.
4.2 Характеристики обрабатываемых деталей
Определяющимися геометрическими характеристиками деталей данного класса являются:
- наружный диаметр (у конуса - диаметры большого и малого торцев);
- длина и высота (для сферы) детали;
- исходная толщина полотна; - α - угол конуса детали; - R - радиус внутренней поверхности детали. Основным элементом конструкций вафельной детали является вафельная ячейка, в которой толщина полотна и её отклонения оказывают превалирующее влияние на величину массы оболочек.
Для наиболее распространённых цилиндрических ВО ячейку определяют следующие параметры (рис. 3): - толщина полотна t; - ширина рёбер b (кольцевых bк и продольных - bпр.);
- толщина листа (исходная) h;
- радиусы R и r (размеры инструментальные).
Габариты ячеек определяются шагами между осями рёбер:
- кольцевых - Sк (линейные);
- продольных - α (угловые, Sпр.)
Рис. 3. Параметры ячеек ВО
Шаги между осями продольных рёбер в развёртке Sпр. соответствуют угловым шагам α. Сечения продольных рёбер трапецеидальные (рис. 4):
Рис. 4. Сечения продольных ребер (угол γ - угол наклона боковой стороны концевой фрезы).
5 САПР-Корпус
5.1 Назначение и описание системы
САПР-Корпус предназначена для автоматизации подготовки, контроля и документального оформления управляющих программ обработки крупногабаритных корпусных деталей на специализированных станках типа СВДО 14, СВО 25.
Процесс подготовки управляющей программы (УП) осуществляется в два этапа. На первом формируется и рассчитывается траектория движения инструмента. На втором этапе по рассчитанной траектории формируется УП в виде файла с расширением "upl". Получение УП предусмотрено для следующих систем управления: NC210, FANUC, 2C-42. Также на втором этапе проводится контроль УП и выпуск сопроводительной документации. Входными данными системы является развертка детали (файл .RZV, созданный программой Plane). В режиме формирования траектории задается последовательность обработки ячеек детали и автоматически строится траектория движения инструмента на обработку самих ячеек. В результате работы этого режима в файле с расширением SAP создается программа (так называемая строка обхода), содержащая траекторию движения инструмента, технологические параметры и характеристики по станку/системе. В одном файле .SAP может быть создано несколько строк обхода (различающихся номером), описывающих обработку отдельных участков детали. Файл .SAP и табличный файл с данными станок-система (файл TOOLS.TAB) используются в качестве входной информации при формировании управляющей программы на станок с ЧПУ, которая контролируется и выводится в виде файла с расширением UPL. По УП формируется и выводится технологическая сопроводительная документация (txt-файл).
Интерфейс системы можно видеть на рис. 5, рис. 6 и рис. 7.
Рис. 5. Выбор поверхности обработки
Рис. 6. Выбор станка, системы и корректировка технологических параметров
Рис. 7. Главное окно САПР-Корпус
5.2 Формирование сопроводительной документации
Режим обеспечивает формирование и вывод технологического паспорта на управляющую программу. Формируются следующие атрибуты паспорта:
* титульный лист;
* технологические требования;
* технологический процесс;
* лист регистрации изменений;
* акт;
* содержание.
После активизации пункта "Паспорт" в меню "УПЛ" (рис. 7) открывается окно, в котором выводится содержимое паспорта на текущую строку. В меню выбора по умолчанию выбраны все листы паспорта (рис. 8). Рис. 8. Вывод всех листов техпаспорта
Если отменить выбор какого-либо листа, то он формироваться не будет (рис. 9). После нажатия на кнопку "Готово" листы паспорта сохраняются в директорию "DOK" в виде txt-файла с именем файла .UPL. Рис. 9. Не выбраны листы "Тех. процесс" и "Акт"
В режиме паспорта листы можно выводить на печать. Для выхода из режима необходимо нажать на кнопку "Выход". Фрагмент исходного кода модуля формирования документации можно видеть в приложении 1.
ЗАКЛЮЧЕНИЕ
В течение месяца я проходил практику в отделе мехобработки деталей изделий двигательного и корпусного производства ОАО "Научно-исследовательский институт "Гермес". СПИСОК ЛИТЕРАТУРЫ
1. Технология производства и контроль вафельных оболочек / С.Н. Кудрин - Златоуст, 1987, экз.1. - 230 с.
2. C++ Builder // ВикипедиЯ URL: http://ru.wikipedia.org/wiki/C++_Builder (дата обращения: 11.08.2012).
ПРИЛОЖЕНИЕ 1
#include <stdio.h>
#include <string.h>
#include <..\bs.h>
#include <math.h>
#include "..\kontrol\glob1.h"
#include "..\postpr\spupar.h"
#include <stdlib.h>
#include <Filectrl.hpp>
#include <dir.h>
# include "..\postpr\globsss.c"
#include "romain.h"
static char treb[]="treb.lst"; /* имя файла с листом "требования..." */
static char regis[]="regis.lst"; /* --"-- с листом "регистрация измен..." */
static char akt[]="akt.lst"; /* ---"--- с листом "акт N......" */
static char titul[]="titul.lst"; /* --"-- с титульным листом */
static char tptk[]="tptk.lst"; /* ---"--- с листом "технол. процесс"
для врезания техкомандой */
static char tpkk[]="tpkk.lst"; /* для врезания координатным кадром */
static char soder[]="soder.lst"; /* имя файла с листом "содержание" */
int kolpar,nomcha,irez,kolst,iks,nlit,dlintek,iznp1;
char strtab[100],strtek[100],txt[30];
short endpage,rezzam,idan,plus,istop,ntt,nkt1;
float chy1,chz1, chxx1;
extern AnsiString RabDir;
union stanok {char sta[20];short mst[10];}u3;
union sistema {char sis[20];short msi[10];}u4;
long offset;
char zzz[80],dd[80];
void wrre(short,char *);
messerr(void);
void finpas(short,short,short,char *);
short nomt(short,short);
char ureal,uint,ucha,usdv;
char udubl,unum,uend,upus,uprod;
int* list_mas; //массив для номеров страниц в содержании
extern char upole;
char txtfile[80];
AnsiString Cur_Dir,rab;
int num_of_list; //для вывода номера страницы
int schem_obrab; //номер страницы схемы обработки
float bpp6,www7,ooo8;
float bpp66,www77,ooo88;
void nach ()
{
short i,j,kk1,ku1,iltp;
short l1,l2,l3,kol,id,kpr1,kppr1;
short prlt1,prltt,prls1;
extern short kod_fun,kod_err;
char *sims[99],*p1;
void fsim(void);
void vibstr(short*,short*);
short ltpro(char*,char*,short*);
void lsod(short*,short*);
void ltriz(short);
void lakt(void);
void ltit(short*,short*,char*,char*,char *,char *);
void vivod(short*,char*);
short mupr1[99],mupr2[99],k1[99];
short lk1[6];
char fuprv[256];
p1=(char*)arrx;
kk1=kpr1=kppr1=0;
prlt1=prltt=prls1=iltp=0;
irez=0;
for(i=0;i<6;i++) lk1[i]=-1;
num_of_list = 2;
list_mas[0] = 1;
for(int i=list_mas[0];i<5;i++)
list_mas[i] = -1;
Cur_Dir=ExtractFilePath(Application->ExeName);
strcpy(fuprv,Cur_Dir.c_str());
strcat(fuprv,"fupr.lst"); /* файл с управляющими символами */
strcpy(u3.sta,texp.tl.name);
strcpy(u4.sis,texp.sc.name);
if (filename[0]!=0)
{
rab=Cur_Dir+"dok.tmp";
strcpy(txtfile,rab.c_str());
out=fopen(txtfile,"w");
fups=fopen(fuprv,"r");
if(fups==0)
{
ShowMessage("Нет файла fupr.lst");
return;
}
fsim();
}
else return;
BCT(1,0);
GETIN(1,2,(short *)zzz,80,&kol,&id);
zzz[10*2-1]='\0';
GETIN(1,3,(short *)dd,80,&kol,&id);
dd[12*2-1]='\0';
vibstr(&kppr1,&kpr1);
BCT(5,0); FIKS(&l1,&l2,&l3);
GETIN(5,1,nasn,12,&kol,&id);
GETIN(5,2,komm,29,&kol,&id);
GETIN(5,4,naim,6,&kol,&id);
if(EditForm->Box1->Checked==true) // титульный
ltit(&kpr1,&kppr1,u3.sta,u4.sis,zzz,dd);
if(EditForm->Box2->Checked==true) // тех. требования
ltriz(1);
list_mas[0]++;
if(EditForm->Box3->Checked==true)// тех. процесс
if(texp.sc.kod==1||texp.sc.kod==2)
ltpro(tptk,tpkk,&l3);
else
{
if(texp.sc.kod==3)
ltpro("tptkf.lst",tpkk,&l3);
else
ltpro("tpkkk.lst",tpkk,&l3);
}
list_mas[0]++;
if(EditForm->Box4->Checked==true) // рег. изменений
ltriz(3);
list_mas[0]++;
if(EditForm->Box5->Checked==true) // акт
ltriz(2);
if(EditForm->Box6->Checked==true) //содержание
lsod(mupr1,&kpr1);
fclose(out);
// pasport();
}
//--------------------------------------------
/* функция считывания из файла fupr упРавляющих символов
ureal - вещественное;
uint - целое;
ucha - символьное;
usdv - сдвиг информации вправо;
udubl - символ повторяющейся строки;
unum - номер строки шаблона;
uend - конец страницы шаблона;
upus - пустой параметр;
uprod - начало страницы продолжения;
upole - koнец поля для записи строк-шаблонов. */
void fsim()
{
char inform[80];
fgets(inform,80,fups); ureal=inform[0]; //Считываем управляющие символы
fgets(inform,80,fups); uint =inform[0]; //Из файла fupr.lst
fgets(inform,80,fups); ucha =inform[0];
fgets(inform,80,fups); usdv =inform[0];
fgets(inform,80,fups); udubl=inform[0];
fgets(inform,80,fups); unum =inform[0];
fgets(inform,80,fups); uend =inform[0];
fgets(inform,80,fups); upus =inform[0];
fgets(inform,80,fups); uprod=inform[0];
}
//--------------------------------------------------
// подсчет колличества п/п */
void vibstr(short *kpp,short *kppr)
{
short err,pp[100],k,kod;
short ia,ib,ic;
int i;
BCT(4,0);
k=0;
if(BCT(4,1)==0)
{
while(BCT(4,2)==0)
k++;
}
*kppr=k;
BCT(4,0); k=0;
if(BCT(4,1)==0)
{
if(BCT(4,1)==0)
{
k++;
while(BCT(4,2)==0)
k++;
}
}
*kpp=k;
}
//----------------------------------------------
// формирование листа содержание
void lsod(short masts[99],short *ikp)
{
short kol,id;
char ffff[300]; //содержит имя файла
int _count;
int num_strok = 1; //текущий номер строки
int _kol_dubl = 0; //количество дублируемых строк
int add_to_dubl = 0; //количество добавленных строк при отсутствии какого-либо листа
struct
{
short ic;
short komm[25]; //komm - комментарий
} teh_process[100]; //структура для вывода тех.команды
short ia,ib,ic; //используются для чтения имени записи из базы данных
char* _str = new char[80]; //массив для вывода в файл
char* _rez_str; //массив для вывода тех. процессов в файл
char* _mas_hold; //доп. массив для нескольких тех.команд
strcpy(ffff,Cur_Dir.c_str());
strcat(ffff,soder);
if ((in=fopen(ffff,"r"))==0)
{
finpas(0,0,1,ffff);
return;
}
char for_komm[100];
BCT(4,0);
_count=0; //количество управляющих программ
if(BCT(4,1)==0)
{
while(BCT(4,2)==0) //заполняем структуру teh_process записями из базы данных
{
FIKS(&ia,&ib,&ic); //Читаем имя записи
GETIN(4,2,komm,24,&kol,&id); //id-дескриптор поля;
if(kol==0) //kol - количество прочитанных слов
strcpy((char*)komm,"ijgksdjg"); //не считали ни одного слова
teh_process[_count].ic=ic; //заносим считанную информацию в экземпляр
strcpy((char*)teh_process[_count].komm,(char*)komm); //структуры teh_process
_count++; //и переходим к следующему экземпляру структуры
break;
}
int k = 0;
for(int i=0;i<_count;i++) //сортировка по возрастанию номера программы ic
for(int j=i+1;j<_count;j++)
if(teh_process[j].ic < teh_process[i].ic)
{
k=teh_process[j].ic;
strcpy((char*)komm,(char*)teh_process[j].komm);
teh_process[j].ic=teh_process[i].ic;
strcpy((char*)teh_process[j].komm,(char*)teh_process[i].komm);
teh_process[i].ic=k;
strcpy((char*)teh_process[i].komm,(char*)komm);
}
}
//разобраться с выводом содержания при не всех выбранных пунктах
while(fgets(_str,80,in))
{
if(_str[1] == udubl) //если дублирующий символ "@"
{
_kol_dubl = _str[0] - '0'; //определяем количество дублируемых строк
if(list_mas[num_strok] == -1 || _count == 0)
{
add_to_dubl += _kol_dubl; //добавляем к шаблону количество невыводимых строк
while(_kol_dubl > 0)
{
fgets(_str,81,in); //считываем строки, которые не нужно выводить
_kol_dubl--;
}
for(int i=num_strok; i<list_mas[0]; i++) //продвигаем в конец
{ //массива list_mas значение '-1'
_count = list_mas[i]; //иначе все пункты содержания
list_mas[i] = list_mas[i+1]; //не будут выводиться
list_mas[i+1] = _count;
}
_count = 0;
continue;
}
else
{
_str[0] = ' ';
_str[1] = ' ';
_rez_str = new char[_kol_dubl * 80];
_mas_hold = new char[_kol_dubl * 80];
for(int j=0;j<80;j++) //заносим считанную строку в массив _rez_str
_rez_str[j] = _str[j];
for(int j=1; j<_kol_dubl; j++) //считываем из файла строки, которые
{ //должны быть продублированы
_rez_str[(j-1)*80+79] = '\n';
fgets(_str,80,in);
fgets(_str,80,in);
for(int k = j*80,m=0; k<j*80+80; k++,m++)
_rez_str[k] = _str[m];
}
for(int i=0;i<_kol_dubl*80;i++)
_mas_hold[i] = _rez_str[i];
for(int i=0;i<_count;i++)
{
for(int i=0;i<_kol_dubl*80;i++)
_rez_str[i] = _mas_hold[i];
for(int j=0; j<_kol_dubl*80; j++)
{
if(_rez_str[j] == ucha || _rez_str[j] == uint || _rez_str[j] == ureal)
{ //если дошли до параметра
if(_rez_str[j+1] - '0' > 2) //если не номер строки
{
AnsiString _hold = IntToStr(teh_process[i].ic);
_rez_str[j] = ' ';
_rez_str[j+1] = ' ';
_rez_str[j+2] = ' ';
for(int k=1;k<=_hold.Length();k++,j++)
_rez_str[j] = _hold[k]; //заносим номер программы iс в параметр
while(_rez_str[j] != ucha && _rez_str[j] != uint && _rez_str[j] != ureal)
j++; //находим следующий параметр
kol = (_rez_str[j+1]-'0')*10+(_rez_str[j+2]-'0'); //опреляем количество символов параметра
strcpy(for_komm,(char*)teh_process[i].komm);
for(int k=j,m=0;k<j+kol,m<25;k++,m++)
{
_rez_str[k] = for_komm[m]; //заносим строку в параметр
if(_rez_str[k] == '\0' || _rez_str[k] == '\n' || _rez_str[k] == '\r')
{ //если переход на новую строку или возврат каретки
while(k<j+kol)
{
_rez_str[k] = '.'; //заполняем строку пробелами до символа с номером m
k++;
}
break;
}
}
j += kol - 1;
}
else if(_rez_str[j-1] == '.') //если это номер листа пункта
{
kol = list_mas[num_strok];
if((_kol_dubl*80 - j) < 80)
kol = schem_obrab;
if(kol/10 == 0) //если номер <10
{
_rez_str[j+1] = kol + '0';
_rez_str[j] = '.';
}
else
{
_rez_str[j] = kol/10 + '0';
_rez_str[j+1] = kol%10 + '0';
}
}
else //если номер строки
{
if(num_strok/10 == 0) //num_strok меньше 10
{
_rez_str[j+1] = num_strok + '0';
_rez_str[j] = ' ';
}
else //num_strok больше 10
{
_rez_str[j] = num_strok/10 + '0';
_rez_str[j+1] = num_strok%10 + '0';
}
}
}
}
fputs(_rez_str,out); //записываем результат в файл
num_strok++; //увеличиваем номер строки
}
}
continue;
}
if(_str[0] == 'P') //если параметр в строке
{
if(list_mas[num_strok] == -1 && (num_strok != list_mas[0] || EditForm->Box5->Checked == false) && _str[7] != ' ')
{
add_to_dubl++;
int _hold;
for(int i=num_strok; i<list_mas[0]; i++)
{
_hold = list_mas[i];
list_mas[i] = list_mas[i+1];
list_mas[i+1] = _hold;
}
fgets(_str,80,in);
continue;
}
_str[0] = ' ';
_str[1] = ' ';
for(int j=0;j<80;j++)
{
if(_str[j] == ucha || _str[j] == uint || _str[j] == ureal)
{ //находим место параметра в строке
if(_str[j-2] == '|') //если это номер листа
{
if(num_of_list/10 == 0) //если номер листа <10
{
_str[j] = num_of_list + '0';
_str[j+1] = ' ';
}
else //если номер листа >10
{
_str[j] = num_of_list/10 + '0';
_str[j+1] = num_of_list%10 + '0';
}
num_of_list++; //инкрементируем номер листа
}
else if(_str[j-1] == '.') //если это номер листа пункта
{
if(list_mas[num_strok]/10 == 0) //если номер <10
{
_str[j+1] = list_mas[num_strok] + '0';
_str[j] = '.';
}
else
{
_str[j] = list_mas[num_strok]/10 + '0';
_str[j+1] = list_mas[num_strok]%10 + '0';
}
num_strok++;
}
else //если номер строки
{
if(num_strok/10 == 0)
{
_str[j+1] = num_strok + '0';
_str[j] = ' ';
}
else
{
_str[j] = num_strok/10 + '0';
_str[j+1] = num_strok%10 + '0';
}
}
}
}
}
if(_str[0] == udubl) //если дублирующий символ "@"
{
if(_str[2] == ' ') //определяем количество повторений строк
_kol_dubl = _str[1] - '0';
else
{
_kol_dubl = (_str[1] - '0')*10 + (_str[2] - '0');
_str[2] = ' ';
}
_kol_dubl += add_to_dubl;
_str[1] = ' ';
_str[0] = ' ';
for(int i=0;i<_kol_dubl-1;i++) //затем записывам результат в файл doc.tmp
{
fputs(_str,out);
fputs("\n",out);
}
}
if(_str[0] == uend) //если символ конца файла "%"
{
_str[0] = '\n';
fputs(_str,out);
break;
}
fputs(_str,out);
}
fclose(in);
}
Документ
Категория
Разное
Просмотров
94
Размер файла
659 Кб
Теги
преддипломная практика, практике, производственная практика, отчет, практика
1/--страниц
Пожаловаться на содержимое документа