+ All Categories
Home > Documents > Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met...

Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met...

Date post: 25-Mar-2021
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
39
Aansturen GALIL-motoren wikkelbank Citation for published version (APA): Wijnja, A. K. (1995). Aansturen GALIL-motoren wikkelbank. (DCT rapporten; Vol. 1995.059). Technische Universiteit Eindhoven. Document status and date: Gepubliceerd: 01/01/1995 Document Version: Uitgevers PDF, ook bekend als Version of Record Please check the document version of this publication: • A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website. • The final author version and the galley proof are versions of the publication after peer review. • The final published version features the final layout of the paper including the volume, issue and page numbers. Link to publication General rights Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain • You may freely distribute the URL identifying the publication in the public portal. If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement: www.tue.nl/taverne Take down policy If you believe that this document breaches copyright please contact us at: [email protected] providing details and we will investigate your claim. Download date: 20. Aug. 2021
Transcript
Page 1: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturen GALIL-motoren wikkelbank

Citation for published version (APA):Wijnja, A. K. (1995). Aansturen GALIL-motoren wikkelbank. (DCT rapporten; Vol. 1995.059). TechnischeUniversiteit Eindhoven.

Document status and date:Gepubliceerd: 01/01/1995

Document Version:Uitgevers PDF, ook bekend als Version of Record

Please check the document version of this publication:

• A submitted manuscript is the version of the article upon submission and before peer-review. There can beimportant differences between the submitted version and the official published version of record. Peopleinterested in the research are advised to contact the author for the final version of the publication, or visit theDOI to the publisher's website.• The final author version and the galley proof are versions of the publication after peer review.• The final published version features the final layout of the paper including the volume, issue and pagenumbers.Link to publication

General rightsCopyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright ownersand it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights.

• Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain • You may freely distribute the URL identifying the publication in the public portal.

If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, pleasefollow below link for the End User Agreement:www.tue.nl/taverne

Take down policyIf you believe that this document breaches copyright please contact us at:[email protected] details and we will investigate your claim.

Download date: 20. Aug. 2021

Page 2: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturen GALIL-motoren wikkelbank A. K. Wijnja

intern rapport WFW 95.059

10 mei 1995

Technische Universiteit Eindhoven Faculteit Werktuigbouwkunde Vakgroep Fundamentele Werktuigkunde

Page 3: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

T L.,,,J l.ïî 11U u u sop gave

1 Inleiding 2

2 Programma’s 4 2.1 werking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 CQNTQUR.pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 GENERAL.pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 GALIL63O.pas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 WINDOWS.pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.6 WIN.pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

32

1

Page 4: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Inleiding

In de vakgroep WFW loopt een project om kunststof hartkleppen te ontwikkelen. Het is de bedoeling om daarbij de geometrie van een echte klep te benaderen. Dit houdt in dat de hartklep bestaat uit een cilindervormige wand met 3 gelijkvormige vliesjes.

Het materiaal waarvan het gemaakt moet worden is (in eerste instantie) EPDM-rubber. Om ervoor te zorgen dat dit rubber in verschillende richtingen een andere sterkte heeft, is het nodig om de klep met vezels te versterken. Er moet voor gezorgd worden dat het vezelpatroon op alle drie vliesjes gelijk is. Om dit voor elkaar te krijgen, is een wikkelbank ontworpen. In figuur 1.1 is dit schematisch weergegeven.

Figuur 1.1: Schematische weergave wikkelbank

Door een geleidingsoog heen en weer te bewegen voor een roterende wikkeldoorn, kan op die doorn een vezel worden gelegd. Het patroon van de vezel is afhankelijk van de beweging van

2

Page 5: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 3

het oog in relatie tot de rotatiesnelheid van de cilinder. De twee bewegingen worden gerea- liseerd door twee motoren. De horizont ale beweging van het geleidingsoog wordt verkregen door met behulp van een motor (de X-motor) de rotatie via een kogelomloopspindel om te zetten in een translatie. De roterende wikkeldoorn kan rechtstreeks door de andere motor (de Y-motor) worden gerealiseerd. Om nu de beide motoren volgens een bepaald patroon

n i t is een IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en de daarbij behorende programmatuur besproken.

te laten bewegen, maakt men gebrliik van de aanstliring DMC-630 vacn Galil:

De programmatuur die geleverd wordt door Galil, is niet echt gebruikersvriendelijk. Bijvoor- beeld het programma TALK-600 is een interactieve interface waarin commando's naar de motoren kunnen worden gestuurd. Het programma heeft ook de mogelijkheid om een klein programmaatje te schrijven, maar dit is maar beperkt tot 200 regels van elk 32 karakters. Wat wij willen is gebruik maken van de zogenaamde contouring mode. Hierbij kan men voor een reeks opeenvolgende tijdstappen de verplaatsing van de motor opgeven. Qmdat de hiervoor benodigde data veel groter zal zijn dan 200 regels, is gekozen om de aansturing te realiseren met behulp van een in Turbo Pascal geschreven programma. Tevens zijn in dit programma nog enige extra commando's toegevoegd om het wikkelproces eenvoudig te kun- nen initialiseren. Voor uitleg over deze Galil-commando's wordt verwezen naar de manuals van Galil.

De beide motoren zijn voorzien van encoders. Deze hebben een resolutie van 2000 en 4000 counts/omw voor respectievelijk de Y-motor (voor de rotatie) en de X-motor (voor de trans- latie). De motoren worden aangestuurd in de contouring mode. Hiervoor moet men voor elke motor opgeven hoeveel counts hij moet verplaatsen voor die bepaalde tijdstap (zie paragraaf 5.4 in de DMC-600 series User Manual). Dit houdt in dat de datafile (gegenereerd met een Matlab-programma) aan een bepaald format moet voeldoen. De file bestaat uit drie kolom- men: de eerste kolom bevat een getal n tussen 1 en 8 wat de tijdstap representeert volgens 2" msec. De tweede kolom bevat voor de betreffende tijdstap het aantal counts dat de X-motor moet verpiaatsen. Dit kan zowei positief als negatief zijn, echter het getal mag niet kieiner zijn dan -32000 of groter dan $32000. Voor de derde kolom van de datafile geldt hetzelfde als voor de tweede, alleen nu betreft het de stapgrootte van de Y-motor. Omdat er geen Z-motor aanwezig is, hoeft de datafile hiervoor geen getal te bevatten. In het programma wordt hiervoor automatisch een nul opgegeven.

Page 6: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Programma’s

Het programma CONTOUR.PAS is geschreven in Turbo Pascal 7.0 en maakt gebruik van verschillende Units. De structuur van deze units is weergegeven in figuur 2.1.

CONTOUR.pas 1

\ I - I / Dospas

Figuur 2.1: Structuur van de verschillende UI iits

Het hoofdprogramma is CONTOUR. De units DOS en CRT zijn standaard units van Turbo Pascal. De units GENERAL, GALIL630 en WINDOWS zijn zelf geschreven. De unit WIN

4

Page 7: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 5

is een iets aangepaste versie van de standaard unit WINvan Turbo Pascal 5.5

In dit hoofdstuk wordt de werking van het gehele programma besproken. Daarna volgen de listings van alle units. Hierin staat voor elke procedure in het commentaar de werking vermeld.

2.1 werking Als men het programma opstart, kan men uit twee menu-items kiezen:

1 Contouring mode voor het bewegen van de motoren volgens een reeds berekend pa- troon.

2 Manual m ~ d e voor het interactief laten bewegen van de motoren, dus het wikkeloog een stukje verplaatsen of de wikkeldoorn met een bepaalde snelheid laten roteren.

Esc het programma stoppen.

Bij het kiezen van een bepaald menu-item volgt meestal een nieuw window. In het algemeen geldt dat als men een window wil sluiten, dat men op 'Esc' moet drukken of op Alt-X.

Kiest men voor de Contouring mode, dan krijgt men een nieuw window met de volgende menu-items:

1 Read file Als men reeds een datafile heeft aangemaakt, dan kan men nu deze (ASCII) file inlezen. Tijdens het inlezen wordt gecontroleerd of de file het juiste format heeft (zie hoofdstuk i).

2 Start contouring Als de datafile is ingelezen en het format is oke, dan worden de mo- toren mi aangestwïd met de Eewegiogen volgens de opgegeven ciztafile.

any key Door op een willekeurige toets te drukken kan de contouring mode worden onder- broken.

Als men de wikkelbank gereed moet maken voor het wikkelen, is het nodig om een of beide motoren 'met de hand' te besturen, of om een beginpositie in te stellen. Dit kan men doen door in het hoofdmenu item 2 te kiezen: Manual mode. Men krijgt een nieuw window men de volgende keuzes:

1 Reset 630 Hiermee kan men de IO-buffer van de DMC-630 schoonmaken.

2 Motor ON Om de motoren in de servostand te zetten. Het is nu niet mogelijk om de motoren iets met de hand te verdraaien, ze zitten als het ware op slot. De sturing zorgt ervoor dat de motoren in de huidige positie blijven. De enige manier om ze nu te verdraaien is via een Galil-commando (de menu-items 4, 5 en 6).

Page 8: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aanst wing wikkel bank 6

3 Motor OFF Als men een van de motoren met de hand wil verdraaien, of men wil de opstelling uit elkaar halen, dan is het raadzaam om eerst de motoren uit te zetten.

4 Traverse towards home Als men gebruik maakt van de optische switches die aan de stuurkast zitten, dan kan men deze gebruiken om een beginpositie in te stellen. Hang de betreffende diode-switch op een bepaald punt langs het traject van het wikkeloog zodanig dat hij in de gewenste beginpositie precies door de lichtstraal van de diode gaat. Als nu het wikkeloog op een willekeurige positie staat en men geeft het commando ’Traverse towards home’ dan zal het wikkeloog automatisch met een bepaalde snelheid deze beginpositie opzoeken.

5 Find edge Dit commando moet men gebruiken om de Home-position t e definiëren. Als dit is gebeurd, dan heeft het systeem de home-switch gedetecteerd. Als men vervolgens het commando Traverse towards home geeft, dan gaat de motor ook daadwerkelijk en nauwkeurig naar de positie van de home-switch.

6 Traverse Up/Down/Left/Right Als bij het gereedmaken voor het wikkelen een van beide motoren iets wil laten draaien, dan kan dat met dit commando. Er verschijnt een nieuw window waarin wordt aangegeven dat met behulp van de pijltjes-toetsen de motoren kunnen worden gemanipuleerd. Met ”t” en ”+” kan men het wikkeloog naar links of recht bewegen. Hoe vaker men op de betreffende toets drukt des te sneller gaat de motor draaien. Met ”T” en ”J-” kan men de wikkeldoorn laten roteren. Men kan beide motoren onafhankelijk van elkaar laten draaien. Wil men een motor stoppen, dan doet men dit door op O of op i te drukken, voor respectievelijk de wikkeldoorn en het wikkeloog. Drukt men op Esc dan wordt het window gesloten en beide motoren gestopt als dit nog niet is gebeurd.

7 Read encodercount Hiermee kan men de encoderstand uitlezen. Men kan dan bijvoor- beeld controleren of de juiste afstand is afgelegd.

8 Set current encodercount to O Als men, zoals hierboven beschreven, wilt nagaan of de juiste afstand van een motor is afgelegd, is het raadzaam om eerst de teller op nul te zetten.

O Stop motor Mocht het gebeuren dat er nog een motor draait, dan kan men deze stoppen met dit commando.

Nu kan het gebeuren dat het uitvoeren van een bepaald commando niet gaat, omdat er een error is opgetreden. Er is getracht om binnen het programma zoveel mogelijk dit te ondervangen. Als dit goed gebeurt dan verschijnt er een error-window met de betreffende mededeling. Het meest aannemelijk is het dat er een error optreedt als het wikkeloog door een zgn. limit switch is gegaan. Dit zijn, net als de home switch, diodes die een puls afgeven als de lichtstraal wordt onderbroken. Deze zijn geplaatst iets binnen de uiteinden van het bereik van het wikkeloog. Op die manier kan men de motor niet over de kop draaien als het eind van het traject is bereikt. Als het wikkeloog dan door de limit switch gaat wordt de motor onmiddelijk gestopt.

Page 9: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 7

2.2 CONTOUR.pas

PROGRAM Contour-Windingmachine; (----------------------------------------------------------------------- 3 ( This program i s wr i t t en f o r control ing t h e windingmachine t o 3 ( c r e a t e a r t i f i c a l heart-valves. The machine cons i s t s of two motors; ( The f i r s t motor ( the s o ca l l ed X-motor) i s used f o r t h e ho r i zon ta l ( movement of t h e f i b e r guiding eye. The Y-motor i s used f o r r o t a t i n g

3 3 3

( t h e valve. 3 ( 3 ( Albert Wijnja, Apri l 1995 3 (----------------------------------------------------------------------- 3

USES C r t , General, Windows, Gali1630;

PROCEDURE ReadData(0k: boolean);

( (--------------------------------------------------------------------- 3

I <dT< =8 => t imestep between 2 and 256 msec 3 ( -32000<dX<32000 => maximum r o t a t i o n of X-moter ( i n counts) 3 ( -32000<dY<32000 => maximum r o t a t i o n of Y-motor ( i n counts) 3 ( 3 ( If t h e d a t a i s inco r rec t , a message w i l l be given with t h e 3 ( corresponding l i n e number 3 (--------------------------------------------------------------------- 3

Read t h e da t a from t h e d a t a f i l e and check whether it is coorect : 3

VAR dT, dX, dY, i : i n t ege r ; BEGIN

Page 10: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 8

ASSIGN(inv,Filename); RESET (inv) ; Ok := TRUE; i := o; WHILE NOT eof(inv) AND Ok DO BEGIN Readln (inv , dT , dX , dY) ; i := i + I; IF (dT C 1) OR (dT > 8 ) OR

(dX C -32000) OR (dX > 32000) OR (dY C -32000) OR (dY > 32000)

THEN Ok := FALSE; END ; CLOSE (inv) ; IF NOT Ok THEN BEGIN

WrongDataWin(i) ; Beep; Ch := Readchar; CloseWindow; FileName := ’I;

CloseWindow; Contourwin;

END ; END ;

VAR Ok : Boolean; BEGIN ïOWin() ’) ; CursorOn ; Ok := FALSE; Readstring (Filename, Ok) ; IF Ok THEN BEGIN IF FileExist (Filename) THEN ReadData(0k) ELSE BEGIN

Page 11: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 9

NoFileWin; Beep ; Ch := Readchar; CloseWindow; Filename := ; 'k := FALSE;

END ; END ; CloseWindow; IF Ok THEN BEGIN

Got OXY ( 19,9) ; ClrEol; Write(Fi1ename) ;

END ; Cursoroff; GotoXY(i3,ll); ClrEol; GotoXY(i,l2); ClrEol; GotoXY(i,l3); ClrEol;

END ;

PROCEDURE Contouring;

( (

(-------------------------------------------------------------------- 3 Starts the contouring mode of the motors. If no datafile is given 3 or an error occurs, the contouring is interrupted and an error 3

( message is given. 3 (-------------------------------------------------------------------- 3 VAR dT, dX, dY : integer; BEGIN Contourwin; WHILE NOT Exit DO BEGIN

Gh := ReadChesj CASE Ch OF

liJ : ReadFile; ,2> : BEGIN

IF Filename=> THEN BEGIN

NoFileWin; Beep ; Ch := ReadChar; CloseWindow;

Page 12: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 10

END ELSE BEGIN

RESET (inv) ; StartCM(Error) ; GotoXY(13,ii); ClrEol;

GotoXY(i,i3); ClrEol; Got OXY ( 13, I i) ; TextColors (White+Blink, Blue) ; Write( ’Contouring’) ; TextColors(LightGray,Blue); WHILE NOT eof(inv) AND NOT Error.Error AND NOT KeyPressed DC BEGIN

GctGXY(?,?2); ClrEel;

Readln (inv, dT , dX , dY) ; Contour (dT , dX , dY , Error) ;

END ; IF Error.Error THEN BEGIN

Got OXY ( 13,l i) ; ClrEol ; Error-Handle (Error) ;

END ELSE BEGIN

IF KeyPressed THEN BEGIN

Got OXY ( 13,i i) ; ClrEol ; Write( ’Contouring interrupted’) ;

END ELSE BEGIN

GotoXY (13,li) ; ClrEol ; Write(’Contouring ended’);

END ; END ;

StopCM(Error) ; IF Error.Error THEN Error,Handle(Error); CLOSE (inv) ;

END ; END ;

CExit : Exit := TRUE; END ;

END ;

Page 13: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank

CloseWindow; Exit := FALSE;

END ;

11

?ROCFIl'?.F MQVeMQtor ; (---------------------------------------------------------------------- 1 ( ( ( (

VAR CmdString : String;

BEGIN

To setup the machine for making a valve, this procedure is used to 3 move the motors manualy. Just use the up/down arrow-key to rotate 3 the Y-motor, use the left/right arrow-key to move the fiber guiding-) eye. Every time the key is pressed the speed is increased/decreased >

(---------------------------------------------------------------------- > SpeedX, Speedy : integer;

SpeedX := O; Speedy := O; SendCmd ( ' JGO , O ; BGXY' ,Answer, Error) ; IF Error. Error THEN Error-Handle (Error) ; WHILE NOT Exit DO BEGIN Answer := CmdString := j ; Ch := ReadChar; CASE Ch OF Cup : BEGIN

SpeedY:=SpeedY+250; Str (Speedy, CmdString) ; CmdString := 'JG,' + CmdString; SendCmd(CmdString ,Answer,Error) ;

END ; CDown : BEGIN

SpeedY:=SpeedY-250; Str(SpeedY,CmdString); CmdString := 'JG,' + CmdString; SendCmd (CmdString ,Answer, Error) ;

END ; CLeft : BEGIN

SpeedX:=SpeedX+250; Str(SpeedX,CmdString); CmdString := 'JG' + CmdString; SendCmd(CmdString,Answer,Error);

END ;

Page 14: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 12

CRight : BEGIN SpeedX:=SpeedX-250; Str(SpeedX,CmdString); CmdString := )JG) + CmdString; SendCmd(CmdString ,Answer ,Error) ;

own. LlYU ,

> O J : BEGIN SpeedY:=O; SendCmd()JG,O),Answer,Error);

END ; )i) : BEGIN

SpeedX:=O; SendCmd()JGO),Answer,Error);

END ; CExit : Exit := TRUE;

END; ( CASE 3 IF Error. Error THEN Error,Handle(Error) ;

END; ( WHILE 3 SendCmd(’ST),Answer,Error); IF Error.Error THEN Error,Handle(Error); Exit := FALSE;

END ;

( This procedure is used for sending some special commands to the 3 ( motors, like )MOTORS OFF) or >READ POSITION). 3 (------------------------------------------------------------------- 3 BEGIN ManWin ; WHILE NOT Exit DO BEGIN Error.Error := FALSE; Answer := )I;

Ch := Readchar; CASE Ch OF

)i) : Reset630; )2) : BEGIN

SendCmd( )SH) ,Answer,Error) ; END ;

)3’ : BEGIN SendCmd(’MO),Answer,Error);

Page 15: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aanst wing wikkel bank 13

END ; ’4’ : BEGIN

SendCmd( lSPiOOO;HMX;BGX’ ,Answer,Error) ; END ;

’ 5 ’ : BEGIN S e n Y C m , d ( ’ C ? i n n n ; F F Y ; ~ ~ ~ J , ~ ~ ~ ~ ~ ~ , ~ ~ ~ ~ ~ ~ ;

END ; ’6’ : BEGIN

Movewindow(’ Traverse Motors ’) ; MoveMotor; CloseWindow; Exit := FALSE;

END ; ’7’ : BEGIN

SendCmd( ’TPXY’ ,Answer,Error) ; IF NOT Error.Error THEN BEGIN

Encoderwin (Answer) ; Ch := Readchar; CloseWindow;

END ; END ;

’ 8 ’ : BEGIN SendCmd(’DPO,O>,Answer,Error);

END ; ’O’ : BEGIN

SendCmd( ’ST’ ,Answer,Error) ; END ;

CExit : Exit := TRUE; END; < CASE 3 IF Error.Error THEN Error,Handle(Error);

END ; Exit := FALSE; CleseWindow;

END ;

ClrScr; Cursoroff;

Page 16: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank

In it P arms OpenWin ; St artW in ; WHILE NOT BEGIN

Exit DO

C h := ReaYChar; CASE Ch OF

'1' : Contouring; ' 2 ' : Manual; CExit : Exit := TRUE;

END ; END ; CloseWindow; i Startscherm 3 CloseWindow; i OpeningsScherm 3 TextColors(LightGray ,Black) ; Normvideo; ClrScr ; CursorOn ;

END.

2.3 GENERAL.pas

UNIT General;

INTERFACE

USES Crt, Win, Dos;

CONST

CExit Bspace Del Ins CLeft CRight

CDown CEnt er

CUP

i i

3 3

Constants for special characters. 3 i 3 i 3 i i

14

Page 17: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 15

VAR FileName, Answer ( Strings for Filename and Answer of DMC-630 3 : string;

: text;

: Integer;

: Char;

: boolean;

: Error-Rec;

inv { Input Data-file ( ASCII-file )

XO, YO, Xlengte, Ylengte { Parameters for graphic windows

Ch

Exit

Error { Error-cluster

( Character for testing the keyboardbuffer

( Boolean for testing closure of window

PROCEDURE Cursoroff;

PROCEDURE CursorOn;

PROCEDURE TextColors (f orgr, backgr : Byte) ;

PROCEDURE CreateWindow(Xb, Yb, Xe, Ye: integer; Titel: string; Kleur: Byte);

PROCEDURE CloseWindow;

PROCEDURE Beep ;

FUNCTION FileExist(name : string): Boolean;

FUNCTION ReadChar: Char;

PROCEDURE ReadInt (VAR number:integer; defau1t:integer; VAR code:integer);

PROCEDURE ReadReal (VAR number:real; defau1t:real; VAR code:integer);

Page 18: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 16

PROCEDURE ReadString(Var dummy : string; VAR Ok: boolean);

IMPLEMENTATION

PROCEDURE Cursoroff; VAR reg : registers; BEGIN seg.AW := I; reg.CH := 32; reg.CL := 32; intr (16 ,reg)

END ;

PROCEDURE CursorOn; VAR reg : registers; BEGIN reg.AH := I; reg.CH := 6; reg.CL := 7; intr (16 ,reg)

END ;

PROCEDURE TextColors( (f orgr , backgr :byte) 3 ; BEGIN IF LastMode <> CO80 THEN BEGIN

forgr := White; backgr := Black;

END ; textcoïor (forgr) ; textbackground (backgr) ;

END ;

PROCEDURE CreateWindow((Xb , Yb, Xe , Ye: integer; Titel: string; Kleur: Byte)); VAR

S: string Li59 ; Color: Byte;

Page 19: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 17

B E G I N IF LastMode <> CO80 THEN

OpenWindow(Xb, Yb, X e , Ye, T i t e l , C o l o r := Black ELSE C o l o r := Kleur;

C o l o r + LightGray * 16, LightGray + Color * I S ) ; T r r t A t t r : = Ligp?tGr=v

.Y,

TextBackground(K1eur); ClrScr ;

END ;

PROCEDURE CloseWindow; B E G I N

END ; Deletewindow;

PROCEDURE Beep ; B E G I N

END ; Sound(6OO) ; Delay(l00) ; NoSound;

FUNCTION F i leExis t (name : s t r i n g ) : Boolean; VAR f : f i l e ; B E G I N

{$1-3 ASSIGN (f ,name) ; RESET(f) ; CLOSE (f ) ; {$I+) Fi leExist := IOResult = O ;

END ;

FUNCTION ReadChar: Char; VAR

B E G I N Ch: Char;

Ch := ReadKey; I F Ch = #O THEN

CASE ReadKey OF #45: Ch := CExit ; { A l t - X of ESC 3 #75: Ch := C L e f t ; { Left 3

Page 20: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 18

#77: Ch := CRight; #80: Ch := CDown; < Down 3

#41: Ch := CEnter; { Return 3 #08: Ch := Bsgace;

< Right )

#72: Ch := Cup;

*?47:Ch := D e l ; { Delete 1

< up 3

{ Backspace 3

END ; ReadChar := Ch;

END ;

PROCEDURE ReadInt { (VAR number : i n t eger ; defaul t : integer; VAR code : i n t eger) 1 ; VAR dummy : s t r i n g ; B E G I N

readïm (dumy) ; IF length(dummy) = O THEN BEGIN

number := defau l t ; code := O ;

END ELSE

Val (dummy, number code) ; END ;

PROCEDURE ReadReal < (VAR number :real ; defaul t : real ; VAR code : i n t eger) 3 ; VAR dummy : s t r i n g ; BEGIN

readln(dummy) ; IF length(dummy) = O THEN BEGIN

number := defau l t ; code := O ;

END ELSE

V a l (dummy number, code) ; END ;

PROCEDURE ReadString{(VAR dummy: s t r i n g ; VAR Ok : boolean)); VAR hulp : PACKED ARRAY[I..20] OF char;

StringOk : boolean; i, k, l e n g t , t o t l e n g t , posi t ion : in teger ;

Page 21: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 19

dumchar : char; B E G I N

CursorOn ; i := 1; t o t l e n g t := O ; JtriiigOk := false; FOR k:=l TO 20 DO hulp [kl := ’ ’ ; REPEAT

Ch := Readchar; CASE Ch OF

#32..#255 : BEGIN IF i= to t l eng t+ l THEN BEGIN

Write(Ch) ; huïp[il := Ch; i := i + 1; t o t l e n g t := t o t l e n g t + I;

END ELSE BEGIN

write(Ch) ; FOR k:=tot lengt DOWNTO i DO

hulp [k+i] : = hulp [kl ; hulp[k] := Ch; i := i + 1; t o t l e n g t := t o t l e n g t + 1; FOR k := i TO t o t l e n g t DO

GotoXY(WhereX - k + i - 1, WhereY); write (hulp [kl ) ;

END ; END ;

CEnter : BEGIN StringOk := TRUE; Ok := True;

FOR k:=l TO t o t l e n g t DO dummy := dummy + hulpCkl; IF dummy=” THEN Ok := FALSE;

dumy := J ;

END ; CExit : BEGIN

StringOk := TRUE; Ok := FALSE;

END ; C L e f t : BEGIN

IF i=l Then Beep

Page 22: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aanst wing wikkel bank 20

ELSE B E G I N

i := 1-1; GotoXY (WhereX - I , WhereY) ;

END ;

CRight : BEGIN EMI! ;

IF i= to t l eng t+ l THEN Beep ELSE BEGIN

i := i + i; GotoXY(WhereX + 1, WhereY);

END ;

Bspace : BEGIN END ;

IF i = i THEN Beep ELSE IF i = t o t l e n g t + I THEN

BEGIN hulp[i] := ;

t o t l e n g t := t o t l e n g t - 1; hulpLi] := ’ ; GotoXY (WhereX - i , WhereY) ; Write(’ ’ ) ; GotoXY (WhereX - I , WhereY) ;

1; i : = i -

END ELSE IF i <= t o t l e n g t THEN BEGIN

hulp[totlengt+l] := ’ ; GotoXY (WhereX - 1, WhereY) ; pos i t ion := i; FOR k : = i TO t o t l e n g t + l DO BEGIN

hulp Lk-11 := hulp [k] ; write(hu1p [k-I]) ;

END ; GotoXY(WhereX + i - t o t l e n g t - 2, WhereY); t o t l eng t := t o t l e n g t - I ;

1; i : = i - END ;

END ; Del : B E G I N

IF i = t o t l e n g t THEN

Page 23: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 21

BEGIN hulpLi] := ’ ; totlengt := totlengt - I; Write(’ ’1; GotoXY(WhereX - I, WhereY) ;

END ELSE IF i<tstlengt TWEN BEGIN position := i; FOR k:=i TO (totlengt-I) DO BEGIN hulp [kl : = hulp [k+ll; write(hulpCk1) ;

END ; hulp [totlengt] := ’ ;

GotoXY(WhereX + i - totlengt - 1, WhereY); totlengt := totlengt - I;

END ; END ;

ELSE Beep; END ;

UNTIL StringOk; Cursoroff;

END ;

END. (* UNIT Algemeen *I

2.4 GALIL63O.pas

Page 24: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 22

INTERFACE

USES Crt, Windows, General;

CONST IOaddr : integer = 1000; < 1000d == 3E8h 3

PROCEDURE Reset630;

PROCEDURE SendCmd(text,str: string; VAR Answer : string; VAR Error : Error-Rec);

PROCEDURE Contour(dT, dX, dY:integer; VAR Error:Error,Rec);

PROCEDURE St artCM(VAR Error : Error-Rec) ;

PROCEDURE StopCM(VAR Error:Error,Rec);

PROCEDURE Error,Handle(VAR Error:Error,Rec);

IMPLEMENTATION

FUNCTION ByteAvailable : Boolean;

( looks if a byte can be read 3

BEGIN

END ; IF (port [IOaddr+l] AND 1) = O THEN ByteAvailable:=TRUE;

Page 25: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 23

REPEAT

UNTIL (n=max-loop) OR (ByteAvailable) ; n:=n+l

IF n=max,loop THEN BEGIN C--AI. E---* := TRITE'. U A A W A . L i A A U A A A W U U #

Error.Code := 102; Error.Msg := 'Loopcounter exceeded in function ReadByte';

END ELSE ReadByt e :=port [IOaddrl ;

END ;

C

CONST max-loop = VAR n : integer; BEGIN n:=l; REPEAT n : =n+l

J

20000 ;

UNTIL (n=max,loop) OR ((port[IOaddr+l] AND 2) = 2);

if n=max,loop then BEGIN Error.Error:=TRUE; Error.Code := 101; Error.Msg := 'Loopcounter exceeded in proc. SendByte];

END ELSE port [IOaddrl :=b;

ENE ;

Page 26: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 24

CONST max-loop = 20000; VAR i : integer;

BEGIN kar : char;

i := i;

BEGIN !JHILE (i<man,lmy) Y’

i := i; REPEAT

UNTIL (i=max,loop) OR (ByteAvailable) ; IF ByteAvailable THEN kar := Chr(ReadByte(Err0r)); IF (kar=’:’) OR (kar=#255) THEN i := max-loop;

i : = i + i

END ; END ;

PROCEDURE ReadAns(VAR Answer: string; VAR Error: Error-Rec);

{

{

(---------------------------------------------------------------- 3

{ 3

( error-record is adjusted. 3 (---------------------------------------------------------------- 3

This procedure reads the answer given by the GALIL-630, after I a command has been send to it. (checked by loopcounter) or the DMC-630 answers with I?’, the 3

If the procedure times out

CONST max-loop = 20000; VAR i : integer;

BEGIN kar : char;

Answer := ’ ’ ; i := 1; WHILE (i<max,loop) AND (NOT Error.Error) DO BEGIN

- i := 2 ; REPEAT

UNTIL (i=max,loop) OR (ByteAvailable) ; IF i=max,loop THEN BEGIN

i : = i + i

Error.Error := TRUE; Error.Code := 106; Error.Msg := ’Loopcounter exceeded in procedure ReadAns’;

END

Page 27: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 25

ELSE BEGIN IF ByteAvailable THEN kar := Chr(ReadByte(Err0r)) ; CASE kar OF #10,#13 : ; J ? ’ : BEGIN

E r m r . E r r 9 r := TRUE; Error.Code := 187; Error. Msg : = ’ Galil anwered with ” ? I ’ ’ ; i := max-loop;

END ; 1 . ’ : i := max-loop; ELSE Answer := Answer + kar;

END ( CASE 3 END; ( ELSE 1

( END IF 3 END; ( WHILE 1 Clear-Output ;

END ;

PROCEDURE SendCmd((text,str:string;VAR Answer:string;VAR Error:Error,Rec)); (------------------------------------------- 1

{ ra i t ,s litle while> for a r eac t ion . 1

(------------------------------------------- 1

( Sends a GALIL-command to the DMC-630 and

,( A CR is added at the end of the command.

3

3

VAR i : integer;

BEGIN CmndStr : string;

Answer := ”; CmndStr := text-str + chr(l3) ; FOR i:=i TO length(CmndStr) DO IF NOT Error. Error THEN sendbyte (ord(CmndStr [i] ) ,Error) ;

Page 28: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 26

FOR i:=l TO 5000 DO BEGIN (Wait a little while)

END ; ReadAns (Answer, Error) ;

END ;

PROCEDURE Contour((dT, dX, dY:integer; VAR Error : Error-Rec)); 3 (------------------ I I I I I I I I L I I

( Expected 1 <= dT <= 8 3 ( input: -32.000 <= dX,dY <= +32.000 3 (------------------------------------------------------ 3

.........................

BEGIN IF NOT Errsr.Error THEN sendByte($80,Error); ( header 3 IF NOT Error.Error THEN sendByte(ord(dT)+$80,Error) ; < dt 3 IF NOT Error.Error THEN sendByte(hi(dX),Error); ( x high 3

IF NOT Error.Error THEN sendByte(hi(dY) ,Error) ; < y high 3

IF NOT Error.Error THEN sendByte(0,Error); ( z high 3

IF NOT Error.Error THEN sendByte(lo(dX) ,Error); ( x low 3

IF NOT Error.Error THEN sendByte(lo(dY),Error); < y low 3

IF NOT Error.Error THEN sendByte(0,Error); ( z low 3 END ;

VAR i : integer;

BEGIN CmndStr : string;

CmndStr := 'CMI[Y> + chr(i3); FOR i:=l TO length(CmndStr1 DO BEGIN IF NOT Error. Error THEN sendbyte(ord(CmndStr [i] ) ,Error) ; IF Error.Error THEN BEGIN

Error.Code := 103; Error.Msg := Error.Msg + chr(l3) +

>Failed to set motor in contouring mode'; END ;

Page 29: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank

END ; END ;

27

PROCEDURE StopCM((VAR Error : Error-Rec));

( 1) Sends the ContourMode ending dataset of $80,$80 (------------------------------------------------------ 3

< and tries to read a colon [:I 3 (------------------------------------------------------ 3

3 frornthe DMC.

VAR Dummy : char; BEGIN sendByte($80,Error); ( stop- 3 sendByt e ($80, Error) ; ( record 3

Dummy := chr(ReadByte(Err0r)) ; GotoXY (13,121 ; write( ’Galil answered with: ’ , Dummy) ; GotoXY(l3,13); IF dummy = I:’ THEN

ELSE BEGIN writeln(’Contour Mode ended properly.’)

Error.Error := TRUE; Error.Code := 104; Error.Msg := ’Failed to stop contouring mode’;

END ; END ;

PROCEDURE Error,Handle((VAR Error : Error-Rec));

{ ( ( (

(--------------------------------------------------------------------- 3 IF a S S C E ~ ~ S O program-error has occused ( S Q X ~ E W ~ W ~ in the grogram I the error-record was adjusted) this procedure display’s the error. 1 If a DMC-630-error has occured, this procedure tries to read the 3 error-code from the IO-buffer by sending the command ’TCj to the 3

( DMC-630. 3 (--------------------------------------------------------------------- 3 VAR Error-Code, ValCode : integer;

BEGIN Answer:=”;

Page 30: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 28

IF Error.Code=O THEN BEGIN

SendCmd( ’ST;TC’ ,Answer,Error) ; Val (Answer, Error-Code , ValCode) ; IF ValCode=O THEN Error.Code := Error-Code

ELSE YEGIN Error.Code := 105; Error.Msg := ’Failed on converting Galil-Error-code’

END ; END ;

ErrorWin (Error) ; Beep; Ch := Readchar; CloseWindow; Error.Eïror := FALSE; Error.Code := O; Error.Msg := I ’ ;

Clear-Output; END ;

END. { UNIT GALIL630 .PAS 3

2.5 WINDOWS.pas

INTERFACE

USES Win, General, Crt;

PROCEDURE Op enW in ;

PROCEDURE Startwin;

PROCEDURE Contourwin;

Page 31: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aanst wing wikkel bank 29

PROCEDURE ManWin;

PROCEDURE MoveWindow(Tite1 : string) ;

PROCEDURE EncoderWin(Answer:String);

PROCEDURE NoFileWin;

PROCEDURE WrongDataWin(m: integer) ;

PROCEDURE IOWin(Tite1 : string) ;

IMPLEMENTATION

PROCEDURE Openwin; BEGIN Window(1, 2, 80, 25); FillWin(#178, LightGray + Black * 16); Window(1, 1, 80, 25); GotoXY(1, I) ; TextColors(White,Blue) ; ClrEol ; Write( ’ ClrEol;

C O N T R O L W I N D I N G M A C H I N E’);

END ;

PROCEDURE Startwin; BEGIN Createwindow (23,7,53,16, TextCQ1Qrs(LightGray,Brown)i GotoXY (I, 3) ; Writein(’ Writ e h ( ’ Writ eln ; Writein(’

Main Menu ’ ,Brown) ;

I = Contouring mode’) ; 2 = Manual mode’) ;

Esc = Stop program]) ; END ;

PROCEDURE Contourwin;

Page 32: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 30

BEGIN CreateWindow(18,6,62,21,> Contouring mode ],Blue); TextColors(LightGray,Blue); GotoXY(l,3); Writein( 1 = Read Datafile]);

Writeln(] any key = Interrupt contouring]); Writ eln ; Writein(’ Esc = Back to main menu]); Writ eln ; Writeln ( Current file: ’,Filename); Writ eln ; Writelno STATUS: J ) ;

L L < + A l m f W A A U c i A U \ 1 2 St-rt r=nt=uringJ);

END ;

PROCEDURE ManWin; BEGIN CreateWindow(20,5,62,22,’ Manual Mode ],Blue); TextColors (LightGray , Blue) ; Writeln; Writ eln ; Writein( Writein( Writ e h ( Writein0 Writein0 Writein( Writein( Writein0 Writeln; Writein(’ Writ eln ; writ e h (

END ;

1 = Reset GALIL-630’); 2 = Motor ON]); 3 = Motor OFF]); 4 = Traverse towards home]); 5 = Find Edge]); 6 = Traverse Left/Right/Up/Down’) ; 7 = Read EncoderCount]) ; 8 = Set current Encodercount O ’) ;

O = Stop Motor]);

ES& = Back to Main Menu]);

PROCEDURE MoveWindow((Tite1 : string) 3 ; BEGIN CreateWindow(l2,6,69,18,Titel,Yellow) ; TextColors (LightGray ,Yellow) ; Writ eln ; Writ eln ;

Page 33: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank

Writeln(’ UP/DOWN = increase/decrease speed ROTOR’); Writeln(’ LEFT/RIGHT = increase/decrease speed TRANSLATOR’); Writeln; Writeln(’ 0 = Writeln(’ i =

Writeln(’ Esc

IJ.-: * A l .. . WJ. I b C A U 3

END ;

st op ROTOR ) ; St op TRANSLATOR ) ;

= Back (§top both motors)’);

PROCEDURE Errorvin( (Error : Error-Rec) 3 ; BEGIN Creat eWindow (15,18,65,14, ’ ’ ,Red) ; TextColors (White, Red) ; Writ eln ; Writeln(’ ERROR no. ’,Error.Code:4,’ HAS OCCURRED ! ! ! ’ ) ; Writ eln; Writeln( ’ ’ ,Error. Msg) ;

END ;

PROCEDURE Encoderwin( (Answer :String) 1 ; BEGIN CreateWindow(15,10,65,14, ’ ’ ,Red) ; TextColors (White,Red) ; Writ eln ; Writ e h ( ’ Current position is: ’ ,Answer);

END ;

PROCEDURE NoFileWin; BEGIN CreateWindow(l5,15,65,19, ”,Red) ; TextColors (White,Red) ; Writ e h ; Writeln(’ INCORRECT FILENAME OR NO FILE SPECIFIED ! ! ! ’1;

END ;

PROCEDURE WrongDataWin( (m: integer) ; BEGIN CreateWindow(l6,17,64,21, ”,Red) ; TextColors (White,Red) ;

Page 34: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 32

Writ eln ; Writeln( INCORRECT DATA IN FILE ! ! ! (line: ’ ,m:4, ’) ’1 ;

END ;

n n n m o n i i n o r n r . i : - J f T A & - i . -&-:..-ìì. rnub,r;uvn.o r u w s i i i \ i r b c r . = ~ A ~ L L ~ / J ,

BEGIN CreateWindow(16,12,64,16JTitelJBlue); TextColors (LightGray ,Blue) ; GotoXY(2,2) ; Write( [PATH] FILENAAM : ’ ; TextColors (Whit e , Blue) ;

END ;

END. (* UNIT Windows *3

2.6 WIN.pas

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

< ~ Turbo Pascal Version 5.5 3 < Window Int erf ace Unit 3 < 3

Copyright (C) 1989 Borland International 3 3

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

UNIT Win;

INTERFACE

USES Crt;

TYPE

Page 35: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 33

{ Window t i t l e s t r i n g 3

T i t l e S t r = stringC631;

{ Window frame charac te rs > FrameChairs = a r ray [i. .8] of Char;

{ Window s ta te record 1

WinState = record WindMin, WindMax: Word; WhereX, WhereY : Byte ; TextAttr : Byte;

END ;

T i t l e S t r P t r = ^ T i t l e S t r ;

WinRecPtr = ^WinRec; WinRec = RECORD

Next: WinRecPtr; S t a t e : WinState ; T i t l e : T i t l e S t r P t r ; T i t l e A t t r , FrameAttr: Byte; Buff e r : Point e r ;

END ;

CONST

{ Standard frame charac te r sets 1

SingleFrame: Framechars = ’ ’ ; DoubleFrame : Framechars = ’ ’ ;

VAR Topwindow: WinRecPtr; WindowCount : i n t ege r ;

{ Direct write rout ines >

PROCEDURE WriteStr(X, Y: Byte; S: Str ing; A t t r : Byte);

Page 36: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkelbank 34

PROCEDURE WriteChar(X, Y , Count: Byte; Ch: Char; A t t r : Byte);

( Window handling rou t ines 3

PROCEDURE FillWin(Ch: Char; A t t r : Byte);

PROCEDURE ReadWin(VAR Buf) ;

PROCEDURE WriteWin(VAR Buf);

FUNCTION WinSize: Word;

PROCEDURE SaveWin(VAR W : Winstate) ;

PROCEDURE RestoreWin(VAR W : Winstate) ;

PROCEDURE FrameWin(Tit1e: T i t l e S t r ; VAR Frame: Framechars ; T i t l e A t t r , FrameAttr : Byte) ;

PROCEDURE UnFrameWin;

PROCEDURE ActiveWindow(Active: Boolean);

PROCEDURE OpenWindow(X1, Yl, X2, Y2: Byte; T: T i t l e S t r ; T A t t r , F A t t r : Byte) ;

PROCEDURE Delet eWindow ;

IMPLEMENTATION

($L MIN)

PROCEDURE WriteStr(X, Y : Byte; S: S t r i n g ; A t t r : Byte); EXTERNAL (WIN) ;

PROCEDURE WriteChar(X, Y , Count: Byte; Ch: Char; A t t r : Byte); EXTERNAL ( W I N 3 ;

PROCEDURE FillWin(Ch: Char; A t t r : Byte); EXTERNAL (WIN) ;

Page 37: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aanst wing wikkel bank 35

PROCEDURE WriteWin(VAR Buf); EXTERNAL (WIN3 ;

FUNCTION WinSize: Word; EXTERNAL ( W I N 3 ;

PROCEDURE SaveWin(VAR W : Winstate) ; B E G I N

W.WindMin := WindMin; W.WindMax := WindMax; W.Wherex := WhereX; W.WhereY := WhereY; W.TextAttr := TextAttr;

END ;

PROCEDURE RestoreWin(VAR W : Winstate) ; B E G I N

WindMin := W.WindMin; WindMax := W.WindMax; GotoXY(W.WhereX, W.WhereY); TextAttr := W.TextAttr;

END ;

PROCEDURE FrameWin(Tit1e: T i t l e S t r ; VAR Frame: FrameChars; T i t l e A t t r , FrameAttr: Byte);

VAR Y, E, Y : Word;

BEGIN W := Lo(WindMax) - Lo(WindMin) + 1; H := Hi(WindMax) - Hi(WindMin) + 1; Writechar (1 , 1, I, Frame [i] , FrameAttr) ; WriteChar(2, 1, W - 2, Frame[2], FrameAttr) ; WriteChar(W , 1, I, Frame [SI, FrameAttr) ; I F Length(Tit1e) > W - 2 THEN Ti t l eCO] := Chr(W - 2 ) ; WriteStr((W - Length(Tit1e)) s h r 1 + 1, 1, T i t l e , T i t l e A t t r ) ; FOR Y := 2 TO H - I DO

Page 38: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 36

BEGIN WriteChar(1, Y , 1, Frame C41 , FrameAttr) ; WriteChar(W, Y , 1, Frame C51, FrameAttr) ;

END ; Writechar ( I, H , I, Frame CSl , FrameAttr) ; l.l-:A-nL--fq U LI ~ q ~ ~ = - , r 7 i c ~ ~ ~ ~ A + + ~ \ .

W r i t e C B a r ( W , H , 1, Frame CE41 , FroneAt t ï ) ; Inc(WindMin, $0101) ; Dec(WindMax, $0101) ;

w ~ & ~ , e u i i a i \ ~ , A I , n L , L A - G L I J ) LA' ILYIT W W A J S

END ;

PROCEDURE UnFrameWin; BEGIN

Dec(WindMin, $0101); Inc(WindMax, $0101) ;

END ;

PROCEDURE ActiveWindow((Active: Boolean)); BEGIN

I F Topwindow <> n i l THEN B E G I N

UnFrameWin; WITH TopWindow- DO

I F A c t i v e THEN

ELSE FrameWin(Title^, DoubleFrme, T i t l e A t t r , FrameAttr)

FrameWin(Title^, S i n g l e F r m e , FrameAttr , FrameAttr) ; END ;

END ;

PROCEDUHE OpenWindow((X1, Yl, X2, Y2: Byte; T: TitleStrj

VAR

BEGIN

T A t t r , F A t t r : Byte));

W : WinRecPtr;

Activewindow (False) ; New(W) ; WITH W- DO BEGIN

Next := Topwindow;

Page 39: Aansturen GALIL-motoren wikkelbank - Pure - Aanmelden · IO-kaart welke in een PC past, om met behulp van die PC de motoren aan te sturen. In dit rapport wordt deze aansturing en

Aansturing wikkel bank 37

Savewin (St at e ) ; GetMem(Title, Length(T) + I) ; T i t l e - := T; T i t l e A t t r := T A t t r ; FrameAttr := FAttr; !!indW?(Xi, Yi, x2, Y2); GetMem(Buf f er , WinSize) ; ReadWin(Buff er-) ; FrameWin(T, DoubleFrme, T A t t r , FAttr) ;

END ; Topwindow := W ; Inc(WindowCount) ;

END ;

PROCEDURE Deletewindow; VAR

B E G I N W : WinRecPtr;

IF Topwindow <> n i l THEN BEGIN

W := Topwindow; WITH W A DO BEGIN

UnFrameWin ; WriteWin(Buff er-) ; FreeMem(Buffer, WinSize) ; FreeMem(Title, Length(Title^) + I) ; Rest oreW i n (St a t e) ; Topwindow := Next;

END ; Dispose(W) ; Act iveWindow (True) ; Bec(Wandswcount);

END ; END ;

END. (* U N I T Win *)


Recommended