VBA Concepten
Een verzameling VBA oplossingen ten behoeve van het vervaardigen van concepttekeningen van sorteerinstallaties
Versie 5 2 December 2005
Voorwoord Dit verslag is tot stand gekomen naar aanleiding van de opleiding voor AutoCAD System Manager bij het CAD College in Nijmegen. Pieter en Erik Eenkema van Dijk wil ik bedanken voor het vertrouwen dat ze mij gegeven hebben, en Koos Coops, senior tekenaar/engineer op de Sales afdeling van BRM, ben ik enorm dankbaar voor zijn lessen en aanwijzingen, zijn geduld en zijn ongelofelijk onbeschrijflijke niet-aflatende positieve inbreng. Verder wil ik alle anderen bedanken die op directe of indirecte manier hebben meegeholpen aan dit werk.
Marjolein Francois Krimpen aan de Lek, November 2005
2
Inhoudsopgave Voorwoord....................................................................................................................................... 2 Inhoudsopgave ............................................................................................................................... 3 1.
Probleembeschrijving ..................................................................................................................... 4
2.
Alternatieve oplossingen................................................................................................................. 5
3.
Indeling ........................................................................................................................................... 7 Menu 1: Creëren ............................................................................................................................. 8 Nieuwe tekening ......................................................................................................................... 8 Gebouw ...................................................................................................................................... 9 Systeem componenten............................................................................................................... 9 Menu 2: Wijzigen .......................................................................................................................... 10
4.
Detail uitwerking............................................................................................................................ 11 Bemating....................................................................................................................................... 11 Banden.......................................................................................................................................... 12 Glijbanden ................................................................................................................................ 12 Stijgbanden............................................................................................................................... 12 Persen........................................................................................................................................... 13
5.
Bijlagen ......................................................................................................................................... 17 Bijlage 1: Overzicht ....................................................................................................................... 17 Forms ....................................................................................................................................... 17 Modules .................................................................................................................................... 17 Bijlage 2: Code.............................................................................................................................. 19 Sub Bematen............................................................................................................................ 19 Sub Cleanup Bakfiles ............................................................................................................... 21 Sub GetDrawingNumber .......................................................................................................... 23 Bijlage 3: Stroomschema’s ........................................................................................................... 26 Sub Bematen............................................................................................................................ 26 Sub Cleanup Bakfiles ............................................................................................................... 27 Sub GetDrawingNumber .......................................................................................................... 30 usfBaler .................................................................................................................................... 32 usfIncline .................................................................................................................................. 33 Sub Baler.................................................................................................................................. 34 Sub Incline................................................................................................................................ 35
3
Inleiding Ik heb een HBO opleiding algemene werktuigbouwkunde gedaan en ik ben ruim zes jaar werkzaam geweest als technisch tekenaar bij een aannemer in het groot staal. Mensen vragen me soms hoe ik als vrouw besloten heb in de techniek te gaan werken. Dat zit in de familie, mijn grootvader van moederskant was scheepswerktuigbouwkundige en mijn zusje is automonteur geworden. Ik heb altijd graag getekend en daarbij ook veel belangstelling gehad voor de exacte wetenschappen. Na een HBO opleiding algemene werktuigbouwkunde te hebben afgerond ben ik ruim zes jaar werkzaam geweest als technisch tekenaar bij een aannemer in het groot staal. Sinds een jaar werk ik als freelancer voor een concern van bedrijven die betrokken zijn bij de productie en verkoop van afvalsorteerinstallaties voor m.n. de Amerikaanse recycling industrie. Dit samenwerkingsverband bestaat uit drie producenten in Europa: Bollegraaf Recycling Machinery (BRM), Lubo en Titech, en een verkoopagentschap in de USA: Vandykbaler Co. (VDBC). Twee van de productiebedrijven (BRM en Lubo) zijn in Nederland gevestigd, de derde (Titech) deels in Duitsland, deels in Noorwegen. Deze bedrijven produceren elkaar complementerende componenten waaruit sorteerinstallaties worden samengesteld. Het ontwerp van de complete installatie gebeurt in nauwe samenwerking tussen de verschillende producenten en wordt gecoördineerd door VDBC in de VS.
VS A markt
VDBC verkoop
Organigram
± 50 %
BRM
± 50 %
± 50 %
± 50 %
Ove rige markte n
LUBO
± 50 %
Ove rige markte n
TITECH
± 50 %
Ove rige markte n
productie
productie
productie
VDBC is de exclusieve importeur van BRM, Lubo en Titech in de US. Deze bedrijven hebben daarnaast nog andere markten elders in de wereld. Het aandeel van hun productie dat via VDBC verkocht wordt is echter vrij groot, voor het gemak stel ik het in het bovenstaande organigram voor als zijnde 50%. Er is dus een grote onderlinge afhankelijkheid. De verkooptechnieken op de Amerikaanse markt zijn vrij agressief, niet-afwachtend, klanten worden zeer actief benaderd en er worden relatief veel voorstellen gedaan en voorlopige layout tekeningen gemaakt voordat men komt tot een definitief concept. Dit veroorzaakt een grote belasting voor de verkoop-tekenaars bij BRM en Lubo, die alle opsteltekeningen maakten.
1.
Probleembeschrijving
Op het moment dat ik werd benaderd door VDBC ondervond dit verkoopagentschap een probleem met betrekking tot het op tijd verkrijgen van de layout tekeningen in de eerste fase van het contact met de klant. De druk op de verkooptekenaars was erg hoog en er was sprake van wederzijds onbegrip. De verkooptekenaars bij BRM en Lubo tekenen volgens de eisen en wetmatigheden van de techniek, terwijl de verkopers meer invloed wilden uitoefenen vanuit het verkoopstandpunt en de eisen van de klant, dus meer flexibiliteit. Men wilde nu ofwel zelf een tekenaar in dienst nemen, ofwel de eigen mensen, de verkopers, leren zelf opsteltekeningen te maken.
4
De oplossing Mijn oplossing is, een stuk VBA gereedschap te ontwikkelen dat de verkopers kan ondersteunen in het opstellen van layout tekeningen van afvalsorteerinstallaties. Het door mij gebruikte tekenprogramma is AutoCAD R2004. De verkoopafdeling van BRM werkt al jaren met AutoCAD. De flexibiliteit en veelzijdigheid van dit programma bieden ruime mogelijkheden. Stand van zaken Bij het schrijven van dit verslag is het programma nog niet afgerond. Voor zover er bloktekeningen zijn van drie aanzichten van een component, kunnen deze al wel los in de tekening worden geïnsert. Er is dan nog geen samenhang met de rest van het systeem. Die samenhang is er al wel tusesn pers en bijbehorende opvoerband. Een dergelijke samenhang moet er uiteindelijk voor complete sytemen komen. Het is de bedoeling dat door het invoeren van parameters in formulieren al voorafgaand aan het eigenlijke tekenwerk de grote lijnen van een installatie kunnen worden uitgezet. Ik ben er zeker van dat het mogelijk is om dit in nog een jaar tijd te bewerkstelligen. Op dit moment wordt het programma al door mijzelf gebruikt bij het vervaardigen van opsteltekeningen en het helpt mij half-geautomatiseerd en dus sneller te tekenen. Daarmee is aan de doelstelling die mij vantevoren was opgelegd gedeeltelijk tegemoet gekomen. Het is leuk geweest om te doen en ik zal er met plezier aan blijven werken.
2.
Alternatieve oplossingen
Tekenaar Een tekenaar zou moeten tekenen volgens het systeem van BRM en Lubo, die tot dan toe al het tekenwerk voor hun rekening genomen hadden. Er wordt getekend met AutoCAD. Dit heeft het voordeel dat er in de tekening al dermate veel informatie zit dat het ontwerp van de installatie al redelijk betrouwbaar is wanneer het aan de klant wordt voorgesteld. De kans dat er iets op papier verkocht wordt dat in de praktijk niet gemaakt kan worden – wat nog tè vaak voorkomt – wordt dan kleiner. De tekening vervult een communicatiefunctie in het contact tussen de verkopers en de klant enerzijds, en de producenten en engineers anderzijds. Doordat de wensen van de klant worden gevisualiseerd in een technisch controleerbaar format worden fouten en knelpunten in de aanbiedingsfase snel duidelijk. Tekenende verkopers De verkoper verkrijgt in zijn functie veel inzicht in de praktische werking van een systeem en in de wensen van de klant. Wanneer dit wordt gekoppeld aan het vermogen om zelf ontwerptekeningen te maken, biedt dit veelbelovende perspectieven. Als de verkopers zelf leren tekenen zijn er twee mogelijkheden: zij kunnen leren met AutoCAD te tekenen in het tot dan toe gebruikelijke sales format zij kunnen leren op een vereenvoudigde manier te tekenen, bij voorbeeld alleen bovenaanzichten, met AutoCAD of een grafische editor. Tegen de laatste optie bestaat bij de productiebedrijven grote weerstand. Er wordt gevreesd dat ontwerpen worden verkocht voordat ze goed zijn uitgewerkt en dat er in de productiefase grote problemen zullen ontstaan. Er is nog een derde mogelijkheid: nieuwe verkopers in dienst nemen die beide rollen kunnen vervullen, van tekenaar en verkoper. Dat is geprobeerd, maar mensen die beide talenten hebben zijn moeilijk te vinden. Bovendien wordt het probleem niet opgelost voor de huidige verkopers, met al hun kennis van de markt en van de industrie, die niet kunnen omgaan met AutoCAD. Mijn opdracht Op dit moment werk ik als tekenaar rechtsreeks voor de verkopers en ben in dat geval hun rechtstreekse aanspreekpunt. In deze rol leer ik de vele mogelijkheden van de sorteersystemen en hun componenten kennen. Daarbij ben ik bezig met het programmeren van een tekengereedschap in VBA dat de verkopers zelf in staat kan stellen om tekeningen te maken in het format en volgens de regels van de sales afdelingen van BRM en Lubo.
5
Waarom VBA Dit gereedschap zal gebruikt worden om opsteltekeningen te maken van sorteerinstallaties. Functies: componenten in een opstel tekening te plaatsen in een onderlinge samenhang; parametrisch dimensioneren van componenten. Ook zal het enkele eenvoudige functies van AutoCAD beschikbaar maken voor de verkopers om het hen mogelijk te maken teksten en dimensies te plaatsen, en een tekening aan te maken en in te richten volgens de huisstijl van BRM/Lubo. Ik heb gedacht aan een vereenvoudigd AutoCAD menu en taakbalk. De opdracht is echter dermate gecompliceerd dat de keuze voor VBA de enige mogelijkheid is om het geheel te bewerkstelligen. Het inplakken van voorgetekende blokken van losse componenten is niet voldoende, deze moeten met een samenhang die aan regels gebonden is, worden samengevoegd tot een systeem. De positie en afmetingen van componenten wordt bepaald door de positie en afmetingen van andere componenten. Het is nodig om parametrisch te tekenen en de meest gebruiker-vriendelijke manier om dit te doen is via duidelijke schermmenu’s. Schermmenu’s bieden de mogelijkheid om veel parameters vrij te kiezen. Dat kan alleen met VBA.
6
3.
Indeling
Door middel van schermmenu’s worden een aantal commando’s en tekenroutines makkelijk hanteerbaar gemaakt voor verkopers om hen in staat te stellen een tekening op te bouwen zonder veel kennis van AutoCAD. Het volgende schema geeft de belangrijkste modules weer en hun onderlinge bereikbaarheid via de schermmenu’s.
7
Menu 1: Creëren De macro kan worden aangeroepen door middel van een knop op de VDB toolbar in AutoCAD. Dan opent het eerste schermmenu, zie afbeelding hiernaast. De gebruiker kan een nieuwe tekening beginnen of verder gaan met een bestaande tekening. In een al begonnen tekening kunnen nieuwe systeem componenten worden toegevoegd, er kan worden ingezoomd op vooraf bepaalde views of er kunnen wijzigingen worden gedaan aan reeds ingevoegde systeem componenten. Om wijzigingen te doen gaat men via de keuze “modify” naar een tweede schermmenu. Een nieuwe tekening wordt begonnen via een formulier waarin de gegevens worden ingevuld die in het titelblok terecht komen. Er wordt een plattegrond van het gebouw getekend, waarna de schaal van de tekening wordt bepaald aan de hand van de afmetingen van het gebouw. Met de hand kan een andere schaal en/of een ander papierformaat worden gekozen. Automatisch wordt de datum ingevuld in het datumblok en op schijf wordt gezocht naar het hoogste tekeningnummer, dat wordt opgehoogd met 10 (om wat ruimte te laten voor tussengevoegde tekeningen) en in het titelblok wordt geplaatst. In de nieuwe tekening worden drie aanzichten aangemaakt, een bovenaanzicht, een zijaanzicht en een vooraanzicht van het gebouw. Hierbinnen wordt het systeem getekend. Standaard is de instelling “view limits”. Via het schermmenu “modify” krijgt de gebruiker de mogelijkheid om verschillende wijzigingen aan systeem componenten te doen. De systeemcomponenten zijn ingevoegd als AutoCAD block. Door de betreffende blokken te selecteren en enkele parameters te wijzigen, worden op de tekening alle drie de aanzichten van de betreffende onderdelen meteen gewijzigd.
Nieuwe tekening De volgende stap bij het beginnen van een nieuwe tekening, is het inserten van een kader. Hierbij hoort ook het bepalen van de tekenschaal en het invullen van de gegevens in het titelblok. Het titelblok en het kader staan als bloktekening op de schijf staat en worden op schaal in de modelspace ruimte van de tekening wordt geïnsert – want dit is de manier van werken bij BRM. De volgende gegevens worden ingevuld: −
Opdrachtgever
−
Project
−
Naam verkoper
−
Datum (automatisch)
−
Tekeningnummer (automatisch)
−
Schaal (handmatig te kiezen dan wel automatisch te herleiden uit de afmetingen van het gebouw)
−
Papierformaat (idem zie schaal)
8
Gebouw
De volgende stap kan zijn: het tekenen van een vereenvoudigde plattegrond van de ruimte. Muren kunnen worden aangegeven met een polylijn. Deuren en doorgangen aangeven evenals vaste obstakels zoals bijvoorbeeld kolommen. Direct bij het beginnen van de nieuwe tekening worden drie aanzichten gemaakt. Dit gebeurt via de module “new drawing”. Elk aanzicht wordt vertegenwoordigd door een Polyline die geplaatst wordt op de laag “defpoints”. Daaraan wordt als XData de naam van de view verbonden. Op deze manier blijft deze informatie onzichtbaar in de tekening aanwezig. De XData van de Polylines wordt opgevraagd wanneer een bepaald aanzicht moet worden geselecteerd.
Systeem componenten Daarna wordt een opstelling ontworpen. Via het eerste schermmenu kiest men een systeemcomponent. Er verschijnt een volgend schermmenu waarin parameters ingevuld worden die het onderdeel kenmerken. Uiteindelijk wordt het onderdeel in het bovenaanzicht van de tekening geplaatst door het aanwijzen van een insertiepunt. Tegelijkertijd worden een vooraanzicht en een zijaanzicht van het onderdeel geplaatst in daartoe bestemde aanzichtkaders. Het is aanvankelijk een punt van discussie geweest of de zijaanzichten van belang zijn voor de klant. Maar iedere tekenaar zal het erover eens zijn dat een tekening zonder zijaanzichten niet betrouwbaar is. Tenminsten twee en soms drie aanzichten zijn nodig om te bepalen of alle componenten van de opstelling goed aansluiten en elkaar niet in de weg zitten. Opvoerbanden, losse banden en Persen hebben vrij veel parameters. Zij hebben daarom een eigen schermmenu. Niet alle systeemcomponenten hebben hun eigen schermmenu. Bij voorbeeld zeven zijn er in bepaalde standaard uitvoeringen, en om deze in te voegen is alleen een insertiepunt en een oriëntatie nodig. Dit gebeurt direct vanuit het Menu 1. De configuratie van de aan- en afvoerbanden om deze componenten heen, is daarentegen wel aan veel variabelen gebonden. Het is daarom mogelijk dat in de toekomst bij verdere uitbreiding van het programma, ook deze componenten een eigen schermmenu krijgen. De systeemcomponenten die geen eigen schermmenu hebben worden geselecteerd via een browser die is ingebouwd in het Menu 1. Zodra op de desbetreffende knop geklikt wordt, wordt het schermmenu vergroot. In de nieuwe ruimte is een browser. Deze browser laat alle tekeningen zien die op de harde schijf in de map staan die behoort bij het zoekpad bij de geselecteerde systeemcomponent. Dit zoekpad staat extern opgeslagen in een Excel bestand.
9
Systeem componenten staan als bloktekeningen geordend in vaste mappen op de schijf. Wanneer een keuze wordt gemaakt, zoekt het programma de lijst van tekeningen in de map, waarvan het zoekpad in het programma wordt opgeroepen. Een voloview invoegtoepassing toont de tekening die geselecteerd wordt. Wanneer op insert wordt geklikt zoekt het programma drie blokken in een subdirectory op de schijf, een bovenaanzicht, een vooraanzicht en een zijaanzicht van het geselecteerde onderdeel. Voor zover van een systeem-component drie aanzichten gemaakt zijn, en deze zijn geplaatst in een submap “/blokken” in de dezelfde map, kan deze in de layout worden toegevoegd door het opgeven van een insertiepunt en een oriëntatie. Voor zover dit niet het geval is, kan de tekening van de systeem-component worden geopend door erop te dubbelklikken, en de blokjes op de ouderwetse manier in de layout worden gevoegd door knippen en plakken. De naam van het blok dat wordt ingevoegd bestaat uit een gedeelte dat de machine/component aanduidt, bijvoorbeeld: glijband, of ONPzeef. Het blok heeft een suffix dat het aanzicht aanduidt: B voor bovenaanzicht, Z voor zijaanzicht en V voor vooraanzicht. Verder krijgt het een getal als prefix, dat bij het wijzigen helpt om terug te zoeken welke drie aanzichtblokken bij elkaar horen. Positiebepaling Voor het invoegen van componenten moet de positie in de ruimte worden bepaald. Daartoe wordt tweemaal een punt geprikt, eenmaal in het bovenaanzicht en eenmaal in een van beide zijaanzichten. Wanneer het eerste punt in het bovenaanzicht is, legt het de x en de y coördinaten vast en het punt in het zij- of vooraanzicht bepaalt dan de hoogte (z coördinaat). Wanneer het eerste punt in het voor- of zijaanzicht is, legt het de z en de x- of y coördinaten vast, en een punt in het bovenaanzicht bepaalt dan de overgebleven coördinaat.
Menu 2: Wijzigen Bij het wijzigen van componenten wordt een blok geselecteerd op het scherm. Vervolgens wordt de tekening nagezocht op de bijbehorende aanzichten, blokken met dezelfde naam uitgezonderd de laatste letter. De gedane wijziging wordt dan uitgevoerd op de betreffende blokken. Er zijn voor opvoerbanden (inclines) en losse banden (conveyors) speciale modules om deze te wijzigen. Daarbij hoort een nieuw component-gerelateerd schermmenu waarin de huidige parameters van een geselecteerde (opvoer-) band weergegeven worden, met de mogelijkheid om deze te wijzigen. Omdat met name de stijghoek en de lengte van losse banden veel gewijzigd worden bij het schuiven en wijzigen aan een layout, is dat erg handig. Ook het aanpassen van de opvoerhoogte en het kiezen van een ander type opvoerband kan erg bewerkelijk zijn. De drie aanzichten van de geselecteerde band worden gewist uit de tekening en nieuwe aanzichtblokken worden ingevoegd volgend de gewijzigde parameters.
Verder is er de mogelijheid om redelijk eenvoudige handelingen op systeemonderdelen uit te voeren, waarbij de gebruiker maar een aanzicht per handeling hoeft te bewerken. Elke handeling die men op een 10
willekeurig aanzicht verricht, wordt automatisch ook uitgevoerd op de twee andere aanzichten. −
Componenten wissen
−
Schuiven met componenten
−
Componenten roteren
−
Componenten spiegelen
CAD-functies Overige CAD-functies die een gebruiker via het programma moet kunnen uitvoeren, zijn:
4.
−
Bematen
−
Toevoegen van teksten
−
Posnummers (callout bubbles) toevoegen – eventueel later uit te breiden met het genereren van een stuklijst.
Detail uitwerking
Voor een paar systeemcomponenten wordt hier ingegaan op de meer specifieke uitwerking. Wat betreft de rest kan de code van het programma worden geraadpleegd. Bij afronding zal er zeker een gebruikershandleiding komen. De persen en opvoerbanden zijn het meest uitgewerkt en daarom interessant om te bekijken Verder vind ik het leuk om de dimensionerings-tool nader uit te lichten. Omdat er wordt gewerkt voor de Amerikaanse markt, hebben veel – maar niet alle – forms een schakelknop die het mogelijk maakt te switchen van millimeters naar inches en terug. Als de invoer in inches is, wordt deze via een omrekenprocedure teruggerekend naar millimeters. Bij het invoegen van systeemcomponenten vind ik dat niet altijd nodig omdat die in millimeters worden geproduceerd, maar soms is het wel handig, bijvoorbeeld bij het tekenen van een plattegrond – als de informatie wordt aangeleverd in inches – om het omrekenen niet zelf te hoeven doen, maar het automatisch te laten gebeuren. Er wordt altijd getekend in millimeters. De dimensioneringstekst geeft echter behalve de maat in millimeters, ook de maat in inches.
Bemating Het bematen gebeurt semi-automatisch, de bemating wordt volgens de vereiste stijl aangemaakt en meteen op de juiste layer gezet. De manier van bematen is ook bijzonder. Hoewel AutoCAD de mogelijkheid biedt om alternatieve eenheden weer te geven in een standaard dimensie formaat heeft BRM een eigen manier van dimensioneren. Bij de standaard AutoCAD manier met alternatieve eenheden wordt de secundaire eenheid tussen haakjes weergegeven, dat staat niet echt mooi. De BRM bematingsstijl lijkt op AutoCAD’s alternate units Architectural stacked met precisie ? , maar de primaire en secundaire eenheden worden elk aan een kant van de dimenselijn geplaats en zien er uiterlijk hetzelfde uit. De maat wordt door VBA gemaakt als geroteerde dimensie, met drie invoerpunten en een rotatie. Pt0 en pt1 geven de te dimensioneren punten en pt2 geeft de positie van de dimensielijn. Deze drie punten worden gekozen nadat er op de knop “Dimension”geklikt wordt, en worden aan de sub “Bematen” doorgegeven. In deze sub wordt user input gevraagd van een keyword (letter H, V of A) om te bepalen of het om een horizontale, verticale, of geroteerde dimensie gaat, en dan wordt de rotatie van de geroteerde dimensie berekend. Als het om een horizontale dimensie gaat wordt de rotatie 0, bij een verticale dimensie wordt de rotatie Pi/2, en bij een werkelijk geroteerde dimensie wordt de hoek berekend die pt0 en pt1 met de x-as maken. De maat wordt van milimeters omgerekend naar feet, inches en achtsten van inches, en deze waarde wordt als tekst bij de dimensielijn geplaatst. De positie van deze tekst en van de echte dimensietekst is afhankelijk van de ruimte op de dimensielijn: wanneer de dimensie kleiner is dan 38 x de tekenschaal is er te weinig ruimte om de beide dimensieteksten aan weerszijden op de dimensielijn te zetten, dan wordt de primaire dimensietekst gecentreerd geplaatst en de maat in inches gecentreerd onder de dimensielijn. Zie de bijgevoegde code voor de exacte werkwijze. NB: Voor het weergeven van achtsten in tekst is een speciale Romans font file nodig die BRM gebruikt.
11
Banden Glijbanden Een glijband wordt geïnsert als een blok dat op zijn beurt bestaat uit twee blokken; een voor de head pulley sectie en een voor de tail pulley sectie. Deze twee uiteinden worden met elkaar verbonden door lijnen te tekenen tussen gelijknamige referentiepunten in de beide eindblokken. Deze referentiepunten hebben XData die hen identificeert en die het mogelijk maakt ze later op te zoeken en te gebruiken als respectievelijk begin- en eindpunt van een lijn. Door deze techniek te gebruiken kan de lengte en de breedte van de in te voegen bandbloktekening naar wens worden aangepast. De 3-dimensionale lengte van de band wordt, afhankelijk van de stijghoek en de hoek in het bovenaanzicht, berekend aan de hand van het gekozen begin- en eindpunt. In formule:
L = ∆x 2 + ∆y 2 + ∆z 2 .
Glijbanden worden in standaard lengtes gemaakt, met een minimum van 1900 mm te verlengen met veelvouden van 500 mm zodat de berekende lengte moet worden omgerekend naar een productielengte. Het blok wordt geïnsert met een hoek 0. De tail pulley sectie wordt dan verplaatst totdat de afstand tussen het hart van de aanvoerrol en het hart van de keerrol gelijk is aan de bandlengte L. Dan worden beide delen door middel van lijnen met elkaar verbonden en ten slotte krijgt de band de rotatie die volgt uit de gekozen positie-punten.
Stijgbanden De methode om een stijgband te inserten is in beginsel gelijk aan de methode om een glijband te inserten, echter meer uitgebouwd. Een stijgband(blok) bestaat uit een tail pulley sectie met een stukje vloerband, een head pulley sectie met of zonder zwanenhals, en middensecties met tussenschotten op vaste afstanden. Een stijgband heeft een hellingshoek die verschillende waarden kan hebben. Er zijn drie typen head pulley secties: twee typen met zwanenhals en een type zonder. Een derde variabele is het type kettingband, er bestaat een standaard uitvoering met 4”ketting en een zware kettingband met 6”ketting. Het type ketting zorgt voor verschillen in de productielengtes en de afstand tussen de tussenschotten. Per kettingtype is er een blok voor het middenstuk. De belangrijkste variabele is de hellingshoek. Per hellingshoek is er voor elk kettingtype een tail pulley blok en drie head pulley blokken. Bij iedere hellingshoek zijn zes uitvoeringen van de stijgband mogelijk. Een stijgband kan geïnsert worden zodra is vastgesteld welke uitvoering wordt gevraagd, en zodra twee positiepunten bepaald zijn. Het eerste punt legt de positie van de head pulley vast. Het tweede punt bepaalt de
12
hoogte van de tail pulley en de oriëntatie van de band in het bovenaanzicht. De lengte van de middensectie van de band wordt als volgt teruggerekend uit de gekozen positie punten:
L=
∆y − E1 − E 2 sin α
Waarbij a is de hellingshoek, E1 is de afstand van het hart van de tail pulley tot het eind van de tail pulley sectie (per kettingtype één optie), en E2 de “horizontale” afstand van het hart van de head pulley tot aan het eind van de head pulley sectie – waarbij de middensectie langs de horizon wordt gelegd (per kettingtype drie opties). Deze lengte L wordt opgedeeld in stukken ter lengte van een middenblok. De restlengte moet worden afgerond op een lengte die overeenkomt met de standaard productielengtes. Het aantal middenblokken wordt verminderd met één, omdat eenmaal een speciaal middenblok wordt ingevoegd, waarin zich de referentiepunten bevinden die overeenkomen met referentiepunten in het blok voor de tail pulley sectie. Door de gelijknamige punten in deze beide blokken met elkaar te verbinden wordt van de band een geheel gemaakt. Tot slot wordt de gehele stijgband geroteerd om het insertiepunt – het hart van de head pulley, met de gevraagde stijghoek.
Persen
Optioneel Persen hebben de volgende optionele componenten: Needle pit / Baler supports Kruisdraden (ja/nee) Extra wide feed hopper (EWFH) (ja/nee: indien ja dan aanvoerband BB = 2000) Verlaagde Ruffler (ja/nee) Perforator (ja/nee) Platform (onderhoudsplatform ja/nee) Optioneel kan een incline bij de pers worden ingevoegd. Als deze optie is aangevinkt opent het incline-schermmenu zodra er op de OK knop geklikt wordt. In dit formulier kunnen een aantal parameters behorende bij de incline (stijgband of opvoerband) worden gewijzigd. Standaard heeft een stijgband naar een pers een zwaanshals van 15° naar beneden, en ook de hoogte behorende bij de pers is alvast berekend en ingevuld; in het voorbeeld is de hoogte 5423 de hoogte van de head pulley behorend bij een HBC80 pers met naaldenput – dus niet op blokken (supports) staande. De richting van de incline hangt vanzelfsprekend samen met de oriëntatie van de pers. Men is echter vrij om deze 13
te wijzigen indien gewenst. Vrij is de keuze van de lengte van het vloerdeel cq. de vloerband, en het type overstort, de richting van de overstort en de stijghoek.
Oriëntatie Standaard oriëntatie:
Infeed
Bij het selecteren van een balenpers wordt vooraf gevraagd om drie punten in het bovenaanzicht aan te wijzen. Het eerste punt geeft het insertie punt. Het tweede punt geeft de richting van de baaluitloop. Deze twee punten zijn bepalend voor de rotatie van het bovenaanzicht van de pers. Het derde punt geeft de richting van de invoer. Wanneer deze tegengesteld is aan de standaard oriëntatie, moet het blok gespiegeld worden na het inserten. De waarde voor het spiegelen (boolean) wordt opgeslagen in de checkbox op de userform “Create” (usfCreate.ckbMirror). Want hoewel de userforms onzichtbaar zijn, blijven ze gedurende de afloop van het programma aanwezig in het werkgeheugen en kunnen dus worden gebruikt om locale variabelen vanuit verschillende procedures door te geven aan andere procedures.
Bale exit
Of de balenpers gespiegeld moet worden, wordt bepaald door de hoek van de lijn Insertiepunt – Baaluitloop met de X-as te vergelijken met de hoek van de lijn Insertiepunt – Aanvoer. Als deze hoek -90 graden is, wordt het blok gespiegeld.
Methode Insert de pers – kaal Insert in Thisdrawing If supports then iPunt(1) = iPunt(1) + 400 Insert Supports of Put Insert in blok Pers 14
iPunt = (0, 0, 0) Twee nested blocks voor draadplateau (HBC_CW1) en afknijpinrichting (HBC_CW2) verschuiven over een pers afhankelijke constane afstand. Insert Bandinloopkoker Type 1 voor HBC60 Type 2 voor HBC80+ A = regular B = EWFH C = verlaagd (ruffler) D = met perforator Insert in blok Pers iPunt(1) is een pers-afhankelijke constante Insert Platform Type 1 voor HBC60 Type 2 voor HBC80+ Insert in blok Bandinloopkoker iPunt = (0,0,0) Insert Crosswires Type 1 (4draden) voor 60/ 80/ 100/ 120 Type 2 (5draden) voor 110/ 140/ 180 Insert in blok Pers iPunt = (0,0,0) Benaming blokken 1. Pers B
Z
V
HBC60
HBC060B
HBC060Z
HBC060V
HBC80
HBC080B
HBC080Z
HBC080V
HBC100
HBC100B
HBC100Z
HBC100V
HBC110
HBC110B
HBC110Z
HBC110V
HBC120
HBC120B
HBC120Z
HBC120V
HBC140
HBC140B
HBC140Z
HBC140V
HBC180
HBC180B
HBC180Z
HBC180V
2. Put
B
Z
V
Put
HBC_NPB
HBC_NPZ
HBC_NPV
Supports
HBC_BSB
HBC_BSZ
HBC_BSV
Nested in bovenaanzicht: HBC_DPB Draadplateau, Baaluitloop HBC_B1B en HBC_B2B
3. Feed Hopper/ ruffler/ Perforator
B
Z
V
Type 1 A
HBC_1AB
HBC_1AZ
HBC_1AV
15
Type 1 B
HBC_1BB
HBC_1BZ
HBC_1BV
Type 1 C
HBC_1CB
HBC_1CZ
HBC_1CV
Type 2 A
HBC_2AB
HBC_2AZ
HBC_2AV
Type 2 B
HBC_2BB
HBC_2BZ
HBC_2BV
Type 2 C
HBC_2CB
HBC_2CZ
HBC_2CV
4. Platform
B
Z
V
Platform 60
HBC_P1B
HBC_P1Z
HBC_P1V
Platform 80+
HBC_P2B
HBC_P2Z
HBC_P2V
5. Crosswires
B
Z
V
C 60/80/100/120
HBC_C1B
HBC_C1Z
-
C 110/140/180
HBC_C2B
HBC_C2Z
-
16
5.
Bijlagen
Bijlage 1: Overzicht Overzicht van de Forms en de modules behorende bij het programma.
Forms usfBaler usfBuilding usfBubbles usfConveyor usfCleanBak usfCreate usfIncline usfModify usfModifyConveyor usfModifyIncline usfNewDrawing usfPlatform
Modules Create Baler Floorbelt Incline Platform Putranden Screen TIncline VrijeBand Bubbles CheckNumber Kiespunt Selectieset Setup Data AddMap AddNummer ArchiveerIC Bak CleanBak
17
GetDrawingNumber ProductEx Teklijst Style Dimstyle Setup Sticker Subs BepaalHoogte BepaalPositie FormulierBreedte GetCorner Haaks Haalblok Hernummeren InchToMM MMToInch Nieuwnummer Oriëntatie Punten Tekenen Bematen CopyElement DeleteElement Kiespunt Kopie LayerAan MirrorElement MoveElement OffsetElement Polylijn RotateElement Selectieset Tekst Xlijn Vars InclineVars ModInclineVars VBVars
18
Bijlage 2: Code Hier zijn een paar van de minder ingewikkelde routines uitgelicht, verduidelijkt met flowcharts. De integrale code wordt apart bijgeleverd.
Sub Bematen Deze routine maakt een dimensie volgens een eigen dimensiestijl en plaatst een tekst met de dimensie omgerekend naar feet, inches en achtsten van inches. Dit is in wezen hetzelfde als de alternate units van AutoCAD (Architectural stacked) maar het ziet er mooier uit. Public Sub Bematen(pt0, pt1, pt2) Dim Maat As AcadDimRotated Dim dimlin As String Dim x As Single schaal = ThisDrawing.GetVariable("DIMSCALE") ThisDrawing.ActiveDimStyle = ThisDrawing.DimStyles.Item("MM") On Error Resume Next ' Define the valid keywords Dim keywordList As String keywordList = "H V A h v a"
' Call InitializeUserInput to set up the keywords ThisDrawing.Utility.InitializeUserInput 128, keywordList ' Get the user input 1 dimlin = ThisDrawing.Utility.GetString(0, "Linear Hor.
/Linear Vert./Angular ): ") Dim dro As Double If UCase(dimlin) = "H" Then dro = 0 ElseIf UCase(dimlin) = "V" Then dro = Pi / 2 ElseIf UCase(dimlin) = "A" Then dro = ThisDrawing.Utility.AngleFromXAxis(pt0, pt1) Else x=x+1 MsgBox "This is not a valid keyword: " & dimlin & Chr(13) & _ "Please input orizontal/ertical/ngular" If x > 2 Then Exit Sub Else: GoTo 1 End If End If
Set Maat = ThisDrawing.ModelSpace.AddDimRotated(pt0, pt1, pt2, dro)
19
Maat.Layer = "Maatlijnen"
If Maat.Measurement > 38 * schaal Then Maat.HorizontalTextPosition = acSecondExtensionLine pt2 = Maat.TextPosition Maat.HorizontalTextPosition = acFirstExtensionLine Else Maat.HorizontalTextPosition = acHorzCentered pt2(0) = Maat.TextPosition(0) - 6 * Sin(dro) * schaal pt2(1) = Maat.TextPosition(1) - 6 * Cos(dro) * schaal End If Dim Tekst As String Dim feet As Long Dim inches As Long Dim achtsten As Double achtsten = Maat.Measurement / 25.4 * 8 inches = (achtsten - achtsten Mod 8) / 8 feet = (inches - inches Mod 12) / 12 inches = inches - feet * 12 achtsten = Round(achtsten - feet * 12 * 8 - inches * 8) Select Case True Case achtsten = 0 Tekst = feet & "'" & inches & "''" Case achtsten = 1 Tekst = feet & "'" & inches & "%%201''" Case achtsten = 2 Tekst = feet & "'" & inches & "%%202''" Case achtsten = 3 Tekst = feet & "'" & inches & "%%203''" Case achtsten = 4 Tekst = feet & "'" & inches & "%%204''" Case achtsten = 5 Tekst = feet & "'" & inches & "%%205''" Case achtsten = 6 Tekst = feet & "'" & inches & "%%206''" Case achtsten = 7 Tekst = feet & "'" & inches & "%%207''" End Select
Call ThisDrawing.SetVariable("DIMSCALE", schaal)
20
Dim TekstObj As AcadText TekstHoogte = schaal * Maat.TextHeight Set TekstObj = ThisDrawing.ModelSpace.AddText(Tekst, pt2, TekstHoogte) TekstObj.Rotation = dro TekstObj.Layer = "Inches" TekstObj.Alignment = acAlignmentMiddleCenter TekstObj.TextAlignmentPoint = pt2
End Sub
Sub Cleanup Bakfiles Deze routine bevindt zich in de module “Data”. Hiermee worden alle bakfiles verwijderd uit de tekendirectory, omdat alle onnodige bakfiles erg veel plaats kunnen gaan innemen op de harde schijf. Er zit een veiligheid inn om te voorkomen dat er niets wordt ingetypt als padnaam, dan zou er namelijk vanaf C:\ in alle subdirectories worden gezocht en er zijn ook andere programma’s die bestanden maken met de extensie “bak”, die mogen niet per ongeluk ook verwijderd worden. Het vraagt om bevestiging voor het een bestand verwijdert.
Public Sub Cleanbak() 'itereert door mappen heen en zoekt bak files Dim lijst() As String Dim pad As String Dim pad2 As String On Error Resume Next pad = usfCleanBak.txtBak.Text If pad = "" Or pad = "C:\" Then MsgBox "Please specify a subdirectory on your HD" usfCleanBak.txtBak.Text = “D:\VDB\”
21
usfCleanBak.Show End If usfCleanBak.lblQ = "Do you want to delete this file?" usfCleanBak.cmbDestroy.Visible = True usfCleanBak.cmbskip.Visible = True Call Bak(pad) If Err Then Err.Clear MsgBox "No more bak files in this directory." Exit Sub End If
Call AddMap(pad, lijst) For Each map In lijst
pad2 = pad & map & "\" Call Bak(pad2) Next map If Err Then Err.Clear On Error GoTo 0 End If
End Sub
Public Sub Bak(pad) Dim pad2 As String Dim lijst2() As String Call AddMap(pad, lijst2) BB = pad & "*.bak" bf = Dir(BB) On Error Resume Next Do While bf <> "" usfCleanBak.txtBak.Text = pad & bf Call usfCleanBak.Show If Err Then Err.Clear Exit Do End If bf = Dir()
22
Loop For Each map In lijst2 If Not IsEmpty(map) Then pad2 = pad & map & "\" Call Bak(pad2) End If Next map End Sub
Public Sub AddMap(pad, MappenLijst) ‘Deze sub heb ik overgenomen uit de examples in de Help van Visual Basic. Hij wordt aangeroepen door enkele van mijn eigen subs. ' Display the names in the current directory that represent directories. MyPath = pad
' Set the path.
MyName = Dir(MyPath, vbDirectory)
' Retrieve the first entry.
m=0 Do While MyName <> ""
' Start the loop.
' Ignore the current directory and the encompassing directory. If MyName <> "." And MyName <> ".." Then ' Use bitwise comparison to make sure MyName is a directory. If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then ReDim Preserve MappenLijst(m)
' Display entry only if it represents a directory.
MappenLijst(m) = MyName m=m+1 End If End If MyName = Dir
' Get next entry.
Loop End Sub
Sub GetDrawingNumber Public Sub GetDrawingNumber(tekeningnummer) ‘Leest tekeningnummers op schijf en bepaalt de hoogste waarde. ‘geeft deze waarde door aan formulier waarvandaan sub wordt aangeroepen. Dim Nummers() As String Dim Tekening As String Dim Mappen() As String Dim pad As String Dim pad2 As String 'Voor alle bestanden in tekeningenmap 'Als extensie'.dwg dan check formaat V2???-*-*
23
'Indien ja dan splits bij "-" en onthou Split(1) in Nummers 'Indien nee dan indien map onthou de naam in Mappen 'Als alle .dwg's gecheckt dan itereren voor iedere submap in Mappen
pad = TPad Call data.AddNummer(pad, Nummers) Call data.AddMap(pad, Mappen) For Each map In Mappen If map <> "" Then pad2 = pad & map & "\" Call data.AddNummer(pad2, Nummers) End If Next map tekeningnummer = Nummers(UBound(Nummers)) End Sub
Public Sub AddNummer(pad, Nummers) Dim pad2 As String Dim Mappen2() As String On Error Resume Next Call AddMap(pad, Mappen2) Tekening = pad & "V200*.dwg" tek = Dir(Tekening) Do While Not tek = "" Nummer = Split(tek, "-")(1) On Error Resume Next If Not IsEmpty(Nummer) Then i = UBound(Nummers) + 1 ReDim Preserve Nummers(i) End If If Err Then Err.Clear i=0 End If
If i = 0 Then If Not IsEmpty(Nummer) Then Nummers(i) = Nummer End If tek = Dir()
24
a=i Do While a > 0 a=a-1 'Sorteer de lijst in oplopende volgorde If Nummer < Nummers(a) Then 'Als het nummer kleiner dan het vorige nummer, dan Nummers(a + 1) = Nummers(a) 'het vorige nummer één verder schuiven If a = 0 Then Nummers(a) = Nummer Else Nummers(a + 1) = Nummer a=0 End If If Err Then Err.Clear Exit Do End If Loop Loop For Each map In Mappen2 If map <> "" Then pad2 = pad & map & "\" Call AddNummer(pad2, Nummers) End If Next map If Err Then Err.Clear On Error GoTo 0 End Sub
25
Bijlage 3: Stroomschema’s Sub Bematen
26
Sub Cleanup Bakfiles
27
28
29
Sub GetDrawingNumber
30
31
usfBaler
32
usfIncline
33
Sub Baler
34
Sub Incline
35