Разработка программного обеспечения
FOR kol=1 TO 2 //поиск между ANNOTATE и COMP_DEF
kol=2
c0=AT('[Ly "KONTUR"]',bufer)
IF c0<>0
bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c0+5)))
FOR kol1=1 TO 2
kol1=2
c0:=AT('{R ',bufer)
ver:=AT('[Ly "',bufer)
IF ver=0
ver:=66000
ENDIF
IF c0=0
IF AT('COMP_DEF ',bufer)<>0
ends=1
ELSEIF AT('Ly "',bufer)<>0
ends=1
ELSE
IF filesost<>'end'
filesost=READF()
kol1=1
ENDIF
ENDIF
ELSEIF c0>ver
ends=1
ELSE
kont=ALLTRIM(STROKA(c0+3))
ends=1
verkont=1 //переменная наличия
контура
DISPOUT('Найден контур платы','b/gb')
koll:=SKONT(kont)
FOR kk:=1 TO LEN(koll)
AADD(kontur,({nil}))
kontur[kk]=koll[kk]
NEXT
ENDIF
NEXT
ELSE
c1=AT('{COMP_DEF ',bufer)
IF c1<>0
ends=1
ELSEIF ends=1
ends=1
ELSE
IF filesost<>'end'
filesost=READF()
kol=1
ENDIF
ENDIF
ENDIF
NEXT
ENDIF
IF filesost='end'
IF AT('{COMP_DEF ',bufer)=0
ends=1
ENDIF
ELSEIF ends=0
contin=1
ENDIF
NEXT
IF verkont=0
DISPOUT('Контур платы не обнаружен','r/gb')
ENDIF
private endc2,contin,powtor,slovo
namecomp:='not found'
c1=AT('{COMP_DEF ',bufer)
IF c1<>0 //поиск имени prt в bufer
slovo:=STROKA(c1)
namecomp=ALLTRIM(SUBSTR(slovo,11,15))
bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-(c1+11)))
ENDIF
FOR contin:=1 TO 2
IF SHELK()=1
FINDCOMP()
ENDIF
c1=AT(' IF pnow=parts',st0)
k=2
ELSE
k=1
ENDIF
nom:=nom+1
AADD(rez,({nil}))
rez[nom]=SUBSTR(st0,0,p1-1)
rez[nom]=(VAL(rez[nom])*koef)
st0=ALLTRIM(SUBSTR(st0,p1,60))
NEXT
RETURN rez
//****************************************************
FUNCTION SHELK(max) //проверка компонента на слой шелкографии
false:=0
FOR proo:=1 TO 2
proo=2
n1:=AT ('[Ly "SLK',bufer)
n2=AT('{I '+namecomp,bufer)
n3=AT('COMP_DEF ',bufer)
IF n3=0
n3=65500
ENDIF
IF n2=0
n2=n3
ENDIF
IF n1<>0
IF n1'end'
filesost=READF()
proo=1
ENDIF
ENDIF
ENDIF
NEXT
RETURN false
//****************************************************
FUNCTION FINDCOMP() // поиск компонента с именем 'namecomp'
FOR kol:=1 TO 2
kol=2
c2=AT('{I ',bufer) //поиск {I 'имя
prt'
c1=AT('{COMP_DEF ',bufer)
IF c2<>0 .AND. c1<>0 .AND. c2>c1
c2=0
ENDIF
IF c2<>0
kol=1 //после конца процедуры
повторить поиск с тем- //же именем
nomcomp=nomcomp+1
?'Количство элементов на
плате:',ALLTRIM(STR(nomcomp)),' '
setpos(row()-1,Col())
AADD(compon,{NIL,NIL,NIL,0,0,NIL,0,0,NIL})
//увеличение массива на один элемент
slovo:=STROKA(c2)
st0:=ALLTRIM(slovo)
st1:=AT('.',st0)
compon[nomcomp,1]=ALLTRIM(SUBSTR(st0,4,st1-4))
//выделение названия компонента
st1:=RAT(' ',slovo)
compon[nomcomp,9]:=(SUBSTR(st0,st1+1,30))
compon[nomcomp,6]:=0
compon[nomcomp,3]:=0
compon[nomcomp,2]='top'
bufer:=LTRIM(RIGHT(bufer,LEN(bufer)-
(c2+3))) //отброс передней части
буфера
FOR powtor:=1 TO 2
powtor=2
c2=AT('{I ',bufer)
//определ.поз.следующ.компон.
c3=AT('{Ps "B"',bufer)
c4=AT('{Pl ',bufer)
c1=AT('{COMP_DEF ',bufer)
//определ.след.названия
IF c1=0
c1=66000
ENDIF
c5=AT('{Ro' ,bufer)
c6=AT('{At H ' ,bufer)
IF c2<>0 .AND. c1<>0 .AND. c20
//определения конца области
endc2=c1 //поиска
в пределах текущего
ELSE
//компонента
endc2=65001
ENDIF
IF c3<>0
//определ.стороны
IF c30
//определ.стороны
IF c50
//определ.стороны
IF c60
опр.атриб.комп,если он расположен
IF c4'end' не
наидены и до конца буфера
filesost=READF() не
встречается {I
,{COMP_DEF, тогда
powtor=1
подгрузить след. буфер и искать
ELSE
в нем
powtor=2
если буфер последний то
идти дальше
ENDIF
ENDIF
ENDIF
NEXT
ENDIF
NEXT повторный поиск комп. в оставш. буфере с
тем-же именем
RETURN
//****************************************************
FUNCTION POISK(name) поиск данных о новом
элементе
PRIVATE razmx:={},razmy:={},st_org:=' ',st_razm:=' ',x:=0,y:=0,tp
CLS
fclose(desc)
pnow=0
setpos(0,0)
??'Поиск данных на элемент ',name,'...'
str=4
stolb=15
desc:=FOPEN('PDF\'+alltrim(name)+'.pdf')
IF FERROR()<>0
??'не найдены'
IF ASCAN(errfile,name+'.pdf')=0
AADD(errfile,name+'.pdf')
ENDIF
fclose(desc)
RETURN 'no'
ENDIF
FOR cont:=1 to 2
cont=2
IF READF()='end'
cont=2
ELSE
cont=1
ENDIF
c1=AT('{Org ',bufer)
IF c1<>0
st_org:=STROKA(c1+5)+'}'
ENDIF
c1=AT('{At H ',bufer)
IF c1<>0
tm1:=(STROKA(c1+6)+'}')
ttt:=SKONT(tm1)
hcomp:=ttt[1]
ENDIF
POISKRAZM(@x,@y)
NEXT
PROCENT()
st_org:=SKONT(st_org) координаты org
ASORT(razmx)
ASORT(razmy)
IF len(razmx)65000 .AND. mpoisk[1,2]<>'C'
st_razm:=ALLTRIM(STROKA(cc+3))+'}'
bufer:=SUBSTR(bufer,cc+3,65000)
mas:=SKONT(st_razm)
FOR k:=1 TO LEN(mas)-1 STEP 2 выборка координат по Х
x=x+1
AADD(razmx,0)
razmx[x]:=mas[k]
IF LEN(razmx)>20
ASORT(razmx)
min1:=razmx[1]
max2:=razmx[LEN(razmx)]
razmx={min1,max2}
x=2
ENDIF
NEXT
FOR k:=2 TO LEN(mas) STEP 2 выборка координат по Y
y=y+1
AADD(razmy,0)
razmy[y]:=mas[k]
IF LEN(razmy)>20
ASORT(razmy)
min1:=razmy[1]
max2:=razmy[LEN(razmy)]
razmy={min1,max2}
y=2
ENDIF
NEXT
POISKRAZM(@x,@y)
ELSEIF cc<>65000 .AND. mpoisk[1,2]='C'
st_razm:=ALLTRIM(STROKA(cc+3))+'}'
bufer:=SUBSTR(bufer,cc+3,65000)
mas:=SKONT(st_razm)
IF len(mas)=3
st_tmp:=SKONT(st_org) координаты org
AADD(razmx,st_tmp[1]+(mas[1]+mas[3]/2))
AADD(razmy,st_tmp[2]+(mas[2]+mas[3]/2))
AADD(razmx,st_tmp[1]+mas[1]-mas[3]/2)
AADD(razmy,st_tmp[2]+mas[2]-mas[3]/2)
ENDIF
POISKRAZM(@x,@y)
ENDIF
RETURN
//****************************************************
5. Файл specif.prg содержит в себе текст подпрограммы, создающей
перечень всех элементов, содержащихся на анализируемой плате, в виде
стандартного dbf файла с именем xxxxx.dbf, где ххххх — имя pfd файла
PCAD-а.
//***************************************************************
FUNCTION CreatSpec()
PRIVATE struct1 [4,4],nom,
ns1:='name',ns2:='oboz',ns3:='kol',ns4:='con'
// описание массива-структуры базы данных
struct1[1,1]=ns1
struct1[1,2]="C"
struct1[1,3]=20
struct1[1,4]=0
struct1[2,1]=ns2
struct1[2,2]="C"
struct1[2,3]=25
struct1[2,4]=0
struct1[3,1]=ns3
struct1[3,2]="C"
struct1[3,3]=6
struct1[3,4]=0
struct1[4,1]=ns4
struct1[4,2]="C"
struct1[4,3]=10
struct1[4,4]=0
public nameper:=''
nameper:=alltrim(left(fname,at('.',fname)-1))+'.dbf'
DBCREATE(nameper,struct1) //создание базы данных перечня
элементов
USE
//***************************************************************
USE &nameper //открытие б.д. перечня элементов
private
//массив со всевозможными названиями элементов
snaz:={{"Конденсаторы",1},{"Резисторы",1},{"Дроссели",1},{"Транзисто
ры",2},{"Диоды",2},{"Микросхемы",2},{"Вилки",1},{"Прочие",1}}
private
//массив со всевозможными обозначчениями элементов
soboz:={{'C','c'},{'R','r'},{'L','l'},{'VT','vt,'},{'VD','vd'},{'DD',
'D','d','dd'},{'X','x'},}
APPEND BLANK
REPLACE &ns1 WITH 'Название'
REPLACE &ns2 WITH 'Обозначение'
REPLACE &ns3 WITH 'Кол-во'
REPLACE &ns4 WITH 'Примеч.'
APPEND BLANK
REPLACE &ns1 WITH '-----------------------------------------
-'
REPLACE &ns2 WITH '-----------------------------------------
-'
REPLACE &ns3 WITH '-----------------------------------------
-'
REPLACE &ns4 WITH '-----------------------------------------
-'
append blank
// поиск элементов, соответствующих определенным обозначениям, и
занесение их в свою графу базу данных
FOR naz=1 to len(snaz)
REPLACE &ns1 WITH snaz[naz,1]
nzap:=recno()
kolv:=0 //кол-во эл. одного класса
strsp:=''
FOR nom=1 TO len(compon)
vrem:=compon[nom,9]
IF vrem<>nil
aaa:=posalpha(vrem,.T.)
pvr:=alltrim(left(vrem,aaa-1))
set exact on
IF (ascan(soboz[naz],pvr)>0);
.OR.(naz=len(snaz) .AND.
ascan(soboz,)=0)
kolv=kolv+1
IF (len(alltrim(&ns2))+len(vrem)+1)0
vrstr=left(vrstr,len(vrstr)-1)
replace &ns2 with vrstr
goto nzap
replace &ns3 with alltrim(STR(kolv))
APPEND BLANK
APPEND BLANK
ELSE
REPLACE &ns1 WITH ''
ENDIF
NEXT
USE //закрытие б.д.
RETURN
Функционирование разработанной программы было проверено на реальном изделии
(4 платы в изделии).
Организационно-Экономическая часть.
Задание: Техноко-Экономическое обоснование разработки. Анализ разделов
бизнес-плана. Выполнение расчетов по учету издержек и конкурентоспособности
продукции. Образование цены.
Введение .
Несмотря на то, что данный проект является экспериментальным, и
изготавливается на заказ конкретного предприятия, его можно рассмотривать
как товар так как, несомненно, найдется большое количество аналогичных
предприятий и частных пользователей заинтересованных в таком программном
продукте. Поэтому далее предлагается к рассмотру бизнес-план по
производству и реализации этого программного продукта.
Бизнес-план является одним из первых обобщающих документов
обоснования инвестиций и содержит укрупнённые данные о планируемой
номенклатуре и объёмах выпуска продукции, характеристики рынков сбыта и
сырьевой базы, потребность производства в земельных, энергетических и
трудовых ресурсах, а также содержит ряд показателей, дающих представление
о коммерческой, бюджетной и экономической эффективности рассматриваемого
проекта, и в первую очередь представляющих интерес для участников-
инвесторов проекта. Расчёты показателей адаптированы к требованиям и
условиям современного отечественного и зарубежного инвестирования.
Описание товара.
Программный продукт представляет собой пакет программных средств,
написанных для IBM-совместимых компьютеров. Программа предназначена для
использования ее совместно с пакетами PCAD и T-FLEX (которые применяются
для разработки и проектирования печатных плат и деталей остнастки). Пакет
PCAD предназначен для разработки плат, а в пакете T-FLEX разрабатывается
корпус. В система PCAD плата изображается только в двухмерном виде и
поэтому такой образ платы бесполезен при разработке корпуса в ситеме T-
FLEX т.к. этот чертеж не обладает объемными размерами. Разработанный
программный продукт позволяет передавать все параметры и элементы
печатной платы, разрабатываемой в PCAD, пакету T-FLEX, конвертируя чертеж
платы в трехмерный объект, для дальнейшей разработки корпуса под
созданную плату.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|