Sunteți pe pagina 1din 107

UNIVERSITATEA AUREL VLAICU ARAD

FACULTATEA DE INGINERIE
SECIA : AUTOMATIC I INFORMATIC INDUSTRIAL

LUCRARE DE DIPLOM

COORDONATOR TIINIFIC
CONF.DR.ING. VALERIAN HECA
L.DRD.ING. BARNA CORNEL

ABSOLVENT
LAZR MARIUS GHEORGHE

-2004-

UNIVERSITATEA AUREL VLAICU ARAD


FACULTATEA DE INGINERIE
SECIA : AUTOMATIC I INFORMATIC INDUSTRIAL

PLOTER DE MAS INDUSTRIAL

COORDONATOR TIINIFIC
CONF.DR.ING. VALERIAN HECA
L.DRD.ING. BARNA CORNEL

ABSOLVENT
LAZR MARIUS GHEORGHE

-2004-

Cuprins
1. Introducere .1
1.1 Stabilirea variantei optime 1
1.2 Stabilirea soluiei constructive ..............................................................................2

2. Proiectarea instalaiei ....................................................................................5


2.1 Masa machetei ........................................................................................................5
2.2 Portala machetei .....................................................................................................5
2.3 Acionarea instalaiei .............................................................................................6
2.3.1 Acionarea mecanic .................................................................................6

3. Acionarea electric .......................................................................................7


3.1 Consideraii generale privind motoarele pas cu pas...........................................7
3.2 Funcionarea motoarelor pas cu pas ...................................................................8
3.3 Mrimi caracteristice ale motoarelor pas cu pas ..............................................11
3.4 Unghiul de pas (pasul motorului) .......................................................................12
3.5 Cuplul static sincronizat ......................................................................................12
3.6 Cuplurile limit ....................................................................................................12
3.7 Frecvenele limit .................................................................................................13
3.8 Motor pas cu pas cu un stator i mai multe nfurri de comand ...............13

4. Acionarea electronic .................................................................................18


4.1 Modul de comand pentru motoarele pas cu pas .............................................18
4.2. Blocul de distribuie al impulsurilor .................................................................18
4.3. Blocul amplificator de ieire ctre motor .........................................................23
4.4. Montajul de comand .........................................................................................24

5. Comanda cu PC ............................................................................................28
5.1 Portul paralel ........................................................................................................28
5.2. Configuraia portului paralel .............................................................................32

6. Proiectarea softului pentru planul de scriere ............................................34


6.1. Limbajul de programare ....................................................................................34

6.2 Prezentarea programului ....................................................................................34


6.3. Funciile generale ale programului ....................................................................36
6.4. Funciile specifice ale programului ....................................................................39
6.4.1. Funcia Test LPT Port ............................................................................40
6.4.2 Funcia Plot Setup ...................................................................................41
6.4.3 Funcia Stepping Delay ...........................................................................42
6.5 Executarea scrierilor cu macheta .......................................................................43

7. Norme de tehnica securitii muncii ...........................................................45


8. Programul pentru planul de scriere ...........................................................47
Bibliografie ......................................................................................................104

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM-PLOTER DE MASA INDUSTRIAL

1. Introducere

Proiectul a fost conceput pentru a satisface mai multe facilitai folosite in industrie in
funcie de modificare capului de scriere se poate folosi pentru :
-

pentru trasare cablajelor dac este folosit un creion permanent (marcher)

pentru gurire daca este folosit o mandrin din medicina (stomatologie) ataat bine
neles i un motora

pentru tiere daca este folosit un cuit bine ascuit (kater)

- pentru tierea oxigaz dac este folosit un arztor

1.1. Stabilirea variantei optime


Din cele prezentate mai sus, din punct de vedere al procedeelor care prin avantaje impun
mecanizarea i automatizarea amintim scrierea, trasarea, gurirea i tierea. Referitor la instalaii i
echipamente, din punct de vedere al predispoziiei la mecanizare i automatizare, concluzia care se
poate desprinde este c echipamentele tip portal sunt cele care satisfac n cel mai nalt grad
dezideratele impuse de conceptele de mecanizare i automatizare a proceselor amintite.
Flexibilitatea acestora din punct de vedere al spaiului de operare, al procedeelor de scriere
(respectiv trasare, gurire, tierea) care pot fi implementate pe aceste echipamente, calitatea i
reproductibilitatea foarte bun a operaiilor executate le recomand pentru utilizare n industrie.
Proiectarea unei instalaii automate de acest tip trebuie cldit pricipial n jurul acestor
echipamente prezentate pentru a obine rezultatele scontate, dar trebuie s in seama de instalaii
similare aflate n exploatere. Analiza i urmrirea n explotare pot furniza informaii valoroase
referitoare la modul cum au fost concepute aceste instalaii, dac modul de realizare practic
corespunde n totalitate sau nu cu performanele cerute , fiabilitatea n exploatare, modul i
probleme de ntreinere etc.
Centralizarea i analiza datelor colectate sunt un prim pas n abordarea temei de proiectare.

-1-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM-PLOTER DE MASA INDUSTRIAL

1.2. Stabilirea soluiei constructive


Soluiile constructive existente n practic la aceast or sunt :
-

dispozitivul de susinere a capului de scriere este mobil i masa pe care este fixat hrtia
este rigid.

O alt dat de intrare a proiectrii, n aceast etap de stabilire a variantei optime a fost
similitudinea cu un echipament periferic consacrat al tehnicii de calcul i anume plotter-ul. Acest
echipament lucreaz de asemenea ntr-un sistem de coordonate OXY, aadar au fost analizate
soluii constructive existente.

Figura 1.1. Plotter cu ine de ghidare


Una din avantajele importante ale acestui plotter este capul de scriere oscilant care permite
realizarea unor forme complexe.

-2-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM-PLOTER DE MASA INDUSTRIAL

Figura1.2. Cap de scriere oscilant

Un alt exemplu n acest sens este plotter-ul realizat de firma Fischer, la care deplasarea capului de
scriere ntr-un punct dorit n foaia de lucru se realizeaz cu transmisie de micare tip urub-piuli.

Figura 1.23. Plotter realizat de ctre firma Fischer


-3-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM-PLOTER DE MASA INDUSTRIAL

Analiznd toate aceste informaii i avnd n vedere i tema de proiectare, macheta pentru
scriere care face obiectul prezentului proiect va fi prevzut cu mas rigid pentru fixarea hrtiei iar
capul de scriere va fi mobil. Instalaia de scriere care va fi prezentat i gsete aplicabilitate n
toate cazurile prezentate mai sus.

-4-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

2. PROIECTAREA INSTALATIEI
Proiectarea instalaiei automate de scriere materializat prin macheta de scriere parcurge
urmtoarele etape: proiectarea mesei dispozitivului de scriere, proiectarea portalei dipozitivului pe
care se afl fixat capul de scriere i proiectarea mecanismului de acionare al ansamblului.

2.1 Masa machetei


Masa de aezare a machetei este confecionat din tabl de oel cu grosimea de 3 mm i are
form de L cu o margine rsfrnt suplimentar. Grosimea tablei din care s-a executat masa i forma
acesteia au rezultat din condiiile de rigiditate a elementelor care vor fi montate i stabilitate n
timpul exploatrii.
Pe mas sunt montate ramele cadru care susin tijele de ghidare ale mecanismului de
deplasare a capului de scriere (portala). Montarea ramelor cadru s-a fcut cu precizie pentru a
asigura paralelismul i coplaneitatea tijelor de ghidare (folosita de la imprimanta). Orice abatere
important de la paralelism sau coplaneitate poate conduce la ngreunarea acionrii, la dezaxarea
portalei i chiar la blocarea acesteia.
2.2. Portala machetei
Portala este mecanismului de deplasare a capului de scriere. Portala este alctuit dintr-o
sanie transversal care poart capul de scriere i care este montat pe dou ine de ghidare rigid
fixate pe dou cadre de montaj laterale prevzute fiecare cu contacte alunectoare. Cadrele laterale
culiseaz pe tijele de ghidare. De remarcat c toate deplasrile, schimbri de poziie se realizeaz
prin contacte alunectoare i nu prin organe de maini consacrate pentru transmitere de micri.
Cadrele laterale sunt prevzute cu sistemul de prindere al inelor de ghidare a saniei
trasversale. Prinderea lor s-a fcut astfel nct s avem asigurat paralelismul i coplaneitatea celor
doua ine.
Pe sania transversal a fost montat capul de scriere (tiere) care este alctuit dintr-o bobin
i de partea mobil a acesteia a fost rigizat mecanismul de acionare a creionului care este realizat
din prti componente ale unei uniti de dischet ale unui calculator.

-5-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

2.3. Acionarea instalaiei


Acionarea instalaiei automate de scriere este complex. n acionarea ansamblului trebuie
tratate distinct acionarea mecanic, acionarea electric i acionarea electronic urmnd ca
capitolul de acionare (comand) cu calculator s fie tratat ntr-un subcapitol aparte.

2.3.1. Acionarea mecanic


2.3.1.1. Generarea i transmiterea micrii
Pentru generarea i transmiterea micrilor respectiv acionarea dup cele doua axe a
sistemului de coordonate a fost aleas acionarea cu dou motoare electrice sincrone pas cu pas.
Micarea pe axa OX se face prin intermediul unui motor pas cu pas cu pas iar micarea pe
axa OY se face tot cu un motor pas cu pas.
Generarea transmisiei pe Ox se face prin intermediul unei tije filetate M 8, pe OY generarea
transmisiei se face prin intermediul unei curele sincrone. De precizat faptul ca transmisia pe Oy
unde s-a folosit un mecanism de imprimanta, deplasarea mecanismului se face prin intermediul
unor rulmenii montai pe un suport de tabla de 3 mm ndoita astfel nct s suporte orice cap ce se
adapteaz, in partea cealalt s-a folosit tot un mecanizm de imprimant prins de tija filetat printr-o
bucs.

-6-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

3. Acionarea electric
3.1 Consideraii generale privind motoarele pas cu pas
Motoarele pas cu pas reprezint maini electrice sincrone modificate ale cror
nfurri de comand se alimenteaz cu un sistem m-fazat de impulsuri de tensiune practic
dreptunghiular, rotorul fiind executat fr nfurri auxiliare de pornire. Tensiunea sub
form de impulsuri aplicat fazelor motorului determin o repartizare discret a cmpului
magnetic n ntrefierul mainii i ca urmare, micarea rotorului const din deplasri unghiulare
elementare succesive.
Spre deosebire de motoarele sincrone clasice motoarele pas cu pas intr n sincronism
fr alunecare, iar frnarea se realizeaz fr ieirea din sincronism. Datorit acestui fapt ele
asigur n domeniul de funcionare porniri brute, opriri i reversri fr pierderea informaiei
sau fr omisiuni de pas.
Particularitile funcionale, pentru care sunt destinate motoarele pas cu pas, au
determinat apariia unor tipuri constructive speciale care se deosebesc de mainile sincrone
clasice. Astfel, motoarele pas cu pas se execut cu un diametru rotoric minim i cu un numr
mrit de poli, ceea ce permite obinerea unei valori unghiulare mici a pasului.
nfurrile de comand a motoarelor pas cu pas se pot alimenta n mod separat sau n
grupuri n diferite combinaii. Fiecrei combinaii sau tact de comutaie i corespunde o
orientare spaial determinat a cmpului magnetic rezultant n ntrefierul mainii.
Ca i motoarele sincrone clasice, motoarele pas cu pas se clasific n funcie de
construcia circuitului magnetic i de numrul nfurrilor de comand. Se deosebesc dou
tipuri de baz:
1. Motoare pas cu pas de tip reactiv cu rotorul format numai din jug confecionat din
tole.
2. Motoare pas cu pas de tip activ cu rotor format din jug la care se adaug
electromagnei sau magnei permaneni.
Motoarele pas cu pas de tip reactiv au rotorul executat sub forma unui cilindru
feromagnetic dinat ce poate fi executat cu numr mare de poli. Astfel de motoare se execut
cu un pas pn la un grad, ceea ce este satisfctor pentru micorarea erorii unghiulare
absolute. La o frecven ridicat a impulsurilor de comand (sute de Hz) aceste motoare au
vitez de rotaie sczut i prin urmare pot fi utilizate fr reductor.
-7-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


Motoarele pas cu pas de tip activ au n componena rotorului magnei permaneni sau
electromagnei cu nfurri de excitaie a cror capete sunt scoase la inele colectoare.
Motoarele pas cu pas de tip activ se execut cu pai mai mari deoarece pasul polar al rotorului
cu magnei permaneni sau electromagnei de excitaie nu poate fi micorat prea mult din
consideraii de ordin constructiv. Din aceast cauz motoarele pas cu pas cu rotor activ se
utilizeaz n sistemele de acionare cu viteze de rotaie relativ mari.
Tipurile de baz indicate se mai clasific n: motoare pas cu pas polifazate i motoare
pas cu pas cu mai multe statoare (polistatorice). Motoarele pas cu pas cu mai multe statoare
constau din m sisteme stator-rotor dispuse coaxial n care fiecare sistem, asemntor
nfurrilor motoarelor polifazate, este rotit unul fa de altul. ntre motoarele pas cu pas
polifazate i polistatorice nu exist deosebire n ce privete explicarea funcionrii i tratarea
matematic.
n continuare explicarea funcionrii motoarelor pas cu pas se va face pentru un motor
polistatornic, deoarece modul de funcionare n cazul sistemelor stator-rotor dispuse coaxial
este mai evident.

3.2 Funcionarea motoarelor pas cu pas


Pentru explicarea funcionrii considerm un motor pas cu pas cu trei statoare (m=3).
n figura 1.1 sunt reprezentate cele trei sisteme stator-rotor dispuse pe un ax comun. Circuitul
magnetic al fiecrui stator este realizat sub form de poli apareni distribuii uniform pe
circumferina statorului. Cele trei rotoare sunt executate din pachete de tole, avnd pe
circumferin acelai numr de poli ca i statoarele.
Polii celor m statoare sunt axiali pe cnd polii celor m rotoare sunt decalai cu 1/m pai
polari. nfurrile polilor unui stator sunt conectate astfel, nct prin alimentarea lor cu curent
continuu se realizeaz pe circumferina statorului o succesiune de poli nord-sud. n figura 3.1
este alimentat nfurarea statorului 1, rotorul este plasat astfel nct reluctana circuitului
magnetic este minim i deci polii rotorici se vor aeza n faa polilor statorici. Prin
decuplarea nfurrii statorului 1 i cuplarea n acelai timp a nfurrii statorului 2, rotorul
se rotete n sens invers acelor ceasornicului cu un unghi p. Pentru executarea urmtorului
pas se decupleaz nfurarea statorului 2 i se cupleaz nfurarea statorului 3; iar pentru
realizarea pasului urmtor se decupleaz nfurarea statorului 3 i se cupleaz nfurarea
statorului 1.

-8-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Stator1

Stator2

Stator3

Figura 3.1. Motor pas cu pas cu trei statoare


n felul acesta rotorul s-a rotit cu un unghi total mp care corespunde unui pas polar i
se afl ntr-o poziie identic cu cea iniial. Pentru realizarea unei rotaii complete
succesiunea cuplrii nfurrilor se repeta de un numr de ori egal cu numrul polilor. n
cazul motorului cu trei statoare i 12 poli (figura 3.1) la o rotaie complet se realizeaz n 36
pai sau n caz general n 2 mp pai, n care p este numrul perechilor de poli.
Deplasarea rotorului cu un pas are loc sub aciunea unui cuplu reactiv. Prin
alimentarea nfurrii unui stator n curent continuu, forma cuplului static care acioneaz
asupra rotorului la deplasarea acestuia dintr-o poziie fix, este indicat n figura 3.1.
La deplasarea din starea de repaus, asupra rotorului acioneaz un cuplu
electromagnetic a crui mrime depinde de unghiul de deplasare . Pentru =0 polii rotorici
snt fa n fa cu cei statorici, reluctana circuitului magnetic este minim i cuplul care se
opune deplasrii rotorului este zero.

-9-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Figura 3.2. Caracteristica cuplului static pentru un motor pas cu pas


Deplasnd rotorul din poziia iniial prin mrimea unghiului , cuplul electromagnetic
care se opune acestei deplasri crete datorit creterii reluctanei circuitului magnetic i
atinge un maxim Mmax corespunztor poziiei rotorului, pentru care reluctana circuitului
magnetic este maxim. Prin deplasarea n continuare a rotorului, reluctana circuitului
magnetic ncepe s scad, la fel i cuplul, devenind zero i apoi cuplul va atinge un maxim
negativ Mmax. Pentru =3 p, rotorul se gsete ntr-o poziie identic cu cea iniial, adic
asupra lui acioneaz un cuplu egal cu zero.
Pentru explicarea efecturii pailor succesivi, consideram alimentat nfurarea
statorului 1, care are polil fa n fa cu polii rotorului 1. Prin decuplarea nfurrii statorului
1 i cuplarea nfurrii statorului 2 reluctana circuitului magnetic care se nchide prin acest
stator i rotorul su nu este minim; ca urmare, asupra rotorului 2 va aciona un cuplu
electromagnetic care va aduce rotorul 2 n poziia corespunztoare reluctanei minime a
circuitului, cuplul devenind zero.
Din forma caracteristicii cuplului static se observ c motorul are o comportare stabil
numai n zona cresctoare pozitiv a caracteristicii de la Mmax la +Mmax, apoi comportarea
este labil, deoarece prin creterea unghiului cuplul care se opune deplasrii scade i n final
ajunge la zero.
Dac unghiul crete n continuare, atunci comportarea este instabil, deoarece cuplul
acum negativ acioneaz n sensul unei mriri n continuare a unghiului , pn cnd se ajunge
la urmtoarea poziie stabil, dup parcurgerea unei perioade complete a caracteristicii. Forma
de variaie a cuplului funcie de unghi, n realitate este aproximativ sinusoidal depinznd de
particularitile constructive ale motorului, mai ales de conformaia polilor i de gradul de
saturaie a circuitului magnetic.
-10-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


Vom considera din nou motorul pas cu pas cu trei statoare din figura 2.12. De data
aceasta rotorul este realizat cu polii din magnei permaneni astfel aezai, nct polaritatea
acestora s alterneze pe circumferina rotorului. Fiind alimentat nfurarea statorului 1 se
realizeaz o succesiune de poli nord-sud de-a lungul cireumferinei statorului i rotorului, iar
polii de polaritate contrar ai statorului i rotorului se vor gsi fa n fa, cuplul care
acioneaz asupra rotorului fiind zero. Dac se ncearc rotirea rotorului din aceast poziie
iniial, va apare un cuplu care se opune deplasrii. Acest cuplu crete atingnd un maxim n
poziia n care axa polului rotoric coincide cu axa median a doi poli statorici, apoi cuplul care
se opune deplasrii scade devenind zero, cnd polii statorici i rotorici de acelai semn se
gsesc fa n fa (figura 3.2. curba trasat cu linie ntrerupt).
n continuare, prin mrirea unghiului de deplasare a rotorului, cuplul care se opune
micrii i schimb sensul atingnd un maxim negativ i apoi devenind din nou zero, cnd
polii de nume contrar sunt din nou fa n fa. Aceasta este noua poziie de echilibru stabil.
Pentru explicarea efecturii succesive a pailor considerm alimentat statorul 1, polii
de nume contrar ai statorului i rotorului fiind fa n fa. Prin decuplarea nfurrii
statorului 1 i cuplarea nfurrii statorului 2 se va crea o succesiune de poli nord-sud pe
acest stator care pot atrage polii de nume contrar ai rotorului 2 i acesta se va roti astfel cu un
unghi p. Alimentnd n continuare nfurarea statorului 3 i decuplnd nfurarea statorului
2, rotorul se va roti nc cu un unghi pentru ca rotorul s continue rotaia i dup decuplarea
statorului 3 trebuie ca nfurarea statorului 1 s fie cuplat astfel nct polaritatea polilor s
fie invers ca n cazul precedent. n continuare, se vor alimenta tot cu polaritate invers
nfurrile statoarelor 2 i 3. Spre deosebire pe motorul tip reactiv, procedeul de cuplare a
nfurrilor se repet dup 2m pai, adic n cazul de fa dup 6 pai. O rotaie complet a
axului motor are loc n 2m p=18 pai pentru numrul de poli 2p=6.
Ca i la motoarele pas cu pas de tip reactiv, la motoarele pas cu pas cu rotor
magnetizat permanent caracteristica cuplului static are n practic o form aproximativ
sinusoidal datorit numeroaselor influene neliniare.

3.3 Mrimi caracteristice ale motoarelor pas cu pas


n studiul regimurilor de funcionare a motoarelor pas cu pas, precum i pentru
aprecierea comparativ a performanelor diferitelor tipuri de mnotoare pas cu pas, este
necesar cunoaterea mrimilor lor caracteristice. Aceste mrimi caracteristice sunt:
- unghiul de pas sau pasul motorului
-11-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


- cuplul static sincronizat
- cuplurile limit
- frecvenele limit

3.4 Unghiul de pas (pasul motorului)


Unghiul de pas reprezint unghiul de rotaie al rotorului corespunztor unui tact de
comand. Din punct de vedere cantitativ el depinde de numrul de perechi de poli i de
numrul nfurrilor de comand decalate spaial una de alta; n cazul motorului pas cu pas
de tip activ de numrul dinilor rotorici i n cazul motorului pas cu pas de tip reactivde
numrul nfurrilor de comand. De asemenea, unghiul de pas depinde, la ambele tipuri de
motoare, de secvena de comand a nfurrilor statorului. Spre exemplu, n.cazul unei
secvene de tipul 11, 22, 33 . . . se obine un pas egal cu jumtate din valoarea
corespunztoare unei secvene simple 123 . . .
Din punct de vedere cantitativ mrimea unghiului de pas depinde de precizia
configuraiei"geometrice a circuitului magnetic. Nesimetria circuitului magnetic poate
provoca mici variaii ale unghiului de pas, care ns se compenseaz de-a lungul unei rotaii
complete.

3.5 Cuplul static sincronizat


Caracteristica cuplului static sincronizant reprezint variaia cuplului electromagnetic
dezvoltat de motor n funcie de unghiul de decalaj al axei magnetice a rotorului fa de axa
fluxului rezultant statoric, n cazul cnd nfurrile de comand sunt parcurse de curent. n
general cuplul electromagnetic variaz periodic cu unghiul de rotaie dup o funcie apropiat
de o sinusoid.

3.6 Cuplurile limit


O deosebit importan n alegerea domeniului de funcionare a motoarelor pas cu pas
o are cunoaterea valorilor maxime ale cuplului aplicat pe arborele motorului.
-12-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


n regim permanent de funcionare se definete un cuplu critic cvazi-stafionar ca fiind
valoarea maxim la care poate mri cuplul rezistent, la o frecven de comand dat, fr a
cauza ieirea din sincronism a motorului (pierderea pailor). La frecvene de comand mai
mari, cuplul critic cvazistaionar este mai mic, variaia cuplului critic cvazistaionar cu
frecvena de comand reprezint caracteristica de sarcin limit a motorului pas cu pas.
La pornire se definete un cuplu critic de pornire, care reprezint valoarea maxim a
cuplului rezistent la care motorul poate porni cu frecven dat fr pierdere de pai. Variaia
cuplului critic de pornire cu frecvena de comand se numete caracteristic limit de
pornire.
n mod similar se definesc cuplurile critice de oprire i reversare.

3.7 Frecvenele limit


Caracteristica de sarcin limit, precum i cele dinamice limit (de pornire, oprire i
reversare), s-au stabilit lund ca reper o frecven de comand dat. Astfel s-au definit
cuplurile limit. Dac se ia ca referin un cuplu rezistent dat se pot defini n mod similar
frecvenele limit (critice) la funcionarea n regim static i dinamic (pornire,
oprire,reversare).
Toate mrimile critice depind n cea mai mare msur de panta curentului ce se
stabilete n nfurrile de comand i de ineria sistemului de acionare.
Caracteristicile statice i dinamice cuplu frecven au forme ce se apropie de
hiperbol, prezentnd una sau mai multe ei datorit prezenei fenomenului de rezonan
mecanic. La nivelul superior se situeaz caracteristica limit de oprire, aceasta din cauz c
efectul de oprire este favorizat de sensul cuplului rezistent. Sub caracteristica limit de oprire
urmeaz, n ordine, caracteristicile de sarcin limit, de pornire i de reversare, aceasta din
urm exprimnd regimul cel mai greu de funcionare sincron a motorului pas cu pas. De
altfel, caracteristica limit de reversare este acoperitoare n sensul c alegerea domeniului de
funcionare cuplu frecven a motorului pe baza acestei caracteristici, determin o
funcionare fr pierderi de pai n orice regim de funcionare.

3.8 Motor pas cu pas cu un stator i mai multe nfurri de comand


n ultimul timp o dezvoltare mai accentuat au primit-o motoarele pas reactive
-13-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


polifazate cu un stator. Cu acest tip de motoare se pot realiza pai mult mai mici, ajungndu-se
pn la fraciuni de grad. Aceste motoare se execut cu trei sau patru nfurri de comand.
Numrul minim de nfurri de comand pentru asigurarea reversrii sensului de
rotaie este de trei. Totui motoarele pas cu pas cu patru nfurri de comand au o utilizare
mai larg fa de motoarele pas cu pas cu trei nfurri de comand, datorit urmtoarelor
avantaje:
-au o mai bun utilizare a materialelor active, deoarece pentru o cuplare simultan a
dou nfurri de comand cuplul motor crete de 2 ori;
-zon de stabilitate de 90 grade electrice fa de numai 60 grade electrice n cazul
motoarelor cu trei nfurri de comand;
-cuplul de pornire este egal de 0,7 Mmax fa de 0,5 Mmax la motoarele cu trei nfurri
de comand;
- pentru aceeai valoare a pasului n cazul motoarelor pas cu pas cu patru nfuurri
de comand, numrul dinilor i diametrului rotorului mai mic, ceea ce asigur o funcionare
mai bun n perioadele de tranzitoriu.
Din punct de vedere constructiv motoarele pas cu pas reactive cu trei sau patru
nfurri de comand snt asemntoare. Difer numai prin numrul de poli apareni pe care
snt dispuse nfurrile de comand. De aceea vom prezenta n continuare numai principalele
tipuri constructive de motoare pas cu pas reactive cu patru nfurri de comand.
Motorul pas cu pas reactiv cu patru nfurri de comand i cu circuit magnetic
simetric const dintr-un stator cu opt poli apareni,pe care sunt dispuse opt secii de bobine
conectate n patru faze (fig.1.3, a)
Pe suprafaa tlpilor polilor statorici snt tiai un numr de dini repartizai uniform i
simetric fa de axa polilor. Rotorul este un cilindru din material feromagnetic cu dini
uniform repartizai pe circumferin a cror lime este egal cu limea dinilor statorici.
Prin alimentarea nfurrii de comand situat pe polii 1 i V, rotorul se rotete sub
aciunea cuplului reactiv i ocup o poziie n care axele dinilor si i a dinilor polului 1
coincid, adic reluctanla magnetic a ntrefierului este minim. Dinii rotorici care se gsesc
sub dinii polilor vecini (II i VIII) sunt decalai fa de acetia cu 1/4 din pasul polar, adic cu
unghi egal cu p. Prin comutarea alimentrii de la infurarea 1 la nfurarea 2 rotorul se
rotete din nou cu un unghi corespunztor pasului p, i ocup poziia corespunztoare
reluctanei magnetice minime a intrefierului de sub polul II.

-14-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

a)

b)

c)
Figura 3.3. Motor pas cu pas reactiv, de tip reductor
a cu circuit magnetic simetric; b cu patru nfurri de comand i circuit magnetlc
nesimetric; c cu opt nfurri de comand i circuit magnetic nesimetric.
n realitate la acest tip de motor se pot cupla simultan i dou nfurri de comand
succesive, ceea ce duce la mrirea cuplului de rotaie. n acest caz fluxul magnetic se nchide
prin polii vecini, iar poziia rotorului pentru care se obine reluctana magnetic minim a
ntrefierului se deplaseaz cu p/2 i coincide cu axa de simetrie a polilor statorici pe care se
gsesc nfurrile alimentate.
Motorul pas cu pas reactiv cu patru nfurri de comand i cu sistem magnetic
nesimetric, n principiu funcioneaz asemntor cu motoarele pas cu pas reactive avnd
circuitul magnetic simetric. Motorul are numai patru poli apareni (fig. 3.3, b) pe care sunt
dispuse cele patru nfurri de comand, fiecare nfurare fiind alctuit dintr-o singur
secie.
Avantajul acestui tip de motor const n faptul c dezvolt un cuplu mai mare pe
-15-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


unitatea de greutate dect n cazul motoarelor cu sistem magnetic simetric. Dezavantajul
const n existena unor cupluri de frecri suplimentare n lagre i a unui zgomot n
funcionare cauzat de prezena unor fore de atracie magnetice nesimetrice.
Motorul pas cu pas cu opt nfurri de comand i cu sistem magnetic nesimetric
realizeaz valori unghiulare ale pasului p mai mici, pentru acelai numr de dini statorici i
rotorici. Statorul acestui tip de motor are opt poli apareni pe care snt dispuse opt bobine, ce
realizeaz cele opt nfurri de comand (fig. 3.3, c). nfurrile de comand se alimenteaz
cu impulsuri de aceeai polaritate, iar pentru mrirea cuplului se pot alimenta simultan dou
din trei nfurri i n cazul acestui tip de motor apar aceleai fore magnetice de atracie
nesimetrice, ceea ce la motoarele peste o anumit putere creaz un zgomot n funcionare
suprtor.
n cazul tuturor motoarelor pas cu pas reactive cu un stator i mai multe nfurri de
comand, pentru ca s se asigure o rotaie uniform rotorului, este necesar ca ntre dinii
rotorici i cei statorici care aparin polilor a cror nfurri urmeaz s fie alimentate s existe
un decalaj unghiular egal cu 3600/mzr(unde z este numrul dinilor rotorici). Pentru fiecare
comutare a nfurrilor de comand axa cmpului magnetic statoric se rotete cu un unghi
egal cu distana polar statoric.
=3600'/2p

unde 2p este numrul polilor statorici.

n acest caz rotorul se va roti cu un unghi egal cu un pas p =3600/mzr


Se vede c rotorul se rotete diferit de cmpul magnetic statoric de /p ori. Raportul
/p se numete coeficientulde reducere electromagnetic,iar motoarele pas cu pas reactive
prezentate se numesc de tip reductor.

Configuraia pinilor :
Rou

- mas

Rou

- mas

Negru - bobina 1
Portocaliu

- bobina 2

Maro

- bobina 3
-16-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL


Galben - bobina 4
Valoarea rezistenelor bobinelor (n ) :
Rou-Rou
Negru
Portocaliu
Maro
Galben

Rou-Rou
X
73,5
71,7
72,7
73,8

Negru
73,5
X
144,8
145,8
146,9

Portocaliu
71,7
144,8
X
144
145

Maro
72,7
145,8
144
X
146

Galben
73,8
146,9
145
146
X

Configuraia pinilor :
Negru - mas
Alb
Verde-alb
Rou-alb
Verde
Rou

- mas
- bobina 1
- bobina 2
- bobina 3
- bobina 4

Valoarea rezistenelor bobinelor (n ) :


Negru Alb
Verde-alb
Rou-alb
Verde
Rou

Negru - Alb
X
5,3
5,2
5,3
5,2

Verde-alb
5,3
X
10,3
10,2
10,2

-17-

Rou-alb
5,2
10,3
X
10,2
10

Verde
5,3
10,2
10,2
X
10,1

Rou
5,2
10,2
10
10,1
X

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

4. ACIONAREA ELECTRONIC
4.1 Modul de comand pentru motoarele pas cu pas
Schema bloc de comand pentru motoarele pas cu pas este urmtoarea :

Figura 4.1. Schema bloc de comand


n cazul cnd comanda se face de la un sistem numeric (calculator), modulul de
comand al motoarelor pas cu pas este format doar din dou blocuri funcionale :
- blocul de distribuie al impulsurilor
- blocul amplificator de ieire ctre motor
4.2. Blocul de distribuie al impulsurilor
Pentru comanda unui motor unipolar cu patru faze, cel mai simplu distribuitor de
impulsuri este prezentat n figura de mai jos. Acesta este un distribuitor nereversibil (d
impulsurile de ieire doar ntr-un singur sens, deci motorul se poate roti doar ntr-un singur
sens). Ca intrare nu are nevoie dect de un semnal care d impulsul de comanda, la tranziia
acestuia dintr-o stare n alta, motorul face un pas.
Acesta este format doar dintr-un circuit cu dou bistabile JK i patru porti I
comandate de ieirile bistabilelor. n practic avem ns nevoie de un distribuitor reversibil,
pentru ca motorul s se poat roti n ambele sensuri.

-18-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Figura 4.2. Distribuitor de impulsuri


Cel mai elegant mod de comand de la dispozitivul numeric este prin dou semnale:
unul s indice sensul de rotaie (CW sau CCW), iar cellalt s dea impulsul de comand, adic
la o trecere de pe 0 pe 1 sau de pe 1 pe 0 logic, motorul s fac un pas.
Cel mai simplu bloc de distribuie (ca numr de componente) este cel din figur:

Figura 4.3. Bloc de distribuie

-19-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Intrarea se face pe la S1 sensul de rotaie i STEP tactul.


Aceast schem contine i amplificatorul final dat de Q1,Q2,Q3 i Q4. Schema este
format din patru pori SAU EXCLUSIV (U1 - circuitul integrat 486) i dou bistabile JK
Master Slave (U2 - circuitul 473).
Forma impulsurilor la ieire este urmtoarea :

Figura 4.4. Forma impulsurilor la ieire

Astfel, la fiecare impuls de comand, motorul nainteaz un pas ntreg, dar face pasul
ntre dou bobine alturate, deci polii statorului i ai rotorului nu se aliniaz, sunt alimentate
dou bobine n acelai timp.
Pentru a alinia polii, trebuie ca doar o singur bobin s primeasc excitaia la un
moment dat. Schema de comand din figur ndeplinete acest deziderat.

-20-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Figura 4.5. Schem de comand


Bitul de sens se introduce la SENS, iar tactul la IMP. INTR. Acest circuit de comand
este format dintr-un circuit 473 (dou bistabile JK), un circuit inversor 404 (trei pori NU), un
circuit 400 (patru pori SI-NU) i un circuit 451.
Forma impulsurilor la ieire este urmtoarea :

Figura 4.6. Forma impulsurilor la ieire

-21-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Pentru a crete artificial constanta motorului (numrul de pai pe o rotaie complet)


vom conduce motorul din jumtate n jumtate de pas. Astfel constanta de rotaie a motorului
se dubleaz.
Circuitul de comand din figura realizeaz acest tip de conducere.

Figura 4.7. Circuit de comand


Forma impulsurilor la ieire pentru cele patru faze este urmtoarea :

-22-

UNIVERSITATEA AUREL VLAICU FACULTATEA DE INGINERIE

PROIECT DE DIPLOM PLOTER DE MASA INDUSTRIAL

Figura 4.8. Forma impulsurilor la ieire

4.3. Blocul amplificator de ieire ctre motor


Acest bloc face trecerea de la semnalele logice de la ieirea blocului de distribuie a
impulsurilor ce furnizeaz o tensiune de 5V (pe 1 logic), dar un curent foarte mic (maxim 16
mA). Pentru a comanda bobinele motorului pas cu pas avem nevoie de o tensiune de minim
12V. n componena blocului de amplificare avem aadar nevoie tranzistoare de putere medie
sau mare, n funcie de puterea motorului pas cu pas.
Circuitul standard de amplificare este cel din figura :

-23-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Figura 4.8. Bloc amplificator


Acest amplificator este pentru un motor pas cu pas cu reluctan variabil, cu trei faze,
alimentat unipolar. Amplificatorul de putere utilizeaz o configuraie Darlington standard ca
ntreruptor pe faza motorului. Cnd semnalul de intrare pe una din faze este 1 logic, comanda
este aplicat pe baza circuitului Darlington, adic tranzistoarelor Q1 i Q2, prin rezistena R1.
Saturarea lui Q1 asigur o cale de curent de la alimentarea cu tensiune a motorului, U, prin
nfurarea motorului, la mas.
Cnd semnalul de intrare de la distribuitor este 0 logic, baza lui Q1 este pus la mas
prin poarta logic. Aceasta blocheaz tranzistorul Q1 i n consecin pe Q2.
Dioda D1 conectat n serie cu baza lui Q1 asigur izolaia ntre alimentarea
distribuitorului i cea a motorului, de nalt tensiune. Diode D3, D4 i D5 asigur limitarea
supratensiunilor la blocarea tranzistoarelor, datorit curentului de fug ce se nchide prin
faza motorului i dioda respectiv.
4.4. Montajul de comand

-24-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Ca alternativ la acest circuit, dar cu logic de funcionare identic propunem montajul de mai
jos pentru comanda n patru faze a motoarelor pas cu pas unipolare.

Figura 4.9. Montaj de comand motoare

Figura 4.10. Montaj de comand cap de scriere

-25-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Acest montaj poate comanda dou motoare pas cu pas i un releu prin date de
comand digitale provenite de la un calculator. n plus, el poate s detecteze poziiile a dou
microntreruptoare i s furnizeze calculatorului nivelurile logice respective. Toate aceste
proprieti fac din montajul prezentat o interfa ideal pentru utilizarea ca ploter X-Y.
Impuls

Motor 1

Motor 2

De pas
L1

L2

L3

L4

L5

L6

L7

L8

Circuitul integratului IC1 este configurat ca dou latch-uri set-reset (S-R) care
elimin vibraii de contact ale celor dou microntreruptoare S1 i S2 , a cror poziie este
detectat de biii D5 respectiv D6 ai portului de citire al calculatorului. Circuitul de comand
al releului construit cu T1 i componentele aferente, poate comuta n poziiile activ i
respectiv inactiv un cap de desenare comndat prin solenoid sub controlul bitului de port 4.
Comanda motorului este realizat de porile XOR, N5N12, bistabilele FF1FF4 i
circuitul integrat de comand a bobinelor motorului, IC4. Acest ansamblu poate comanda
dou motoare pas cu pas, unipolare, n patru faze, lucrnd la jumtate de pas prin fixarea
direciei de rotire cu ajutorul D1 i D3 i printr-o tranziie logic H-L pe bitul D0 sau D2.
Funciile de comand sunt rezumate n tabel. Circuitul de comand a motorului, IC4, poate
furniza 500 mA pe fiecare faz la o tensiune maxim a motorului de 50 V. ULN 2803 A are
diode interne de protecie mpotriva t.e.m. generate de bobinajul motorului atunci cnd acesta
este dezactivat.
Pentru ca interfaa prezentat aici s poat fi controlat prin calculator, se configureaz
portul I/0 pentru 5 bii de ieire, D0D4 i doi bii de intrare, D5 i D6, i se trimit ctre
montaj semnalele adecvate.

-26-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Acest tip de interfa necesit dou surse de alimentare de 5 V pentru circuitele logice
i comanda releului i 12 V (pozitiv) pentru bobinajele motorului pas cu pas. L1L4
reprezint motorul 1 iar L5L8 motorul 2.

-27-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

5.COMANDA CU PC
5.1. Portul paralel
Portul paralel al PC-ului este interesant datorit programrii sale mai simple fa de
portul serial care necesit un protocol de transmisie foarte precis. La origine, rezervat
conexiunii dintre imprimant i calculator, portul paralel este des utilizat actualmente i la alte
aplicaii datorit vitezei sale ridicate de transmisie a informaiei numerice. Se poate conecta la
acest port fie scanerul, fie un cititor pentru discuri de mare capacitate, precum i diferite
instrumente de msur sau cartele electronice diverse.
Fr a pretinde abordarea n totalitate a aspectelor particulare a acestei interfee
prezentm cteva informaii importante.
Portul paralel dispune de urmtoarele linii:
-

8 linii de date

4 linii de control

5 linii de stare (pntru a verifica starea imprimantei)

mai multe linii de mas

Pentru conexiunea pe portul paralel sunt utilizai conectorii SUBD25 (tip Canon) i
Centronics. n tabel sunt date numerotarea pinilor pentru aceti conectori, funcia ndeplinit,
sensul de circulaie a informaiei i tipul registrului, iar n figura modul de cablare a unui
conector SUBD25 cu unul tip Centronics utilizat la imprimant.
SUBD25

Tip

Semnificaie

Centronics

Sens

Tip

informaie

linie

STROBE

Ieire(-Intrare)

Control

D0

Ieire(-Intrare)

Date

D1

Ieire(-Intrare)

Date

D2

Ieire(-Intrare)

Date

D3

Ieire(-Intrare)

Date

D4

Ieire(-Intrare)

Date

D5

Ieire(-Intrare)

Date

D6

Ieire(-Intrare)

Date

-28-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

D7

Ieire(-Intrare)

Date

10

10

ACKNOWLEDG

Intrare

Statut

E
11

11

BUSY

Intrare

Statut

12

12

PAPER OUT

Intrare

Statut

13

13

SELECT

Intrare

Statut

14

14

AUTO FEED

Intrare

Control

15

32

ERROR

Intrare

Statut

16

31

INITIALIZE

Ieire

Control

17

36

SELECT

Ieire

Control

PRINTER
1825

1930

GND(MAS)

Figura 4.11. Modul de cablare a unui conector de port paralel

-29-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Tabelul prezentat este de fapt valabil pentru portul paralel de tip compatibil
(unidirecional) i nu bidirecional. Rolul portului paralel a fost la nceput unic, acela de a
transmite datele ctre imprimant, ceea ce justific de ce datele (liniile D0D7) circulau ntrun singur sens, de la PC la imprimant i nu n ambele sensuri. Sunt porturi care permit
ambele sensuri pentru transmisia informaiei.
Exist diferite tipuri de interfee paralele, definite de standardul IEEE1284;
-

tip compatibil (SPP-Standard Parallel Port)

pe 4 bii sau NIBBLE MODE (este unidirecional);

pe 8 bii sau BYTE MODE (este bidirecional)

tip EPP (Extended Capability Port) sau port cu capacitate extins.

Tipul unidirecional pe 4 bii are intrarea de date pe 4 bii, ieirea facndu-se pe 8 bii,
la fel ca la orice port standard. Tipul 1 bidirecional pe 8 bii (tip PS2 bidirecional) conceput
de IBM pentru calculatorul PS2 permite comunicarea acestuia cu perifericele pe 8 linii de date
i are un bit suplimentar rezervat semnalizrii direciei n care se face transportul. Vitezele cu
care se lucreaz sunt ntre 60koctei/s i 300 koctei/s. Tipul bidirecional pe 8 bii (DMA 8
bits-Direct Access Memory 8 bits sau acces direct la memorie pe 8 bii) echipeaz modelele
PS2 IBM tip 57,90 i 95 i prezint o vitez de lucru mult mai mare dect precedentele
datorit accesului direct la memorie.
Tipul EPP realizat n principal de INTEL ofer vitez de transmisie de la 1 Moctet
pn la 2 Moctei per secund. Tipul de port cu capabilitate extins ECP, realizat printre alii
de Microsoft, ofer de asemenea vitez de transmisie ridicat i necesit utilizarea
unui canal DMA. PC-urile actuale sunt configurate n principal cu port paralel n mod EPP
sau Ecp care sunt compatibile cu majoritatea perifericelor existente pe pia. Astfel, liniile de
date D0D7 vor fi de tip Intrare/Ieire. De preferin se seteaz n BIOS (setup) tipul EPP.
n continuare se va prezenta descrierea semnalelor vehiculate pe portul paralel.
/ STROBE: aceast linie, activ pe zero logic, indic faptul c datele sunt prezentate
pe liniile D0D7
D0D7: aceste 8 linii formeaz bus-ul de date prin care sunt vehiculate, sub form
numeric, caracterele imprimantei
/ACK(sau ACKNOWLEDGE): indic dac s-a recepionat bine datele i dac se
poate continua transmisia
-30-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

BUSY : cnd este pe 0 semnific faptul c bufferul imprimantei este plin i


avertizeaz PC-ul c nu mai poate primi date pn la eliberarea buffer-ului
PE: semnific paper error, iar PC-ul este atenionat c alimentarea cu hrtie a
imprimantei este ntrerupt
SELECT: aceast linie indic calculatorului dac imprimanta este on line sau off
line
/AUTOFEED: cnd acest semnal este pe 1, imprimanta efectueaz un salt de linie la
fiecare caracter return
/ERROR: linie activ pe 0, indic PC-ului c imprimanta a detectat o eroare.
/INIT : PC-ul poate efectua o iniializare a imprimantei prin intermediul acestei linii
/SELECT IN : cnd linia se afl pe 0 ,calculatorul pune imprimanta pe o alt linie
GND: masa de semnal.
Not: semnalele scrise cu slash sunt active pe 0 logic, iar celelalte pe 1 logic.
Calculatorul dispune n principiu de dou porturi paralele ce utilizeaz domeniul de
adrese (hexazecimale) de la 370h la 37Fh pentru LPT1 (denumire generic a portului paralel)
sau de la 270h pn la 27 Fh pentru LPT2.
Sunt PC-uri care suport pn la patru porturi paralele, notate: LPT14;LPT1 i LPT2
se gsesc la primul domeniu de adrese (cu ntrerupere IRQ5), iar LPT3 i LPT4 la al doilea
domeniu (fr ntrerupere).
Programarea portului paralel se face foarte simplu: trei regitri sunt necesari pentru a
controla total semnalele. Dac PC-ul are mai multe porturi paralele, atunci este necesar cte un
grup de trei regitri pentru fiecare port.
Datele se afl la adresa 378h. Cei 8 bii de date (transmise sau recepionate) pe un port
bidirecional au urmtoarea dispunere:
9

D7

D6

D5

D4

4
D3

D2

D1

D0

La adresa 379h se afl informaia pentru semnalizarea strii imprimantei, primii trei
bii sunt nedefinii, iar ceilali au urmtoarea semnificaie:
-

bit 3: ERROR;

bit 4: ON LINE (imprimanta este conectat);

bit 5: PAPER END (imprimanta trebuie alimentat cu hrtie)


-31-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

bit 6: ACK (transmisia datelor s-a efectuat bine);

bit 7: BUSY (imprimanta este ocupat).

Controlul imprimantei se face cu un registru aflat la adresa 37Ah. Primii 4 bii sunt
imaginea semnalelor STROBE, AUTO FEED, INIT i SELECT IN. Bit-ul 4 autorizeaz sau
nu
declararea unei ntreruperi (IRQ5) atunci cnd ACK este pe 0 logic (care semnific c
imprimanta a validat recepia unui caracter). Dac bit-ul BIT CTRL este pe 0 se pot scrie date
pe portul paralel, iar dac este pe 1, permite lectura datelor.
-

bit 0 :STROBE ;

bit 1 :AUTOFEED;

bit 2:INIT

bit 3: SELECT IN

bit 4: IRQ INABLE

bit 5: BIT CTRL

bit 6 i bit 7 : nu se utilizeaz

5.2. Configuraia portului paralel


Portul paralel al calculatorului este o cale uor de folosit pentru comanda diferitelor
dispozitive logice exterioare.
Configuraia pinilor :

Figura 4.12. Configuraia pinilor


-32-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Portul paralel original IBM-PC are un total de 12 ieiri i 5 intrri digitale, accesate
prin 3 porturi de cte 8 bii, consecutive n spaiul de adresare a procesorului.
- 8 ieiri accesate prin portul DATA (adres de baz) D0 D7
- 5 intrri (una inversat) accesate prin portul STATUS (adres de baz +1) S3 S7
4 ieiri (3 inversate) accesate prin portul CONTROL (adres de baz +2) C0 C3
Conectorul este mam cu 25 de pini, D-Type.
n aplicaia data, pinul 2 (D0) i 3 (D1) s-au folosit pentru direcie i tact pentru
deplasarea pe o axa, pinul 4 (D2) i 5 (D3) s-au folosit pentru direcie i tact pentru deplasarea
pe cealalt axa iar pinul 6 (D4) a fost utilizat pentru controlul peniei. Pinii afereni ieirilor
D5, D6 i D7 nu s-au utilizat.
Ca intrri s-au folosit pinii 13 i 15 ca semnale de la limitatorii de retragere ai capului
de scriere n momentul nceperii unui nou desen.
De remarcat este faptul c configurarea iniial a formatului de lucru, adic definirea
axelor de coordonate OXY se poate modifica prin schimbarea semnalelor logice aplicate
blocurilor electronice, furnizate de perechile de ieiri D0-D1, respectiv D2-D3.
Cu alte cuvinte, dac semnalele logice furnizate de perechile de ieiri D0-D1 sunt
aplicate celuilat modul electronic i invers, atunci deplasarea pe axa OX devine deplasare pe
axa OY i invers. Trebuie avut n vedere i modificarea semnalelor provenite de la limitatorii
de retragere, adic schimbarea conexiunilor din pinul 13 n 15 i invers.

-33-

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

6. PROIECTAREA SOFTULUI PENTRU PLANUL DE SCRIERE


6.1. Limbajul de programare
Una din problemele deosebite n execuia machetei a fost proiectarea softului pentru
planul de croire. Programul (soft-ul) trebuie s fie foarte flexibil pentru ca s asigure prin
funciile sale realizarea unei largi game de tipuri de repere.
Plecarea a constituit-o necesitatea practic de realizarea a unor tipuri i forme variate
de repere care s satisfac aproape toate cerinele tehnologice. Proiectul s-a limitat totui la
cteva forme geometrice simple, dar care se acoper destul de bine necesitile practicii
curente.
Analiznd modul de realizare a machetei, posibilitatea de asimilare a aplicaiei pe o
scar mai larg, precum i limbajele de programare existente i care sunt adecvate scopului
propus, alegerea s-a oprit asupra limbajului de programare C i anume asupra versiunii Visual
C++.
Limbajul C este flexibil i puternic i este folosit n diverse domenii de aplicaie, mai
ales acolo unde caracterul nenumeric predomin: proiectare asistat de calculator, grafic cu
calculatorul, etc.
6.2. Prezentarea programului
Programul a fost intitulat PlotterEditor i ruleaz sub sistemul de operare Windows. Modul
de prezentare este unul comun, programul se prezint ca oricare alt aplicaie care ruleaz sub
Windows. La lansarea programului prin dublu clic pe icoana aflat pe Desktop vom vizualiza
urmtorul ecranul din figura de mai jos (figura 6.1).
Se observ modul de definire a foaiei de lucru care este considerat un format A3, cu
dimensiunea cea mai mare aflat pe axa OX.
n bara de instrumente avem poziionate icoane care au urmtoarea semnificaie:
1. New

- deschiderea unei noi sesiuni (foi) de lucru

2. Open

- deschiderea unei sesiuni (foi) de lucru existente

- 34 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

3. Save

- salvarea sesiunii (foii) de lucru curente

4. Draw Point

- desenare punct

5. Draw Line

- desenare linie

6. Draw Rectangle

- desenare dreptunghi (ptrat)

7. Draw Ellipse

- desenare elips (cerc)

8. Clear Last Drawing

- tergerea ultimului desen de pe foaia curent

9. Print

- tiprirea foii de lucru de ctre imprimant

10. Plot

- plotarea (desenarea) foii de lucru de ctre machet

Figura 6.1. Prezentarea ecranului la nceputul sesiunii de lucru


Comenzile date de funciile Draw Rectangle i Draw Ellipse permit desenarea
ptratelor i cercurilor prin reducerea la cazuri particulare a formelor geometrice specifice
comenzilor. n cadrul funciilor de desenare Draw Point, Draw Line, Draw Rectangle i Draw
Ellipse gsim instruciuni asupra modului de desenare a figurilor precum i raportarea
acestora fa de sistemul de coordonate. n figura 6.2 este exemplificat felul n care se
deseneaz un dreptunghi prin marcarea punctului de nceput i a dimensiunilor pe cele doua
axe de coordonate.

- 35 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Figura 3.2. Exemplu de desenare al unui dreptunghi

6.3. Funciile generale ale programului


Programul opereaz cu instruciuni i funcii generale (unele din ele se regsesc la
programele care ruleaz sub sistemul de operare Windows) i cu funcii specifice create
pentru uurina exploatrii machetei de ctre utilizator.
Funcia File permite accesarea urmtoarelor comenzi (figura 6.3):
1. New
2. Open
3. Save
4. Save as
5. Print
6. Print Prewiew
7. Print Setup

- deschiderea unei noi sesiuni (foi) de lucru


- deschiderea unei sesiuni (foi) de lucru existente
- salvarea sesiunii (foii) de lucru curente
- salvarea sesiunii (foii) de lucru curente cu denumirea dorit
- listarea sesiunii (foii) de lucru curente
- vizualizarea sesiunii (foii) de lucru curente
- setarea sesiunii (foii) de lucru curente i a imprimantei

- 36 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

8. Plot

- comanda de desenare a machetei

9. Plot Setup

- setarea sesiunii (foii) de lucru curente i a machetei

10.Exit

- ncheierea sesiunii de lucru


De reinut faptul c comenzile Print, Print Prewiew, Print Setup nu sunt perfectate

deoarece obiectul prezentului proiect este doar comunicaia program - machet.

Figura 6.3. Prezentarea funciei File

Funcia Edit permite accesul la comanda general de desenare Draw i la comanda de


tergere a ultimului desen Clear Last Drawing. Comanda Draw acceseaz urmtoarele
subcomenzi - funcii de desenare (figura 6.4).
1. Draw Point

- desenare punct

- 37 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

2. Draw Line

- desenare linie

3. Draw Rectangle

- desenare dreptunghi (ptrat)

4. Draw Ellipse

- desenare elips (cerc)

Vizualizarea ecranului specific modului de desenare al unui dreptunghi a fost


prezentat n figura 6.2. Similar se prezint i situaia celorlalte forme geometrice. La oricare
din comenzile de desenare se deschide o caset de dialog n care trebuiesc introduse
parametrii de desenare dorii (punct ncepere desen, lungime i nlime dreptunghi,
diametrele elipsei, etc).
Funcia View permite vizualizarea barei de instrumente (cea care a fost descris la
subcapitolul 6.2 referitor la prezentarea programului) i a barei de stare situat la baza
ecranului. n bara de stare se gsete menionat n orice moment instruciunea aflt n curs.

Figura 6.4. Prezentarea funciei Edit

- 38 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

6.4. Funciile specifice ale programului


Funciile specifice au fost create pentru a uura exploatarea machetei i de a efectua un
control al parametrilor care concur la comanda machetei, implicit la realizarea planului de
croire.
Aceste funcii specifice sunt:
1. Test LPT Port
2. Plot Settup
3. Stepping Delay
Toate aceste funcii specifice se gsesc n comanda Tools (instrumente de desenare)
prezentat n figura 6.5.

Figura 6.5. Prezentarea comenzii Tools

- 39 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

6.4.1. Funcia Test LPT Port


Comenzile de desenare ale machetei de scriere sunt generate i controlate de ctre
calculator. Comenzile furnizate de calculator sunt preluate i prelucrate de blocul de comand
electronic. Interfaa, elementul de legtur ntre calculator i blocul de comand electronic
este portul paralel care transform comenzile de desenare introduse de operator n semnale
logice i le transfer blocul de comand electronic printr-un element fizic mufa de conectare
a portului paralel.
Este foarte important cunoaterea bunei funcionri a portului paralel deoarece o
funcionare necorespunztoare poate genera comenzi eronate.
Funcia Test LPT Port (figura 3.6) permite verificarea n orice moment a portului
paralel prin activarea forata pe nivelul 1 logic a ieirilor portului paralel. Verificarea se face
cu ajutorul unui montaj electronic adecvat.

Figura 6.6. Prezentarea funciei Test LPT Port

- 40 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

6.4.2. Funcia Plot Setup


Aceast funcie permite verificarea corectitudinii deplasrii pe cele dou axe ale
sistemului de coordonate al machetei. Dat fiind posibilitatea apariiei erorilor n execuia
montajului, a utilizrii de tipuri de motoare cu deplasare unghiular pe pas diferite, este
posibil apariia unor nesincronizri n deplasarile individuale pe cele doua axe cu implicaii
directe asupra formelor rezultate.

Figura 6.7. Prezentarea funciei Plot Setup


Prin comanda Move Pen Right se nelege mutarea capului de scriere (tiere) spre
dreapta (translaie pe axa OX), iar prin comanda Move Pen Down se nelege mutarea capului
de scriere (tiere) n jos (translaie pe axa OY). Translaiile pe cele du axe se pot realiza cu 1,

- 41 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

10 sau 100 de pai. Aceast funcie este necesar pentru determinarea constantelor de
deplasare ale mecanismelor generatoare de traiectorie (motor i transmisie mecanic).
Constantele de deplasare de pe axele OX i OY se pot scrie n caseta de dialog. Dac
nu se scriu, programul consider implicit c aceste dou constante sunt identice. Experimental
s-au determinat urmtoarele constante:
-

constanta de deplasare pe axa OX este 0,421 mm/pas

constanta de deplasare pe axa OY este 0,425 mm/pas

Cu ajutorul comenzii Reset, capul de tiere execut retragerea automat n originea


sistemului de coordonate, efectund retragerea pe axa OX precedat de retragerea pe axa OY.
Micrile de retragere pe cele dou axe sunt controlate de limitatori care sunt legai la portul
paralel, acionarea lor genereaz o punere la mas pe doi dintre pinii de conexiune ai portului
paralel i astfel este furnizat o informaie de stare (nivel 0 logic) la biii de comunicare
bidirecional.
6.4.3. Funcia Stepping Delay
Funcia Stepping Delay controleaz viteza de deplasare a capului de tiere, adic
viteza de tiere. Vizualizarea ei pe ecran este prezentat n figura 6.8.
n capitolul dedicat acionrii electronice s-a prezentat modul de comand al
motoarelor pas cu pas. Motorul este comandat cu impulsuri de form dreptunghiular. Pe
frontul pozitiv al impulsului motorul este alimentat, iar n pauza dintre impulsuri nu este
alimentat.
Caseta de dialog care apare la apelarea funciei permite reglarea timpilor de impuls i
pauz dintre impulsuri, astfel obinndu-se frecvene de lucru (alimentare) diferite pentru
motoare adic viteze de tiere diferite.
n caseta de dialog, n dreptul casetei Delay1 (ON) se scrie timpul unui impuls, iar n
dreptul casetei Delay2 (OFF) se scrie timpul de pauz. Cifrele repezint perioade de rulare ale
unor rutine de ntrziere a comenzilor.
Experimental s-a constatat c o funcionare bun se obine cnd raportul dintre timpul
de impuls i timpul de pauz (Delay1/ Delay2) este cuprins ntre 0,5 0,7.
De reinut c aceti timpi sunt dependeni de frecvena de lucru a procesorului
calculatorului care comand macheta.

- 42 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Figura 6.8. Prezentarea funciei Steping Delay

6.5. Executarea scrierilor cu macheta


n figura 6.9 este prezentat o sesiune de lucru care conine toate formele geometrice
cere se pot desena cu programul.
Dup ce s-au stabilit componentele care urmeaz s fie scrise, avnd dimensiunea
hrtiei, se trece la transpunerea acestora n foaia de lucru.

- 43 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Figura 6.9. Executarea scrierilor cu macheta

Dup aezarea figurilor geometrice, se activeaz comanda Plot din bara de instrumente iar
calculatorul va afia o caseta de dialog ateptnd un mesaj de confirmare din partea
operatorului. Acest mesaj condiioneaz nceperea operaiei de scriere.
Calculatorul va comanda i controla ntregul proces de scriere n ordinea strict n care
acestea au fost desenate pe foaia de lucru. Acest lucru este important n cazul reperelor n
form de trapez, poligoane, care pot fi compuse din linii simple. O succesiune judicioas a
liniilor componente poate conduce la reducerea timpilor de scriere.

- 44 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

7. NORME DE TEHNICA SECURITII MUNCII


n exploatarea machetei de tiere termic trebuie respectate anumite norme de tehnica
securitii muncii pentru a prentmpina accidentele de munc.
Alimentare cu energie electric a sursei de alimentare a instalaiei electronice se face
din reea de 220V, 50Hz. Cordonul de alimentare trebuie s fie intact, fr tieturi sau alte
defecte de izolaie. Cordonul trebuie prevzut cu techer, iar priza din care se face alimentarea
trebuie n mod obligatoriu prevzuta cu mpmntare.
n timpul exploatrii sau interveniilor, carcasa de protecie se va ndeprta numai
dup ce tensiunea de alimentare a fost intrerupt.
Nu se fac intervenii de nici un fel n timpul operaiei de tiere efectuat de machet.
Nerespectarea normelor de mai sus pot conduce la electrocutarea personalului de
deservire, la funcionarea necorespunztoare a instalaiei sau la deteriorarea componentelor.
Dac sunt necesare intervenii la modulele de comand electronice, nu se va lsa
niciodat sursa de alimentare fr consumator. Sursa de alimentare este o surs de calculator
cu tensiuni stabilizate de 5 i 12 voli, surs care lucreaz n comutaie. Dac sursa
funcioneaz n gol, ea se poate deteriora sau poate genera pe corpul carcasei tensiuni
periculoase pentru operator, tensiuni care pot provoca electrocutri. Subliniem nc o dat
importana legturii de mpmntare.
Totodat, datorit faptului c utilizm dou tensiuni diferite, sunt interzise interveniile
persoanelor neautorizate. Legturi greite pot duce la defectarea portului paralel al
calculatorului.
Este interzis intervenia n partea de acionare mecanic dup ce a fost dat comanda
de tiere. Mecanismele n micare, n special sistemul de deplasare cu tendon pot provoca
accidente (prinderea hainelor, strivirea degetelor, etc).
Macheta va fi exploatat de ctre un singur operator. Utilizarea acesteia de ctre doi
sau mai muli operatori simultan (n cadrul aceluiai ciclu de tiere) pot cauza nesincronizri
care conduc la accidente de munc.

- 45 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

8. PROGRAMUL PENTRU PLANUL DE SCRIERE


8.1. Desenarea unui punct
// EditDrawPointDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "EditDrawPointDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawPointDlg dialog
CEditDrawPointDlg::CEditDrawPointDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditDrawPointDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawPointDlg)
m_x = 0.0f;
m_y = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawPointDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawPointDlg)
DDX_Text(pDX, IDC_X, m_x);
DDV_MinMaxFloat(pDX, m_x, 0.f, 999.f);
DDX_Text(pDX, IDC_Y, m_y);
DDV_MinMaxFloat(pDX, m_y, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawPointDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawPointDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawPointDlg message handlers

8.2. Desenarea unei linii


// EditDrawLineDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
- 47 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#include "EditDrawLineDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawLineDlg dialog
CEditDrawLineDlg::CEditDrawLineDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditDrawLineDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawLineDlg)
m_x1 = 0.0f;
m_x2 = 0.0f;
m_y1 = 0.0f;
m_y2 = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawLineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawLineDlg)
DDX_Text(pDX, IDC_X1, m_x1);
DDV_MinMaxFloat(pDX, m_x1, 0.f, 999.f);
DDX_Text(pDX, IDC_X2, m_x2);
DDV_MinMaxFloat(pDX, m_x2, 0.f, 999.f);
DDX_Text(pDX, IDC_Y1, m_y1);
DDV_MinMaxFloat(pDX, m_y1, 0.f, 999.f);
DDX_Text(pDX, IDC_Y2, m_y2);
DDV_MinMaxFloat(pDX, m_y2, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawLineDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawLineDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawLineDlg message handlers

8.3. Desenarea unui dreptunghi


// EditDrawRectDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "EditDrawRectDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
- 48 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawRectDlg dialog
CEditDrawRectDlg::CEditDrawRectDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditDrawRectDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawRectDlg)
m_height = 0.0f;
m_width = 0.0f;
m_x = 0.0f;
m_y = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawRectDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawRectDlg)
DDX_Text(pDX, IDC_HEIGHT, m_height);
DDV_MinMaxFloat(pDX, m_height, 0.f, 999.f);
DDX_Text(pDX, IDC_WIDTH, m_width);
DDV_MinMaxFloat(pDX, m_width, 0.f, 999.f);
DDX_Text(pDX, IDC_X, m_x);
DDV_MinMaxFloat(pDX, m_x, 0.f, 999.f);
DDX_Text(pDX, IDC_Y, m_y);
DDV_MinMaxFloat(pDX, m_y, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawRectDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawRectDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawRectDlg message handlers

8.4. Desenarea unei elipse


// EditDrawEllipseDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "EditDrawEllipseDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawEllipseDlg dialog
- 49 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

CEditDrawEllipseDlg::CEditDrawEllipseDlg(CWnd* pParent /*=NULL*/)


: CDialog(CEditDrawEllipseDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawEllipseDlg)
m_x1 = 0.0f;
m_x2 = 0.0f;
m_y1 = 0.0f;
m_y2 = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawEllipseDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawEllipseDlg)
DDX_Text(pDX, IDC_X1, m_x1);
DDV_MinMaxFloat(pDX, m_x1, 0.f, 999.f);
DDX_Text(pDX, IDC_X2, m_x2);
DDV_MinMaxFloat(pDX, m_x2, 0.f, 999.f);
DDX_Text(pDX, IDC_Y1, m_y1);
DDV_MinMaxFloat(pDX, m_y1, 0.f, 999.f);
DDX_Text(pDX, IDC_Y2, m_y2);
DDV_MinMaxFloat(pDX, m_y2, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawEllipseDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawEllipseDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawEllipseDlg message handlers

8.5. Meniul pricipal


// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
- 50 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
// status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
// fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;
// fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
- 51 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFrameWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

8.6. Aplicaia programului


// PlotterEditor.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "MainFrm.h"
#include "PlotterEditorDoc.h"
#include "PlotterEditorView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp
BEGIN_MESSAGE_MAP(CPlotterEditorApp, CWinApp)
//{{AFX_MSG_MAP(CPlotterEditorApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
- 52 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp construction
CPlotterEditorApp::CPlotterEditorApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CPlotterEditorApp object
CPlotterEditorApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp initialization
BOOL CPlotterEditorApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif

// Call this when using MFC in a shared DLL


// Call this when linking to MFC statically

// Change the registry key under which our settings are stored.
// You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CPlotterEditorDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
RUNTIME_CLASS(CPlotterEditorView));
AddDocTemplate(pDocTemplate);
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
- 53 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// Dispatch commands specified on the command line


if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
}

return TRUE;

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
- 54 -

// DDX/DDV support

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

END_MESSAGE_MAP()
// App command to run the dialog
void CPlotterEditorApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp commands

8.7. Interfa desenare forme


// PlotterEditorDoc.cpp : implementation of the CPlotterEditorDoc class
//
#include <stdlib.h>
#include "stdafx.h"
#include "PlotterEditor.h"
#include "PlotterEditorDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc
IMPLEMENT_DYNCREATE(CPlotterEditorDoc, CDocument)
BEGIN_MESSAGE_MAP(CPlotterEditorDoc, CDocument)
//{{AFX_MSG_MAP(CPlotterEditorDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc construction/destruction
CPlotterEditorDoc::CPlotterEditorDoc()
{
// TODO: add one-time construction code here
m_realWidth = 421;
m_realHeight = 297;
_outp(0x378,0);
_outp(0x37A,11);

m_delay1 = 200000;
m_delay2 = 3000000;

- 55 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

CPlotterEditorDoc::~CPlotterEditorDoc()
{
}
BOOL CPlotterEditorDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
}

return TRUE;

/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc serialization
void CPlotterEditorDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
int size = m_drawingArray.GetSize();
ar << size;
for(int i=0 ; i<size ; ++i) {
tagDrawing* drawing = (tagDrawing*) m_drawingArray.GetAt(i);
ar << drawing->type;
ar << drawing->x;
ar << drawing->y;
ar << drawing->width;
ar << drawing->height;
}
}
else
{

// TODO: add loading code here


int size;
ar >> size;
//m_drawingArray.SetSize(size);
int type;
float x,y,width,height;
for(int i=0 ; i<size ; ++i) {
ar >> type;
ar >> x;
ar >> y;
ar >> width;
ar >> height;
tagDrawing* drawing = new tagDrawing;
drawing->type = type;
drawing->x = x;
drawing->y = y;
drawing->width = width;
- 56 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL


drawing->height = height;
//m_drawingArray.SetAt(x,drawing);
m_drawingArray.Add(drawing);

}
UpdateAllViews(NULL);

/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc diagnostics
#ifdef _DEBUG
void CPlotterEditorDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CPlotterEditorDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc commands
void CPlotterEditorDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
int size = m_drawingArray.GetSize();
for(int i=0 ; i<size ; ++i) {
tagDrawing* drawing = (tagDrawing*) m_drawingArray.GetAt(i);
delete drawing;
}
m_drawingArray.RemoveAll();
}

CDocument::DeleteContents();

8.8. Interfa casete dialog


// PlotterEditorView.cpp : implementation of the CPlotterEditorView class
//
#include
#include
#include
#include

<stdlib.h>
<conio.h>
<afx.h>
<math.h>

#include "stdafx.h"
#include "PlotterEditor.h"
#include "PlotterEditorDoc.h"
#include "PlotterEditorView.h"
#include "EditDrawPointDlg.h"
#include "EditDrawLineDlg.h"
- 57 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#include
#include
#include
#include
#include

"EditDrawRectDlg.h"
"EditDrawEllipseDlg.h"
"TestLPTDlg.h"
"PlotterConstDlg.h"
"ToolsSetDelayDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PI 3.1415
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView
IMPLEMENT_DYNCREATE(CPlotterEditorView, CView)
BEGIN_MESSAGE_MAP(CPlotterEditorView, CView)
//{{AFX_MSG_MAP(CPlotterEditorView)
ON_WM_SIZE()
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_LAST, OnUpdateEditClearLast)
ON_COMMAND(ID_EDIT_DRAW_POINT, OnEditDrawPoint)
ON_COMMAND(ID_EDIT_CLEAR_LAST, OnEditClearLast)
ON_COMMAND(ID_EDIT_DRAW_LINE, OnEditDrawLine)
ON_COMMAND(ID_EDIT_DRAW_RECTANGLE, OnEditDrawRectangle)
ON_COMMAND(ID_EDIT_DRAW_ELLIPSE, OnEditDrawEllipse)
ON_COMMAND(ID_TOOLS_TEST_LPT, OnToolsTestLpt)
ON_COMMAND(ID_TOOLS_PLOTTER_CONST, OnToolsPlotterConst)
ON_COMMAND(ID_FILE_PLOT, OnFilePlot)
ON_COMMAND(ID_TOOLS_SET_DELAY, OnToolsSetDelay)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView construction/destruction
CPlotterEditorView::CPlotterEditorView()
{
// TODO: add construction code here
m_plotterConstX = 0.4;
m_plotterConstY = 0.4;
}
CPlotterEditorView::~CPlotterEditorView()
{
}
BOOL CPlotterEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
- 58 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// the CREATESTRUCT cs
}

return CView::PreCreateWindow(cs);

/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView drawing
void CPlotterEditorView::OnDraw(CDC* pDC)
{
CPlotterEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
m_virtualOffsetX = 48;
m_virtualOffsetY = 18;
m_virtualHeight = (m_clientHeight - 2 * m_virtualOffsetY);
m_virtualRatio = m_virtualHeight / pDoc->m_realHeight;
m_virtualWidth = m_virtualRatio * pDoc->m_realWidth;
if(m_clientWidth > m_virtualWidth + 2 * m_virtualOffsetX)
m_virtualOffsetX = (m_clientWidth - m_virtualWidth) / 2;
pDC->FillSolidRect(0,0,m_clientWidth,m_clientHeight,RGB(128,128,128));
pDC->Rectangle(m_virtualOffsetX,m_virtualOffsetY,
m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY + m_virtualHeight);
pDC->SelectObject(CPen(PS_DOT,1,RGB(255,255,255)));
pDC->MoveTo(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY + m_virtualHeight);
pDC->MoveTo(m_virtualOffsetX,m_virtualOffsetY + m_virtualHeight / 2);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY + m_virtualHeight / 2);
pDC->MoveTo(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY + m_virtualHeight);
pDC->MoveTo(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY + m_virtualHeight);
pDC->SetTextColor(RGB(255,255,255));
pDC->TextOut(m_virtualOffsetX,m_virtualOffsetY - 16,"0");
_gcvt(pDoc->m_realWidth / 4,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY - 16,m_auxChar);
_gcvt(pDoc->m_realWidth / 2,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY - 16,m_auxChar);
_gcvt(3 * pDoc->m_realWidth / 4,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY - 16,m_auxChar);
_gcvt(pDoc->m_realWidth,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY - 16,m_auxChar);
pDC->TextOut(m_virtualOffsetX - 10,m_virtualOffsetY,"0");
_gcvt(pDoc->m_realHeight / 2,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX - 46,m_virtualOffsetY + m_virtualHeight / 2,m_auxChar);
_gcvt(pDoc->m_realHeight,5,m_auxChar);
- 59 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

pDC->TextOut(m_virtualOffsetX - 46,m_virtualOffsetY + m_virtualHeight,m_auxChar);


pDC->TextOut(m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY + m_virtualHeight,"[mm]");
pDC->SelectObject(CPen(PS_SOLID,1,RGB(0,0,0)));
pDC->SelectStockObject(NULL_BRUSH);
m_auxSize = pDoc->m_drawingArray.GetSize();
for(int i=0 ; i<m_auxSize ; ++i) {
tagDrawing* drawing = (tagDrawing*) pDoc->m_drawingArray.GetAt(i);
m_auxType = drawing->type;
m_auxX = drawing->x;
m_auxY = drawing->y;
m_auxWidth = drawing->width;
m_auxHeight = drawing->height;
switch(m_auxType) {
case 0 : {
pDC->MoveTo(m_virtualOffsetX + m_virtualRatio * m_auxX,m_virtualOffsetY +
m_virtualRatio * m_auxY);
pDC->LineTo(m_virtualOffsetX + m_virtualRatio * m_auxX + 1,m_virtualOffsetY +
m_virtualRatio * m_auxY + 1);
break;
}
case 1 : {
pDC->MoveTo(m_virtualOffsetX + m_virtualRatio * m_auxX,m_virtualOffsetY +
m_virtualRatio * m_auxY);
pDC->LineTo(m_virtualOffsetX + m_virtualRatio * m_auxWidth,m_virtualOffsetY +
m_virtualRatio * m_auxHeight);
break;
}
case 2 : {
pDC->Rectangle(m_virtualOffsetX + m_virtualRatio * m_auxX,m_virtualOffsetY +
m_virtualRatio * m_auxY,
m_virtualOffsetX + m_virtualRatio * (m_auxX + m_auxWidth),
m_virtualOffsetY + m_virtualRatio * (m_auxY + m_auxHeight));
break;
}
case 3 : {
pDC->Ellipse(m_virtualOffsetX + m_virtualRatio * m_auxX,m_virtualOffsetY +
m_virtualRatio * m_auxY,
m_virtualOffsetX + m_virtualRatio * (m_auxX + m_auxWidth),
m_virtualOffsetY + m_virtualRatio * (m_auxY + m_auxHeight));
break;
}
}
}
m_delay1 = pDoc->m_delay1;
m_delay2 = pDoc->m_delay2;
}
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView printing
BOOL CPlotterEditorView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
- 60 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

void CPlotterEditorView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)


{
// TODO: add extra initialization before printing
}
void CPlotterEditorView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView diagnostics
#ifdef _DEBUG
void CPlotterEditorView::AssertValid() const
{
CView::AssertValid();
}
void CPlotterEditorView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CPlotterEditorDoc* CPlotterEditorView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlotterEditorDoc)));
return (CPlotterEditorDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView message handlers
void CPlotterEditorView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
m_clientWidth=cx;
m_clientHeight=cy;
}
void CPlotterEditorView::OnFileNew()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
int size = pDoc->m_drawingArray.GetSize();
for(int i=0 ; i<size ; ++i) {
tagDrawing* drawing = (tagDrawing*) pDoc->m_drawingArray.GetAt(i);
delete drawing;
}
pDoc->m_drawingArray.RemoveAll();
Invalidate();
- 61 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

}
void CPlotterEditorView::OnUpdateEditClearLast(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CPlotterEditorDoc* pDoc = GetDocument();
pCmdUI->Enable(pDoc->m_drawingArray.GetSize() > 0);
}
void CPlotterEditorView::OnEditDrawPoint()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawPointDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 0;
drawing->x = auxDlg.m_x;
drawing->y = auxDlg.m_y;
pDoc->m_drawingArray.Add(drawing);
}
}

Invalidate();

void CPlotterEditorView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)


{
// TODO: Add your specialized code here and/or call the base class
}

Invalidate();

void CPlotterEditorView::OnEditClearLast()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
m_auxSize = pDoc->m_drawingArray.GetSize();
tagDrawing* drawing = (tagDrawing*) pDoc->m_drawingArray.GetAt(m_auxSize - 1);
delete drawing;
pDoc->m_drawingArray.RemoveAt(m_auxSize - 1);
}

Invalidate();

void CPlotterEditorView::OnEditDrawLine()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawLineDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 1;
drawing->x = auxDlg.m_x1;
- 62 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

}
}

drawing->y = auxDlg.m_y1;
drawing->width = auxDlg.m_x2;
drawing->height = auxDlg.m_y2;
pDoc->m_drawingArray.Add(drawing);

Invalidate();

void CPlotterEditorView::OnEditDrawRectangle()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawRectDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 2;
drawing->x = auxDlg.m_x;
drawing->y = auxDlg.m_y;
drawing->width = auxDlg.m_width;
drawing->height = auxDlg.m_height;
pDoc->m_drawingArray.Add(drawing);
}
}

Invalidate();

void CPlotterEditorView::OnEditDrawEllipse()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawEllipseDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 3;
drawing->x = auxDlg.m_x1;
drawing->y = auxDlg.m_y1;
drawing->width = auxDlg.m_x2;
drawing->height = auxDlg.m_y2;
pDoc->m_drawingArray.Add(drawing);
}
Invalidate();
}
void CPlotterEditorView::OnToolsTestLpt()
{
// TODO: Add your command handler code here
_outp(0x378,0);
_outp(0x37A,11);
CTestLPTDlg auxDlg;
auxDlg.DoModal();
_outp(0x378,0);
- 63 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

_outp(0x37A,11);
}
void CPlotterEditorView::OnToolsPlotterConst()
{
// TODO: Add your command handler code here
CPlotterConstDlg auxDlg;
auxDlg.m_delay1 = m_delay1;
auxDlg.m_delay2 = m_delay2;
m_auxResult = auxDlg.DoModal();
if(m_auxResult==IDOK) {
m_plotterConstX = 0;
m_plotterConstY = 0;
if(auxDlg.m_valueX > 0) m_plotterConstX = 210.5 / auxDlg.m_valueX;
if(auxDlg.m_valueY > 0) m_plotterConstY = 297 / auxDlg.m_valueY;
if(auxDlg.m_constX > 0) m_plotterConstX = auxDlg.m_constX;
if(auxDlg.m_constY > 0) m_plotterConstY = auxDlg.m_constY;
if((m_plotterConstX==0) || (m_plotterConstY==0)) {
/*CFile auxFile("plotter.dat",CFile:modeRead);
auxFile.Read(auxChar,6);
m_plotterConstX = atof(auxChar);
auxFile.Read(auxChar,6);
m_plotterConstY = atof(auxChar);
auxFile.Close();
} else {
CFile auxFile("plotter.dat",CFile:modeCreate | CFile::modeWrite);
_gcvt(m_plotterConstX,6,auxChar);
auxFile.Write(auxChar,6);
_gcvt(m_plotterConstY,6,auxChar);
auxFile.Write(auxChar,6);
auxFile.Close();*/
m_plotterConstX = 0.4;
m_plotterConstY = 0.4;
}
}

void CPlotterEditorView::PlotterMove(int incX, int incY, int pen)


{
unsigned char value1, value2;
value1 = 0;
value2 = 0;
if(pen==0) {
value1 = 0;
value2 = 0;
} else {
value1 = 16;
value2 = 16;
}
if(incX>0) {
value1 = value1 | 3;
value2 = value2 | 1;
}
if(incX<0) value1 = value1 | 2;
if(incY>0) {
- 64 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

value1 = value1 | 12;


value2 = value2 | 4;
}
if(incY<0) value1 = value1 | 8;

_outp(0x378,value1);
Delay(m_delay1);
_outp(0x378,value2);
Delay(m_delay2);

void CPlotterEditorView::Delay(long time)


{
for(int i=0;i<time;i++) {}
}
void CPlotterEditorView::OnFilePlot()
{
// TODO: Add your command handler code here
int i;
CPlotterEditorDoc* pDoc = GetDocument();
MessageBox("Press OK when ready to plot!","Plotting...");
while(((~_inp(0x379))&8) == 0) {
_outp(0x378,2);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
while(((~_inp(0x379))&16) == 0) {
_outp(0x378,8);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
m_plotterCurrentX = 0;
m_plotterCurrentY = 0;
m_auxSize = pDoc->m_drawingArray.GetSize();
for(i=0 ; i<m_auxSize ; ++i) {
tagDrawing* drawing = (tagDrawing*) pDoc->m_drawingArray.GetAt(i);
m_auxType = drawing->type;
m_auxX = drawing->x;
m_auxY = drawing->y;
m_auxWidth = drawing->width;
m_auxHeight = drawing->height;
switch(m_auxType) {
case 0 : {
PlotterLineTo(m_auxX,m_auxY,0);
PlotterLineTo(m_auxX + 1,m_auxY + 1,1);
break;
}
case 1 : {
PlotterLineTo(m_auxX,m_auxY,0);
PlotterLineTo(m_auxWidth,m_auxHeight,1);
break;
}
- 65 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

cos(2*i*PI/30)),

case 2 : {
PlotterLineTo(m_auxX,m_auxY,0);
PlotterLineTo(m_auxX + m_auxWidth,m_auxY,1);
PlotterLineTo(m_auxX + m_auxWidth,m_auxY + m_auxHeight,1);
PlotterLineTo(m_auxX,m_auxY + m_auxHeight,1);
PlotterLineTo(m_auxX,m_auxY,1);
break;
}
case 3 : {
PlotterLineTo(m_auxX + m_auxWidth,m_auxY + m_auxHeight / 2,0);
for(i=0;i<30;i++)
PlotterLineTo(m_auxX + m_auxWidth / 2 + ((m_auxWidth / 2) *
m_auxY + m_auxHeight / 2 + ((m_auxHeight / 2) *

sin(2*i*PI/30)),1);

}
}

break;
}

_outp(0x378,0);

void CPlotterEditorView::PlotterLineTo(float X, float Y, int Pen)


{
int xp = m_plotterCurrentX;
int yp = m_plotterCurrentY;
int xf = X / m_plotterConstX;
int yf = Y / m_plotterConstY;
int iv, px, py, nx, ny, nt, nd, ns, anx, any;
nx = xf - xp;
ny = yf - yp;
px = (nx > 0) ? 1: -1;
py = (ny > 0) ? 1: -1;
anx = abs(nx);
any = abs(ny);
if(anx > any) {
nt = anx;
nd = any;
} else {
nt = any;
nd = anx;
}
ns = nt - nd;
iv = (nt >> 1) - ns;
while(nt) {
nt--;
if(iv >= 0) {
iv -= ns;
xp += px;
yp += py;
PlotterMove(px,py,Pen);
} else {
iv +=nd;
if(anx > any) {
xp += px;
PlotterMove(px,0,Pen);
- 66 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL


} else {

yp += py;
PlotterMove(0,py,Pen);

}
m_plotterCurrentX = xp;
m_plotterCurrentY = yp;
}
void CPlotterEditorView::OnToolsSetDelay()
{
// TODO: Add your command handler code here

CToolsSetDelayDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult==IDOK) {
CPlotterEditorDoc* pDoc = GetDocument();
pDoc->m_delay1 = auxDlg.m_delay1;
pDoc->m_delay2 = auxDlg.m_delay2;
m_delay1 = auxDlg.m_delay1;
m_delay2 = auxDlg.m_delay2;
}

8.9. Definire constante plotter


// PlotterConstDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "PlotterConstDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPlotterConstDlg dialog
CPlotterConstDlg::CPlotterConstDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPlotterConstDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPlotterConstDlg)
m_constX = 0.0f;
m_constY = 0.0f;
//}}AFX_DATA_INIT

m_const0 = 1;
m_const1 = 10;
m_const2 = 100;

void CPlotterConstDlg::DoDataExchange(CDataExchange* pDX)


- 67 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPlotterConstDlg)
DDX_Text(pDX, IDC_EDIT1, m_constX);
DDV_MinMaxFloat(pDX, m_constX, 0.f, 10.f);
DDX_Text(pDX, IDC_EDIT2, m_constY);
DDV_MinMaxFloat(pDX, m_constY, 0.f, 10.f);
//}}AFX_DATA_MAP

}
BEGIN_MESSAGE_MAP(CPlotterConstDlg, CDialog)
//{{AFX_MSG_MAP(CPlotterConstDlg)
ON_BN_CLICKED(IDC_RESET, OnReset)
ON_BN_CLICKED(IDC_RIGHT0, OnRight0)
ON_BN_CLICKED(IDC_RIGHT1, OnRight1)
ON_BN_CLICKED(IDC_RIGHT2, OnRight2)
ON_BN_CLICKED(IDC_DOWN0, OnDown0)
ON_BN_CLICKED(IDC_DOWN1, OnDown1)
ON_BN_CLICKED(IDC_DOWN2, OnDown2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterConstDlg message handlers
void CPlotterConstDlg::Delay(long delay)
{
for(int i=0 ; i<delay ; i++) {}
}
void CPlotterConstDlg::OnReset()
{
// TODO: Add your control notification handler code here
while(((~_inp(0x379))&8) == 0) {
_outp(0x378,2);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
while(((~_inp(0x379))&16) == 0) {
_outp(0x378,8);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
m_valueX = 0;
m_valueY = 0;
}
void CPlotterConstDlg::Reset()
{
}
void CPlotterConstDlg::OnRight0()
{
- 68 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// TODO: Add your control notification handler code here

for(m_i=0 ; m_i<m_const0 ; m_i++) {


_outp(0x378,3);
Delay(m_delay1);
_outp(0x378,1);
Delay(m_delay2);
m_valueX++;
}
_outp(0x378,0);

void CPlotterConstDlg::OnRight1()
{
// TODO: Add your control notification handler code here
for(m_i=0 ; m_i<m_const1 ; m_i++) {
_outp(0x378,3);
Delay(m_delay1);
_outp(0x378,1);
Delay(m_delay2);
m_valueX++;
}
_outp(0x378,0);
}
void CPlotterConstDlg::OnRight2()
{
// TODO: Add your control notification handler code here

for(m_i=0 ; m_i<m_const2 ; m_i++) {


_outp(0x378,3);
Delay(m_delay1);
_outp(0x378,1);
Delay(m_delay2);
m_valueX++;
}
_outp(0x378,0);

void CPlotterConstDlg::OnDown0()
{
// TODO: Add your control notification handler code here

for(m_i=0 ; m_i<m_const0 ; m_i++) {


_outp(0x378,12);
Delay(m_delay1);
_outp(0x378,4);
Delay(m_delay2);
m_valueY++;
}
_outp(0x378,0);

void CPlotterConstDlg::OnDown1()
{
// TODO: Add your control notification handler code here
- 69 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

for(m_i=0 ; m_i<m_const1 ; m_i++) {


_outp(0x378,12);
Delay(m_delay1);
_outp(0x378,4);
Delay(m_delay2);
m_valueY++;
}
_outp(0x378,0);
}
void CPlotterConstDlg::OnDown2()
{
// TODO: Add your control notification handler code here

for(m_i=0 ; m_i<m_const2 ; m_i++) {


_outp(0x378,12);
Delay(m_delay1);
_outp(0x378,4);
Delay(m_delay2);
m_valueY++;
}
_outp(0x378,0);

8.10. Testare port paralel


// TestLPTDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "TestLPTDlg.h"
#include <conio.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestLPTDlg dialog
CTestLPTDlg::CTestLPTDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestLPTDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestLPTDlg)
m_c0 = FALSE;
m_c1 = FALSE;
m_c2 = FALSE;
m_c3 = FALSE;
m_d0 = FALSE;
m_d1 = FALSE;
m_d2 = FALSE;
m_d3 = FALSE;
m_d4 = FALSE;
m_d5 = FALSE;
- 70 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

m_d6 = FALSE;
m_d7 = FALSE;
//}}AFX_DATA_INIT

void CTestLPTDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestLPTDlg)
DDX_Check(pDX, IDC_C0, m_c0);
DDX_Check(pDX, IDC_C1, m_c1);
DDX_Check(pDX, IDC_C2, m_c2);
DDX_Check(pDX, IDC_C3, m_c3);
DDX_Check(pDX, IDC_D0, m_d0);
DDX_Check(pDX, IDC_D1, m_d1);
DDX_Check(pDX, IDC_D2, m_d2);
DDX_Check(pDX, IDC_D3, m_d3);
DDX_Check(pDX, IDC_D4, m_d4);
DDX_Check(pDX, IDC_D5, m_d5);
DDX_Check(pDX, IDC_D6, m_d6);
DDX_Check(pDX, IDC_D7, m_d7);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestLPTDlg, CDialog)
//{{AFX_MSG_MAP(CTestLPTDlg)
ON_BN_CLICKED(IDC_D0, OnD0)
ON_BN_CLICKED(IDC_D1, OnD1)
ON_BN_CLICKED(IDC_D2, OnD2)
ON_BN_CLICKED(IDC_D3, OnD3)
ON_BN_CLICKED(IDC_D4, OnD4)
ON_BN_CLICKED(IDC_D5, OnD5)
ON_BN_CLICKED(IDC_D6, OnD6)
ON_BN_CLICKED(IDC_D7, OnD7)
ON_BN_CLICKED(IDC_C0, OnC0)
ON_BN_CLICKED(IDC_C1, OnC1)
ON_BN_CLICKED(IDC_C2, OnC2)
ON_BN_CLICKED(IDC_C3, OnC3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestLPTDlg message handlers
BOOL CTestLPTDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const
RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class

return CDialog::Create(IDD, pParentWnd);

void CTestLPTDlg::OnD0()
{
// TODO: Add your control notification handler code here
- 71 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

UpdateData(true);
if(m_d0) _outp(0x378,_inp(0x378)|1); else _outp(0x378,_inp(0x378)&254);

void CTestLPTDlg::OnD1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d1) _outp(0x378,_inp(0x378)|2); else _outp(0x378,_inp(0x378)&253);
}
void CTestLPTDlg::OnD2()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d2) _outp(0x378,_inp(0x378)|4); else _outp(0x378,_inp(0x378)&251);
}
void CTestLPTDlg::OnD3()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d3) _outp(0x378,_inp(0x378)|8); else _outp(0x378,_inp(0x378)&247);
}
void CTestLPTDlg::OnD4()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d4) _outp(0x378,_inp(0x378)|16); else _outp(0x378,_inp(0x378)&239);
}
void CTestLPTDlg::OnD5()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d5) _outp(0x378,_inp(0x378)|32); else _outp(0x378,_inp(0x378)&223);
}
void CTestLPTDlg::OnD6()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d6) _outp(0x378,_inp(0x378)|64); else _outp(0x378,_inp(0x378)&191);
}
- 72 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

void CTestLPTDlg::OnD7()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d7) _outp(0x378,_inp(0x378)|128); else _outp(0x378,_inp(0x378)&127);
}
void CTestLPTDlg::OnC0()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_c0) _outp(0x37A,_inp(0x37A)&254); else _outp(0x37A,_inp(0x37A)|1);
}
void CTestLPTDlg::OnC1()
{
// TODO: Add your control notification handler code here

UpdateData(true);
if(m_c1) _outp(0x37A,_inp(0x37A)&253); else _outp(0x37A,_inp(0x37A)|2);

void CTestLPTDlg::OnC2()
{
// TODO: Add your control notification handler code here

UpdateData(true);
if(m_c2) _outp(0x37A,_inp(0x37A)|4); else _outp(0x37A,_inp(0x37A)&251);

void CTestLPTDlg::OnC3()
{
// TODO: Add your control notification handler code here

UpdateData(true);
if(m_c3) _outp(0x37A,_inp(0x37A)&247); else _outp(0x37A,_inp(0x37A)|8);

8.11. Reglarea vitezei de scriere


// ToolsSetDelayDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PlotterEditor.h"
#include "ToolsSetDelayDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CToolsSetDelayDlg dialog
- 73 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

CToolsSetDelayDlg::CToolsSetDelayDlg(CWnd* pParent /*=NULL*/)


: CDialog(CToolsSetDelayDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CToolsSetDelayDlg)
m_delay1 = 0;
m_delay2 = 0;
//}}AFX_DATA_INIT
}
void CToolsSetDelayDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CToolsSetDelayDlg)
DDX_Text(pDX, IDC_EDIT1, m_delay1);
DDV_MinMaxLong(pDX, m_delay1, 0, 2147483647);
DDX_Text(pDX, IDC_EDIT2, m_delay2);
DDV_MinMaxLong(pDX, m_delay2, 0, 2147483647);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CToolsSetDelayDlg, CDialog)
//{{AFX_MSG_MAP(CToolsSetDelayDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CToolsSetDelayDlg message handlers

8.12. Declararea resurselor


# Microsoft Developer Studio Project File - Name="PlotterEditor" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=PlotterEditor - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "PlotterEditor.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "PlotterEditor.mak" CFG="PlotterEditor - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "PlotterEditor - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "PlotterEditor - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
- 74 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "PlotterEditor - Win32 Release"
# PROP BASE Use_MFC 5
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 5
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD
/c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x418 /d "NDEBUG"
# ADD RSC /l 0x418 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
# ADD LINK32 /nologo /subsystem:windows /machine:I386
!ELSEIF "$(CFG)" == "PlotterEditor - Win32 Debug"
# PROP BASE Use_MFC 5
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 5
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"
/Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Yu"stdafx.h"
/FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x418 /d "_DEBUG"
# ADD RSC /l 0x418 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
- 75 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

!ENDIF
# Begin Target
# Name "PlotterEditor - Win32 Release"
# Name "PlotterEditor - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\EditDrawEllipseDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawLineDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawPointDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawRectDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\MainFrm.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterConstDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.rc
!IF "$(CFG)" == "PlotterEditor - Win32 Release"
!ELSEIF "$(CFG)" == "PlotterEditor - Win32 Debug"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorDoc.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorView.cpp
# End Source File
# Begin Source File
- 76 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# Begin Source File
SOURCE=.\TestLPTDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\ToolsSetDelayDlg.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\EditDrawEllipseDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawLineDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawPointDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawRectDlg.h
# End Source File
# Begin Source File
SOURCE=.\MainFrm.h
# End Source File
# Begin Source File
SOURCE=.\PlotterConstDlg.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorDoc.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorView.h
# End Source File
# Begin Source File
SOURCE=.\Resource.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
- 77 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

# Begin Source File


SOURCE=.\TestLPTDlg.h
# End Source File
# Begin Source File
SOURCE=.\ToolsSetDelayDlg.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\res\PlotterEditor.ico
# End Source File
# Begin Source File
SOURCE=.\res\PlotterEditor.rc2
# End Source File
# Begin Source File
SOURCE=.\res\PlotterEditorDoc.ico
# End Source File
# Begin Source File
SOURCE=.\res\Toolbar.bmp
# End Source File
# End Group
# Begin Source File
SOURCE=.\PlotterEditor.reg
# End Source File
# Begin Source File
SOURCE=.\ReadMe.txt
# End Source File
# End Target
# End Project

8.13. Caset dialog desenare linie


#if !defined(AFX_EDITDRAWPOINTDLG_H__F9AE1380_24A0_11D5_A094_C6DB39E54D50__INCLUDED_)
#define AFX_EDITDRAWPOINTDLG_H__F9AE1380_24A0_11D5_A094_C6DB39E54D50__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// EditDrawPointDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CEditDrawPointDlg dialog
class CEditDrawPointDlg : public CDialog
{
// Construction
public:
CEditDrawPointDlg(CWnd* pParent = NULL); // standard constructor
- 78 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// Dialog Data
//{{AFX_DATA(CEditDrawPointDlg)
enum { IDD = IDD_EDITDRAWPOINTBOX };
float
m_x;
float
m_y;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawPointDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:

};

// Generated message map functions


//{{AFX_MSG(CEditDrawPointDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWPOINTDLG_H__F9AE1380_24A0_11D5_A094_C6DB39E54D50__INCLUDED_)

8.14. Caset dialog desenare linie


#if !defined(AFX_EDITDRAWLINEDLG_H__77B9CF02_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)
#define AFX_EDITDRAWLINEDLG_H__77B9CF02_24A4_11D5_A094_C6DB39E54D50__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// EditDrawLineDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CEditDrawLineDlg dialog
class CEditDrawLineDlg : public CDialog
{
// Construction
public:
CEditDrawLineDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CEditDrawLineDlg)
enum { IDD = IDD_EDITDRAWLINEBOX };
float
m_x1;
float
m_x2;
- 79 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

float
m_y1;
float
m_y2;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawLineDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CEditDrawLineDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWLINEDLG_H__77B9CF02_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)

8.15. Caset dialog desenare dreptunghi


#if !defined(AFX_EDITDRAWRECTDLG_H__77B9CF03_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)
#define AFX_EDITDRAWRECTDLG_H__77B9CF03_24A4_11D5_A094_C6DB39E54D50__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// EditDrawRectDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CEditDrawRectDlg dialog
class CEditDrawRectDlg : public CDialog
{
// Construction
public:
CEditDrawRectDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CEditDrawRectDlg)
enum { IDD = IDD_EDITDRAWRECTBOX };
float
m_height;
float
m_width;
- 80 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

float
m_x;
float
m_y;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawRectDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CEditDrawRectDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWRECTDLG_H__77B9CF03_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)

8.16. Caset dialog desenare elips


#if !defined(AFX_EDITDRAWELLIPSEDLG_H__93500483_24AB_11D5_A094_841A4841E461__INCLUDED_)
#define AFX_EDITDRAWELLIPSEDLG_H__93500483_24AB_11D5_A094_841A4841E461__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// EditDrawEllipseDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CEditDrawEllipseDlg dialog
class CEditDrawEllipseDlg : public CDialog
{
// Construction
public:
CEditDrawEllipseDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CEditDrawEllipseDlg)
enum { IDD = IDD_EDITDRAWELLIPSEBOX };
float
m_x1;
- 81 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

float
m_x2;
float
m_y1;
float
m_y2;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawEllipseDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:

};

// Generated message map functions


//{{AFX_MSG(CEditDrawEllipseDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWELLIPSEDLG_H__93500483_24AB_11D5_A094_841A4841E461__INCLUDED_)

8.17. Variabile meniul principal


// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MAINFRM_H__7EDCA088_14FC_11D5_A094_95DD9E463755__INCLUDED_)
#define AFX_MAINFRM_H__7EDCA088_14FC_11D5_A094_95DD9E463755__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
// Attributes
public:
// Operations
- 82 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MAINFRM_H__7EDCA088_14FC_11D5_A094_95DD9E463755__INCLUDED_)

8.18. Variabile program


// PlotterEditor.h : main header file for the PLOTTEREDITOR application
//
#if !defined(AFX_PLOTTEREDITOR_H__7EDCA084_14FC_11D5_A094_95DD9E463755__INCLUDED_)
#define AFX_PLOTTEREDITOR_H__7EDCA084_14FC_11D5_A094_95DD9E463755__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h"
#include <conio.h>
#include <math.h>

// main symbols

struct tagDrawing {
- 83 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

int type;
float x,y,width,height;
};
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp:
// See PlotterEditor.cpp for the implementation of this class
//
class CPlotterEditorApp : public CWinApp
{
public:
CPlotterEditorApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation

};

//{{AFX_MSG(CPlotterEditorApp)
afx_msg void OnAppAbout();
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_PLOTTEREDITOR_H__7EDCA084_14FC_11D5_A094_95DD9E463755__INCLUDED_)

8.19. Variabile editor text


// PlotterEditorDoc.h : interface of the CPlotterEditorDoc class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_PLOTTEREDITORDOC_H__7EDCA08A_14FC_11D5_A094_95DD9E463755__INCLUDED_)
#define AFX_PLOTTEREDITORDOC_H__7EDCA08A_14FC_11D5_A094_95DD9E463755__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CPlotterEditorDoc : public CDocument
{
protected: // create from serialization only
CPlotterEditorDoc();
DECLARE_DYNCREATE(CPlotterEditorDoc)
- 84 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
//}}AFX_VIRTUAL
// Implementation
public:
long m_delay2;
long m_delay1;
CPtrArray m_drawingArray;
float m_realHeight;
float m_realWidth;
virtual ~CPlotterEditorDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CPlotterEditorDoc)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

8.20. Implementare variabile


// PlotterEditorView.h : interface of the CPlotterEditorView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_PLOTTEREDITORVIEW_H__7EDCA08C_14FC_11D5_A094_95DD9E463755__INCLUDED_)
#define AFX_PLOTTEREDITORVIEW_H__7EDCA08C_14FC_11D5_A094_95DD9E463755__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CPlotterEditorView : public CView
{
protected: // create from serialization only
CPlotterEditorView();
DECLARE_DYNCREATE(CPlotterEditorView)
- 85 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// Attributes
public:
CPlotterEditorDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL
// Implementation
public:
long m_delay2;
long m_delay1;
void PlotterLineTo(float X, float Y, int Pen);
int m_plotterCurrentY;
int m_plotterCurrentX;
void Delay(long time);
void PlotterMove(int incX,int incY,int pen);
float m_plotterConstY;
float m_plotterConstX;
int m_auxResult;
float m_auxX,m_auxY,m_auxWidth,m_auxHeight;
int m_auxType;
int m_auxSize;
char m_auxChar[7];
float m_virtualOffsetY;
float m_virtualOffsetX;
float m_virtualRatio;
float m_virtualHeight;
float m_virtualWidth;
float m_clientHeight;
float m_clientWidth;
virtual ~CPlotterEditorView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CPlotterEditorView)
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnFileNew();
afx_msg void OnUpdateEditClearLast(CCmdUI* pCmdUI);
- 86 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

};

afx_msg void OnEditDrawPoint();


afx_msg void OnEditClearLast();
afx_msg void OnEditDrawLine();
afx_msg void OnEditDrawRectangle();
afx_msg void OnEditDrawEllipse();
afx_msg void OnToolsTestLpt();
afx_msg void OnToolsPlotterConst();
afx_msg void OnFilePlot();
afx_msg void OnToolsSetDelay();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

#ifndef _DEBUG // debug version in PlotterEditorView.cpp


inline CPlotterEditorDoc* CPlotterEditorView::GetDocument()
{ return (CPlotterEditorDoc*)m_pDocument; }
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_PLOTTEREDITORVIEW_H__7EDCA08C_14FC_11D5_A094_95DD9E463755__INCLUDED_)

8.21. Variabile casete dialog


#if !defined(AFX_PLOTTERCONSTDLG_H__5D137F82_24E4_11D5_A094_9C041ACA4250__INCLUDED_)
#define AFX_PLOTTERCONSTDLG_H__5D137F82_24E4_11D5_A094_9C041ACA4250__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// PlotterConstDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CPlotterConstDlg dialog
class CPlotterConstDlg : public CDialog
{
// Construction
public:
long m_delay2;
long m_delay1;
void Delay(long delay);
int m_y;
int m_i;
int m_const2;
int m_const1;
int m_const0;
void Reset();
int m_valueY;
int m_valueX;
CPlotterConstDlg(CWnd* pParent = NULL); // standard constructor
- 87 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// Dialog Data
//{{AFX_DATA(CPlotterConstDlg)
enum { IDD = IDD_PLOTTERCONSTBOX };
float
m_constX;
float
m_constY;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterConstDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:

};

// Generated message map functions


//{{AFX_MSG(CPlotterConstDlg)
afx_msg void OnReset();
afx_msg void OnRight0();
afx_msg void OnRight1();
afx_msg void OnRight2();
afx_msg void OnDown0();
afx_msg void OnDown1();
afx_msg void OnDown2();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
!defined(AFX_PLOTTERCONSTDLG_H__5D137F82_24E4_11D5_A094_9C041ACA4250__INCLUDED_)
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by PlotterEditor.rc
//
#define IDD_ABOUTBOX
100
#define IDR_MAINFRAME
128
#define IDR_PLOTTETYPE
129
#define IDD_TESTLPTBOX
134
#define IDD_EDITDRAWPOINTBOX
145
#define IDD_EDITDRAWLINEBOX
146
#define IDD_EDITDRAWRECTBOX
147
#define IDD_EDITDRAWELLIPSEBOX
148
#define IDD_PLOTTERCONSTBOX
149
#define IDD_TOOLSSETDELAYBOX
150
#define IDC_D0
1000
#define IDC_D1
1001
#define IDC_D2
1002
#define IDC_D3
1003
#define IDC_D4
1004
#define IDC_D5
1005
#define IDC_D6
1006
#define IDC_D7
1007
#define IDC_C0
1008
- 88 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

IDC_C1
1009
IDC_C2
1010
IDC_C3
1011
IDC_LIST1
1012
IDC_X
1024
IDC_Y
1025
IDC_X1
1026
IDC_Y1
1027
IDC_X2
1028
IDC_Y2
1029
IDC_WIDTH
1030
IDC_HEIGHT
1031
IDC_RESET
1034
IDC_DOWN0
1035
IDC_DOWN1
1036
IDC_DOWN2
1037
IDC_RIGHT0
1038
IDC_RIGHT1
1039
IDC_RIGHT2
1040
IDC_EDIT1
1041
IDC_EDIT2
1042
ID_FILE_PLOT
32771
ID_FILE_PLOT_SETUP
32772
ID_EDIT_DRAW_POINT
32776
ID_EDIT_DRAW_LINE
32777
ID_EDIT_DRAW_RECTANGLE
32778
ID_EDIT_DRAW_ELLIPSE
32779
ID_EDIT_CLEAR_LAST
32780
ID_TOOLS_TEST_LPT
32782
ID_TOOLS_PLOTTER_CONST
32793
ID_TOOLS_SET_DELAY
32794

// Next default values for new objects


//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS
#define _APS_NEXT_RESOURCE_VALUE
#define _APS_NEXT_COMMAND_VALUE
#define _APS_NEXT_CONTROL_VALUE
#define _APS_NEXT_SYMED_VALUE
#endif
#endif

1
151
32795
1043
101

8.22. Caset dialog testare port paralel


#if !defined(AFX_TESTLPTDLG_H__119B9A20_1543_11D5_A094_CCEF6A82B456__INCLUDED_)
#define AFX_TESTLPTDLG_H__119B9A20_1543_11D5_A094_CCEF6A82B456__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// TestLPTDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
- 89 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

// CTestLPTDlg dialog
class CTestLPTDlg : public CDialog
{
// Construction
public:
CTestLPTDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CTestLPTDlg)
enum { IDD = IDD_TESTLPTBOX };
BOOL m_c0;
BOOL m_c1;
BOOL m_c2;
BOOL m_c3;
BOOL m_d0;
BOOL m_d1;
BOOL m_d2;
BOOL m_d3;
BOOL m_d4;
BOOL m_d5;
BOOL m_d6;
BOOL m_d7;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTestLPTDlg)
public:
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const
RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CTestLPTDlg)
afx_msg void OnD0();
afx_msg void OnD1();
afx_msg void OnD2();
afx_msg void OnD3();
afx_msg void OnD4();
afx_msg void OnD5();
afx_msg void OnD6();
afx_msg void OnD7();
afx_msg void OnC0();
afx_msg void OnC1();
afx_msg void OnC2();
afx_msg void OnC3();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
- 90 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#endif // !defined(AFX_TESTLPTDLG_H__119B9A20_1543_11D5_A094_CCEF6A82B456__INCLUDED_)

8.23. Caset dialog setare plotter


#if !defined(AFX_TOOLSSETDELAYDLG_H__E4D6C262_2A8E_11D5_A095_903C3C56E952__INCLUDED_)
#define AFX_TOOLSSETDELAYDLG_H__E4D6C262_2A8E_11D5_A095_903C3C56E952__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// ToolsSetDelayDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CToolsSetDelayDlg dialog
class CToolsSetDelayDlg : public CDialog
{
// Construction
public:
CToolsSetDelayDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CToolsSetDelayDlg)
enum { IDD = IDD_TOOLSSETDELAYBOX };
long
m_delay1;
long
m_delay2;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CToolsSetDelayDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

// DDX/DDV support

// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CToolsSetDelayDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_TOOLSSETDELAYDLG_H__E4D6C262_2A8E_11D5_A095_903C3C56E952__INCLUDED_)

7.24. Compilator program


--------------------Configuration: PlotterEditor - Win32 Debug-------------------- 91 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

Begining build with project "C:\My Documents\Visual C++\PlotterEditor\PlotterEditor.dsp", at root.


Active configuration is Win32 (x86) Application (based on Win32 (x86) Application)
Project's tools are:

"32-bit C/C++ Compiler for 80x86" with flags "/nologo /MTd /W3 /Gm /GX /Zi /Od
/D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"Debug/PlotterEditor.pch" /Yu"stdafx.h" /Fo"Debug/"
/Fd"Debug/" /FD /c "
"OLE Type Library Maker" with flags "/nologo /D "_DEBUG" /mktyplib203 /o NUL
/win32 "
"Win32 Resource Compiler" with flags "/l 0x418 /fo"Debug/PlotterEditor.res" /d
"_DEBUG" "
"Browser Database Maker" with flags "/nologo /o"Debug/PlotterEditor.bsc" "
"COFF Linker for 80x86" with flags "/nologo /subsystem:windows /incremental:yes
/pdb:"Debug/PlotterEditor.pdb" /debug /machine:I386 /out:"Debug/PlotterEditor.exe" /pdbtype:sept "
"Custom Build" with flags ""
"<Component 0xa>" with flags ""
Creating temp file "C:\WINDOWS\TEMP\RSPE353.TMP" with contents </nologo /subsystem:windows
/incremental:yes /pdb:"Debug/PlotterEditor.pdb" /debug /machine:I386 /out:"Debug/PlotterEditor.exe"
/pdbtype:sept
".\Debug\EditDrawEllipseDlg.obj"
".\Debug\EditDrawLineDlg.obj"
".\Debug\EditDrawPointDlg.obj"
".\Debug\EditDrawRectDlg.obj"
".\Debug\MainFrm.obj"
".\Debug\PlotterConstDlg.obj"
".\Debug\PlotterEditor.obj"
".\Debug\PlotterEditorDoc.obj"
".\Debug\PlotterEditorView.obj"
".\Debug\StdAfx.obj"
".\Debug\TestLPTDlg.obj"
".\Debug\PlotterEditor.res"
".\Debug\ToolsSetDelayDlg.obj">
Creating command line "link.exe @C:\WINDOWS\TEMP\RSPE353.TMP"
Linking...
PlotterEditor.exe - 0 error(s), 0 warning(s)
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Romanian resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ROM)
#ifdef _WIN32
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
#pragma code_page(1250)
- 92 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif\r\n"
"#include ""res\\PlotterEditor.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc""
// Standard components\r\n"
"#include ""afxprint.rc""
// printing/print preview resources\r\n"
IDD_TESTLPTBOX DIALOG DISCARDABLE 0, 0, 248, 165
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Testing Standard Parallel Port (SPP)"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,98,144,50,14
GROUPBOX
"Output At 378h : D0 -> D7",IDC_STATIC,4,4,240,34
GROUPBOX
"Output At 37Ah : C0 -> C3",IDC_STATIC,4,46,240,32
CONTROL
"D0",IDC_D0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,18,
24,12
CONTROL
"D1",IDC_D1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,184,18,
24,12
CONTROL
"D2",IDC_D2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,18,
24,12
CONTROL
"D3",IDC_D3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,128,18,
24,12
CONTROL
"D4",IDC_D4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,18,
24,12
CONTROL
"D5",IDC_D5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,18,
24,12
CONTROL
"D6",IDC_D6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,18,
24,12
CONTROL
"D7",IDC_D7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,
24,12
CONTROL
"C0",IDC_C0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,58,
- 93 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

24,12
"C1",IDC_C1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,184,58,
24,12
CONTROL
"C2",IDC_C2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,58,
24,12
CONTROL
"C3",IDC_C3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,128,58,
24,12
GROUPBOX
"Input From 379h : S3 -> S7",IDC_STATIC,4,84,240,52
LISTBOX
IDC_LIST1,128,98,106,30,LBS_NOINTEGRALHEIGHT | LBS_NOSEL |
WS_VSCROLL | WS_TABSTOP
END
CONTROL

IDD_EDITDRAWPOINTBOX DIALOGEX 0, 0, 110, 77


STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Draw Point"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Draw",IDOK,4,58,46,14
PUSHBUTTON
"Cancel",IDCANCEL,60,58,46,14
GROUPBOX
"Pozition",IDC_STATIC,4,4,102,48
LTEXT
"X",IDC_STATIC,16,18,12,8
LTEXT
"Y",IDC_STATIC,16,34,12,8
LTEXT
"mm",IDC_STATIC,82,16,12,8
LTEXT
"mm",IDC_STATIC,82,36,12,8
EDITTEXT
IDC_X,28,16,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_Y,28,34,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
END
IDD_EDITDRAWLINEBOX DIALOGEX 0, 0, 108, 111
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Draw Line"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Draw",IDOK,4,92,44,14
PUSHBUTTON
"Cancel",IDCANCEL,60,92,44,14
GROUPBOX
"Dimensions",IDC_STATIC,4,4,100,80
LTEXT
"X1",IDC_STATIC,16,18,12,8
LTEXT
"Y1",IDC_STATIC,16,34,12,8
LTEXT
"mm",IDC_STATIC,82,16,12,8
LTEXT
"mm",IDC_STATIC,82,34,12,8
EDITTEXT
IDC_X1,28,16,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_Y1,28,34,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
LTEXT
"X2",IDC_STATIC,16,52,12,8
LTEXT
"Y2",IDC_STATIC,16,68,12,8
LTEXT
"mm",IDC_STATIC,82,50,12,8
LTEXT
"mm",IDC_STATIC,82,68,12,8
EDITTEXT
IDC_X2,28,50,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_Y2,28,68,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
END
IDD_EDITDRAWRECTBOX DIALOGEX 0, 0, 120, 113
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Draw Rectangle"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Draw",IDOK,4,92,50,14
PUSHBUTTON
"Cancel",IDCANCEL,66,92,50,14
GROUPBOX
"Dimensions",IDC_STATIC,4,4,112,80
LTEXT
"X",IDC_STATIC,16,18,12,8
- 94 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

LTEXT
LTEXT
LTEXT
EDITTEXT
EDITTEXT
LTEXT
LTEXT
LTEXT
LTEXT
EDITTEXT
EDITTEXT
END

"Y",IDC_STATIC,16,34,12,8
"mm",IDC_STATIC,94,16,12,8
"mm",IDC_STATIC,94,34,12,8
IDC_X,40,16,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_Y,40,34,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
"Width",IDC_STATIC,16,52,20,8
"Height",IDC_STATIC,16,68,22,8
"mm",IDC_STATIC,94,50,12,8
"mm",IDC_STATIC,94,68,12,8
IDC_WIDTH,40,50,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_HEIGHT,40,66,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT

IDD_EDITDRAWELLIPSEBOX DIALOGEX 0, 0, 112, 113


STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Draw Ellipse"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Draw",IDOK,4,92,46,14
PUSHBUTTON
"Cancel",IDCANCEL,62,92,46,14
GROUPBOX
"Dimensions",IDC_STATIC,4,4,104,80
LTEXT
"X",IDC_STATIC,16,18,12,8
LTEXT
"Y",IDC_STATIC,16,34,12,8
LTEXT
"mm",IDC_STATIC,84,16,12,8
LTEXT
"mm",IDC_STATIC,84,34,12,8
EDITTEXT
IDC_X1,30,16,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_Y1,30,34,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
LTEXT
"D1",IDC_STATIC,16,52,10,8
LTEXT
"D2",IDC_STATIC,16,68,10,8
LTEXT
"mm",IDC_STATIC,84,50,12,8
LTEXT
"mm",IDC_STATIC,84,68,12,8
EDITTEXT
IDC_X2,30,50,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_Y2,30,66,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
END
IDD_PLOTTERCONSTBOX DIALOGEX 0, 0, 192, 237
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Set Up Plotter Const Value"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,80,218,50,14
PUSHBUTTON
"Cancel",IDCANCEL,138,218,50,14
PUSHBUTTON
"&Reset",IDC_RESET,14,16,36,30
PUSHBUTTON
"Down",IDC_DOWN0,14,56,36,30
PUSHBUTTON
"Down >",IDC_DOWN1,14,90,36,30
PUSHBUTTON
"Down >>",IDC_DOWN2,14,124,36,30
PUSHBUTTON
"Right",IDC_RIGHT0,62,16,36,30
PUSHBUTTON
"Right >",IDC_RIGHT1,102,16,36,30
PUSHBUTTON
"Right >>",IDC_RIGHT2,142,16,36,30
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,80,48,1,18
LTEXT
"1",IDC_STATIC,78,68,16,8
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,52,72,22,1
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,120,48,1,52
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,160,48,1,86
LTEXT
"10",IDC_STATIC,116,102,16,8
LTEXT
"100",IDC_STATIC,154,136,16,8
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,52,106,60,1
CONTROL
"",IDC_STATIC,"Static",SS_BLACKFRAME,52,140,98,1
GROUPBOX
"Move Pen",IDC_STATIC,4,4,184,156
- 95 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

GROUPBOX
EDITTEXT
EDITTEXT
LTEXT
LTEXT
LTEXT
LTEXT
END

"Const Values",IDC_STATIC,4,166,184,44
IDC_EDIT1,48,178,42,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_EDIT2,48,194,42,10,ES_AUTOHSCROLL,WS_EX_RIGHT
"Const X",IDC_STATIC,16,180,28,8
"Const Y",IDC_STATIC,16,196,28,8
"mm/step",IDC_STATIC,94,180,28,8
"mm/step",IDC_STATIC,94,194,28,8

IDD_TOOLSSETDELAYBOX DIALOGEX 0, 0, 118, 58


STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Set Stepping Delay"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,8,38,42,14
PUSHBUTTON
"Cancel",IDCANCEL,68,38,42,14
LTEXT
"Delay1 (ON)",IDC_STATIC,8,8,40,8
LTEXT
"Delay2 (OFF)",IDC_STATIC,8,22,43,10
EDITTEXT
IDC_EDIT1,52,8,58,10,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT
IDC_EDIT2,52,22,58,10,ES_AUTOHSCROLL,WS_EX_RIGHT
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_TESTLPTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 241
TOPMARGIN, 7
BOTTOMMARGIN, 158
END
IDD_EDITDRAWPOINTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 103
TOPMARGIN, 7
BOTTOMMARGIN, 70
END
IDD_EDITDRAWLINEBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 101
TOPMARGIN, 7
BOTTOMMARGIN, 104
END
IDD_EDITDRAWRECTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 113
- 96 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

TOPMARGIN, 7
BOTTOMMARGIN, 106
END
IDD_EDITDRAWELLIPSEBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 105
TOPMARGIN, 7
BOTTOMMARGIN, 106
END
IDD_PLOTTERCONSTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 185
TOPMARGIN, 7
BOTTOMMARGIN, 230
END
IDD_TOOLSSETDELAYBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 111
TOPMARGIN, 7
BOTTOMMARGIN, 51
END
END
#endif // APSTUDIO_INVOKED
#endif // Romanian resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME
ICON DISCARDABLE
"res\\PlotterEditor.ico"
IDR_PLOTTETYPE
ICON DISCARDABLE
"res\\PlotterEditorDoc.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_MAINFRAME

BITMAP MOVEABLE PURE "res\\Toolbar.bmp"


- 97 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
//
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15
BEGIN
BUTTON
ID_FILE_NEW
BUTTON
ID_FILE_OPEN
BUTTON
ID_FILE_SAVE
SEPARATOR
BUTTON
ID_EDIT_DRAW_POINT
BUTTON
ID_EDIT_DRAW_LINE
BUTTON
ID_EDIT_DRAW_RECTANGLE
BUTTON
ID_EDIT_DRAW_ELLIPSE
BUTTON
ID_EDIT_CLEAR_LAST
SEPARATOR
BUTTON
ID_FILE_PRINT
BUTTON
ID_FILE_PLOT
SEPARATOR
BUTTON
ID_APP_ABOUT
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N",
ID_FILE_NEW
MENUITEM "&Open...\tCtrl+O",
ID_FILE_OPEN
MENUITEM "&Save\tCtrl+S",
ID_FILE_SAVE
MENUITEM "Save &As...",
ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Print...\tCtrl+P",
ID_FILE_PRINT
MENUITEM "Print Pre&view",
ID_FILE_PRINT_PREVIEW
MENUITEM "P&rint Setup...",
ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "P&lot...\tCtrl+L",
ID_FILE_PLOT
MENUITEM "Plo&t Setup",
ID_TOOLS_PLOTTER_CONST
MENUITEM SEPARATOR
MENUITEM "Recent File",
ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit",
ID_APP_EXIT
END
POPUP "&Edit"
BEGIN
POPUP "&Draw"
BEGIN
MENUITEM "&Point",
ID_EDIT_DRAW_POINT
MENUITEM "&Line",
ID_EDIT_DRAW_LINE
MENUITEM "&Rectangle",
ID_EDIT_DRAW_RECTANGLE
MENUITEM "&Ellipse",
ID_EDIT_DRAW_ELLIPSE
END
- 98 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

MENUITEM "&Clear Last",


END
POPUP "&View"
BEGIN
MENUITEM "&Toolbar",
MENUITEM "&Status Bar",
END
POPUP "&Tools"
BEGIN
MENUITEM "&Test LPT Port",
MENUITEM "&Plot Setup",
MENUITEM "&Stepping Delay",
END
POPUP "&Help"
BEGIN
MENUITEM "&About PlotterEditor...",
END
END

ID_EDIT_CLEAR_LAST

ID_VIEW_TOOLBAR
ID_VIEW_STATUS_BAR

ID_TOOLS_TEST_LPT
ID_TOOLS_PLOTTER_CONST
ID_TOOLS_SET_DELAY

ID_APP_ABOUT

/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
"L",
ID_FILE_PLOT,
VIRTKEY, CONTROL, NOINVERT
"N",
ID_FILE_NEW,
VIRTKEY, CONTROL, NOINVERT
"O",
ID_FILE_OPEN,
VIRTKEY, CONTROL, NOINVERT
"P",
ID_FILE_PRINT,
VIRTKEY, CONTROL, NOINVERT
"S",
ID_FILE_SAVE,
VIRTKEY, CONTROL, NOINVERT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About PlotterEditor"
FONT 8, "MS Sans Serif"
BEGIN
ICON
IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT
"PlotterEditor Version 1.0",IDC_STATIC,40,10,119,8,
SS_NOPREFIX
LTEXT
"Copyright (C) 2001",IDC_STATIC,40,34,119,8
DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
LTEXT
"Mihai Bodor",IDC_STATIC,40,22,87,9
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
- 99 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Bodor Mihai\0"
VALUE "FileDescription", "PlotterEditor MFC Application\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "PlotterEditor\0"
VALUE "LegalCopyright", "Copyright (C) 2001\0"
VALUE "OriginalFilename", "PlotterEditor.EXE\0"
VALUE "ProductName", "PlotterEditor Application\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif

// !_MAC

/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 210
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
- 100 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

//
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME
"PlotterEditor\n\nPlotter\nPlotter Files
(*.plt)\n.plt\nPlotterEditor.Document\nPlotter Document"
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE
"PlotterEditor"
AFX_IDS_IDLEMESSAGE
"Ready"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_INDICATOR_EXT
"EXT"
ID_INDICATOR_CAPS
"CAP"
ID_INDICATOR_NUM
"NUM"
ID_INDICATOR_SCRL
"SCRL"
ID_INDICATOR_OVR
"OVR"
ID_INDICATOR_REC
"REC"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW
"Create a new document\nNew"
ID_FILE_OPEN
"Open an existing document\nOpen"
ID_FILE_CLOSE
"Close the active document\nClose"
ID_FILE_SAVE
"Save the active document\nSave"
ID_FILE_SAVE_AS
"Save the active document with a new name\nSave As"
ID_FILE_PAGE_SETUP
"Change the printing options\nPage Setup"
ID_FILE_PRINT_SETUP
"Change the printer and printing options\nPrint Setup"
ID_FILE_PRINT
"Print the active document\nPrint"
ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_APP_ABOUT
"Display program information, version number and copyright\nAbout"
ID_APP_EXIT
"Quit the application; prompts to save documents\nExit"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_MRU_FILE1
"Open this document"
ID_FILE_MRU_FILE2
"Open this document"
ID_FILE_MRU_FILE3
"Open this document"
ID_FILE_MRU_FILE4
"Open this document"
ID_FILE_MRU_FILE5
"Open this document"
ID_FILE_MRU_FILE6
"Open this document"
ID_FILE_MRU_FILE7
"Open this document"
ID_FILE_MRU_FILE8
"Open this document"
ID_FILE_MRU_FILE9
"Open this document"
ID_FILE_MRU_FILE10
"Open this document"
ID_FILE_MRU_FILE11
"Open this document"
ID_FILE_MRU_FILE12
"Open this document"
ID_FILE_MRU_FILE13
"Open this document"
ID_FILE_MRU_FILE14
"Open this document"
- 101 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

ID_FILE_MRU_FILE15
ID_FILE_MRU_FILE16
END

"Open this document"


"Open this document"

STRINGTABLE DISCARDABLE
BEGIN
ID_NEXT_PANE
"Switch to the next window pane\nNext Pane"
ID_PREV_PANE
"Switch back to the previous window pane\nPrevious Pane"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_WINDOW_SPLIT
"Split the active window into panes\nSplit"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_VIEW_TOOLBAR
"Show or hide the toolbar\nToggle ToolBar"
ID_VIEW_STATUS_BAR
"Show or hide the status bar\nToggle StatusBar"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCSIZE
"Change the window size"
AFX_IDS_SCMOVE
"Change the window position"
AFX_IDS_SCMINIMIZE
"Reduce the window to an icon"
AFX_IDS_SCMAXIMIZE
"Enlarge the window to full size"
AFX_IDS_SCNEXTWINDOW "Switch to the next document window"
AFX_IDS_SCPREVWINDOW "Switch to the previous document window"
AFX_IDS_SCCLOSE
"Close the active window and prompts to save the documents"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCRESTORE
"Restore the window to normal size"
AFX_IDS_SCTASKLIST
"Activate Task List"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_PREVIEW_CLOSE "Close print preview mode\nCancel Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_PLOT
"Plot the active document\nPlot"
ID_FILE_PLOT_SETUP
"Change the plotter settings\nPlot Setup"
ID_EDIT_DRAW_POINT
"Draw point\nDraw Point"
ID_EDIT_DRAW_LINE
"Draw line\nDraw Line"
ID_EDIT_DRAW_RECTANGLE "Draw rectangle\nDraw Rectangle"
ID_EDIT_DRAW_ELLIPSE "Draw ellipse\nDraw Ellipse"
ID_EDIT_CLEAR_LAST
"Clear last drawing\nClear Last Drawing"
ID_TOOLS_TEST_LPT
"Test LPT port\nTest LPT Port"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_TOOLS_PLOTTER_CONST "Set Up Plotter\nPlotter Setup"
ID_TOOLS_SET_DELAY
"Set stepping delay\nStepping Delay"
- 102 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
#include "res\PlotterEditor.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc"
// Standard components
#include "afxprint.rc"
// printing/print preview resources
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

- 103 -

UNIVERSITATEA AUREL VLAICU - FACULTATEA DE INGINERIE

PROIECT DE DIPLOMA PLOTER DE MASA INDUSTRIAL

6. BIBLIOGRAFIE

1. Kelemen, A., Crivii, M. Motoare electrice pas cu pas. Editura Tehnica, Bucureti, 1975
2. Mgureanu, R., Nicolae, V. Motoare sincrone cu magnei permaneni i reluctan
variabil. Editura Tehnica, Bucureti, 1982

3. Grlau, t., Coloi, T., Fetil, L. Electronic i automatizri industriale. Editura

didactic i pedagogic, Bucureti, 1982


4. Interfaces PC. Nr. 5
5. ***** . 303 scheme electronice. Editura Tehnic, Bucureti, 1997.
6. Jurc,Ioan. Programarea orientat pe obiecte n limbajul C++. Editura Eurobit,
Timioara, 1992
7. Heca Valerian, Acionri electrice. Editura Universitii Aurel Vlaicu Arad, 2001.

- 104 -

S-ar putea să vă placă și