• Добре дошли на страниците на mebelistite.com! Приятно сърфиранe!
  • Sys.Admin - компютри, лаптопи, принтери, сервиз

Неравномерна правоъгълна мрежа, като обект в стругарски програмен език.

  • Автор на темата code
  • Започната на

code

Редовни
Регистриран
14/3/16
Постове
32
Резултат от реакция
17
Местоположение
Някъде
Започвайки с тази тема искам да обоснова защо един специализиран език за програмиране (в областта на производството на мебели) може да бъде изключително полезен и то точно на производителите дърводелци. Примерът, който ще дам ще илюстрирам с един друг мой проект, който е за подготовка на детайли за струговане - с мебели все още не съм се занимавал все още и затова по-добре с каквото вече съм правил.

В настоящата тема съм представим 3 неща. Първо съвсем кратко запознаване с това, как се работи с приложение за проектиране на струговани детайли. Второто нещо вече обосновава предимствата от наличието и познаването на специализиран език за програмиране. Третото нещо ще бъде малко общи думи за това, какво горе долу ще правим за нашия планиран език за програмиране, който ще развиваме в този форум.

-------------------------------------

На първата картинка съм поместил горната част от работния панел на програма с чиято помощ се проектират детайли, които в последствие се струговат. Идеята е, че горната дясна част на демонстрирания работен панел е поместено само горната половина на напречното сечение на детайла.

Няколко думи как се работи с демонстрирания панел. Първо се съставя мрежата, която попълвайки я ще получим крайния детайл. За целта в полето "Размер на нова зона" под мрежата се задава размера на исканото допълване на мрежата, след което се кликва с мишката на някоя от зоните "Добави ...". Създадената мрежа може и да си модифицира големината на отделните ивици, както е възможно и ивиците да се разделят или да се сливат. За тези действия, обаче, се използват полета от работния панел, които не са изобразени на картинката.

Вече разбрахме как се създава мрежата. Попълването й става използвайки стрелките на клавиатурата, както и се избира подходящ курсор. Курсорът на практика представлява точно един защрихован правоъгълник от мрежата. Когато е избран някой от долните варианти на курсора (неопределено/изтриване/попълване), тогава местейки курсора се запълват и съответните полета от мрежата в съответен цвят. Сивото отговаря на цвят за детайл, а бялото отговаря на празна зона. Жълтото служи за маркиране на зони в които детайлът предстои да се уточни какво ще представлява.

Освен самото запълване на частите от мрежата, то в зона "Маркировки на граници" можете да избирате означения за различните повърхности. Някои от тях може да се налага да се струговат с по-голяма точност и затова трябва да имаме понякога и означения за видовете повърхности.

Забележете, че детайлът притежава и една конична повърхност. Такава повърхност се поставя в мрежата от специална зона от контролния панел, която не е показана.

Следващите 3 прикачени картинки (след първата) показват как ще изглежда крайния детайл "на живо". Всъщност в една от картинките детайлът е показан прозрачен, за да се види вътрешния празен цилиндър. Как мислите, че ще се стругова подобно нещо? Вероятно няма начин. Затова самото проектиране на детайла не е достатъчно. Въпросната програма след въпросния контролен панел трябва да притежава и такъв в който да се избира последователността на изработката на детайла (което ще означава и избор на съответни инструменти).

-------------------------------------

Ако мислите, че усвояването на работата с програми подобни на показаната по-горе ще ви е достатъчна (всъщност само малка част беше показана) за да се изявите като добър специалист, то ще ви разочаровам че грешите. В съвременния свят нещата трябва да се правят не просто някак, а много гъвкаво и именно затова могат да ви помогнат компютрите, но ако ги управлявате директно вие с подходящ език за програмиране.

Първо съвсем накратко какво е езикът за програмиране? Тук няма да давам определение, а само ще се опитам да ви създам бегла интуитивна представа (ако вече не знаете какво е език за програмиране). Езиците за програмиране представляват последователност от специални текстови думи и символи, чрез които задавате на компютъра да прилага определени обработки. В нашия пример обработките ще са свързани с модификации по мрежата, представена по-горе. Т. е. това което описахме как може да се прави с панел, ще може и да се прави и с последователност от команди.

Но с какво могат подобни команди ще са ни нужни? Пълният отговор е в много неща, но тук ще трябва да се задоволим само с даване на пример.

Да разгледаме последната прикачена картинка. На Фигура 1 е показан някакъв примерен детайл. Нека приемем, че искаме точно по средата на оста да допълним с пръстен с определена дебелина. Ако го правите ръчно, то ще видите колко е големината на средната ос, след което ще изчислите на какви 3 части трябва да я разделите, както е показано на Фигура 2. Накрая трябва да използвате курсор за запълване, за да получите крайният искан резултат показан на Фигура 3.

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

Решение може да се намери, единствено чрез подходящо програмиране. В случая примерно нещата могат да изглеждат примерно реализирани с програма от вида показан по-долу. На всеки ред след двойното двуеточие "::" сме показали какво извършва съответния ред.
Код:
  ВХОД(p)             ::  Буквата "p" (латиница) е така наречен входен параметър. Той ще задава
                      ::   реално число, показващо колко широк искаме да ни е пръстена, който ще
                      ::   добавим в средата.
  w=ШИРИНА(3)         ::  Оттук нататък буквата w ще съответства на стойността на ширината на
                      ::   третата колонка от нашата мрежа.
  a=(w-p)/2           ::  Това е вид аритметична операция. Буквата "a" (латиница) ще съответства
                      ::   на изчисленото от израза отдясно. Това е точно ширината на две от ново
                      ::   добавените колони, а именно първата и третата.
  ВЕРТИКАЛА(3)=a      ::  Тук искаме програмата да направи действието разделяна на трета клетка,
                      ::   като отдели разстояние със стойност "a" считано от левия ръб на трета
                      ::   колона на мрежата.
  ВЕРТИКАЛА(4)=p      ::  Същото като по-горе. Забележете, че тук отделяме точно средната колона
                      ::   на крайния вариант. Останалата трета колона си се получава по подразбиране.
  ПЪЛНО(4,1)          ::  Това е вече операцията, чрез която искаме да се запълни правоъгълник от
                      ::   мрежата с координати 4 по хоризонтала и 1 по вертикала.

Въпросната програма ще се пише някъде и ще може да се зададе да се изпълни на едно голямо множество от детайли. Тя ще извърши действията по добавянето на средния пръстен автоматично, което беше целта на задачата.

Да отбележим, че в представяната по-горе примерна програма думите "ВХОД", "ШИРИНА", "ВЕРТИКАЛА" и "ПЪЛНО" са така наречените служебни думи. Те са измислени специално за целите на езика, докато имената на буквите са напълно произволно избрани от пишещия програмата.

Има още една забележка, която е добре да направим още сега. Какво ще стане, ако зададем ВЕРТИКАЛА(n)=m, ако примерно ширината на n-та колона се окаже по-малка от задаваната стойност m? В подобни случаи езиците за програмиране реагират адекватно, като ще се получи съобщение за грешка, примерно от вида: "ГРЕШКА: По-голяма разделяща стойност от допустимото.".

Може би вече се питате какви са всички активни думи, които могат да се ползват в езика за програмиране? Отговорът е, че трябва да ги измислим ние. Защото както споменах в основната тема - ние няма да спускаме езика за програмиране отгоре, а ще обсъждаме как да го развиваме.

-------------------------------------

Но да преминем към нашият език за програмиране, а не вече споменатия за струговащи детайли. В този език трябва да се разделя програмата на 3 части, а именно следните:

1. Проектиране вида на крайното изделие.
2. Определяне последователността на операциите.
3. Виртуално тестване на готовото изделие.

В настоящия пример по-горе само споменахме малка част от първия вид дейност, която можем да правим. При последователността на действията трябва да се определят ножовете, скоростите на отнемане, дълбочина на стружката, последователност на отнемане на зоните и така нататък.
Конкретно при стругованите детайли дейността от точка 3 (тестовете) е безпредметно да се прави, защото почти винаги един стругован детайл не е крайно изделие. Но за мебелите не е така. Напълно възможно е да искаме да можем да определим каква тежест може да поеме съответния гардероб, без да се счупи. Или примерно при какво земетресение какви ще са пораженията.

И още нещо, което няма как да не искаме да не интегрираме в езика, който правим. Контролните панели от които ще проектирате изделията така или иначе ще си останат. Програмирането на практика ще прави само допълнителни добавки и изчисления в зависимост от ситуацията. Но вида на самият контролен панел също може да се изпрограмира, което на практика ще подобри вашата работа (защото ще работите с контролен панел, който вие ще създадете и така ще работите с нещо което точно вие искате)!

Имайте предвид че проектирането на работен панел, чрез измисления от нас език ще е в десетки пъти по-лесно, примерно от проектиране на същия вид панел, но с езици като php, python, java и други. Причината е, че в програмните възможности на езика който правим ще е само определен вид панел за управление, докато при споменатите универсални езици за програмиране можете да представяте всякакви неща, което и усложнява многократно техниката на реализацията.

-------------------------------------
 

Прикачени файлове

  • panel.jpeg
    panel.jpeg
    72 KB · Прегледи: 12
  • detajl1.jpeg
    detajl1.jpeg
    29 KB · Прегледи: 12
  • detajl2.jpeg
    detajl2.jpeg
    33.4 KB · Прегледи: 11
  • detajl3.jpeg
    detajl3.jpeg
    44.7 KB · Прегледи: 11
  • dopyl.jpeg
    dopyl.jpeg
    25.2 KB · Прегледи: 12
Back
Горе