24.07.2013 Views

1. Semester EIT: SDS, Dokumentation [pdf] - sorenr.dk

1. Semester EIT: SDS, Dokumentation [pdf] - sorenr.dk

1. Semester EIT: SDS, Dokumentation [pdf] - sorenr.dk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SOFTDRINKAUTOMATSTYRING<br />

PROJEKT DOKUMENTATION<br />

GRUPPE 4<br />

<strong>1.</strong> SEMESTER PROJEKT VED<br />

INGENIØRHØJSKOLEN I ÅRHUS <strong>EIT</strong>-AFD.<br />

22. DECEMBER 2004<br />

Projektvejleder:<br />

Orla Linde Johansen<br />

Søren Olesen Søren Rasmussen Runar Birgir Gislason<br />

Stud nr.: 04817 Stud nr.: 02288 Stud nr.: 03233<br />

Robert John Guilford Jonas Hove Jakobsen Rune Søe-Knudsen<br />

Stud nr.: 03294 Stud nr.: 04758 Stud nr.: 03207


INDHOLDSFORTEGNELSE<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

1 KRAVSPECIFIKATION FOR SOFTDRINKAUTOMATSTYRING (<strong>SDS</strong>) .................................... 6<br />

<strong>1.</strong>0.1 VERSIONSHISTORIE .................................................................................................. 7<br />

<strong>1.</strong>0.2 GODKENDELSESFORMULAR ....................................................................................... 7<br />

<strong>1.</strong>1 INDLEDNING ....................................................................................................................... 8<br />

<strong>1.</strong><strong>1.</strong>1 FORMÅL ................................................................................................................ 8<br />

<strong>1.</strong><strong>1.</strong>2 REFERANCER .......................................................................................................... 8<br />

<strong>1.</strong><strong>1.</strong>3 LÆSEVEJLEDNING .................................................................................................... 8<br />

<strong>1.</strong>2 GENEREL BESKRIVELSE ........................................................................................................ 9<br />

<strong>1.</strong>2.1 SYSTEMBESKRIVELSE ............................................................................................... 9<br />

<strong>1.</strong>2.<strong>1.</strong>1 SYSTEMOVERSIGT......................................................................................... 9<br />

<strong>1.</strong>2.<strong>1.</strong>2 AKTØR-KONTEKST DIAGRAM ........................................................................ 11<br />

<strong>1.</strong>2.<strong>1.</strong>3 AKTØRBESKRIVELSER ................................................................................. 11<br />

<strong>1.</strong>2.2 SYSTEMETS FUNKTIONER ....................................................................................... 13<br />

<strong>1.</strong>2.2.1 USE CASE DIAGRAM.................................................................................. 13<br />

<strong>1.</strong>2.3 SYSTEMETS BEGRÆNSNINGER .......................................................................... 13<br />

<strong>1.</strong>2.4 SYSTEMETS FREMTID ............................................................................................ 14<br />

<strong>1.</strong>2.5 BRUGERPROFIL ..................................................................................................... 14<br />

<strong>1.</strong>2.6 KRAV TIL UDVIKLINGSFORLØBET............................................................................. 14<br />

<strong>1.</strong>2.7 OMFANG AF KUNDELEVERANCE ............................................................................... 14<br />

<strong>1.</strong>2.8 FORUDSÆTNINGER ................................................................................................ 14<br />

<strong>1.</strong>3 FUNKTIONELLE KRAV - USECASES ..................................................................................... 15<br />

<strong>1.</strong>3.1 USE CASE 1: FREMSTIL DRINK ............................................................................... 15<br />

3.<strong>1.</strong>1 TILLÆG TIL USECASE 1 ............................................................................... 16<br />

<strong>1.</strong>3.2 USE CASE 2: OVERVÅG TEMPERATUR ...................................................................... 17<br />

<strong>1.</strong>3.3 USE CASE 3: KONFIGURER AUTOMAT ...................................................................... 18<br />

<strong>1.</strong>4 EKSTERNE GRÆNSEFLADE KRAV ......................................................................................... 19<br />

<strong>1.</strong>4.1 BRUGER-GRÆNSEFLADE ......................................................................................... 19<br />

<strong>1.</strong>4.2 HARDWARE-GRÆNSEFLADE .................................................................................... 19<br />

<strong>1.</strong>4.3 KOMMUNIKATIONS-GRÆNSEFLADE .......................................................................... 20<br />

<strong>1.</strong>4.4 SOFTWARE-GRÆNSEFLADE ..................................................................................... 20<br />

<strong>1.</strong>5 KRAV TIL SYSTEMETSYDELSE .............................................................................................. 21<br />

<strong>1.</strong>6 KVALITETSFAKTORER ........................................................................................................ 21<br />

<strong>1.</strong>7 DESIGN KRAV ................................................................................................................... 21<br />

<strong>1.</strong>8 ANDRE KRAV .................................................................................................................... 21<br />

<strong>1.</strong>8.1 MYNDIGHEDSKRAV ................................................................................................ 21<br />

<strong>1.</strong>8.2 ØVRIGE KRAV ....................................................................................................... 21<br />

<strong>1.</strong>9 DELLEVERINGER ............................................................................................................... 22<br />

<strong>1.</strong>10 BILAG ........................................................................................................................... 23<br />

<strong>1.</strong>10.1 INTRODUKTION TIL USE CASE TEKNIKKEN ............................................................ 23<br />

<strong>1.</strong>10.2 KUNDEOPLÆG .................................................................................................... 25<br />

<strong>1.</strong>10.3 BILAG DIGITAL CONNECTOR................................................................................ 26<br />

<strong>1.</strong>10.4 BILAG ANALOG CONNECTOR................................................................................ 27<br />

1


2<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2 SYSTEMARKITEKTURDESIGN.......................................................................................28<br />

2.1 GENERAL SYSTEMBESKRIVELSE ........................................................................................... 28<br />

2.3 EKSTERNE GRÆNSEFLADER ................................................................................................ 28<br />

3 DESIGNDOKUMENTATION ...........................................................................................29<br />

3.1 SOFTWAREDESIGN ............................................................................................................ 29<br />

3.<strong>1.</strong>1 KLASSEDIAGRAM................................................................................................... 29<br />

3.<strong>1.</strong>2 TILSTANDSDIAGRAM FOR KLASSEN SOFTDRINKSTYRING ............................................ 30<br />

3.<strong>1.</strong>3 SEKVENSDIAGRAMMER ........................................................................................... 31<br />

3.<strong>1.</strong>3.1 USE CASE 1 - FREMSTIL DRINK. .................................................................. 31<br />

2.4.3.2 USE CASE 2 - OVERVÅG TEMPERATUR .......................................................... 32<br />

3.<strong>1.</strong>3.3 USE CASE 3 - KONFIGURER AUTOMAT.......................................................... 33<br />

3.<strong>1.</strong>4 KLASSEBESKRIVELSER ............................................................................................ 34<br />

3.<strong>1.</strong>4.1 SOFTDRINKSTYRING .................................................................................. 34<br />

3.<strong>1.</strong>4.2 KONFIGUERINGSPARAMETRE ...................................................................... 35<br />

3.<strong>1.</strong>4.3 TEMPERATUROVERVAAGER.......................................................................... 36<br />

3.<strong>1.</strong>4.4 TIMER ..................................................................................................... 36<br />

3.<strong>1.</strong>4.5 AUTOMATBRUGERINTERFACE ...................................................................... 37<br />

3.<strong>1.</strong>4.6 KONTROLPANEL........................................................................................ 37<br />

3.<strong>1.</strong>4.7 KONFIGUERINGSSWITCH ............................................................................. 37<br />

3.<strong>1.</strong>4.8 KOPTRANSPORTENHED.............................................................................. 38<br />

3.<strong>1.</strong>4.9 STATUSPANEL ........................................................................................... 38<br />

3.<strong>1.</strong>4.10 TEMPERATURDISPLAY .............................................................................. 39<br />

3.<strong>1.</strong>4.11 TEMPERATURSENSOR ............................................................................... 39<br />

3.<strong>1.</strong>4.12 DOSERINGSENHED .................................................................................. 40<br />

3.<strong>1.</strong>4.13 INPUTOUTPUT ........................................................................................ 41<br />

3.<strong>1.</strong>4.14 AD512 ................................................................................................. 41<br />

3.2 HARDWAREDESIGN (HW) ................................................................................................. 42<br />

3.2.1 BLOKDIAGRAM (KLASSEDIAGRAM) .......................................................................... 42<br />

3.2.2 HARDWARE DIAGRAMMER ...................................................................................... 43<br />

3.2.2.1 BLOKDIAGRAM .......................................................................................... 43<br />

3.2.2.2 ANALOGCONNECTOR.................................................................................. 44<br />

3.2.2.3 DIGITALCONNECTOR .................................................................................. 45<br />

3.2.2.4 KONFIGSWITCHHW................................................................................... 46<br />

3.2.2.5 KONTROLPANELHW.................................................................................. 47<br />

3.2.2.6 MOTORSTYRINGHW................................................................................... 48<br />

3.2.2.7 PCCONNECTOR ......................................................................................... 49<br />

3.2.2.8 STATUSPANELHW ..................................................................................... 50<br />

3.2.2.9 TEMPERATURDISPLAYHW .......................................................................... 51<br />

3.2.2.10 TEMPERATURMAALINGSHW ...................................................................... 52<br />

3.2.3 BESKRIVELSE AF FUNKTIONSBLOKKENES DESIGN ........................................................ 53<br />

3.2.3.1 MOTORSTYRINGSHW ................................................................................. 53<br />

3.2.3.2 TEMPERATURMÅLINGSHW ......................................................................... 54<br />

3.2.3.3 KONTROLPANELHW.................................................................................. 54<br />

3.2.3.4 DIGITALCONNECTOR .................................................................................. 54<br />

3.2.3.5 ANALOGCONNECTOR.................................................................................. 54<br />

3.2.3.6 STATUSPANELHW ..................................................................................... 55<br />

3.2.3.7 KONFIGSWITCHHW................................................................................... 55<br />

3.2.3.8 PCCONNECTOR ......................................................................................... 55<br />

3.2.4 OVERVEJELSER ...................................................................................................... 56<br />

3.2.4.1 TEMPERATURMÅLINGSHW ......................................................................... 56<br />

3.2.4.2 PRINT...................................................................................................... 57


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4 IMPLEMENTERINGSDOKUMENTATION ...........................................................................58<br />

4.1 SOFTWARE ....................................................................................................................... 58<br />

4.<strong>1.</strong>1 SOFTDRINKSTYRINGS KLASSE ................................................................................ 58<br />

4.<strong>1.</strong>2 INPUT/OUTPUT KLASSEN ....................................................................................... 58<br />

4.<strong>1.</strong>3 DOSERINGS KLASSE ................................................................................................ 59<br />

4.<strong>1.</strong>3.1 UDREGNING ............................................................................................. 59<br />

4.2 HARDWARE ...................................................................................................................... 62<br />

4.2.1 UDREGNINGER ...................................................................................................... 62<br />

4.2.<strong>1.</strong>1 CLOCK GENERATOREN ................................................................................ 62<br />

4.2.<strong>1.</strong>2 KONFIGSWITCHHW................................................................................... 65<br />

4.2.<strong>1.</strong>3 KONTROLPANELHW.................................................................................. 66<br />

4.2.<strong>1.</strong>4 MOTORSTYRINGHW................................................................................... 67<br />

4.2.<strong>1.</strong>5 STATUSPANELHW ..................................................................................... 70<br />

4.2.<strong>1.</strong>6 TEMPERATURMAALINGSHW ........................................................................ 71<br />

4.2.<strong>1.</strong>7 FORSYNINGS STABILISERING TIL TEMPERATURHW .......................................... 81<br />

4.2.<strong>1.</strong>8 TEMPERATURDISPLAYHW .......................................................................... 82<br />

5 TESTDOKUMENTATION ..............................................................................................83<br />

5.1 GENERELT OM INSTRUMENTER ............................................................................................ 83<br />

5.<strong>1.</strong>1 HM 801<strong>1.</strong>........................................................................................................... 83<br />

5.<strong>1.</strong>2 JOFRA ITC – 155A .............................................................................................. 83<br />

5.<strong>1.</strong>3 METERMAN 37XR ............................................................................................... 83<br />

5.2 ENHEDSTEST ..................................................................................................................... 83<br />

5.2.1 SOFTWARE ........................................................................................................... 83<br />

5.2.<strong>1.</strong>1 AUTOMATBRUGERINTERFACE ...................................................................... 83<br />

5.2.<strong>1.</strong>2 INPUTOUTPUT .......................................................................................... 84<br />

5.2.<strong>1.</strong>3 KONFIGURERINGSSWITCH ........................................................................... 84<br />

5.2.<strong>1.</strong>4 DOSERINGSENHED .................................................................................... 85<br />

5.2.<strong>1.</strong>5 KONFIGURERINGSPARAMETRE..................................................................... 86<br />

5.2.<strong>1.</strong>6 KOPTRANSPORTENHED.............................................................................. 87<br />

5.2.<strong>1.</strong>7 STATUSPANEL ........................................................................................... 87<br />

5.2.<strong>1.</strong>8 TEMPERATURDISPLAY ................................................................................ 88<br />

5.2.<strong>1.</strong>9 TEMPERATUROVERVAAGER.......................................................................... 88<br />

5.2.<strong>1.</strong>10 TEMPERATURSENSOR ............................................................................... 88<br />

5.2.<strong>1.</strong>11 TIMER ................................................................................................... 89<br />

5.2.<strong>1.</strong>12 KONTROLPANEL...................................................................................... 89<br />

5.2.2 HARDWARE .......................................................................................................... 90<br />

5.2.2.1 CLOCK GENERATOR <strong>1.</strong> TEST ....................................................................... 90<br />

5.2.2.2 CLOCK GENERATOR 2. TEST ....................................................................... 91<br />

5.2.2.3 MOTORSTYRING......................................................................................... 92<br />

5.2.2.4 TEMPERATUR HARDWARE ............................................................................ 93<br />

5.2.2.5 STATUSPANEL ........................................................................................... 94<br />

5.3 INTEGRATIONSTESTS .......................................................................................................... 95<br />

5.3.1 INTEGRATIONSTEST NR. 1 · PRINT ........................................................................... 95<br />

5.3.2 INTEGRATIONSTEST NR. 2 · SOFTWARE..................................................................... 97<br />

5.3.3 INTEGRATIONSTEST NR. 3 ...................................................................................... 98<br />

5.3.4 INTEGRATIONSTEST NR. 4 .................................................................................... 100<br />

5.3 ACCEPTTEST ................................................................................................................... 102<br />

5.3.1 USECASE 1 ........................................................................................................ 102<br />

5.3.2 TEST AF VÆSKEDOSERING ..................................................................................... 103<br />

5.3.3 UNDTAGELSER FRA NORMAL SCENARIO................................................................... 108<br />

5.3.4 USECASE 2 ........................................................................................................ 110<br />

5.3.5 USECASE 3 ........................................................................................................ 111<br />

3


4<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6 BILAG ..................................................................................................................116<br />

6.1 C++ INTERFACE TIL HUMUSOFT AD 512 I/O KORT ......................................................... 116<br />

6.<strong>1.</strong>1 SOFTWARE DRIVER .............................................................................................. 116<br />

6.<strong>1.</strong>2 DATABLAD <strong>1.</strong>............................................................................................. 118<br />

6.<strong>1.</strong>3 DATABLAD 2.............................................................................................. 133<br />

6.2 PIN NUMRE PÅ AD512/PRINTET ............................................................................ 134<br />

6.2 AKTIVITETS DIAGRAMMER ................................................................................................ 135<br />

6.2.1 AUTOMATBRUGERINTERFACE ............................................................................... 135<br />

6.2.1 DOSERINGSENHED ............................................................................................... 138<br />

6.2.3 INPUTOUTPUT ................................................................................................... 140<br />

6.2.4 KONFIGURERINGSPARAMETRE .............................................................................. 142<br />

6.2.5 KONFIGURERINGSSWITCH .................................................................................... 143<br />

6.2.6 KONTROLPANEL ................................................................................................ 143<br />

6.2.7 KOPTRANSPORTENHED ....................................................................................... 144<br />

6.2.8 SOFTDRINKSTYRING........................................................................................... 145<br />

6.2.8.1 USECASE 1 ........................................................................................... 146<br />

6.2.8.2 USECASE 2 ........................................................................................... 153<br />

6.2.8.3 USECASE 3 ........................................................................................... 154<br />

6.2.9 STATUSPANEL .................................................................................................... 157<br />

6.2.10 TEMPERATURDISPLAY ....................................................................................... 157<br />

6.2.11 TEMPERATUROVERVAAGER ................................................................................. 158<br />

6.2.12 TEMPERATURSENSOR ........................................................................................ 158<br />

6.2.13 TIMER ............................................................................................................. 159<br />

6.3 SOFTWARE KODE ............................................................................................................ 160<br />

6.3.1 AD512DRV ........................................................................................................ 160<br />

6.3.<strong>1.</strong>1 HEADER ................................................................................................ 160<br />

6.3.<strong>1.</strong>2 SOURCE ................................................................................................. 161<br />

6.3.2 AUTOMATBRUGERINTERFACE ............................................................................... 164<br />

6.3.2.1 HEADER ................................................................................................ 164<br />

6.3.2.2 SOURCE ................................................................................................. 165<br />

6.3.3 DOSERINGSENHED ............................................................................................... 168<br />

6.3.3.1 HEADER ................................................................................................ 168<br />

6.3.3.2 SOURCE ................................................................................................. 169<br />

6.3.4 INPUTOUTPUT ................................................................................................... 171<br />

6.3.4.1 HEADER ................................................................................................ 171<br />

6.3.4.2 SOURCE ................................................................................................. 172<br />

6.3.5 KONFIGURERINGSPARAMETRE .............................................................................. 174<br />

6.3.5.1 HEADER ................................................................................................ 174<br />

6.3.5.2 SOURCE ................................................................................................. 175<br />

6.3.6 KONFIGURERINGSSWITCH .................................................................................... 177<br />

6.3.6.1 HEADER ................................................................................................ 177<br />

6.3.6.2 SOURCE ................................................................................................. 178<br />

6.3.7 KONTROLPANEL ................................................................................................ 179<br />

6.3.7.1 HEADER ................................................................................................ 179<br />

6.3.7.2 SOURCE ................................................................................................. 180<br />

6.3.8 KOPTRANSPORTENHED ....................................................................................... 181<br />

6.3.8.1 HEADER ................................................................................................ 181<br />

6.3.8.2 SOURCE ................................................................................................. 182<br />

6.3.9 SOFTDRINKSTYRING........................................................................................... 183<br />

6.3.9.1 HEADER ................................................................................................ 183


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.9.2 SOURCE ................................................................................................. 184<br />

6.3.10 STATUSPANEL .................................................................................................. 189<br />

6.3.10.1 HEADER .............................................................................................. 189<br />

6.3.10.2 SOURCE ............................................................................................... 190<br />

6.3.11 TEMPERATURDISPLAY ....................................................................................... 192<br />

6.3.1<strong>1.</strong>1 HEADER............................................................................................... 192<br />

6.3.1<strong>1.</strong>2 SOURCE ............................................................................................... 193<br />

6.3.12 TEMPERATUROVERVAAGER................................................................................. 194<br />

6.3.12.1 HEADER .............................................................................................. 194<br />

6.3.12.2 SOURCE ............................................................................................... 195<br />

6.3.13 TEMPERATURSENSOR ........................................................................................ 196<br />

6.3.13.1 HEADER .............................................................................................. 196<br />

6.3.13.2 SOURCE ............................................................................................... 197<br />

6.3.14 TIMER ............................................................................................................. 198<br />

6.3.14.1 HEADER .............................................................................................. 198<br />

6.3.14.2 SOURCE ............................................................................................... 199<br />

6.4 DATAOPSAMLING VANDDOSERING .................................................................................... 200<br />

6.5 MANUAL ....................................................................................................................... 202<br />

6.6 PRINT LAYOUT OG KOMPONENTER ................................................................................... 204<br />

6.7 KOMPONENTER .............................................................................................................. 205<br />

6.7.1 OPERATIONSFORSTÆRKER LM741C .................................................................... 205<br />

6.7.2 TRANSISTOR BC547B......................................................................................... 212<br />

6.7.4 DIODE (TEMPERATURFØLER) 1N4148 .................................................................. 216<br />

6.7.4 DOBBELT NOR GATE 74HC02 ........................................................................... 220<br />

6.7.5 TRIBBEL NAND GATE 74HC10 ........................................................................ 225<br />

6.7.6 DOBBELT D-FLIPFLOP ....................................................................................... 230<br />

7. REFERENCER ....................................................................................................... 252<br />

5


6<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Titel:<br />

Projekt: Softdrink<br />

Dato: 29.06.2004<br />

Kravspecifikation<br />

for<br />

SoftDrinkautomatStyring (<strong>SDS</strong>)<br />

Softdrink Company A/S


Versionshistorie<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Ver. Dato Initialer Beskrivelse<br />

<strong>1.</strong>0 29.06.2004 FOH Use Case baseret kravspecifikaiton for <strong>1.</strong> semesterprojekt på IHA<br />

Go<strong>dk</strong>endelsesformular<br />

Forfatter(e): Finn Overgaard Hansen<br />

Go<strong>dk</strong>endes af: Salgschef S.F.Drinksen, Automatdistributøren A/S<br />

Direktør P.J.Petersen, Softdrink Company A/S<br />

Projektnummer:<br />

Dokument-id: ..\Softdrink-Kravspec-V<strong>1.</strong>0.doc<br />

(filnavn)<br />

Antal sider: 20<br />

Kunde: Automatdistributøren A/S<br />

Ved underskrivelse af dette dokument accepteres det af begge parter, som værende<br />

kravene til udviklingen af det ønskede system.<br />

Sted og dato:<br />

Århus den 30.06.2004 Århus den 29.06.2004<br />

S.F.Drinksen P.J.Petersen<br />

______________________ __________________________<br />

<br />

7


8<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

<strong>1.</strong> INDLEDNING<br />

<strong>1.</strong>1 Formål<br />

Denne kravspecifikation definerer kravene til et softdrinkautomatstyringssystem kaldet<br />

SoftDrinkautomatStyring (<strong>SDS</strong>). Specifikationen definerer kravene til systemet,<br />

der skal implementeres vha. software og hardware.<br />

<strong>SDS</strong> systemet skal styre en eksisterende doseringsmekanik, der kan fremstille drinks<br />

bestående af vand og saft i et givet blandingsforhold.<br />

Systemet udvikles til firmaet Automatdistributøren A/S (AD) repræsenteret ved salgschef<br />

S.F.Drinksen.<br />

Systemet udvikles af firmaet Softdrink Company A/S (SC).<br />

Denne specifikation indgår som en del af aftalen mellem Automatdistributøren A/S og<br />

Softdrink Company A/S.<br />

Ændringer til denne specifikation skal være go<strong>dk</strong>endt af både AD og SC.<br />

<strong>1.</strong>2 Referencer<br />

Denne kravspecifikation er baseret på følgende dokument:<br />

Kundeoplæg fra firmaet Automatdistributøren – vedlagt som bilag.<br />

UML: Unified Modeling Language (www.omg.org/uml)<br />

<strong>1.</strong>3 Læsevejledning<br />

Kapitel 2. beskriver de generelle krav, der gælder for udviklingen af <strong>SDS</strong>-systemet.<br />

Kapitel 3. definerer de funktionelle krav, der er beskrevet ved hjælp af Use Case Teknikken.<br />

Som bilag er vedlagt en kort introduktion til Use Case teknikken.<br />

Kapitel 4.-6. Specificerer de ikke funktionelle krav til systemet.<br />

Kapitel 7. beskriver de ufravigelige designkrav, der skal overholdes ved realiseringen af<br />

systemet.<br />

Kapitel 9. specificerer et antal delleveringer af systemet.<br />

Som bilag findes der en introduktion til Use Case teknikken, det oprindelige kundeoplæg<br />

samt en detaljeret beskrivelse af de to HW connectorer og deres signaler.


2. GENEREL BESKRIVELSE<br />

2.1 Systembeskrivelse<br />

2.<strong>1.</strong>1 Systemoversigt<br />

Figur <strong>1.</strong> Oversigt over doseringsmekanikken<br />

Figur 1 viser den eksisterende doseringsmekanik, der består af:<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

- Vandbeholder med magnetventil og temperaturføler<br />

- Saftbeholder med magnetventil<br />

- Driverkredsløb og transformatorer til ventilerne<br />

- Betjeningspanel med lysdioder, trykknapper og display.<br />

- Mekanisk fremføring af kopholder med positionsdetektorer for kop i holder,<br />

startposition og doseringsposition. Fremføringen styres af en stepmotor med motordriverkredsløb.<br />

Betjeningspanelet består af et antal lysdioder, der skal vise softdrinkautomatens status<br />

samt et display der skal vise temperaturen i vandbeholderen. Derudover er der fire betjeningstaster,<br />

hvoraf de to kaldet START og RESET skal styres vha. <strong>SDS</strong>. De to øvrige<br />

betjeningstaster er fast forbundet til de tilhørende ventiler og benyttes ikke af<br />

<strong>SDS</strong>.<br />

9


10<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

RESET<br />

Figur 2. Betjeningspanelet på doseringsmekanikken<br />

Som et yderligere krav til dette projekt er det overordnede hardwaredesign af <strong>SDS</strong> systemet<br />

fastlagt som beskrevet på Figur 3. Det anførte elektronikkort skal udvikles som<br />

en del af <strong>SDS</strong> projektet.<br />

Windows<br />

PC<br />

<strong>SDS</strong> - Hardware<br />

«PC bus»<br />

PC<br />

I/O Interface<br />

kort<br />

Digitalesignaler<br />

Elektronikkort<br />

«Fla<strong>dk</strong>abel<br />

–26polet» Doserings-<br />

Analogesignaler<br />

«Fla<strong>dk</strong>abel<br />

–26polet»<br />

mekanik<br />

Figur 3. Oversigt over hardwarekonfigurationen for softdrinkautomaten


2.<strong>1.</strong>2 Aktør-kontekst diagram<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Følgende diagram viser et aktør-kontekst diagram for softdrinkstyringssystemet med<br />

de aktører, der logisk kommunikerer med systemet. De enkelte aktører er kort beskrevet<br />

i næste afsnit. Diagrammet beskriver vha. aktørerne en oversigt over de eksterne<br />

enheder som det ønskede <strong>SDS</strong> system skal interface til.<br />

KontrolPanel<br />

StatusPanel<br />

2.<strong>1.</strong>3 Aktørbeskrivelser<br />

Automatejer<br />

VandVentil SaftVentil<br />

SoftDrinkautomat-<br />

Styring (<strong>SDS</strong>)<br />

Temperatur<br />

Display Display Display<br />

Figur 4. Aktør-kontekstdiagram for <strong>SDS</strong><br />

Her følger en beskrivelse af de enkelte aktører, der repræsenterer grænsefladen til det <strong>SDS</strong><br />

system, der ønskes udviklet. De præcise specifikationer af grænsefladerne til aktørerne findes<br />

i kapitel 4.<br />

Aktør navn:<br />

Automatejer<br />

Beskrivelse:<br />

Automatejeren foretager opstart og vedligeholdelse af automaten<br />

KopTransportEnhed<br />

Temperatur<br />

Føler<br />

11


12<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Aktør navn:<br />

Kontrolpanel<br />

Beskrivelse:<br />

Der eksisterer et kontrolpanel, hvormed kunden kan betjene systemet. Automatejeren<br />

kan dog også benytte dette panel. Kunden betjener softdrinkautomaten vha. kontroltasterne<br />

START og RESET.<br />

Aktør navn:<br />

Statuspanel<br />

Beskrivelse:<br />

Der eksisterer et statuspanel med et fast defineret antal lysdioder. Dette benyttes primært<br />

af automatejeren for at checke om automaten fungerer korrekt.<br />

Aktør navn:<br />

Koptransportenhed<br />

Beskrivelse:<br />

Denne aktør repræsenterer den stepmotor og tilhørende styring, der bringer kopholderen<br />

fra startpositionen til doseringspositionen samt de tilhørende positionsdetektorer.<br />

Der detekteres for hhv. startposition, doseringsposition samt om der er en kop i kopholderen.<br />

Aktør navn:<br />

Temperaturføler<br />

Beskrivelse:<br />

Aktøren repræsenterer den temperatursensor, der er anbragt i vandbeholderen.<br />

Aktør navn:<br />

Temperaturdisplay<br />

Beskrivelse:<br />

Aktøren repræsenterer et analogt display med tilhørende elektronik, der anvendes til at<br />

vise temperatur af vandet i vandbeholderen.<br />

Aktør navn:<br />

Vandventil<br />

Beskrivelse:<br />

Aktøren repræsenterer den ventil med tilhørende elektronik, der åbner og lukker for<br />

vandet fra vandbeholderen.<br />

Aktør navn:<br />

Saftventil<br />

Beskrivelse:<br />

Aktøren repræsenterer den ventil med tilhørende elektronik, der åbner og lukker for<br />

saften fra saftbeholderen.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2.2 Systemets funktioner<br />

Systemets funktioner, de funktionelle krav, er fundet og beskrevet vha. Use Case<br />

teknikken. De følgende diagrammer viser systemets funktioner udtrykt som Use Cases.<br />

Formålet med disse diagrammer er at give et overblik over funktionaliteten i det<br />

system, der skal udvikles. Hver af de på diagrammerne viste Use Cases er detaljeret<br />

specificeret i kapitel 3.<br />

2.2.1 Use Case diagram<br />

Automatejer<br />

KontrolPanel<br />

StatusPanel<br />

Konfigurer<br />

automat<br />

VandVentil<br />

Fremstil<br />

drink<br />

SaftVentil<br />

SoftDrinkautomatstyring<br />

(<strong>SDS</strong>)<br />

Temperatur<br />

Display<br />

Overvåg<br />

temperatur<br />

StatusPanel<br />

Figur 5. Use Case diagram for <strong>SDS</strong><br />

KopTransportEnhed<br />

Temperatur<br />

føler<br />

<strong>SDS</strong> systemets hovedfunktion er beskrevet vha. Use Casen ”Fremstil drink”, der er<br />

den funktion som kunden primært har adgang til via KontrolPanelet. Use Casen<br />

”Overvåg temperatur” muliggør at man kan overvåge vandets temperatur med mulighed<br />

for manuelt, at sænke temperaturen ved at hælde koldt vand i vandbeholderen.<br />

Use Casen ”Konfigurer automat” giver mulighed for, at automatejeren kan indstille<br />

automatens forskellige parametre.<br />

2.3 Systemets begrænsninger<br />

Systemet er begrænset til kun at håndtere plastickrus, med et væskevolumen på 180<br />

ml for en normalt fyldt kop.<br />

13


14<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2.4 Systemets fremtid<br />

Systemet forventes senere at skulle udbygges med niveaumålere for måling af væskestanden<br />

i begge beholdere.<br />

Styringen baseres i første omgang på en PC med et IO indstikskort, men dette forventes<br />

i fremtiden at skulle erstattes af en microcontroller for derved at kunne nedsætte<br />

prisen på softdrinkautomatsystemet<br />

Systemet forventes i fremtiden at skulle udbygges med en betalingsenhed.<br />

2.5 Brugerprofil<br />

De normale bruger af systemet er kunder, der forventes at kunne anvende automaten<br />

ud fra en kort forklaring på frontpladen. Kunderne anvender udelukkende kontrolpanelet<br />

til at styre softdrinkautomaten.<br />

Automatejeren skal kunne betjene en computer, hvor <strong>SDS</strong> programmet opstartes og<br />

kunne foretage indtastninger af konfigureringsparametrene.<br />

2.6 Krav til udviklingsforløbet<br />

Det ønskede system ønskes udviklet vha. objektorienterede design, programmeret i<br />

C++ og dokumenteret vha. en delmængde af UML notationen (Unified Modeling<br />

Language).<br />

2.7 Omfang af kundeleverance<br />

Første udgave af brugervejledningen skal leveres til AD, når kravspecifikationen er<br />

go<strong>dk</strong>endt.<br />

Efter at <strong>SDS</strong> systemet er afleveret til AD, udleveres følgende dokumentation til AD:<br />

- designdokumentation<br />

- programdokumentation med kildetekst.<br />

- installationsvejledning<br />

- brugervejledning<br />

Denne dokumentation leveres på papirform samt på CD-ROM.<br />

Kildeteksten til programmer leveres både på papirform og på CD-ROM.<br />

2.8 Forudsætninger<br />

Det forudsættes at IHA’s doseringsmekanik som vist på Figur 1 er tilgængelig for udviklingsgruppen<br />

i nødvendigt omfang under udviklingsforløbet samt at gruppen fra<br />

projektets start til slut konstant har en IHA doseringssimulator til sin disposition.


3. FUNKTIONELLE KRAV – USE CASES<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.1 Use Case 1: Fremstil drink<br />

Mål:<br />

Denne use case gør det muligt for kunden at fremstille en drink, der består af saft og<br />

vand i et forudbestemt blandingsforhold.<br />

Normalt scenario:<br />

<strong>1.</strong> Kunden aktiverer START tasten på kontrolpanelet.<br />

2. Systemet validerer at kopholderen er i startposition, at der er en kop i kopholderen,<br />

at vandets temperatur er MAX_TEMP]<br />

[for lidt vand i vandbeholderen]<br />

[for lidt saft i saftbeholderen]<br />

3. Systemet starter koptransporten, der kører kopholderen frem til doseringspositionen<br />

og aktiverer statuslampen FREM på statuspanelet under fremkørslen.<br />

4. Systemet aktiverer lampen POS.DOS på statuspanelet når doseringspositionen nås.<br />

5. Systemet beregner saft- og vandmængden ud fra doseringsforholdet 1 del saft til X<br />

dele vand (se Use Case 3 – Konfigurer automat).<br />

Påfyldingsvolumen er for den valgte koptype: 180 ml ±10%.<br />

Doseringsforholdet 1:X skal have en nøjagtighed på ±10%.<br />

6. Systemet doserer den beregnede saftmængde ved at aktivere statuslampen SAFT<br />

på statuspanelet og dermed også saftventilen.<br />

[koppen fjernes fra kopholderen]<br />

7. Systemet doserer den beregnede vandmængde ved at aktivere statuslampen VAND<br />

på statuspanelet og dermed også vandventilen.<br />

[koppen fjernes fra kopholderen]<br />

8. Systemet aktiverer koptransporten, der kører saftholderen tilbage til startpositionen<br />

og aktiverer statuslampen TILBAGE på statuspanelet under tilbagekørslen.<br />

9. Systemet aktiverer statuslampen POS.START på statuspanelet når<br />

startpositionen nås. Systemet nedjusterer den tilbageværende vandmængde og<br />

saftmængde med den doserede mængde vand og saft.<br />

Undtagelser:<br />

Trin 3-7 - Kunden aktiverer kontroltasten RESET:<br />

Evt. igangværende fremkørsel eller dosering afbrydes og de tilhørende statuslamper<br />

på knappanelet slukkes, hvorefter der fortsættes ved pkt. 8.<br />

Kopholderen er ikke i startposition:<br />

Kopholderen køres tilbage til startpositionen, hvorefter Use Casen afsluttes.<br />

Ingen kop i kopholderen:<br />

Udskriv fejlmeddelelsen ”Manglende kop i kopholderen” på skærmen,<br />

hvorefter Use Casen afsluttes.<br />

Vandets temperatur >MAX_TEMP:<br />

Udskriv fejlmeddelelsen ”For høj vandtemperatur” på skærmen,<br />

hvorefter Use Casen afsluttes.<br />

For lidt vand i vandbeholderen:<br />

15


16<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>1 TILLÆG TIL USECASE 1<br />

Udskriv fejlmeddelelsen ”For lidt vand i vandbeholderen<br />

– påfyld vand indtil max.grænsen og genstart systemet”, hvorefter use casen<br />

afsluttes.<br />

For lidt saft i saftbeholderen:<br />

Udskriv fejlmeddelelsen ”For lidt saft i saftbeholderen<br />

– påfyld saft indtil max.grænsen og genstart systemet”, hvorefter use casen<br />

afsluttes.<br />

Koppen fjernes fra kopholderen:<br />

Stop doseringen af vand og saft og udskriv fejlmeddelelsen<br />

”Stop pga. manglende kop – aktiver RESET tasten”. Systemet afventer at<br />

kunden aktiverer RESET kontroltasten, hvorefter Use Casen fortsætter ved<br />

pkt. 8.<br />

Til Softdrink Compagny A/S,<br />

Ændringsordre.<br />

Automatdistributøren A/S har konstateret en uhensigtsmæssighed ved fremstilling af flere<br />

softdrinks efter hinanden. Hvis ikke koppen fjernes efter første fremstilling, løber koppen<br />

over ved næste fremstilling.<br />

Derfor skal følgende funktion tilføjes automaten og indarbejdes i kravspecifikationen:<br />

Koppen skal være fjernet før en ny drink kan fremstilles i automaten.<br />

Med venlig hilsen<br />

S.F.Drinksen<br />

S.F.Drinksen,<br />

Automatdistributøren A/S


3.2 Use Case 2: Overvåg temperatur<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Mål:<br />

Denne use case måler og viser kontinuert temperaturen i vandbeholderen og indikerer<br />

hvis temperaturen er for høj.<br />

Normalt scenario:<br />

Så længe systemet er tændt:<br />

<strong>1.</strong> Systemet indlæser en værdi, der repræsenterer temperaturen fra temperaturføleren<br />

2. Systemet validerer den indlæste værdi<br />

[fejl i indlæst værdi]<br />

3. Systemet skalerer temperaturen til grader celcius med en nøjagtighed indenfor ±0,5˚<br />

4. Systemet udlæser temperaturen til displayet<br />

5. Systemet tester om temperaturen er > MAX_TEMP er dette tilfældet tændes lampen<br />

”Væske alarm” i statuspanelet ellers slukkes lampen.<br />

Undtagelser:<br />

Fejl i indlæst værdi:<br />

Der udlæses 0 til displayet – lampen ”Væske alarm” slukkes.<br />

17


18<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.3 Use Case 3: Konfigurer automat<br />

Mål:<br />

Denne use case gør det muligt ved opstart af systemet at ændre <strong>SDS</strong> systemets defaultværdier.<br />

Normalt scenario:<br />

<strong>1.</strong> Automatejeren vælger ved opstart af systemet konfigurering vha. en indbygget<br />

konfigureringskontakt.<br />

2. Systemet giver mulighed for at konfigurere:<br />

2.A. Blandingsforholdet X mellem saft og vand:<br />

1 del saft : X dele vand, hvor X skal kunne ændres mellem 1 og 10.<br />

Defaultværdien for blandingsforholdet er 1:5.<br />

2.B. Temperaturgrænsen MAX_TEMP for vandets maksimumtemperatur:<br />

MAX_TEMP, skal kunne indstilles mellem 10-20 grader celsius.<br />

Defaultværdien for MAX_TEMP er 16 grader celsius.<br />

2.C. Konstanten MINIMUM_VAND i ml, der indikere at automaten skal påfyldes<br />

vand:<br />

MINIMUM_VAND, skal kunne indstilles mellem 500-1000 ml.<br />

Defaultværdien er 500 ml.<br />

2.D. Konstanten MAXIMUM_VAND i ml, der indikerer at automatens<br />

vandbeholder er fyldt til et angivet maksimums mærke.<br />

MAXIMUM_VAND, skal kunne indstilles mellem 2000-4500 ml.<br />

Defaultværdien er 4500 ml.<br />

2.E. Konstanten MINIMUM_SAFT i ml, der indikerer at automaten skal påfyldes<br />

vand.<br />

MINIMUM_SAFT, skal kunne indstilles mellem 500-1000 ml.<br />

Defaultværdien er 500 ml.<br />

2.F. Konstanten MAXIMUM_SAFT i ml, der indikerer at automatens vandbeholder<br />

er fyldt til et angivet maksimums mærke.<br />

MAXIMUM_SAFT, skal kunne indstilles mellem 2000-4500 ml.<br />

Defaultværdien er 2000 ml.<br />

3. Automatejeren ændrer via computerens tastatur og skærm en eller flere af<br />

disse konfigureringsparametre.<br />

[automatejeren fortryder ændringerne]<br />

4. Systemet gemmer de ændrede parametre og anvender disse fremover indtil <strong>SDS</strong><br />

systemet slukkes eller genstartes.<br />

Undtagelser:<br />

Automatejeren fortryder ændringerne:<br />

Systemet anvender de angivne defaultværdier, hvorefter Use Casen afsluttes.


4. EKSTERNE GRÆNSEFLADE KRAV<br />

4.1 Bruger-grænseflade<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Kunden og automatejeren betjener <strong>SDS</strong> vha. kontrolpanelet og kan se automatens status<br />

via statuspanelet.<br />

Kontrolpanel med tasterne:<br />

- START<br />

- RESET<br />

Signalerne findes beskrevet på bilaget Digital Connector.<br />

Statuspanel med lysdioderne:<br />

- Position Start: indikerer at kopholderen er i startposition<br />

- Frem: indikerer at kopholderen kører frem<br />

- Pos.Dos.: indikerer at kopholderen er i doseringsposition<br />

- Saft: indikerer at der doseres saft<br />

- Vand: indikerer at der doseres vand<br />

- Tilbage: indikerer at kopholderen kører tilbage<br />

-Væske varm: indikerer at vandet er for varmt<br />

Signalerne findes beskrevet på bilaget Digital Connector.<br />

Temperaturdisplay:<br />

Displayet skal vise vandets temperatur i grader celcius. Displayet har et kredsløb, der<br />

virker som et voltmeter og styres med et analogt temperatursignal.<br />

Displayet har fuldt udslag ved ±2,0 V. Ved 1999 mV vises 199.9.<br />

Signalerne findes på bilaget Analog Connector.<br />

4.2 Hardware-grænseflade<br />

Forbindelsen mellem <strong>SDS</strong> foregår via to connectorer en Digial og en Analog connector.<br />

Digital connector:<br />

26 polet connector på doseringsmekanikkens frontpanel for tilslutning af digitale signaler.<br />

Forbindelser og aktive niveauer er angivet på bilaget Digital connector.<br />

Analog connector:<br />

26 polet connector på doseringsmekanikkens frontpanel for tilslutning af analoge signaler.<br />

Forbindelser og aktive niveauer er angivet på bilaget Analog connector.<br />

Temperaturføler:<br />

er anbragt i vandbeholderen og er af typen 1N4148 – forbindelserne fremgår af bilaget<br />

Analog connector.<br />

19


20<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Styresignalerne til vandventilen og saftventilen er koblet fysisk sammen med de tilsvarende<br />

statuslamper på statuspanelet.<br />

Koptransportenheden:<br />

er realisert vha. en stepmotor og tre detektorer. Kopholderen drives frem og tilbage af<br />

en skruespindel, der drives af stepmotoren.<br />

Stepmotoren styres af to styresignaler STEPMOTOR A og STEPMOTOR B. Faseforskydningen<br />

af disse signaler bestemmer om der køres frem eller tilbage. Signalerne<br />

skal leveres til Digital connector og skal være CMOS kompatible. Der er motordriver<br />

indbygget i doseringsmekanikken. Stepmotoren har 48 step/omdrejning. Den maksimale<br />

start/stop frekvens kendes ikke præcist, men forventes at være omkring 100<br />

step/sek. Den anvendte stepmotor er af typen SAIA UHD23/45 (12V). Spindelen til<br />

kopholderen har en stigning på 5 mm/omdrejning.<br />

Frem<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Tilbage<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Step nr 1 2 3 4 5 6 7 8<br />

Detektorerne detekterer startpositionen, doseringspositionen samt om der er en kop i<br />

kopholderen.<br />

4.3 Kommunikations-grænseflade<br />

Ingen<br />

4.4 Software-grænseflade<br />

Ingen


5. KRAV TIL SYSTEMETS YDELSE<br />

Ingen<br />

6. KVALITETSFAKTORER<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Pålidelighed:<br />

Der lægges stor vægt på at systemet under ingen omstændigheder må dosere hverken<br />

vand eller saft, når der ikke er en kop under påfyldingspositionen ligesom en kop ikke<br />

må overfyldes så der spildes.<br />

Brugervenlighed:<br />

Kundernes betjening er givet på forhånd via den fastlagte doseringsmekanik.<br />

Brugervenlighed for automatejeren skal opnås gennem realisering af denne kravspecifikation.<br />

Der lægges vægt på at opstart og vedligeholdelse af systemet kan foretages<br />

ud fra de instruktioner, der gives på systemets computerskærm.<br />

Integritet:<br />

Ved strømudfald eller ved genstart af systemet skal de to tanke påfyldes med den<br />

mængde væske, der svarer til startmængden, da systemet ikke skal gemme informationer<br />

om de udførte doseringer.<br />

7. DESIGN KRAV<br />

Systemet skal udvikles vha. en standard Windows PC med et input/output indstikskort<br />

af typen Humusoft AD 512 I/O. Dette skal simulere en styring baseret på en microcontroller.<br />

Derudover skal der udvikles et elektronikkort med den nødvendige hardware, der<br />

sammenkobler doseringsmekanikkens signaler fra de to connectorer med PC indstikskortes<br />

signaler.<br />

8. ANDRE KRAV<br />

8.1 Myndighedskrav<br />

Systemet skal overholde EMC direktivet og skal go<strong>dk</strong>endes af Demko.<br />

8.2 Øvrige krav<br />

Ingen<br />

21


22<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

9. DELLEVERINGER<br />

Projektet ønskes udviklet vha. følgende delleveringer:<br />

<strong>1.</strong> dellevering:<br />

Implementering af Use Casen ”Fremstil drink”<br />

(uden validering af temperaturkrav).<br />

2. dellevering:<br />

Implementering af Use Casen ”Overvåg temperatur” samt tilføjelse af funktionaliteten<br />

i Use Casen ”Fremstil drink”, der validerer at temperaturen er <<br />

MAX_TEMP for at fremstille en drink<br />

3. dellevering:<br />

Tilføjelse af Use Casen ”Konfigurer automat”, der muliggør konfigurering<br />

af automatens parametre.


10. BILAG<br />

10.1 Introduktion til Use Case teknikken<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Use Case teknikken er en teknik der anvendes til at specificere de funktionelle krav i en<br />

kravspecifikation. Use Case teknikken har vundet international anerkendelse og er også i<br />

Danmark allerede med succes anvendt som specifikationsmetode i et stort antal projekter.<br />

For detaljer henvises til boksen på næste side.<br />

Centrale begreber i Use Case teknikken er begreberne aktør og Use Case.<br />

En aktør kan enten være en person, et andet system eller en hardware enhed. En aktør er pr.<br />

definition udenfor det system, der skal udvikles, men er i samspil med systemet. Til at<br />

navngive en personaktør anvendes de roller personen har overfor systemet. Har en given<br />

person flere roller så optræder hver rolle som en aktør. En aktør vises som en tændstiksfigur<br />

med aktørens navn påført under figuren. Alternativt kan man vælge at vise aktøren som en<br />

firkant med stereotypen «aktør».<br />

Aktør navn<br />

En Use Case beskriver en funktionalitet der leveres af systemet til en given aktør. En god<br />

Use Case skal levere et målbart resultat til en given aktør. En anden måde at udtrykke dette<br />

på er, at kunden til systemet vil betale for den funktionalitet som Use Casen stiller til rådighed.<br />

En Use Case beskriver en selvstændig og komplet funktionalitet.<br />

En Use Case vises på et Use Case diagram som en oval med navnet på Use Cases enten i<br />

eller under ovalen. Hver Use Case er forbundet til mindst een aktør med en linje, der kan<br />

have en pil. Pilen angiver aktiveringen af Use Casen dvs. initiativet. I figuren herunder er<br />

det aktøren der aktiverer use casen. I andre tilfælde kan det være systemet selv, der er initiativtager.<br />

Aktør navn<br />

«aktør»<br />

Aktør navn<br />

Use Case<br />

navn<br />

Eksempler på Use Cases for et banksystem, hvor en aktør med navnet Bank Kunde via internettet<br />

f.eks. kan udføre Use Casene: ”Overfør penge”, ”Betal regninger” og ”Se kontoposteringer”.<br />

23


24<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Hver Use Case har en specifikation, der vha. tekst beskriver præcis hvad Use Casen skal<br />

kunne. I nogle tilfælde kan beskrivelsen være suppleret med forskellige diagrammer (f.eks.<br />

sekvens- eller tilstandsdiagrammer).<br />

Om Use Case teknikken:<br />

Use Case teknikken er udviklet af svenskeren Ivar Jacobson og først beskrevet i hans bog ”Object-<br />

Oriented Software Engineering – A Use Case driven approach”, Addison-Wesley 1992.<br />

Use Case teknikken er baseret på en simpel grafisk notation. Denne notation indgår i industristandarden<br />

UML (Unified Modeling Language), der er en standardnotation for objektorienteret modellering.<br />

UML er ophøjet til standard i november 1997 af OMG (Object Management Group), der også står<br />

bag standarden CORBA.


10.2 Kundeoplæg<br />

Til Softdrink Compagny A/S,<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Automatdistributøren A/S ønsker tilbud på udvikling af hardware og software til styring<br />

af en eksisterende doseringsmekanik. Styringen skal sammen med denne mekanik<br />

udgøre en softdrinkautomat, der skal sælges til almindelige forbrugere.<br />

Den ønskede funktionen af automaten skitseres i dette oplæg.<br />

En softdrink ønskes fremstilles ved at en passende mængde saft og vand blandes i en<br />

kop på følgende måde:<br />

Der anbringes en kop i en kopholder.<br />

Ved et tryk på en startknap skal koppen køres frem til doseringspositionen, hvis:<br />

- der er en kop i holderen og<br />

- koppen er i startposition og<br />

- vandets temperatur er passende lav og<br />

- resetknappen ikke er aktiveret<br />

Koppen skal stoppe i doseringsposition, hvorefter dosering af saft og vand skal påbegyndes.<br />

For at opnå en god blanding af saft og vand ønskes saften doseret før vandet.<br />

Når doseringen af saft og vand er afsluttet, skal koppen køre tilbage til startpositionen.<br />

Automaten skal i øvrigt overholde følgende krav:<br />

- Der skal være indikering af automatens tilstand og vandets temperatur.<br />

- Afvigelse af påfyldningsvolumen må højst være ±10%<br />

- Dosering skal være i forholdet 1 del saft til 5 dele vand, med en nøjagtighed på<br />

±10%.<br />

- Blandingsforholdet skal evt. kunne indstilles.<br />

- Dosering må kun ske når vandets temperatur er 16°C eller derunder. Denne parameter<br />

må også gerne kunne varieres.<br />

- Aktivering af resetknappen skal stoppe processen og køre kopholderen tilbage til<br />

startpositionen.<br />

- Software til styringen skal bestå af et program skrevet i C++ og dokumenteres<br />

vha. UML.<br />

Med venlig hilsen<br />

S.F.Drinksen<br />

S.F.Drinksen,<br />

Automatdistributøren A/S<br />

25


26<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

10.3 Bilag Digital Connector<br />

Tabellen angiver signalerne i “Digital connector” på doseringsmekanikken.<br />

Pin<br />

nr<br />

Funktion Signal fra<br />

Doserings-<br />

mekanik<br />

Signal til<br />

Doserings-<br />

mekanik<br />

Beskrivelse<br />

1 Start n.c X Normally Closed kontakt. Fællesben<br />

til stel<br />

2 Start n.o. X Normally Open kontakt. Fællesben<br />

til stel.<br />

3<br />

4 Stepmotor A X CMOS kompatibelt signal<br />

5 Stepmotor B X CMOS kompatibelt signal<br />

6<br />

7 Reset n.c. X Normally Closed kontakt. Fællesben<br />

til stel<br />

8 Reset n.o. X Normally Open kontakt. Fællesben<br />

til stel.<br />

9 Pos. Start X CMOS kompatibelt signal<br />

10 Pos. Dos. X CMOS kompatibelt signal<br />

11 Forbundet til Analog connector pin<br />

3.<br />

12 Kop i holder X CMOS kompatibelt signal<br />

13<br />

14<br />

15<br />

16 Pos. Start X Lysdiode anode. Katode til stel.<br />

17 Frem X Lysdiode anode. Katode til stel.<br />

18 Pos. Dos. X Lysdiode anode. Katode til stel.<br />

19 Saft X Lysdiode anode. Katode til stel.<br />

Styresignal til saftventil<br />

20 Vand X Lysdiode anode. Katode til stel.<br />

Styresignal til vandventil<br />

21 Tilbage X Lysdiode anode. Katode til stel.<br />

22 Væske varm X Lysdiode anode. Katode til stel.<br />

23 5 V X Max 0,5A<br />

24 5 V X<br />

25 Digital Stel X<br />

26<br />

CMOS signaler er positive logik, dvs. funktionen er aktiv når signalet er ”høj”.


10.4 Bilag Analog Connector<br />

Tabellen angiver signalerne i “Analog connector” på doseringsmekanikken.<br />

Pin<br />

nr<br />

Funktion Signal fra<br />

Doserings-<br />

mekanik<br />

Signal til<br />

Doserings-<br />

mekanik<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Beskrivelse<br />

1 Temperaturføler X Føler katode<br />

2 Temperaturføler X Føler anode<br />

3 Forbundet til Digital connector<br />

pin 1<strong>1.</strong><br />

4<br />

5<br />

6 Temperatur-<br />

signal<br />

X Analog signal, område ±2,0 V til<br />

display<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23 +15 V X Max 0,1 A<br />

24 -15 V X Max 0,1 A<br />

25 Analog stel X<br />

26 Analog stel X<br />

27


28<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2 SYSTEMARKITEKTURDESIGN<br />

2.1 GENERAL SYSTEMBESKRIVELSE<br />

Den overordnede systemarkitektur er fastlagt allerede i kravspecifikationen, da det er et ufravigeligt krav,<br />

at systemet skal implementeres på denne overordnede måde som vist på Figur <strong>1.</strong><br />

Softdrinkautomatstyringen skal vha. SW og HW og en eksisterende doseringsmekanik implementere en<br />

softdrinkautomat. Doseringsmekanikken er beskrevet i kravspecifikationen.<br />

Windows PC<br />

Windows<br />

PC<br />

<strong>SDS</strong> - Hardware<br />

«PC bus»<br />

PC<br />

PC<br />

I/O I/O Interface Interface<br />

kort<br />

kort<br />

Figur <strong>1.</strong> Deploymentdiagram for Softdrinkautomat<br />

Digitalesignaler<br />

Elektronikkort Printkort<br />

«Fla<strong>dk</strong>abel<br />

– 26polet»<br />

Analogesignaler<br />

«Fla<strong>dk</strong>abel<br />

– 26polet»<br />

DoseringsDoseringsmekanikmekanik<br />

Figuren er et UML deploymentdiagram, der viser de fysiske HW enheder, der anvendes til at implementere<br />

en softdrinkautomat. Doseringsmekanikken repræsenterer her enten den endelige mekanik eller<br />

simulatorboksen. I begge tilfælde har disse den samme fysiske grænseflade, der består af to fla<strong>dk</strong>abler.<br />

Detaljer om disse interfaces findes i bilag til kravspecifikationen. Windows-PC’en repræsenterer en af<br />

IHAs standard-PC’er, der er monteret med et I/O Interface kort af typen Humusoft AD 512 I/O.<br />

I <strong>SDS</strong> projektet designes dels softwaren, der udvikles i C++ og afvikles på Windows PC’en og dels<br />

designes den HW, der interfacer mellem I/O interfacekortet og doseringsmekanikken.<br />

Den ønskede hardware implementeres fysisk på det viste printkort.<br />

2.3 EKSTERNE GRÆNSEFLADER<br />

<strong>SDS</strong> systemets eksterne grænseflader til doseringsmekanikken er specificeret som bilag til kravspecifikationen.<br />

Brugergrænsefladen til PC’en, der betjenes af automatejeren, består af en simpel tekstbaseret konsoldialog<br />

vha. computerens skærm og tastatur. Ved hjælp af denne dialog kan programmet opstartes,<br />

konfigureres og overvåges for evt. fejl.


3 DESIGNDOKUMENTATION<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.1 SOFTWAREDESIGN<br />

Designet af softwaren er foretaget som et Objektorienteret design baseret på klasser og associationer.<br />

Designet er dokumenteret vha. et UML klassediagram, et tilstandsdiagram og flere sekvensdiagrammer<br />

samt supplerende dokumentation for klasser, operationer og attributter.<br />

3.<strong>1.</strong>1 KLASSEDIAGRAM<br />

UML klassediagrammet på Figur 2 viser de klasser, der indgår i softwaren og de associationer, der er<br />

mellem disse. For hver af disse klasser, findes der en specifikationsfil (*.h), der har samme navn som<br />

klassen f.eks. Timer.h og en tilsvarende C++ implementeringsfil (*.cpp) f.eks. Timer.cpp.<br />

Hver klasse er detaljeret beskrevet i kapitel 2.4.4.<br />

KontrolPanel<br />

-objInputOutput : InputOutput<br />

+checkForTast(in id : string) : bool<br />

Aflæser<br />

InputOutput<br />

-intralisering : bool<br />

-outputStatus : int<br />

-objAD512 : AD512<br />

+InputOutput()<br />

+inputBit(in portnummer : int) : bool<br />

+outputBit(in portnummer : int, in vaerdi : bool)<br />

+printOutputBit()<br />

+printInputBit()<br />

Styre/<br />

aflæser<br />

AD512<br />

+AD512()<br />

+getDigitalInput() : int<br />

+setDigitalOutput(in value : int)<br />

+getAnalogInput(in ch : int, in range : int) : short<br />

+setAnalogOutput(in channel : int, in value : int)<br />

AutomatBrugerInterface<br />

-objKonfigureringsSwitch : KonfigureringsSwitch<br />

-nyEdit : KonfigureringsParametre<br />

-valg : int<br />

+editKonfigParametre()<br />

-rundOpNed(in tal : double) : int<br />

KonfigureringsSwitch<br />

-objInputOutput : InputOutput<br />

+checkKonfigurering() : bool<br />

Styre<br />

Aflæser<br />

Aflæser taster<br />

Styre/aflæser<br />

Styre<br />

Aflæser<br />

Anvender<br />

Kan editer<br />

Aflæser taster<br />

KonfigureringsParametre<br />

-intralisering : bool<br />

-doseringsforhold : int<br />

-maxTemp : int<br />

-maxSaft : int<br />

-minSaft : int<br />

-maxVand : int<br />

-minVand : int<br />

+KonfigureringsParametre()<br />

+skrivDoseringsForhold(in nydoseringsforhold : int)<br />

+skrivMaxTemp(in nyMaxTemp : int)<br />

+skrivMaxSaft(in nyMaxSaft : int)<br />

+skrivMinSaft(in nyMinSaft : int)<br />

+skrivMaxVand(in nyMaxVand : int)<br />

+skrivMinVand(in nyMinVand : int)<br />

+laesDoseringsForhold() : int<br />

+laesMaxTemp() : int<br />

+laesMaxSaft() : int<br />

+laesMinSaft() : int<br />

+laesMaxVand() : int<br />

+laesMinVand() : int<br />

Aflæser<br />

Anvender<br />

SoftDrinkStyring<br />

-useCase1 : int<br />

-useCase2 : int<br />

-useCase3 : int<br />

-objTimerSaft : Timer<br />

-objTimerVand : Timer<br />

-objTemperaturOvervaager : TemperaturOvervaager<br />

-objStatusPanel : StatusPanel<br />

-objDoseringsEnhed : DoseringsEnhed<br />

-objKopTransportEnhed : KopTransportEnhed<br />

-objKonfigureringsSwitch : KonfigureringsSwitch<br />

Anvender<br />

-objKontrolPanel : KontrolPanel<br />

-objAutomatBrugerInterface : AutomatBrugerInterface<br />

-objKonfigureringsParametre : KonfigureringsParametre<br />

+SoftDrinkStyring()<br />

+run()<br />

KopTransportEnhed<br />

-fyldtKop : bool<br />

-objInputOutput : InputOutput<br />

+KopTransportEnhed()<br />

+startMotorFrem()<br />

+startMotorTilbage()<br />

+stopMotor()<br />

+checkForKopIHolder() : bool<br />

+checkForStartPosition() : bool<br />

+checkForDoseringsPosition() : bool<br />

+checkForFyldtKop() : bool<br />

+kopFyldt(in status : bool)<br />

Styre<br />

Læser maxTemp<br />

Aflæser<br />

Styre<br />

Anvender<br />

StatusPanel<br />

-objOutput : InputOutput<br />

+taendLampe(in id : string)<br />

+slukLampe(in id : string)<br />

DoseringsEnhed<br />

+SaftMaengdeMillisekunder : int<br />

+VandMaengdeMillisekunder : int<br />

-restSaftMaengde : int<br />

-restVandMaengde : int<br />

-Konfig : KonfigureringsParametre<br />

-doseringsmaengdeSaft : double<br />

-doseringsmaengdeVand : double<br />

+DoseringsEnhed()<br />

+checkVand() : bool<br />

+checkSaft() : bool<br />

+resetVand()<br />

+resetSaft()<br />

+beregnSaftMaengde()<br />

+beregnVandMaengde()<br />

+saftRetur(in saft : int)<br />

+vandRetur(in vand : int)<br />

Timer<br />

-startMSec : int<br />

-startSec : int<br />

-timeoutTid : int<br />

-tidGaaet : int<br />

-startTid : _timeb<br />

-tidNu : _timeb<br />

+Timer()<br />

+Start(in milliseconds : int)<br />

+Stop() : int<br />

+CheckForTimeout() : bool<br />

TemperaturOvervaager<br />

-aktuelTemperatur : double<br />

-maxTemp : int<br />

-objKonfigureringsParametre : KonfigureringsParametre<br />

-objTemperaturSensor : TemperaturSensor<br />

-objTemperaturDisplay : TemperaturDisplay<br />

-objStatusPanel : StatusPanel<br />

+TemperaturOvervaager()<br />

+checkForMaxTemperatur() : bool<br />

+overvaagerOgOpdatere() : bool<br />

Styre<br />

Figur 2. Klassediagram for Softdrinkautomatstyring<br />

TemperaturDisplay<br />

-objAD512 : AD512<br />

+udlaesTemperatur(in temp : double)<br />

TemperaturSensor<br />

-temp : double<br />

-getAnalogInput : double<br />

-resultat : unsigned short<br />

-objAD512 : AD512<br />

+TemperaturSensor()<br />

+opdaterTemp()<br />

+laesTemperatur() : double<br />

+fejlcheck() : bool<br />

Læser fra<br />

Udlæser til<br />

29


30<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>2 TILSTANDSDIAGRAM FOR KLASSEN SOFTDRINKSTYRING<br />

kop fjernet<br />

kop fjernet<br />

Afvent reset<br />

do / udskriv<br />

"Softdosering afbrudt -<br />

modregner ikke doseret saft<br />

startposition nået<br />

Tilstandsdiagram<br />

for <strong>SDS</strong><br />

Version <strong>1.</strong>0 07/12/04<br />

Reset<br />

start tasten er trykket<br />

Start[startbetingelser opfyldt]<br />

Initier <strong>SDS</strong><br />

check for start tast<br />

Klar til start procedurer<br />

entry:<br />

check startposition<br />

er i startposition<br />

Klar til drink<br />

entry:<br />

tænd startpos. lampe<br />

exit:<br />

sluk startpos. lampe<br />

Kør til doseringsposition<br />

entry:<br />

start motor frem<br />

tænd frem lampe<br />

exit:<br />

stop motor<br />

sluk frem lampe<br />

Dosering af saft<br />

entry:<br />

start saftdoseringstimer<br />

aktiver saft lampe+ventil<br />

exit:<br />

deaktiver saft lampe+ventil<br />

safttimeout<br />

vandtimeout<br />

Kør til startposition<br />

entry:<br />

sluk dos.pos. lampe<br />

tænd tilbage lampe<br />

start motor tilbage<br />

exit:<br />

stop motor<br />

sluk tilbage lampe<br />

Figur 3. Tilstandsdiagram for klassen SoftDrinkStyring<br />

Konfigurer<br />

afsluttet<br />

doseringsposition nået/<br />

tænd dos.pos. lampe<br />

Dosering af vand<br />

enty:<br />

start vanddoseringstimer<br />

aktiver vand lampe+ventil<br />

exit:<br />

deaktiver vand lampe+ventil<br />

Reset<br />

Reset<br />

Reset<br />

Konfigurering<br />

do / editering af<br />

konfigureringsparametre<br />

ikke i startposition


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>3 SEKVENSDIAGRAMMER<br />

Her vises et delscenario fra Use Casen „Fremstil Drink“ , scenariet viser forløbet fra, at brugeren aktiver<br />

Start tasten og til automaten er klar til at dosere en drink.<br />

3.<strong>1.</strong>3.1 USE CASE 1 - FREMSTIL DRINK.<br />

Punkt 1<br />

Start-tast aktiveret<br />

Punkt 2<br />

{If false} Fejlmeddelelse +<br />

Stop use case<br />

{If true} Fejlmeddelelse +<br />

Stop use case<br />

{If false} Ikke i udgangsposition.<br />

Spring<br />

til pkt. 8 (RESET)<br />

Punkt 3<br />

Punkt 4<br />

{Do until true<br />

or RESET}<br />

Punkt 5 & 6<br />

{If RESET} Spring<br />

til pkt. 8 (RESET)<br />

{If RESET} kør saftRetur()<br />

(DoseringsEnhed) + Spring<br />

til pkt. 8 (RESET)<br />

{If false} kør saftRetur()<br />

(DoseringsEnhed) + vent<br />

på RESET-tast.<br />

Punkt 5 & 7<br />

{If RESET} Spring<br />

til pkt. 8 (RESET)<br />

:SoftdrinkStyring :KontrolPanel :StatusPanel :KopTransportEnhed :TemperaturOvervaager :DoseringsEnhed<br />

checkForTast(START)<br />

checkForTast(RESET)<br />

checkForKopIHolder()<br />

checkForFyldtKop()<br />

checkForStartPosition()<br />

taendLampe(FREM)<br />

checkForTast(RESET)<br />

startMotorFrem()<br />

checkForMaxTemperatur()<br />

checkForDoseringsPosition()<br />

stopMotor()<br />

checkVand()<br />

checkSaft()<br />

:SoftdrinkStyring :KontrolPanel :StatusPanel :KopTransportEnhed :TemperaturOvervaager :DoseringsEnhed Timer<br />

slukLampe(FREM)<br />

checkForTast(RESET)<br />

taendLampe(SAFT)<br />

checkForTast(RESET)<br />

slukLampe(SAFT)<br />

checkForTast(RESET)<br />

taendLampe<br />

kopFyldt(true)<br />

checkForKopIHolder()<br />

beregnSaftMaengde()<br />

Start()<br />

CheckForTimeout()<br />

beregnVandMaengde()<br />

Start()<br />

Timer<br />

31


32<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

{If RESET} kør vandRetur()<br />

(DoseringsEnhed) + Spring<br />

til pkt. 8 (RESET)<br />

Punkt 8<br />

I tilfælde af RESET<br />

Punkt 9<br />

{Do until true<br />

or RESET}<br />

:SoftdrinkStyring :KontrolPanel :StatusPanel :KopTransportEnhed :TemperaturOvervaager :DoseringsEnhed Timer<br />

checkForTast<br />

slukLampe(VAND)<br />

slukLampe(FREM)<br />

startMotorTilbage()<br />

taendLampe(TILBAGE)<br />

checkForStartPosition()<br />

slukLampe(TILBAGE)<br />

checkForKopIHolder()<br />

stopMotor()<br />

stopMotor()<br />

taendLampe(POS.START)<br />

2.4.3.2 USE CASE 2 - OVERVÅG TEMPERATUR<br />

Scenario:<br />

Kontrolere temperaturen.<br />

CheckForTimeout()<br />

OvervaagTemperatur TemperaturSensor TemperaturDisplay StatusPanel<br />

LaesTemperatur()<br />

Maxtemperatur < Temperatur: LaesTemperatur()<br />

Maxtemperatur >= Temperatur: LaesTemperatur()<br />

UdlaesTemperatur()<br />

Udskrives et 0 til displayet<br />

lampen "Væske varm" slukkes


3.<strong>1.</strong>3.3 USE CASE 3 - KONFIGURER AUTOMAT<br />

Scenario:<br />

Brugeren konfigurer<br />

SoftDrinkStyringen<br />

AutomatBrugerInterface<br />

skrivDoseringsForhold()<br />

laesDoseringsForhold()<br />

skrivMaxTemp()<br />

laesMaxTemp()<br />

skrivMaxSaft()<br />

laesMaxSaft()<br />

skrivMinSaft()<br />

laesMinSaft()<br />

skrivMaxVand()<br />

laesMaxVand()<br />

skrivMinVand()<br />

laesMinVand()<br />

KonfigureringsParametre<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

33


34<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4 KLASSEBESKRIVELSER<br />

3.<strong>1.</strong>4.1 SOFTDRINKSTYRING<br />

Ansvar:<br />

Denne klasse er hove<strong>dk</strong>lassen i <strong>SDS</strong> systemet, der har ansvaret for den overordnede styring af<br />

softdrinkautomaten. Klassen implementerer logikken i Use Casen „Fremstil drink“. Funktionaliteten<br />

er designet vha. en tilstandsmaskine, der er vist på tilstandsdiagrammet i kapitel 4.2.<br />

Der oprettes en instans af denne klasse i hovedprogrammet main, hvorefter main aktiverer klassens<br />

run() funktion.<br />

Klassen har attributterne restSaftMaengde og restVandMaengde, der justeres hver gang, der er<br />

doseret en drink.<br />

Attributter:<br />

useCase1 : int<br />

Styrer programmet i UseCase 1<br />

objTimerSaft : Timer<br />

Kontroller timeren for saftet<br />

objTimerVand : Timer<br />

Kontroller timeren for vandet<br />

objTemperaturOvervaager : TemperaturOvervaager<br />

Kontroller aktivitet fra TemperaturOvervaager<br />

objStatusPanel : StatusPanel<br />

Kontroller aktivitet fra SatusPanel<br />

objDoseringsEnhed : DoseringsEnhed<br />

Kontroller aktivitet fra DoseringsEnhed<br />

objKopTransportEnhed : KopTransportEnhed<br />

Kontroller aktivitet fra KopTrasnportEnhed<br />

objKontrolPanel : KontrolPanel<br />

Kontroller aktivitet fra KontrolPanel<br />

objAutomatBrugerInterface : AutomatBrugerInterface<br />

Kontroller aktivitet fra AutomatBrugerInterface<br />

objKonfigureringsParametre : KonfigureringsParametre<br />

Kontroller aktivitet fra KonfigureringsParametre<br />

Operationer:<br />

SoftDrinkStyring()<br />

Konstruktor<br />

run()<br />

Aktiverer <strong>SDS</strong> programmet og indeholder hovedløkken i <strong>SDS</strong> programmet.<br />

Programmet implementeres vha. tilstandsmaskinen, der er vist på Figur 3.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.2 KONFIGUERINGSPARAMETRE<br />

Ansvar:<br />

Klassen har ansvaret for <strong>SDS</strong> systemets konfigureringsparametre. Hver parameter har en defaultværdi,<br />

der kan ændres af automatejeren under konfigurering. Klassen har operationer til hhv. at læse<br />

og skrive de enkelte attributter.<br />

Attributter:<br />

doseringsforhold: static int<br />

Angiver doseringsforholdet 1:X mellem saft og vand, defaultværdi er 5.<br />

maxTemp: static int<br />

Angiver max vandtemperatur for en drink i 1/10 grader celsius, default 16 grader<br />

maxSaft: static int<br />

Angiver max saftmængde i saftbeholderen ved opstart i ml, defaultværdi er 4 l<br />

minSaft: static int<br />

Angiver min saftmængden i saftbeholderen i ml, defaultværdi 0,5 l.<br />

maxVand: static int<br />

Angiver max vandmængde i vandbeholderen ved opstart i ml, defaultværdi er 4 l<br />

minVand: static int<br />

Angiver min vandmængden i vandbeholderen i ml, defaultværdi 0,5 l.<br />

intralisering : static bool<br />

Sætter alle parametre til default<br />

Operationer:<br />

Følgende operationer anvendes til at ændre defaultværdierne og aflæse de aktuelle værdier.<br />

skrivDoseringsForhold(in nydoseringsforhold : int)<br />

Skriver ny værdi for doserings forhold<br />

laesDoseringsForhold(): int<br />

Læser doserings forhold<br />

skrivMaxTemp(in nyMaxTemp : int)<br />

Skriver ny værdi for maximum temperatur<br />

laesMaxTemp(): int<br />

Læser maximum temperatur<br />

skrivMaxSaft(in nyMaxSaft : int)<br />

Skriver nyt værdie for maximum saft<br />

laesMaxSaft(): int<br />

Læser maximum værdie for saft<br />

skrivMinSaft(in nyMinSaft : int)<br />

Skriver nyt værdie for minimum saft<br />

laesMinSaft(): int<br />

Læser minimum værdie for saft<br />

skrivMaxVand(in nyMaxVand : int)<br />

Skriver nyt værdie for maximum vand<br />

laesMaxVand(): int<br />

Læser maximum værdie for vand<br />

skrivMinVand(in nyMinVand : int)<br />

Skriver nyt værdie for minimum vand<br />

laesMinVand(): int<br />

Læser minimum værdie for vand<br />

KonfigureringsParametre()<br />

Konstruktor<br />

35


36<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.3 TEMPERATUROVERVAAGER<br />

Ansvar:<br />

Klassen har ansvaret for at overvåge og vise vandets temperatur.<br />

Attributter:<br />

aktuelTemperatur : double<br />

Måler den aktuelle temperatur.<br />

maxTemp : int<br />

Maximal temperatur.<br />

objKonfigureringsParametre : KonfigureringsParametre<br />

Henter maxTemp fra KonfigureringsParametre<br />

objTemperaturSensor : TemperaturSensor<br />

Henter temperaturen fra TemperaturSensor<br />

objTemperaturDisplay : TemperaturDisplay<br />

Sender værdier til TemperaturDisplay<br />

objStatusPanel : StatusPanel<br />

Styrer lysdioden VAESKE_VARM via StatusPanel<br />

Operationer:<br />

checkForMaxTemperatur() : bool<br />

Checker om den aktuelle temperatur er mindre en MAX_TEMP.<br />

overvaagerOgOpdatere(void) : bool<br />

Overvåger temperaturen og opdaterer display.<br />

TemperaturOvervaager()<br />

Konstruktor.<br />

3.<strong>1.</strong>4.4 TIMER<br />

Ansvar:<br />

Klassen implementerer en software timer. Timeren kan startes og stoppes. Timeren tæller ned til nul.<br />

checkForTimeout checker status for timeren.<br />

Attributer:<br />

startMSec : int<br />

Værdie for millisekunder i starten<br />

startSec: int<br />

Væride for sekunder i staretn<br />

timeoutTid : int<br />

Værdie for timeouttid i starten<br />

tidGaaet : int<br />

Hovr meget tid er gået<br />

startTid : _timeb<br />

Variablen for timeren<br />

tidNu: _timeb<br />

Variable for tiden som er tilbage<br />

Operationer:<br />

checkForTimeout() : bool<br />

Checker om tiden er over timeoutTid.<br />

start(in milliseconds : int)<br />

Starter tiden.<br />

stop() : int<br />

Stopper tiden.<br />

Timer ()<br />

Konstruktor


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.5 AUTOMATBRUGERINTERFACE<br />

Ansvar:<br />

Klassen er ansvarlig for at kommunikere med automatbrugeren dvs. med automatejeren, der har<br />

mulighed for at konfigurere automaten vha. operationen „editerKonfigParametre“. Klassen<br />

SoftDrinkStyring anvender AutomatBrugerInterface til at udskrive meddelelser på skærmen til<br />

brugeren vha. operationen „udskrivTekst“.<br />

Attributter:<br />

valg : int<br />

Variable for valg af menuen.<br />

objKonfigureringsSwitch : KonfigureringsSwitch<br />

Checker om KonfigureringsSwitchen er slået fra eller ikke, via SoftDrinkStyring.<br />

nyEdit : KonfigureringsParametre<br />

Skriver ny værdie til maxværdierne i KonfigureringsParametre.<br />

Operationer:<br />

editKonfigParametre()<br />

Rediger konfigurations parameter.<br />

rundOpNed (in tal : double) : int<br />

Afrunder værdier til hel tal.<br />

3.<strong>1.</strong>4.6 KONTROLPANEL<br />

Ansvar:<br />

Klassen er SW interface til doseringsmekanikkens kontroltaster START og RESET. Klassen indeholder<br />

en operation til at teste om der er aktiveret en tast og en operation til at aflæse den konkrete<br />

tast.<br />

Attributter:<br />

objInputOutput : InputOutput<br />

Checker om START eller RESET knappen bliver trykket, via InputOutput.<br />

Operationer:<br />

checkForTast(in id : string) : bool<br />

Checker om kontroltasterne START og RESET aktiveres.<br />

3.<strong>1.</strong>4.7 KONFIGUERINGSSWITCH<br />

Ansvar:<br />

Klassen varetager SW interface til den konfigureringsswitch, der implementeres på elektronikkortet.<br />

Attributter:<br />

objInputOutput : InputOutput<br />

Checker om KonfigureringsSwithcen er slået fra eller ikke via InputOutput.<br />

Operationer:<br />

checkKonfigurering() : bool<br />

Checker om KonfigureringsSwithcen er slået fra eller ikke via Input Output, returner true eller false<br />

37


38<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.8 KOPTRANSPORTENHED<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der styrer hhv. stepmotor og aflæser positionssensorer.<br />

Attributter:<br />

fyldtKop : bool<br />

Checker om kopen er fyldt eller ikke.<br />

objInputOutput : InputOutput<br />

Checker om motorens status via InputOutput<br />

Operationer:<br />

startMotorFrem()<br />

Kører motor frem<br />

startMotorTilbage()<br />

Kører motor tilbage<br />

stopMotor()<br />

Stopper motor<br />

checkForKopIHolder() : bool<br />

Checker om det er en kop i holderen<br />

checkForStartPosition() : bool<br />

Checker for koppen er i startposition<br />

checkForDoseringsPosition() : bool<br />

Checker for koppen er i doseringsposition<br />

checkForFyldtKopholder() : bool<br />

Checker for koppen er fyldt<br />

kopFyldt (in status : bool)<br />

Checker for fyldtKop status<br />

KopTransportEnhed ()<br />

Konstruktor<br />

3.<strong>1.</strong>4.9 STATUSPANEL<br />

Ansvar:<br />

Klassen er SW interface til doseringsmekanikkens status lamper. Hver lampe har en entydig id (en<br />

enumeration type), der anvendes til hhv. at styre og slukke en given lampe. Lamperne Vand og Saft<br />

er specielle idet de samtidig også styrer hhv. vand og saftventilen.<br />

LampeId = (SAFT, VAND, FREM, TILBAGE, VAESKE_VARM, ALLE). Bemærk at lamperne:<br />

(POS_START, POS_DOS) bliver styret via hardwaren<br />

Attributter:<br />

objOutput : InputOutput<br />

Tænder og slukker lampene via InputOutput<br />

Operationer:<br />

taendLampe(id : string)<br />

Tænd lampe<br />

slukLampe(id : string)<br />

Sluk lampe


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.10 TEMPERATURDISPLAY<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der anvendes til at vise vandets temperatur på<br />

temperaturdisplayet.<br />

Attributter:<br />

objAD512 : AD512<br />

Læser temperaturen til displayet via AD512<br />

Operationer:<br />

udlaesTemperatur(in temp : double)<br />

Viser vandets temperatur på display.<br />

3.<strong>1.</strong>4.11 TEMPERATURSENSOR<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der indlæser en temperaturværdi fra en temperaturføler i<br />

vandbeholderen.<br />

Attributter:<br />

temp : static double<br />

Variable for anden udrejning af værdier fra føleren<br />

getAnalogInput : double<br />

Henter værdier fra føleren via AD512<br />

resultat : unsigned short<br />

Variable for første udrejning af værdier fra føleren<br />

objAD512 : AD512<br />

Henter værdier fra føleren via AD512<br />

Operationer:<br />

TemperaturSensor()<br />

Konstruktor<br />

laesTemperatur() : double<br />

Indlæser temperaturen i vandbeholderen.<br />

opdaterTemp()<br />

Checker hele tiden for temperaturen.<br />

fejlcheck() : bool<br />

Validerer om signal fra føleren er ok.<br />

39


40<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.<strong>1.</strong>4.12 DOSERINGSENHED<br />

Ansvar:<br />

Beregn saft- og vandmængden der skal fyldes i koppen og omregn til antal sekunder ventilen skal<br />

være åben.<br />

Fratræk den doserede væskemængde fra væskemængden i beholderen.<br />

Reset væskemængde i beholderen til MAX (til brug ved påfyldning).<br />

Tjek om væskemængden i beholderen er over MIN.<br />

Udregner resterende væskemængde fra resttiden og ligger det til væskemængden i beholderen i<br />

tilfælde af reset under væskedosering.<br />

Attributter:<br />

restSaftMaengde: int<br />

Hvor meget saft er tilbage<br />

restVandMaengde: int<br />

Hvor meget vand er tilbage<br />

doseringsmaengdeSaft: double<br />

Hvor meget saft skal til en dosering.<br />

doseringsmaengdeVand: double<br />

Hvor meget vand skal til en dosering<br />

Konfig : KonfigureringsParametre<br />

Konfigurerer værdier til rådighed<br />

SaftMaengdeMillisekunder: int<br />

En formel hvor det er regnet hvor lang tid ventilen skal være åben ved dosering<br />

VandMaengdeMillisekunder: int<br />

En formel hvor det er regnet hvor lang tid ventilen skal være åben ved dosering<br />

Operationer:<br />

CheckVand(): bool<br />

Tjekker om væskestanden er over Minimum vand i konfigparametre<br />

CheckSaft(): bool<br />

Tjekker om væskestanden er over Minimum saft i konfigparametre<br />

resetVand()<br />

Sætter væskemængden i beholderen til default fra konfigparametre<br />

resetSaft()<br />

Sætter væskemængden i beholderen til default fra konfigparametre<br />

beregnSaftMaengde()<br />

Regner hvor meget saft er tilbage<br />

beregnVandMaengde()<br />

Regner hvor meget vand er tilbage<br />

saftRetur(in saft :int)<br />

Bruges hvis man trykker på reset knappen mens saftdosering løber. Regner hvor mange millisekunder<br />

blev ikke brugt og bruges ved at regne hvor meget saft er tilbage.<br />

vandRetur(in vand : int)<br />

Bruges hvis man trykker på reset knappen mens vanddosering løber. Regner hvor mange millisekunder<br />

blev ikke brugt og bruges ved at regne hvor meget vand er tilbage.<br />

DoseringsEnhed()<br />

Konstruktor


3.<strong>1.</strong>4.13 INPUTOUTPUT<br />

Ansvar:<br />

Klassen InputOutput har til funktion at gøre det nemmere at:<br />

- Læse de digitale indgange<br />

- Skriv til udgangene<br />

Attributer:<br />

intralisering: static bool<br />

Sætter intralisering status<br />

outputStatus: static int<br />

Sætter en udganges værdi på DigitalOutput<br />

Static betyder: Fælles variable alle objekter der bliver lavet af denne klasse.<br />

objAD512 : AD512<br />

Henter værdier fra I/O-kortet via AD512<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Operationer:<br />

inputBit(int portnummer : int): bool<br />

Modtager bit/portnummeret man ønsker at kigge på.<br />

outputBit(in portnummer : int, in vaerdi : bool)<br />

Modtager det bit/portnummer som man ønsker at ændre som int, og den værdi det skal ændres til i<br />

en bool.<br />

printOutputBit()<br />

Skriver den gemte værdi videre til udgangskortet<br />

printInputBit()<br />

Skriver alle output bit = 0 og gemmer det i en variabel<br />

3.<strong>1.</strong>4.14 AD512<br />

Ansvar:<br />

Klassen er en driver for I/O kortet<br />

Operationer:<br />

AD512()<br />

Konstruktor<br />

getDigitalInput() : int<br />

Henter tingene fra digitalportet<br />

setDigitalInput(in value : int)<br />

Sender tingene til digitalportet<br />

getAnalogInput (in ch : int, in range : int) : short<br />

Henter tingene fra analogportet<br />

setAnalogOutput (in channel : in value : int)<br />

Sender tingene til analogportet<br />

41


42<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2 HARDWAREDESIGN (HW)<br />

Som det fremgår af kap. 2 skal den nødvendige elektronik (hardware) opbygges på printkortet. Printkortet<br />

kommunikere med PC I/O kortet via et kabel og et 36 polet stik (se bilag 6.1) og med Doseringsmekanikken<br />

via 2 stk 26 polede fla<strong>dk</strong>abler. Der er ikke stillet specielle krav m.h.t. udformning og størrelse<br />

af printkortet<br />

3.2.1 BLOKDIAGRAM (KLASSEDIAGRAM)<br />

En den første opdeling af funktionaliteten i hardwaredesignet gør vi med et UML klassediagram, se fig. 5.<br />

Heraf fremgår det, hvorledes de enkelte hardwareblokke (HW-blokke) kommunikerer med<br />

doseringsmekanikkens status- og kontrolenheder. Formålet med nedbrydningen er at få<br />

konstruktionsmæssige overskuelige blokke.<br />

Hver enkelt HW blok er beskrevet i kapitel 2.5.3.<br />

Blokdiagram over HW<br />

på Elektronikkortet<br />

ver. 2.07.04/foh StatusPanelHW 1<br />

7<br />

DMStatusLampe<br />

PC<br />

Interfacekort<br />

KontrolPanelHW<br />

MotorStyringsHW<br />

KonfigSwitchHW PositionsSensorHW<br />

Figur 5. Blokdiagram over <strong>SDS</strong> hardwaren<br />

1<br />

1<br />

DMKontrolTast<br />

DMStepMotor<br />

TemperaturMålingsHW 1<br />

DMTemperaturFøler<br />

1<br />

1<br />

1<br />

3<br />

2<br />

1<br />

DMTemperaturDisplay<br />

DMPositonsSensor


3.2.2.1 BLOKDIAGRAM<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2 HARDWARE DIAGRAMMER<br />

ORCAD diagrammet er hierarkiske opbygget, hvor hver blok repræsentere en del af kredsløbet.<br />

Det hierarkiske diagram har til formål at give overblik over printet og dens funktioner.<br />

1<br />

2<br />

3<br />

4<br />

5<br />

+5V<br />

DMDigitalConnector<br />

StatusPanelHW<br />

PcConnector<br />

PosStartLED<br />

PosStartOutput<br />

PosStartInput<br />

DOUT0<br />

FremInput<br />

FremOutput<br />

FremLED<br />

D D<br />

PosDosInput<br />

PosDosOutput<br />

PosDosLED<br />

+5V<br />

SaftLED<br />

SaftOutput<br />

SaftInput<br />

DOUT1<br />

VandLED<br />

VandOutput<br />

VandInput<br />

DOUT2<br />

TilbageLED<br />

TilbageOutput<br />

TilbageInput<br />

DOUT3<br />

VaeskeVarmLED<br />

VaeskeVarmOutput<br />

VaeskeVarmInput<br />

DOUT4<br />

StatusPanelHW<br />

KontrolPanelHW<br />

StartNC<br />

StartNC<br />

Start<br />

DIN0<br />

StartNO<br />

StartNO<br />

ResetNC<br />

ResetNC<br />

DIN1<br />

Reset<br />

ResetNO<br />

ResetNO<br />

C C<br />

GND<br />

+5V<br />

KontrolPanelHW<br />

DGND<br />

+5V<br />

MotorStyringsHW<br />

StepmotorA<br />

StepmotorA<br />

GND<br />

Frem<br />

DOUT5<br />

+5V<br />

StepmotorB<br />

StepmotorB<br />

Tilbage<br />

DOUT6<br />

DGND<br />

+5V<br />

MotorStyringsHW<br />

PosStart<br />

DIN2<br />

DIN3<br />

PosDos<br />

DIN4<br />

KopIHolder<br />

+5V +5V<br />

B B<br />

TemperaturMaalingsHW<br />

+15V -15V<br />

DigitalStel<br />

DigitalConnector<br />

FoelerKatode<br />

AD0<br />

AnalogConnector<br />

FoelerAnode<br />

+15V<br />

AGND<br />

-15V<br />

Temp<br />

FoelerKatode<br />

FoelerAnode<br />

AGND<br />

TemperaturMaalingsHW<br />

TemperaturDisplayHW<br />

TempSignal<br />

TempDisp Display<br />

GND<br />

DA0<br />

TemperaturDisplayHW<br />

AGND<br />

+15V +15V<br />

GND<br />

A -15V<br />

A<br />

+5V<br />

-15V<br />

KonfigSwitchHW<br />

AGND DGND<br />

Title<br />

AnalogStel<br />

Elektronikkort<br />

DIN5<br />

Konfig<br />

Size Document Number Rev<br />

A4 A4 A4<br />

2.1<br />

KonfigSwitchHW<br />

AnalogConnector<br />

DGND<br />

Date: Date: Thursday, December 09, 2004 Sheet 1 of 11<br />

PcConnector<br />

5<br />

4<br />

3<br />

2<br />

1<br />

+5V<br />

DGND<br />

43


1<br />

2<br />

3<br />

4<br />

5<br />

44<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2.2 ANALOGCONNECTOR<br />

FoelerKatode<br />

+15V<br />

FoelerAnode<br />

-15V<br />

AnalogStel<br />

D D<br />

TempSignal<br />

J2<br />

2<br />

1<br />

4<br />

3<br />

6<br />

5<br />

8<br />

7<br />

10<br />

9<br />

12<br />

11<br />

14<br />

13<br />

16<br />

15<br />

18<br />

17<br />

20<br />

19<br />

22<br />

21<br />

C 24<br />

23<br />

C<br />

26<br />

25<br />

CONN PLUG 13x2<br />

B B<br />

A A<br />

Title<br />

AnalogConnector<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 2 of 11<br />

2<br />

1<br />

3<br />

4<br />

5


3.2.2.3 DIGITALCONNECTOR<br />

1<br />

2<br />

3<br />

4<br />

5<br />

StartNC<br />

PosStartLED<br />

StartNO<br />

FremLED<br />

ResetNC<br />

PosDosLED<br />

D D<br />

ResetNO<br />

SaftLED<br />

PosStart<br />

VandLED<br />

KopIHolder<br />

TilbageLED<br />

PosDos<br />

VaeskeVarmLED<br />

StepmotorA<br />

StepmotorB<br />

+5V<br />

C C<br />

C13<br />

DigitalStel<br />

10u<br />

J1<br />

1<br />

3<br />

5<br />

7<br />

9<br />

11<br />

13<br />

15<br />

17<br />

19<br />

21<br />

23<br />

25<br />

2<br />

4<br />

6<br />

8<br />

10<br />

12<br />

14<br />

16<br />

18<br />

20<br />

22<br />

24<br />

26<br />

B B<br />

CONN PLUG 13x2<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

A A<br />

Title<br />

DigitalConnector<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 3 of 11<br />

2<br />

1<br />

3<br />

4<br />

5<br />

45


1<br />

2<br />

3<br />

4<br />

5<br />

46<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2.4 KONFIGSWITCHHW<br />

Konfig<br />

+5V<br />

DGND<br />

D D<br />

SW3<br />

SW MAG-SPDT<br />

2<br />

R13<br />

562<br />

1<br />

C C<br />

B B<br />

A A<br />

Title<br />

KonfigSwitchHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 4 of 11<br />

2<br />

1<br />

3<br />

4<br />

5


3.2.2.5 KONTROLPANELHW<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Start<br />

StartNC<br />

Reset<br />

StartNO<br />

ResetNC<br />

2<br />

2<br />

D D<br />

ResetNO<br />

R15 R15<br />

R16<br />

10k<br />

10k<br />

1<br />

1<br />

+5V<br />

GND<br />

C C<br />

B B<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

A A<br />

Title<br />

KontrolPanelHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 5 of 11<br />

2<br />

1<br />

3<br />

4<br />

5<br />

47


1<br />

2<br />

3<br />

4<br />

5<br />

48<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2.6 MOTORSTYRINGHW<br />

Frem<br />

C7<br />

StepmotorA<br />

U3A<br />

U1A<br />

VCC<br />

DGND<br />

100n<br />

Tilbage<br />

2<br />

1<br />

StepmotorB<br />

1<br />

2<br />

12<br />

3<br />

13<br />

VCC<br />

GND<br />

C5<br />

74HC02<br />

74HC10<br />

U1C<br />

VCC<br />

VCC DGND<br />

C3<br />

9<br />

D D<br />

+5V<br />

VCC DGND<br />

10<br />

8<br />

2<br />

100n<br />

D Q<br />

100n<br />

11<br />

DGND<br />

3<br />

74HC10<br />

CLK<br />

U3B<br />

U1B<br />

5<br />

3<br />

4<br />

4<br />

6<br />

VCC<br />

6<br />

5<br />

PRE<br />

5<br />

Q 6<br />

U4A<br />

74HC74<br />

14<br />

4<br />

7<br />

CLR<br />

1<br />

74HC10<br />

74HC02<br />

VCC<br />

C C<br />

VCC DGND<br />

12<br />

D Q<br />

U2B<br />

11<br />

CLK<br />

3<br />

4<br />

6<br />

5<br />

VCC<br />

PRE<br />

9<br />

Q 8<br />

U2A<br />

1<br />

2<br />

12<br />

13<br />

74HC10<br />

U2C<br />

U4B<br />

C4<br />

9<br />

10<br />

8<br />

100n<br />

11<br />

74HC10<br />

74HC74<br />

14<br />

10<br />

7<br />

CLR<br />

13<br />

74HC10<br />

U3C<br />

U3D<br />

8<br />

11<br />

10<br />

13<br />

9<br />

12<br />

74HC02<br />

R21<br />

74HC02<br />

B 42.2k<br />

B<br />

R23<br />

221k<br />

C6<br />

R24<br />

220k<br />

100n<br />

A A<br />

Title<br />

MotorstyringHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 6 of 11<br />

2<br />

1<br />

3<br />

4<br />

5


3.2.2.7 PCCONNECTOR<br />

1<br />

2<br />

3<br />

4<br />

5<br />

DA0<br />

AGND GND<br />

AD0<br />

DOUT0<br />

DIN0<br />

DOUT1<br />

DIN1<br />

D D<br />

DIN2<br />

DOUT2<br />

DOUT3<br />

DIN3<br />

DOUT4<br />

DIN4<br />

DIN5 DOUT5<br />

J3<br />

DOUT6<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

C 15<br />

16<br />

C<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

33<br />

34<br />

35<br />

36<br />

37<br />

38<br />

39<br />

40<br />

CONN SOCKET 20x2<br />

B B<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

A A<br />

Title<br />

PcConnector<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 7 of 11<br />

2<br />

1<br />

3<br />

4<br />

5<br />

49


1<br />

2<br />

3<br />

4<br />

5<br />

50<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2.8 STATUSPANELHW<br />

PosStartInput<br />

PosStartOutput<br />

R41<br />

1 2<br />

Q1<br />

FremInput<br />

BC547B R31<br />

3k<br />

FremOutput<br />

1 2<br />

PosDosInput<br />

100<br />

PosDosOutput<br />

R42<br />

D D<br />

SaftInput<br />

1 2<br />

Q2<br />

SaftOutput<br />

BC547B R32<br />

3k<br />

1 2<br />

VandInput<br />

VandOutput<br />

100<br />

R43<br />

TilbageOutput<br />

TilbageInput<br />

VaeskeVarmOutput<br />

R33<br />

2<br />

Q3<br />

BC547B<br />

1<br />

2<br />

1<br />

3k<br />

VaeskeVarmInput<br />

100<br />

R44<br />

+5V<br />

R34<br />

2<br />

Q4<br />

BC547B<br />

1<br />

2<br />

1<br />

3k<br />

100<br />

C R45<br />

C<br />

1 2<br />

Q5<br />

BC547B R35<br />

3k<br />

1 2<br />

100<br />

R46<br />

1 2<br />

Q6<br />

BC547B R36<br />

3k<br />

1 2<br />

100<br />

R47<br />

1 2<br />

Q7<br />

BC547B R37<br />

3k<br />

1 2<br />

100<br />

B B<br />

A A<br />

Title<br />

StatusPanelHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 9 of 11<br />

2<br />

1<br />

3<br />

4<br />

5


3.2.2.9 TEMPERATURDISPLAYHW<br />

1<br />

2<br />

3<br />

4<br />

5<br />

TempDisp<br />

R10<br />

105k<br />

Display<br />

D D<br />

R12 R12<br />

470<br />

R11<br />

1<strong>1.</strong>3k<br />

GND<br />

C C<br />

B B<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

A A<br />

Title<br />

TemperaturDisplayHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 10 of 11<br />

2<br />

1<br />

3<br />

4<br />

5<br />

51


1<br />

2<br />

3<br />

4<br />

5<br />

52<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.2.10 TEMPERATURMAALINGSHW<br />

+15V<br />

D D<br />

R6<br />

2.21k<br />

D4<br />

+15V BZX79 10V<br />

+15V<br />

+15V<br />

-15V<br />

C2 AGND R1 R2<br />

-15V<br />

C12<br />

100n<br />

9.31k 5<strong>1.</strong>1k<br />

10u<br />

C11 C11<br />

U6<br />

10u 10u<br />

C1<br />

100n<br />

3 +<br />

C AGND<br />

6<br />

Temp<br />

C<br />

2 -<br />

AGND<br />

R4 <strong>1.</strong>50k<br />

LM741<br />

R9<br />

470<br />

R8<br />

7<br />

1<br />

4<br />

5<br />

22.0k<br />

-15V<br />

FoelerAnode<br />

R5 365k<br />

R3<br />

3.01k<br />

FoelerKatode<br />

AGND<br />

B B<br />

A A<br />

Title<br />

TemperaturmaalingsHW<br />

Size Document Number Rev<br />

A4<br />

2.1<br />

Date: Wednesday, December 08, 2004 Sheet 11 of 11<br />

2<br />

1<br />

3<br />

4<br />

5


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.3 BESKRIVELSE AF FUNKTIONSBLOKKENES DESIGN<br />

Dette afsnit beskriver designet af de enkelte HW funktionsblokke. Afsnittet er en skabelon for HW<br />

design, idet kun enkelte blokke er helt eller delvist beskrevet.<br />

3.2.3.1 MOTORSTYRINGSHW<br />

Signaldefinition:<br />

Signal Type Logisk definition Zin Zload<br />

Frem CMOS input Aktivt højt (logisk 1) >1M<br />

Tilbage CMOS input Aktivt højt (logisk 1) >1M<br />

StepmotorA CMOS output Aktivt højt (logisk 1) < 1<br />

StepmotorB CMOS output Aktivt højt (logisk 1) < 1<br />

Funktion:<br />

Kredsløbet skal generere symmetriske pulstog på udgangene StepmotorA og StepmotorB med en<br />

frekvens på 100 step/sek (25Hz), trimmerjusterbar i et interval på +/-10Hz. Pulstogene skal have en<br />

dutycycle på mellem 45 og 55%.<br />

Sammenhængen med signalerne Frem og Tilbage fremgår af nedenstående tabel.<br />

Frem Tilbage StepmotorA StepmotorB<br />

0 0 0 0<br />

0 1 ”Tilbage” sekvens som vist i figur<br />

1 0 ”Frem” sekvens som vist i figur<br />

1 1 0 0<br />

Frem<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Tilbage<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Step nr 1 2 3 4 5 6 7 8<br />

53


54<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.3.2 TEMPERATURMÅLINGSHW<br />

Signaldefinition:<br />

Signal Type Signal range Zin Zload<br />

FoelerAnode Analogt input 0,566V-0,346V > 1M<br />

FoelerKatode Analogt input 0V > 1M<br />

Display Analogt output 0-1V < 1<br />

Temp Analogt output -10V til -9,5V – Fejl<br />

-9,5V til -9V – Fejl margin<br />

-9 til 9V - 0-30°C<br />

9-9,5V – Fejl margin<br />

9,5-10V – Fejl<br />

< 1<br />

Funktion:<br />

Kredsløbet skal forsyne temperaturmåle- dioden 1N4148 med en passende biasstrøm. Diodeoffsetspændingen<br />

skal udlignes og spændingsændringen på ca. 2,2 mv / C o skal forstærkes så udgangssignalet<br />

Display kan forsyne displayet.<br />

For Displayet gælder det, at 1999mV ~ 199,9 C o .<br />

Et yderligere forstærkerkredsløb tilpasser signalet til PC I/O kortets AD omsætter (Temp). Såvel<br />

offset som forstærkning til displaydelen skal kunne justeres/ kalibreres. Det skal sikres, at<br />

forstærkerfejlene er så små at kravspecifikationens målefejl på +/- 0,5 C o overholdes.<br />

3.2.3.3 KONTROLPANELHW<br />

Signaldefinition:<br />

Signal Type Logisk<br />

definition<br />

Start CMOS Output Aktivt højt<br />

(logisk 1)<br />

Reset CMOS Output Aktivt højt<br />

(logisk 1)<br />

StartNC Not used<br />

StartNO CMOS Input Aktivt højt<br />

(logisk 1)<br />

ResetNC Not used<br />

ResetNO CMOS Input Aktivt højt<br />

(logisk 1)<br />

Zin Zload<br />

> 1M<br />

> 1M<br />

< 1<br />

< 1<br />

Funktion:<br />

Funktionen er at forbinde kontakterne til de tilhørende digitale indgange på PC kortet.<br />

3.2.3.4 DIGITALCONNECTOR<br />

Funktion:<br />

Stik for de digitale signaler til SoftDrink maskinen.<br />

3.2.3.5 ANALOGCONNECTOR<br />

Funktion:<br />

Stik for de analog signaler til SoftDrink maskinen.


3.2.3.6 STATUSPANELHW<br />

Signaldefinition:<br />

Signal Type Logisk<br />

definition<br />

PosStart CMOS Input Aktivt højt<br />

(logisk 1)<br />

Frem CMOS Input Aktivt højt<br />

(logisk 1)<br />

PosDos CMOS Input Aktivt højt<br />

(logisk 1)<br />

Saft CMOS Input Aktivt højt<br />

(logisk 1)<br />

Vand CMOS Input Aktivt højt<br />

(logisk 1)<br />

Tilbage CMOS Input Aktivt højt<br />

(logisk 1)<br />

VaeskeVarm CMOS Input Aktivt højt<br />

(logisk 1)<br />

PosStart CMOS output Aktivt højt<br />

(logisk 1)<br />

Frem CMOS output Aktivt højt<br />

(logisk 1)<br />

PosDos CMOS output Aktivt højt<br />

(logisk 1)<br />

Saft CMOS output Aktivt højt<br />

(logisk 1)<br />

Vand CMOS output Aktivt højt<br />

(logisk 1)<br />

Tilbage<br />

VaeskeVarm<br />

CMOS output<br />

CMOS output<br />

Aktivt højt<br />

(logisk 1)<br />

Aktivt højt<br />

(logisk 1)<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Funktion:<br />

Funktionen er at forbinde Dioden til den tilhørende digitale udgangskort på PC kortet.<br />

3.2.3.7 KONFIGSWITCHHW<br />

Signaldefinition:<br />

Signal Type Logisk<br />

definition<br />

Konfig CMOS input Aktivt højt<br />

(logisk 1)<br />

Zin Zload<br />

> 1M<br />

> 1M<br />

> 1M<br />

> 1M<br />

> 1M<br />

> 1M<br />

> 1M<br />

80<br />

80<br />

80<br />

80<br />

80<br />

80<br />

80<br />

Zin Zload<br />

> 1M<br />

Funktion:<br />

Funktionen er at forbinde kontakten til den tilhørende digitale indgang på PC kortet.<br />

3.2.3.8 PCCONNECTOR<br />

Signaldefinition:<br />

Digitalt: CMOS for ind og udgange.<br />

Analog: -10 V til 10 V<br />

Funktion:<br />

Stik til Humusoft AD 512 I/O kort, se eventuelt billag 6.1<br />

55


56<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.4 OVERVEJELSER<br />

3.2.4.1 TEMPERATURMÅLINGSHW<br />

· Hvilket temperatur område er relevant.<br />

· Hvilket udgangs område til AD512 PC kortet.<br />

· Kravet om føler fejl i kravspecifikationen side 10.<br />

· Tolerancen på ± 0,5 ºC<br />

Hvilket temperatur område er relevant?<br />

· Minimums temperaturen har vi valgt til 0 ºC. Begrundelsen til dette valg, er at under 0 ºC begynder<br />

vandet at fryse til is. Og dermed kan vandet have problemer med at komme ud af ventileren.<br />

· Max temperaturen har vi valgt til 30 ºC. Begrundelsen er at det er en saftevands automat, og ikke<br />

en kaffe/te automat. Derved vil kravet til temperaturen aldrig komme op på 30 ºC. Derimod hvis<br />

vi skulle holde en høj temperatur som 30 ºC ville det kræve et varme legeme, men så kan vi også<br />

næsten lave glögg.<br />

Hvilket udgangs område til AD512 PC kortet?<br />

Vores operationsforstærkers udgangs område er ca. -14V og +14V.<br />

Derfor har vi valgt området -10V til +10V (Max område for AD512), for at få en så god opløsning<br />

som muligt.<br />

Kravet om føler fejl i kravspecifikationen side 10.<br />

I kravspecifikationen side 10. Står der: „ Fejl i indlæst værdi: Der udlæses 0 til displayet – lampen<br />

„Væske varm“ slukkes.“ Dvs. at hvis der bliver indlæst en værdi der ikke svare til det temperatur<br />

område der er aktuelt. Eller når føleren bliver kortsluttet/ afbrudt.<br />

Det har vi løst på en sådan måde, at vi ikke bruger de to ydre værdier i det analog udgangs signal til<br />

AD512 kortet. Så Computeren har mulighed for at se at de er noget galt.<br />

· -10V til -9,5V – Fejl<br />

· -9,5V til -9V – Fejl margin<br />

· -9 til 9V - 0-30°C<br />

· 9-9,5V – Fejl margin<br />

· 9,5-10V – Fejl<br />

Tolerancen på ± 0,5 ºC<br />

Da dette er et krav fra kravspecifikationen. Vi har gjort følgende får at opnå den ønskede præcision:<br />

· Begrænset vores målings område.<br />

· Regnet med komponent tolerancer.<br />

· Indsat potmeter i vores kredsløb, for at finindstille og kompensere for komponent tolerancerne.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

3.2.4.2 PRINT<br />

Målet er at lavet et lille, men alligevel rimelig overskueligt print.<br />

Ting vi har taget højde for:<br />

· Støj har vi prøvet at begrænse ved at anbringe 10 µF lige ved stikkende, hvor forsyningen kommer<br />

ind (+5V, -15V og +15V).<br />

· Og lave et stel plan på alt overskydende kopper på printet.<br />

· Sørget at anbringe en 100 nF kondensator ved hver IC’er, så den har den energi den skal bruge,<br />

når den skal bruge den.<br />

· Undgå at lave nogle 0 ohm modstande, dvs. komponenter der ikke er nødvendig.<br />

For arbejde:<br />

· Fandt alle komponenter for at undersøge hvordan de så ud, for at vælge det rigtige „foot print“ til<br />

hver.<br />

· Undersøge stikkene, hvilke ben der er til hvad. (IO liste)<br />

57


58<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4 IMPLEMENTERINGSDOKUMENTATION<br />

4.1 SOFTWARE<br />

4.<strong>1.</strong>1 SOFTDRINKSTYRINGS KLASSE<br />

Opbygning:<br />

Softdrinkstyrings klassen er delt op i tre dele, en til hver UseCase. UseCasene bliver kørt igennem<br />

ved hjælp af en uendelig while løkke.<br />

Use case 1: - Styringen af automaten<br />

Styringen af automaten er delt op mange små trin. Hvert trin har et unikt nummer, så det er lettere at<br />

skifte fra et trin til et andet. Der bruges en switch funktion til at håndterer hvilket trin vi står i, hvornår<br />

vi skal videre og hvor vi skal hen.<br />

Hver gang while løkken kommer til use case 1, startes i det aktuelle trin.<br />

Use case 2: - Temperatur overvågning<br />

Temperatur overvågningen modtager temperaturen ind fra føleren i beholderen, og validerer om den<br />

ligger inden for den grænse som af sat i konfigurationsparameteret.<br />

· Hvis temperaturen er go<strong>dk</strong>endt, udskrives den til displayet.<br />

· Hvis temperaturen er for høj, tændes dioden „Væske varm“ på statuspanelet, og automaten<br />

afventer at temperaturen falder.<br />

· Hvis føleren returnerer en temperatur der ligger udenfor den fastsatte hardware grænse, er der<br />

følerfejl, kortsluttet eller afbrudt, og der udskrives „0“ til displayet.<br />

Use case 3: - Opsætning af automat<br />

Her tjekkes om konfigurations switchen på hardwaredelen er slået til eller fra.<br />

· Hvis den er slået fra, starter løkken forfra med use case <strong>1.</strong><br />

· Hvis den er slået til, startes opsætningsdelen af automaten.<br />

4.<strong>1.</strong>2 INPUT/OUTPUT KLASSEN<br />

Generelt brug med AD512:<br />

Når man normalt skal bruge AD512 driveren til at håndtere de digitale ind og udgange benyttes 8bit,<br />

et til hver port. De 8 bit er svarer til tallene i intervallet 0-255, og er det som vi skal bruge til at<br />

kommunikere med driveren.<br />

Eksempelvis hvis man ville sætte port 3 til 1, skal man derfor sætte sine bits således ’00000011’<br />

hvilket svarer til ’3’i decimal tal.<br />

Det simple i disse metoder forsvinder når der er flere bit der er sat, da man så skal nedbryde tallet<br />

på en meget besværlig måde.<br />

Dette løser vi ved at bruge bit operator. En bit operator er et værktøj til at håndtere og behandle det<br />

binære talsystem.<br />

InputOutput:<br />

For at lette vores arbejdsmetoder med de digitale ind og udgange, har vi valgt at lave en klasse der<br />

håndterede disse. Når der så skal sættes en digital udgang, skal inputoutput klassen have port<br />

nummer og om den skal sættes til sand eller falsk.<br />

Ligeledes når vi ønsker status på en given port, giver vi den port nummeret og den returnerer sand<br />

eller falsk.


Formel for saft og vandbeholder:<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4.<strong>1.</strong>3 DOSERINGS KLASSE<br />

For at sikre der kommer omkring lige meget i væske i hver kop, er det nødvendigt at udregne tiden<br />

ventilerne skal være åbne, i forhold til den mængde væske der er i beholderne.<br />

Opbygning:<br />

Når vi skal fylde vand og saft i koppen, kalder vi doseringsklassen som returnerer den tid som<br />

ventilerne skal åbnes. Herefter trækkes mængden fra en lokal variabel i klassen.<br />

Hvis påfyldningen af koppen stoppes inden hele tiden er gået, returneres tiden tilbage til doseringsklassen,<br />

som udregner hvor meget der ikke kom i koppen og lægger det tilbage i variablen. Dette<br />

gøres for at holde styr på hvor meget væske der er tilbage i hver beholder så udregningerne passer<br />

bedst mulig.<br />

4.<strong>1.</strong>3.1 UDREGNING<br />

Disse udregninger er baseret på dataopsamlingerne på bilag 6.5<br />

Tid1000 Tid1000 2 10 5<br />

<strong>1.</strong>5 10 5<br />

1 10 5<br />

5 10 4<br />

0<br />

0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500<br />

VandTank SaftTank<br />

59


60<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Saft:<br />

Formel udregnet vha. PowerReg på Ti89 for tiden som funktion af mængden i safttanken (bemærk at der<br />

istedet for sekunder er brugt millisekunder, dvs. multipliceret med 1000:<br />

Mængde i tank (ml). x<br />

Mængde saft til kop (ml). y<br />

Beregnet udløbstid (ms). Saft<br />

y1 18<br />

y2 54<br />

y3 90<br />

0.75422309843375<br />

0.75422309843375<br />

y<br />

Saft( x y)<br />

240.79896131361 x<br />

<br />

y<br />

<br />

240.79896131361 x<br />

<br />

2<br />

2<br />

<br />

<br />

<br />

Saft x y<br />

1<br />

Saft x y<br />

2<br />

Saft x y<br />

3<br />

Minimum<br />

8000<br />

7000<br />

6000<br />

5000<br />

4000<br />

Maximum 3000<br />

2000<br />

1000<br />

<br />

<br />

0<br />

0 1000 2000 3000 4000 5000 6000<br />

xx x<br />

500<br />

4500


Vand:<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Formel udregnet vha. PowerReg på Ti89 for tiden som funktion af mængden i vandtanken (bemærk at der<br />

istedet for sekunder er brugt millisekunder, dvs. multipliceret med 1000:<br />

Mængde i tank (ml). x<br />

Mængde vand til kop (ml). y<br />

Beregnet udløbstid (ms). Vand<br />

y1 90<br />

y2 126<br />

y3 162<br />

0.79905863392452<br />

0.79905863392452<br />

y<br />

Vand( x y)<br />

166.71975270924 x<br />

<br />

y<br />

<br />

166.71975270924 x<br />

<br />

2<br />

2<br />

<br />

<br />

<br />

Vand x y<br />

1<br />

Vand x y<br />

2<br />

Vand x y<br />

3<br />

Minimum<br />

Maximum<br />

8000<br />

7000<br />

6000<br />

5000<br />

4000<br />

3000<br />

2000<br />

1000<br />

<br />

<br />

0<br />

0 1000 2000 3000 4000 5000 6000<br />

xx x<br />

500<br />

4500<br />

<br />

<br />

<br />

61


62<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4.2 HARDWARE<br />

4.2.1 UDREGNINGER<br />

4.2.<strong>1.</strong>1 CLOCK GENERATOREN<br />

Konstanter defineres:<br />

Mindste modstand med tolerancer indregnet<br />

Variable:<br />

Formel:<br />

1<br />

ToleranceModstand <br />

100<br />

20<br />

ToleranceKordensator <br />

100<br />

c 100 10 9 <br />

<br />

Cmin c cToleranceKordensator Cmax c cToleranceKordensator Rmin( r)<br />

r rToleranceModstand Rmax( r)<br />

r rToleranceModstand f ( 25 10)<br />

4 140<br />

R Rmax( x<br />

)<br />

C Cmax<br />

1<br />

Vth<br />

2 VDD VDD<br />

Tr () CR Rln <br />

<br />

<br />

VDD VDD<br />

<br />

VDD Vth Vth<br />

<br />

<br />

303<br />

Tmin( x)<br />

T( x)<br />

2500000000 x ln( 4)<br />

<br />

<br />

1<br />

RminUdregnet T( x)<br />

= solve x<br />

f<br />

R<br />

C<br />

Cmin 8 10 8 <br />

<br />

Cmax <strong>1.</strong>2 10 7 <br />

<br />

125000000<br />

<br />

2121ln( 4)<br />

RminUdregnet 4.251 10 4


Største modstand med tolerancer indregnet<br />

Variable:<br />

Formel:<br />

Modstanden til en clock generator til 100 Hz uden tolerancer<br />

Variable:<br />

Formel:<br />

f ( 25 10)<br />

4 60<br />

R Rmin( x<br />

)<br />

C Cmin<br />

1<br />

Vth<br />

2 VDD VDD<br />

Tr () CR Rln 99<br />

Tmax( x)<br />

T( x)<br />

1250000000 x ln( 4)<br />

<br />

<br />

1<br />

RmaxUdregnet T( x)<br />

= solve x<br />

f<br />

f 254 R x<br />

C c<br />

1<br />

Vth<br />

2 VDD VDD<br />

Tr () CR Rln 1<br />

Tnom( x)<br />

T( x)<br />

10000000 x ln( 4)<br />

<br />

<br />

Tx ( )<br />

<br />

<br />

<br />

<br />

<br />

<br />

1<br />

= solve x<br />

f<br />

VDD VDD<br />

<br />

VDD Vth Vth<br />

VDD VDD<br />

<br />

VDD Vth Vth<br />

<br />

<br />

<br />

<br />

62500000<br />

<br />

297ln( 4)<br />

100000<br />

7.213 10<br />

ln( 4)<br />

4<br />

<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

RmaxUdregnet <strong>1.</strong>518 10 5<br />

<br />

63


64<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Diagram over modstandsværdierne kontra periode tiden<br />

T/s<br />

Tmax( x)<br />

Tnom( x)<br />

Tmin( x)<br />

R3 R2ppR3 1 <br />

R2 1 <br />

<br />

<br />

R2 220 10<br />

<br />

3<br />

R2ppR3 <strong>1.</strong>093 10<br />

<br />

5<br />

<br />

Note: R1 skal rundes ned ved valg af modstande (max frekvensen bliver<br />

større. R3 skal rundes op. (min frekvensen bliver mindre)<br />

Verifikation<br />

0.015<br />

0.01<br />

4 10 4<br />

Modstand udregning med potmeter<br />

R1 RminUdregnet<br />

R1 4.251 10 4<br />

<br />

R2ppR3 RmaxUdregnet RminUdregnet<br />

1<br />

R3 2.172 10 5<br />

<br />

R1 4.251 10 4<br />

<br />

R2 2.2 10 5<br />

<br />

R3 2.172 10 5<br />

<br />

Tr () Cr ln(<br />

4)<br />

1<br />

FrekvensMin<br />

T R1 R2 1 <br />

R3 1 <br />

<br />

<br />

<br />

<br />

<br />

1<br />

FrekvensMax <br />

TR1 ( )<br />

<br />

5 10 4<br />

6 10 4<br />

1<br />

<br />

<br />

7 10 4<br />

xx <br />

R/ohm<br />

8 10 4<br />

R3<br />

R1<br />

R2<br />

9 10 4<br />

FrekvensMin 47.52<br />

FrekvensMax 169.68<br />

1 10 5


4.2.<strong>1.</strong>2 KONFIGSWITCHHW<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Vi forbinder signalet fra indgangen direkte til udgangen, men laver en modstandsforbindelse til<br />

GND for at sikre at signalerne får logisk 0 når switch kontaktsættet ikke er aktiveret.<br />

Vi har valgt at bruge en pull down modstand i stedet for en pull op modstand. Hvis vi får brug for<br />

det inverterede signal er det intet problem at lave det i programdelen.<br />

Der er lidt tvivl om indgangsimpedansen på I/O kortets indgang, derfor valgte vi en 562 <br />

modstand på baggrund af en test af indgangen.<br />

Udregning:<br />

+5V<br />

2<br />

1<br />

GND<br />

SW3<br />

SW MAG-SPDT<br />

R13<br />

562<br />

Strøm gennem switch. (når switch er aktiveret):<br />

IR = v / R = 5V / 562 = 8,9mA<br />

Indgang<br />

65


66<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4.2.<strong>1.</strong>3 KONTROLPANELHW<br />

Kontrolpanelet består af knapperne START og RESET. De er forbundet så der både er mulighed for<br />

NO og NC funktionen fra hver kontakt.<br />

Vi har valgt at bruge NC forbindelser i stedet for NO for at lave logisk 0 når knapperne ikke er<br />

trykket ind. Hvis vi får brug for det inverterede signal er det intet problem at lave det i<br />

programdelen.<br />

Vi forbinder signalerne fra indgangen direkte til udgangen, men laver en modstandsforbindelse til<br />

+5V for at sikre at signalerne får logisk 1 når trykknap kontaktsættet er aktiveret.<br />

Vi prøvede at finde data omkring indgangsimpedansen for indgangskortet, uden held. Derfor<br />

antager vi at indgangsimpedansen på I/O kortets indgang er meget høj. Vi har valgt en 10k<br />

modstand for at trække indgangen til høj.<br />

Udregning:<br />

GND<br />

2<br />

1 3<br />

+5V<br />

Strøm gennem modstanden (når knappen er trykket ind):<br />

IR = v / R = 5V / 10k = 0,5 uA<br />

10k<br />

Digital Ind


4.2.<strong>1.</strong>4 MOTORSTYRINGHW<br />

Frem Tilbage StepmotorA StepmotorB<br />

0 0 0 0<br />

0 1 ”Tilbage” sekvens som vist i figur<br />

1 0 ”Frem” sekvens som vist i figur<br />

1 1 0 0<br />

Frem<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Tilbage<br />

STEPMOTOR A<br />

STEPMOTOR B<br />

Step nr 1 2 3 4 5 6 7 8<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Af ovenstående tabel og stepdiagram har vi lavet en sandhedstabel for næste STEPMOTOR A og<br />

STEPMOTOR B’s næste step (StepmotorA* og StepmotorB*) i forhold til det nuværende step og<br />

inputtene FREM og TILBAGE.<br />

StepmotorA StepmotorB Frem Tilbage StepmotorA* StepmotorB*<br />

0 0 0 0 0 0<br />

0 0 0 1 0 1<br />

0 0 1 0 1 0<br />

0 0 1 1 0 0<br />

0 1 0 0 0 0<br />

0 1 0 1 1 1<br />

0 1 1 0 0 0<br />

0 1 1 1 0 0<br />

1 0 0 0 0 0<br />

1 0 0 1 0 0<br />

1 0 1 0 1 1<br />

1 0 1 1 0 0<br />

1 1 0 0 0 0<br />

1 1 0 1 1 0<br />

1 1 1 0 0 1<br />

1 1 1 1 0 0<br />

Af sandhedstabellen kan vi lave to karnaughkort, et for StepmotorA* og et StepmotorB*:<br />

F = Frem, T = Tilbage, A = StepmotorA, B = StepmotorB<br />

67


68<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

StepmotorA* StepmotorB*<br />

F T<br />

A B<br />

00 01 11 10<br />

F T<br />

A B<br />

00 01 11 10<br />

00 0 0 0 1 00 0 1 0 0<br />

01 0 1 0 0 01 0 1 0 0<br />

11 0 1 0 0 11 0 0 0 1<br />

10 0 0 0 1 10 0 0 0 1<br />

StepmotorA* = F'⋅T⋅ B + F⋅T'⋅ B'<br />

StepmotorB* = F'⋅T⋅ A '+ F⋅T'⋅ A<br />

På en D-flipflop (74HC74) for StepmotorA* skal vi altså bruge 2 stk. AND-gate med 3 ben<br />

(74HC11) og 1 stk. OR-gate med 2 ben (74HC32) og ligeledes for StepmotorB* + 2 stk. inverter<br />

(74HC04) til F’ og T’.<br />

Frem<br />

Tilbage<br />

GND<br />

+5V<br />

U5A<br />

1 2<br />

74HC04<br />

U5B<br />

3 4<br />

74HC04<br />

1<br />

2<br />

13<br />

3<br />

4<br />

5<br />

11<br />

10<br />

9<br />

11<br />

10<br />

9<br />

U1A<br />

12<br />

74HC11<br />

U1B<br />

6<br />

74HC11<br />

U1C<br />

8<br />

74HC11<br />

U2C<br />

8<br />

74HC11<br />

1<br />

2<br />

4<br />

5<br />

3<br />

6<br />

U3A<br />

74HC32<br />

U3B<br />

74HC32<br />

CLK<br />

2<br />

D Q<br />

3<br />

CLK<br />

5<br />

Q 6<br />

U7A<br />

12<br />

PRE 4<br />

CLR<br />

1<br />

D<br />

PRE 10<br />

74HC74<br />

11<br />

CLK Q 8<br />

CLR<br />

13<br />

U7B<br />

Q 9<br />

74HC74<br />

Stepmotor<br />

Stepmotor


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Dog har vi valgt at bruge i alt 6 stk. NAND-gate (74HC10) og 2 stk. NOR-gate (74HC02), da vi<br />

ved dette kan spare en hel IC i forbindelse med 2 stk. NOR-gate i clock-generatoren.<br />

Frem<br />

Tilbage<br />

GND<br />

+5V<br />

+5V<br />

DGND<br />

2<br />

3<br />

5<br />

6<br />

U3A<br />

U3B<br />

1<br />

74HC02<br />

4<br />

74HC02<br />

U1A<br />

1<br />

2<br />

13<br />

3<br />

4<br />

5<br />

9<br />

10<br />

11<br />

3<br />

4<br />

5<br />

U1B<br />

U1C<br />

U2B<br />

12<br />

74HC10<br />

6<br />

74HC10<br />

8<br />

74HC10<br />

6<br />

74HC10<br />

1<br />

2<br />

13<br />

9<br />

10<br />

11<br />

U2A<br />

U2C<br />

12<br />

74HC10<br />

8<br />

74HC10<br />

Omregning til NAND og NOR-gates:<br />

StepmotorA* = (F'⋅T⋅ B) + (F⋅T'⋅ B') = ((F'⋅T⋅B)' ⋅(F⋅T'⋅ B')')'<br />

StepmotorB* = (F'⋅T⋅ A ') + (F⋅T'⋅ A) = ((F'⋅T⋅A')' ⋅(F⋅T'⋅ A)')'<br />

+5V<br />

+5V<br />

CLK<br />

2<br />

D<br />

PRE 4<br />

3<br />

CLK Q 6<br />

12<br />

+5V<br />

CLR<br />

1<br />

D<br />

+5V<br />

+5V<br />

PRE 10<br />

U4A<br />

Q 5<br />

74HC74<br />

11<br />

CLK Q 8<br />

+5V<br />

CLR<br />

13<br />

U4B<br />

Q 9<br />

74HC74<br />

StepmotorA<br />

StepmotorB<br />

69


70<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4.2.<strong>1.</strong>5 STATUSPANELHW<br />

Statuspanelet på softdrinkmaskinen viser status af maskinens drift. Det sker ved hjælp af en<br />

lysdiode på udgangen fra computeren med softwaren der styrer maskinen. For at udgangen ikke<br />

bliver overbelastet, bruges en transistor for at forstærke strømmen.<br />

Defination af konstanter ved signal høj:<br />

Opstilling:<br />

+5V<br />

Beregning af strømmen IB:<br />

IE<br />

IB :=<br />

β<br />

Beregning af modstanden RB og spændingen VCE:<br />

Given<br />

VLED := 2<br />

IE 20 10 3 −<br />

:= ⋅<br />

β := 150<br />

VBE := 0.6<br />

RE := 100<br />

RB<br />

var := Find( RB, VCE<br />

)<br />

RB := var → 3000.<br />

0<br />

VCE := var → <strong>1.</strong><br />

1<br />

IB<br />

+5V<br />

RE<br />

RB⋅IB + VBE + RE⋅( IE)<br />

+ VLED = 5<br />

VCE + RE⋅( IE)<br />

+ VLED = 5<br />

IE<br />

D1<br />

0


4.2.<strong>1.</strong>6 TEMPERATURMAALINGSHW<br />

+15V<br />

-15V<br />

AGND<br />

FoelerAnode<br />

FoelerKatode<br />

C11<br />

10u<br />

+15V<br />

BZX79 10V<br />

D4<br />

R10<br />

-15V<br />

C12<br />

10u<br />

C1<br />

100n<br />

C2<br />

100n<br />

AGND<br />

AGND<br />

+15V<br />

R1 R2<br />

R9<br />

R3<br />

AGND<br />

R4<br />

3<br />

2<br />

R5<br />

+15V<br />

7<br />

1<br />

+<br />

-<br />

4<br />

5<br />

-15V<br />

6<br />

U6<br />

LM741<br />

R8<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

1<br />

20<br />

5<br />

ToleranceModstand ToleranceDiodeHældning ToleranceDiodeSpændingen <br />

100<br />

100<br />

100<br />

Målinger for temperatur med dioden 1N4148 ved 1 mA.<br />

<br />

0<br />

<br />

10<br />

TempData DVdata <br />

20<br />

<br />

30<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

0.648<br />

0.629<br />

0.608<br />

0.589<br />

Ud fra dette kan vi beregne hældningen og finde spændingen f.eks. ved 0 grader.<br />

Hældning <br />

DVdata DVdata<br />

1 0<br />

10<br />

Hældning <strong>1.</strong>967 10 3 <br />

<br />

<br />

<br />

<br />

<br />

<br />

DVdata DVdata<br />

2 1<br />

10<br />

3<br />

<br />

DVdata DVdata<br />

3 2<br />

10<br />

Temp<br />

71


72<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Konstanter defineres:<br />

følerTemperaturMin 0 grader Celcius<br />

analogIndgangSpændingMin 9<br />

V<br />

følerTemperaturMax 30 grader Celcius<br />

analogIndgangSpændingMax 9 V<br />

følerStrømmen 1 10 3 <br />

A<br />

Vzener 10 V<br />

Rmin( r)<br />

r rToleranceModstand Rmax( r)<br />

r rToleranceModstand DHmin( x)<br />

x xToleranceDiodeHældning DHmax( x)<br />

x xToleranceDiodeHældning DSpændingMin( x)<br />

x xToleranceDiodeSpændingen DSpændingMax( x)<br />

x xToleranceDiodeSpændingen Formel for temperaturføleren:<br />

Ideel<br />

a Hældning<br />

vt () at b<br />

DVdata 0<br />

b v TempData<br />

0<br />

vt () at b<br />

v30 ( ) 0.589<br />

Med maximal hældning<br />

aMax DHmax( Hældning)<br />

vMax( t)<br />

aMaxt bMax<br />

Vi lavede en test for at se hvilken spænding der var<br />

over vores følerdiode ved en given temperatur. Ved 0<br />

grader celsius var der 0,648V over dioden.<br />

= solve b .64800000000000000000<br />

DVdata 0<br />

bMax vMax TempData<br />

0<br />

vMax( t)<br />

aMaxt bMax<br />

= solve bMax .64800000000000000000<br />

vMax( 30)<br />

0.577<br />

Med maximal hældning<br />

aMin DHmin( Hældning)<br />

vMin( t)<br />

aMint bMin<br />

DVdata 0<br />

bMin vMin TempData<br />

0<br />

vMin( t)<br />

aMint bMin<br />

vMin( 30)<br />

0.601<br />

= solve bMin .64800000000000000000


Funktion for temperaturføleren og indstillingsmuligheder:<br />

Spænding/Volt<br />

Denne hardware har til formål at konverter mV signalet fra følerdioden<br />

til display signal og analog indgang signal(Temp).<br />

vMax() t<br />

vMin() t<br />

DSpændingMin( vMax() t )<br />

DSpændingMax( vMin() t )<br />

DVdata<br />

0.7<br />

0.67<br />

0.63<br />

0.6<br />

0.57<br />

0.53<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

0.5<br />

0 6 12 18 24 30<br />

tt t<br />

t<br />

TempData<br />

Temperatur/celcius<br />

Signal fra følerdiode<br />

For at gøre det lettere at regne på operationsforstærkeren, laver vi dioden og dens<br />

modstand om til et thevenin ækvivalent.<br />

+10V +10V<br />

R1<br />

AGND<br />

D<br />

D1N4148<br />

R2<br />

R9<br />

R3<br />

AGND<br />

R4<br />

Derved vil vi få et simplificeret diagram der er meget lettere at regne på.<br />

Det skal dog først siges, at vi antager at dioden er åben og arbejder i et liniært område.<br />

3<br />

2<br />

R5<br />

+15V<br />

7<br />

1<br />

+<br />

-<br />

4<br />

5<br />

-15V<br />

6<br />

U6<br />

LM741<br />

R8<br />

73


74<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Vth<br />

AGND<br />

Udregningen af Rth:<br />

10Vdc<br />

V1<br />

R1<br />

Rth<br />

D1<br />

+10V<br />

R2<br />

R9<br />

R3<br />

AGND<br />

R4<br />

Til OPAMP f ra f øler<br />

GND<br />

Ækvivalent diagram for en diode:<br />

Rd<br />

+ -<br />

3<br />

2<br />

R5<br />

+15V<br />

7<br />

1<br />

+<br />

-<br />

4<br />

5<br />

-15V<br />

6<br />

U6<br />

LM741<br />

For at finde Rth, kortsluttes alle spændingskilder og alle strømkilder afbrydes.<br />

R1<br />

Rd<br />

Til OPAMP fra føler<br />

GND<br />

Derefter beregnes modstanden mellem de to terminaler.<br />

Vi antager at: Rd 10 ohm<br />

R1 9.31 10 3<br />

<br />

ohm<br />

1<br />

Rth Rd 1 <br />

R1 1 <br />

<br />

<br />

<br />

9.9892703862660944205<br />

Dermed kan vi se at Rth og Rd næsten er lige store.<br />

R8


Vth<br />

AGND<br />

R4 <strong>1.</strong>5 10 3<br />

<br />

Rth<br />

+10V<br />

R2<br />

R9<br />

R3<br />

AGND<br />

R4<br />

3<br />

2<br />

R5<br />

+15V<br />

7<br />

1<br />

+<br />

-<br />

4<br />

5<br />

-15V<br />

6<br />

U6<br />

LM741<br />

R8<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Hvis vi igen kigger på vores diagram, og tilsætter oplysningen om R4's værdi og<br />

eventuelt ser forholdet mellem Rth og R4:<br />

Rth<br />

R4 100 0.666 %<br />

Dvs. at Rth for øger R4's værdi med mindre en 1%. Hertil skal der siges at vi bruger<br />

modstande med en tolerance på +/- 1%.<br />

Derved vil vi antage at Rth ikke har det store at sige, og derfor har vi ikke taget den<br />

med i udregningerne, en eventuelt kompensation vil ske på OPAMP's + ben via R9<br />

(Referancespændingen).<br />

Udregning af Vth<br />

10Vdc<br />

V1<br />

R1<br />

D1<br />

Til OPAMP f ra f øler<br />

GND<br />

Vth er den samme spænding, som spændingsfaldet er over dioden, når<br />

terminalerne er ubelastet. Dvs. at der ikke er noget strøm der forlader det viste<br />

diagram. Eks. ved 0 grader celsius er Vth 648 mV.<br />

Vth<br />

Rth<br />

Til OPAMP fra føler<br />

GND<br />

75


76<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Modstandene på indgangstrinnet udregnes<br />

Uden tolerancer<br />

R1 <br />

v0 ( )<br />

Spænding på udgang af operationsforstærkeren: OpampMax analogIndgangSpændingMax<br />

v30 ( )<br />

Vzener v( 15)<br />

følerStrømmen<br />

Når temperaturen er 30 grader censius:<br />

R4<br />

Spænding over følerdioden:<br />

R4<br />

R1 R2<br />

Spændingsfaldet over dioden, midt i vores måleområde (0-30 grader):<br />

Reference Spænding til opamp U1A ben 1 udregnes:<br />

Når temperaturen er 0 grader celsius:<br />

Spænding over følerdioden:<br />

Spænding på udgang af operationsforstærkeren: OpampMin analogIndgangSpændingMin<br />

vRef<br />

vRef<br />

R9<br />

R3<br />

AGND<br />

R4<br />

R1 9.381 10 3<br />

<br />

R5 R8<br />

R5 R8<br />

v( følerTemperaturMin)<br />

0.648<br />

OpampMin 9<br />

OpampMin<br />

v( følerTemperaturMax)<br />

0.589<br />

OpampMax 9<br />

OpampMax<br />

v15 ( ) 0.619<br />

Referencespændingen er den samme uanset hvilken temperatur følerdioden måler:<br />

3<br />

2<br />

R5<br />

+15V<br />

7<br />

1<br />

+<br />

-<br />

4<br />

5<br />

-15V<br />

6<br />

U6<br />

LM741<br />

R8


Referece kredsløb til ben 2 på U1A<br />

+15V<br />

AGND<br />

R2<br />

R9<br />

R3<br />

Med tolerancer<br />

var Find( vRef R5sR8<br />

)<br />

vRef var .61647931779168281743<br />

0<br />

R5sR8 var 457627.11864406779665<br />

1<br />

( OpampMax OpampMin)<br />

AvU1A <br />

v( følerTemperaturMax)<br />

v( følerTemperaturMin)<br />

vRef<br />

Teoretisk:<br />

Faktisk valg:<br />

R2E96 51100<br />

R1 9.381 10 3<br />

<br />

R1E96 9.31 10 3<br />

<br />

Strømafvigelse ved brug af modstand R1E96, fundet i E96 standarden.<br />

værsteStrøm%IforholdTilTeori <br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Vi har valgt R4 til den nuværende værdi for at modstandene i kredsløbet er<br />

mellem 1 og 1000k.<br />

R4E96 1500<br />

Given<br />

v( følerTemperaturMin)<br />

vRef<br />

R4E96<br />

v( følerTemperaturMax)<br />

vRef<br />

R4E96<br />

=<br />

=<br />

vRef OpampMin<br />

R5sR8<br />

vRef OpampMax<br />

R5sR8<br />

305.08474576271186441<br />

Spændingen over ben 1 og ben 2 på en Opamp er meget tæt på 0V, derfor skal<br />

referencespændingen være den samme som spændingen fra spændingsdeleren på<br />

ben 1 på U1A i en normal stabiliseret situation.<br />

IR2<br />

Vzener vRef<br />

R2E96<br />

<strong>1.</strong>8363054172619016013 10<br />

R3sR9 <br />

vRef<br />

IR2<br />

3357.1720259416843211<br />

-4<br />

<br />

<br />

<br />

R3sR9 er en variabel, for modstand R3 i serie med potentiometeret R9. R9 kan<br />

justeres for at få den rigtige offset reference i forhold til temperaturdioden.<br />

Temperatur sensorens diode strømmen er afhængig af R<strong>1.</strong> Ved valg af denne<br />

modstand skal man da være opmærksom over denne funktion.<br />

Vzener<br />

Rmin( R1E96)<br />

følerStrømmen 100 108.49634909785285725<br />

<br />

77


78<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Den mindsttænkte forstærkning på U1A:<br />

AvU1Amin <br />

AvU1Amax <br />

R4E96 <strong>1.</strong>5 10 3<br />

<br />

Given<br />

R5 i serie med R8 største minimums grænse:<br />

Største reference spænding<br />

R4E96 <strong>1.</strong>5 10 3<br />

<br />

Given<br />

R2E96 5.11 10 4<br />

Modstandene til referencespænding med tolerencer<br />

<br />

Den største minimumsmodstand i modstandskombinationen R3 i serie med R9.<br />

vRefmin 0.592<br />

( OpampMax OpampMin)<br />

vMin( følerTemperaturMax)<br />

vMax( følerTemperaturMin)<br />

Den størsttænkte forstærkning på U1A:<br />

OpampMax OpampMin<br />

vMax( følerTemperaturMax)<br />

vMin( følerTemperaturMin)<br />

R5 i serie med R8 mindste max grænse:<br />

Mindste reference spænding<br />

vMax( følerTemperaturMin)<br />

vRef<br />

Rmax( R4E96)<br />

vMin( følerTemperaturMax)<br />

vRef<br />

Rmax( R4E96)<br />

var Find( vRef R5sR8)<br />

vRefmin DSpændingMin var <br />

0<br />

R5sR8max var 583590.13867488443770<br />

1<br />

vMin( følerTemperaturMin)<br />

vRef<br />

Rmin( R4E96)<br />

vMax( følerTemperaturMax)<br />

vRef<br />

Rmin( R4E96)<br />

var Find( vRef R5sR8)<br />

.59162861828981781107<br />

.64070987449365827744<br />

vRefmax DSpændingMax var <br />

0<br />

R5sR8min var 373804.32958550092303<br />

1<br />

=<br />

=<br />

=<br />

=<br />

vRef OpampMin<br />

Rmin( R5sR8)<br />

vRef OpampMax<br />

Rmin( R5sR8)<br />

vRef OpampMin<br />

Rmax( R5sR8)<br />

vRef OpampMax<br />

Rmax( R5sR8)<br />

38<strong>1.</strong>35593220338983051<br />

254.23728813559322034<br />

Rmax( R3sR9min)<br />

R3sR9min <br />

Vzener = vRefmin solve R3sR9min 3149.701826504953<br />

Rmax( R3sR9min)<br />

Rmin( R2E96)


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Den mindste maksimumsmodstand i modstandskombinationen R3 i serie med R9.<br />

vRefmax 0.641<br />

Rmin( R3sR9max)<br />

R3sR9max <br />

Vzener = vRefmax solve R3sR9max 3568.827745195856<br />

Rmin( R3sR9max)<br />

Rmax( R2E96)<br />

De udregnede modstande:<br />

R3max R3sR9min 3149.7018265049539634<br />

R9min R3sR9max R3sR9min 419.1259186909026943<br />

R5max R5sR8min 373804.32958550092303<br />

R8min R5sR8max R5sR8min 209785.80908938351467<br />

Når vi vælger modstanden må f.eks. R3 ikke være større end den udregnede værdi, dog ikke<br />

midre en den valgte R9 er størrer end den udregnede R9.<br />

R9 må ikke være mindre end den udregnede værdi.<br />

Det samme gælder for R5 og R8.<br />

79


80<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Modstande der bruges:<br />

R1E96 9.31 10 3<br />

<br />

R2E96 5.11 10 4<br />

<br />

R3max 3.15 10 3<br />

<br />

R4E96 <strong>1.</strong>5 10<br />

R3E96 3010<br />

3<br />

<br />

R5max 3.738 10 5<br />

<br />

R5E96 365000<br />

Pot R8min 2.098 10 5<br />

<br />

R8E3 220000<br />

Pot R9min 419.126<br />

R9E3 470<br />

Referencespænding med de valgte modstande:<br />

fakVrefMin<br />

R3E96<br />

R2E96<br />

vRefmin 0.592<br />

Vzener fakVrefMin 0.589 <br />

fakVrefMax <br />

R3E96 R9E3<br />

Vzener<br />

R2E96<br />

vRefmax 0.641<br />

fakVrefMax 0.681<br />

Forstærkning med de valgte modstande:<br />

AvU1Amin 38<strong>1.</strong>356<br />

R5E96<br />

fakAvU1Amin <br />

<br />

<br />

fakAvU1Amin 243.333<br />

R4E96<br />

<br />

<br />

AvU1Amax 254.237<br />

R5E96 R8E3<br />

fakAvU1Amax <br />

<br />

<br />

fakAvU1Amax 390<br />

R4E96<br />

Hvis 1, er værdierne OK.<br />

vRefmin fakVrefMin 1<br />

vRefmax fakVrefMax 1<br />

AvU1Amin fakAvU1Amin 1<br />

AvU1Amax fakAvU1Amax 1<br />

<br />

<br />

v0 ( ) 0.648<br />

v30 ( ) 0.589


4.2.<strong>1.</strong>7 FORSYNINGS STABILISERING TIL TEMPERATURHW<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

For at være sikker på at spændingerne til temperaturkredsløbet er stabile, sættes der en<br />

zenerdiode parallelt med belastningen. Spændingen vil så altid være den samme som<br />

zenerdiodens påtrykte værdi, hvis spændingen selvfølgelig ikke falder mere end værdien.<br />

Vss 15 v<br />

Vd Vzener 10<br />

v<br />

Rload R1E96 1 <br />

( R2E96 R3E96)<br />

1 <br />

1<br />

<br />

<br />

7943.3002207505518762<br />

<br />

<br />

Rload<br />

Vth Vss<br />

Rzener Rload<br />

RzenerRload Rth <br />

Rzener Rload<br />

Rzener<br />

Id 1 10 3 <br />

<br />

<br />

<br />

BZX79 10V<br />

D4<br />

+15V<br />

Vss =<br />

Den strøm zenerdioden arbejder med, i det tilfælde at spændingen Vss < 15V.<br />

Vth RthId Vd = 0 solve Rzener 2213.4446069080738134<br />

Den valgte formodstand til zenerdioden:<br />

R10E96 2.21 10 3<br />

<br />

R10<br />

AGND<br />

81


82<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4.2.<strong>1.</strong>8 TEMPERATURDISPLAYHW<br />

Signalbehandling af analog output fra PC-kortet.<br />

Teoretisk:<br />

PCKortMin 0 V<br />

displaySpændingMin 0<br />

PCKortMax 10V<br />

displaySpændingMax 1<br />

35000<br />

R11sR12 <br />

3<br />

Med tolerancer:<br />

R10 <strong>1.</strong>05 10<br />

Given<br />

5<br />

<br />

Rmax( R11sR12min)<br />

( PCKortMax PCKortMin)<br />

= ( displaySpændingMax displaySpændingMin)<br />

Rmin( R10)<br />

Rmax( R11sR12min)<br />

R11sR12min Find( R11sR12min<br />

)<br />

1155000<br />

R11sR12min <br />

101<br />

Given<br />

R10 105 10 3<br />

<br />

Given<br />

R11sR12<br />

( PCKortMax PCKortMin)<br />

= ( displaySpændingMax displaySpændingMin)<br />

R10 R11sR12<br />

R11sR12 Find( R11sR12 R11sR12)<br />

Rmin( R11sR12max)<br />

( PCKortMax PCKortMin)<br />

= ( displaySpændingMax displaySpændingMin)<br />

Rmax( R10)<br />

Rmin( R11sR12min)<br />

R11sR12max Find( R11sR12max<br />

)<br />

R11max R11sR12min<br />

R12min R11sR12max R11sR12min<br />

V<br />

V<br />

1155000<br />

R11max <br />

101<br />

1400000<br />

R12min <br />

3333


5 TESTDOKUMENTATION<br />

5.1 GENERELT OM INSTRUMENTER<br />

5.<strong>1.</strong>1 HM 8011<br />

Beskrivelse:<br />

Multimeter<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Præcision:<br />

Volt: 2V-200V ±(0,05% målt værdi + 0,005% slut værdi)<br />

200mV ±(0,05% målt værdi + 0,01% slut værdi)<br />

Ampere: 0,2mA - 200mA ±(0,2% målt værdi + 0,01% slut værdi)<br />

2A - 20A ±(0,8% målt værdi + 0,01% slut værdi)<br />

5.<strong>1.</strong>2 JOFRA ITC – 155A<br />

Beskrivelse:<br />

Et instrument til at kalibrer temperatur følere. Dvs. kan holde en bestemt temperatur.<br />

Præsision:<br />

± 0,25°C<br />

5.<strong>1.</strong>3 METERMAN 37XR<br />

Beskrivelse:<br />

Multimeter<br />

Præcision:<br />

Volt: ± ( 0,1 % rdg + 5 dgts)<br />

Ampere: 0,1 mA ± ( 0,5 % rdg + 10 dgts)<br />

1 mA - 400 mA ± ( 0,5 % rdg + 5 dgts)<br />

10 A ± ( 1,5 % rdg + 10 dgts)<br />

Hertz: ± ( 0,1 % rdg + 5 dgts)<br />

5.2 ENHEDSTEST<br />

5.2.1 SOFTWARE<br />

Anvendte instumenter<br />

En computer med:<br />

Windows<br />

Visual studio .NET<br />

Humosoft I/O AD512 kort.<br />

5.2.<strong>1.</strong>1 AUTOMATBRUGERINTERFACE<br />

Ansvar:<br />

Klassen er ansvarlig for at kommunikere med automatbrugeren dvs. med automatejeren, der har<br />

mulighed for at konfigurere automaten vha. operationen „editerKonfigParametre“. Klassen<br />

SoftDrinkStyring anvender AutomatBrugerInterface til at udskrive meddelelser på skærmen til<br />

brugeren vha. operationen „udskrivTekst“.<br />

Operationer:<br />

editerKonfigParametre() : void<br />

Rediger konfigurations parameterne.<br />

TESTET OK!<br />

83


84<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>2 INPUTOUTPUT<br />

Ansvar:<br />

Klassen InputOutput har til funktion at gøre det nemmere at:<br />

- Læse de digitale indgange<br />

- Skriv til udgangene<br />

Attributter:<br />

intralisering : static bool<br />

Fortæller om objektet har været brugt før<br />

outputStatus : static int<br />

Udgangenes aktuelle status.<br />

Static betyder: Fælles variable for alle objekter der bliver oprettet af denne klasse.<br />

Operationer:<br />

inputBit(int portnummer) : bool<br />

TESTET OK!<br />

outputBit(int portnummer , bool værdi) : void<br />

TESTET OK!<br />

printOutputBit(void): void<br />

TESTET OK!<br />

printInputBit(void): void<br />

TESTET OK!<br />

5.2.<strong>1.</strong>3 KONFIGURERINGSSWITCH<br />

Ansvar:<br />

Klassen varetager SW interface til den konfigureringsswitch, der implementeres på elektronikkortet.<br />

Attributter:<br />

ingen.<br />

Operationer:<br />

checkKonfiguering() : bool<br />

TESTET OK!


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>4 DOSERINGSENHED<br />

Ansvar:<br />

Beregn saft- og vandmængden der skal fyldes i koppen og omregn til antal sekunder ventilen skal<br />

være åben.<br />

Fratræk den doserede væskemængde fra væskemængden i beholderen.<br />

Reset væskemængde i beholderen til MAX (til brug ved påfyldning).<br />

Tjek om væskemængden i beholderen er over MIN.<br />

Udregner resterende væskemængde fra resttiden og ligger det til væskemængden i beholderen i<br />

tilfælde af reset under væskedosering.<br />

Operationer:<br />

checkVand(): bool<br />

Tjekker om væskestanden er over Minimum vand i konfigparametre TESTET OK!<br />

checkSaft(): bool<br />

Tjekker om væskestanden er over Minimum saft i konfigparametre TESTET OK!<br />

resetVand(): void<br />

Sætter væskemængden i beholderen til default fra konfigparametre TESTET OK!<br />

resetSaft(): void<br />

Sætter væskemængden i beholderen til default fra konfigparametre TESTET OK!<br />

beregnSaftMaengde(): void<br />

Regner hvor meget saft er tilbage TESTET OK!<br />

beregnVandMaengde(): void<br />

Regner hvor meget vand er tilbage TESTET OK!<br />

saftRetur(int): void<br />

Bruges hvis man trykker på reset knappen mens saftdosering løber. Regner hvor mange millisekunder<br />

blev ikke brugt og bruges ved at regne hvor meget saft er tilbage.<br />

vandRetur(int): void<br />

Bruges hvis man trykker på reset knappen mens vanddosering løber. Regner hvor mange millisekunder<br />

blev ikke brugt og bruges ved at regne hvor meget vand er tilbage.<br />

SaftMaengdeMillisekunder: int<br />

En formel hvor det er regnet hvor lang tid ventilen skal være åben ved dosering<br />

VandMaengdeMillisekunder: int<br />

En formel hvor det er regnet hvor lang tid ventilen skal være åben ved dosering<br />

85


86<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>5 KONFIGURERINGSPARAMETRE<br />

Ansvar:<br />

Klassen har ansvaret for <strong>SDS</strong> systemets konfigureringsparametre. Hver parameter har en<br />

deaultværdi, der kan ændres af automatejeren under konfigureringen. Klassen har operationer til hhv.<br />

at læse og skrive de enkelte attributter.<br />

Operationer:<br />

skrivDoseringsForhold(int): void<br />

Skriver ny værdi for doserings forhold via KonfigureringsParametre klassen i<br />

KonfigureringsParametre.h – OK 4.1<strong>1.</strong>04 RBG.<br />

laesDoseringsForhold(): int<br />

Returner doseringsforhold hvis det skal læses af andre klasser via KonfigureringsParametre klassen i<br />

KonfigureringsParametre.h – OK 4.1<strong>1.</strong>04 RBG<br />

skrivMaxTemp(int): void<br />

Skriver ny værdi for maximum temperature via KonfigureringsParametre klassen i<br />

KonfigureringsParametre.h – OK 4.1<strong>1.</strong>04 RBG.<br />

laesMaxTemp(): int<br />

Returner værdien af maximum temperatur hvis det skal læses af andre klasser via<br />

KonfigureringsParametre klassen i KonfigureringsParametre.h - OK 4.1<strong>1.</strong>04 RBG<br />

skrivMaxSaft(int): void<br />

Skriver ny værdi for maximum saft via KonfigureringsParametre klassen i KonfigureringsParametre.h<br />

– OK 4.1<strong>1.</strong>04 RBG.<br />

laesMaxSaft(): int<br />

Returner værdien af maximum saft hvis det skal læses af andre klasser via KonfigureringsParametre<br />

klassen i KonfigureringsParametre.h - OK 4.1<strong>1.</strong>04 RBG<br />

skrivMinSaft(int): void<br />

Skriver ny værdi for minimum saft via KonfigureringsParametre klassen i KonfigureringsParametre.h<br />

– OK 4.1<strong>1.</strong>04 RBG.<br />

laesMinSaft(): int<br />

Returner værdien af minmium saft hvis det skal læses af andre klasser via KonfigureringsParametre<br />

klassen i KonfigureringsParametre.h - OK 4.1<strong>1.</strong>04 RBG<br />

skrivMaxVand(int): void<br />

Skriver ny værdi for maximum vand via KonfigureringsParametre klassen i<br />

KonfigureringsParametre.h – OK 4.1<strong>1.</strong>04 RBG.<br />

laesMaxVand(): int<br />

Returner værdien af maximum vand hvis det skal læses af andre klasser via KonfigureringsParametre<br />

klassen i KonfigureringsParametre.h - OK 4.1<strong>1.</strong>04 RBG<br />

skrivMinVand(int): void<br />

Skriver ny værdi for minimum vand via KonfigureringsParametre klassen i<br />

KonfigureringsParametre.h – OK 4.1<strong>1.</strong>04 RBG.<br />

laesMinVand(): int<br />

Returner værdie af minimum vand hvis det skal læses af andre klasser via KonfigureringsParametre<br />

klassen i KonfigureringsParametre.h - OK 4.1<strong>1.</strong>04 RBG


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>6 KOPTRANSPORTENHED<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der styrer hhv. stepmotor og aflæser positionssensorer.<br />

Attributter:<br />

fyldtKop : bool<br />

CHECK OBJEKTER<br />

Operationer:<br />

startMotorFrem() : void<br />

Kører motor frem TESTET OK!<br />

startMotorTilbage() : void<br />

Kører motor tilbage TESTET OK!<br />

stopMotor() : void<br />

Stopper motor TESTET OK!<br />

checkForKopIHolder() : bool<br />

Checker om det er en kop i holderen TESTET OK!<br />

checkForStartPosition() : bool<br />

Checker for koppen er i startposition TESTET OK!<br />

checkForDoseringsPosition() : bool<br />

Checker for koppen er i doseringsposition TESTET OK!<br />

checkForFyldtKopholder() : bool<br />

Checker for koppen er fuld TESTET OK!<br />

kopFyldt (bool) : void<br />

Fortæller objektet at der er noget i koppen TESTET OK!<br />

KopTransportEnhed() :<br />

Konstructor<br />

5.2.<strong>1.</strong>7 STATUSPANEL<br />

Ansvar:<br />

Klassen er SW interface til doseringsmekanikkens status lamper. Hver lampe har en eentydig id (en<br />

enumeration type), der anvendes til hhv. at styre og slukke en given lampe. Lamperne Vand og Saft<br />

er specielle idet de samtidig også styrer hhv. vand og saftventilen.<br />

LampeId = (SAFT, VAND, FREM, TILBAGE,VAESKE_VARM, ALLE) Bemærk at<br />

lamperne: (POS_START, POS_DOS) bliver styret via hardware’en<br />

Attributter:<br />

ingen.<br />

Operationer:<br />

taendLampe(string) : void<br />

Tænd lampe TESTED OK!<br />

slukLampe(string) : void<br />

Sluk lampe TESTED OK!<br />

87


88<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>8 TEMPERATURDISPLAY<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der anvendes til at vise vandets temperatur på<br />

temperaturdisplayet.<br />

Attributter:<br />

ingen.<br />

Operationer:<br />

udlaesTemperatur(int) : void<br />

Viser vandets temperatur på display. TESTET OK!<br />

5.2.<strong>1.</strong>9 TEMPERATUROVERVAAGER<br />

Ansvar:<br />

Klassen har ansvaret for at overvåge og vise vandets temperatur.<br />

Attributter:<br />

aktuelTemperatur : int<br />

Måler den aktuelle temperatur.<br />

maxTemp : int<br />

Maximal temperatur.<br />

Operationer:<br />

checkForMaxTemperatur() : bool<br />

Checker om den aktuelle temperatur er mindre en MAX_TEMP. TESTET OK!<br />

overvaagerOgOpdatere(void) : bool<br />

Overvåger temperaturen og opdaterer display. TESTET<br />

5.2.<strong>1.</strong>10 TEMPERATURSENSOR<br />

Ansvar:<br />

Klassen er SW interface til den elektronik, der indlæser en temperaturværdi fra en temperaturføler i<br />

vandbeholderen.<br />

Operationer:<br />

laesTemperatur() : double<br />

Indlæser temperaturen i vandbeholderen. TESTET OK!<br />

opdaterTemp() : void<br />

Checker hele tiden for temperaturen. TESTET OK!<br />

fejlcheck() : bool<br />

Validerer om signal fra føleren er ok.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.<strong>1.</strong>11 TIMER<br />

Ansvar:<br />

Klassen implementerer en software timer. Timeren kan startes og stoppes. Timeren tæller ned til nul.<br />

checkForTimeout chekker status for timeren.<br />

Attributter:<br />

startMSec : int, startSec, timeoutTid, tidGaaet<br />

_timeb startTid, tidNu:<br />

Operationer:<br />

checkForTimeout( void ) : bool<br />

Checker om tiden er over timeoutTid.<br />

start(int tid : int) : void<br />

5.2.<strong>1.</strong>12 KONTROLPANEL<br />

Ansvar:<br />

Klassen er SW interface til doseringsmekanikkens kontroltaster START og RESET. Klassen indeholder<br />

en operation til at teste om der er aktiveret en tast og en operation til at aflæse den konkrete<br />

tast.<br />

Attributter:<br />

ingen.<br />

Operationer:<br />

checkForTast(string) : bool<br />

Checker om kontroltasterne START og RESET aktiveres. TESTET OK!<br />

Starter tiden.<br />

stop(void) : int<br />

Stopper tiden.<br />

Timer (void) :<br />

Konstructor<br />

89


90<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.2 HARDWARE<br />

5.2.2.1 CLOCK GENERATOR <strong>1.</strong> TEST<br />

Efter at have prøvet at få Orcad til at simulere puls toget fra vores clock generator, som ikke viste en<br />

„duty-cycle“ på 50%, prøvede vi at lave en kredsløb på et fumle bræt. Her viste den en „duty-cycle“ på<br />

50%, som forventet.<br />

Anvendte instrumenter:<br />

Oscilloskop: Agilent - 54621A, med diskettedrev.<br />

Spændings forsyning: Hamrack - HM8040.<br />

Multimeter: Meterman-multimeter.<br />

Opstilling:<br />

Hvor oscilloskop og multimeteret er tilsluttet „clock“ og „gnd“.<br />

Forsyningen er 5 volt via spændingsforsyningen.<br />

Resultat:<br />

8<br />

9<br />

U3C<br />

10<br />

74HC02<br />

R23<br />

787k<br />

x-aksen, 10ms/div, y-aksen, 5v/div<br />

R21<br />

46.4k<br />

R24 100k<br />

11<br />

U3D<br />

12 13<br />

C6<br />

100n<br />

74HC02<br />

Via potmeteret var frekvensen variabel mellem 56 og 140 Hz<br />

Kravet i systemdesignet for SoftDrinkautomatStyringen var at stepmotoren på hver kanal skulle have<br />

en frekvens på 25 Hz ±10Hz det give en clock frekvens på 100 Hz ±40 Hz.<br />

Frekvensen svingede lidt, i størrelsesorden ±2 Hz.<br />

clock<br />

gnd<br />

DGND


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.2.2 CLOCK GENERATOR 2. TEST<br />

Da kredsløbet blev lavet på vores print, var max frekvensen kun 135 Hz. Derfor regnede vi clock<br />

generatorens modstand om. Denne gang brugte vi en kondensator tolerance på 20 % i stedet for 10 %.<br />

Resultat:<br />

Anvendte instrumenter:<br />

Oscilloskop: Agilent - 54621A, med diskettedrev.<br />

Spændings forsyning: Hamrack - HM8040.<br />

Multimeter: Meterman-multimeter.<br />

Opstilling:<br />

VCC<br />

VCC<br />

DGND<br />

10µF<br />

C7<br />

DGND<br />

100nF<br />

8<br />

9<br />

U3C<br />

10<br />

74HC02<br />

R23<br />

221k<br />

R21<br />

42.2k<br />

R24 220k<br />

Hvor oscilloskop og multimeteret er tilsluttet „clock“ og „gnd“.<br />

Forsyningen er 5 volt via spændingsforsyningen.<br />

x-aksen, 10ms/div, y-aksen, 5v/div<br />

11<br />

U3D<br />

12 13<br />

C6<br />

100n<br />

74HC02<br />

Via potmeteret var frekvensen variabel mellem 42 og 148 Hz<br />

Kravet i systemdesignet for SoftDrinkautomatStyringen var at step motoren på hver kanal skulle<br />

have en frekvens på 25 Hz ±10Hz det give en clock frekvens på 100 Hz ±40 Hz.<br />

Denne gang blev testen lavet på et print med et stel plan, og en kondensator på 10 µF på forsyningen<br />

ved stikket og 10 nF over forsyningen til NOR kredsen. Se eventuelt bilaget om printet.<br />

Alt det kunne være budet på hvorfor frekvenserne er mere stabile i denne test end i den første.<br />

clock<br />

gnd<br />

DGND<br />

91


92<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.2.3 MOTORSTYRING<br />

Anvendte instrumenter:<br />

Oscilloskop: Agilent - 54621A, med diskettedrev.<br />

Spændings forsyning: Hamrack - HM8040.<br />

Multimeter: Meterman-multimeter.<br />

Clock generator: Egen fabrikat – udviklet til dette projekt, se test ovenfor.<br />

Opstilling:<br />

Hvor af at oscilloskop er tilsluttet „StepmotorA“, „StepmoterB“ og „gnd“.<br />

Multimeteret er tilsluttet „CLK“ benet på vores d-flipflop (74HC74) og „gnd“.<br />

Forsyningen er 5 volt fra spændingsforsyningen.<br />

Resultat:<br />

Frem:<br />

Frem<br />

U3A<br />

U1A<br />

Tilbage<br />

2<br />

1<br />

1<br />

2<br />

12<br />

3<br />

13<br />

GND C5<br />

74HC02<br />

74HC10<br />

VCC<br />

VCC DGND<br />

C3<br />

+5V<br />

DGND<br />

100n<br />

VCC<br />

DGND<br />

100n<br />

e :<br />

U3C<br />

8<br />

9<br />

U3B<br />

5<br />

6<br />

10<br />

74HC02<br />

R23<br />

787k<br />

4<br />

74HC02<br />

14<br />

7<br />

U1B<br />

3<br />

4<br />

5<br />

14<br />

6<br />

74HC10<br />

U2A<br />

1<br />

2<br />

12<br />

13<br />

74HC10<br />

C4<br />

VCC<br />

DGND<br />

100n<br />

U2B<br />

3<br />

4<br />

6<br />

5<br />

7<br />

U3D<br />

11<br />

13<br />

12<br />

R21<br />

74HC02<br />

46.4k<br />

R24 100k<br />

C6<br />

100n<br />

74HC10<br />

x-aksen, 10ms/div, y-aksen, 5v/div<br />

Tilbage:<br />

x-aksen, 10ms/div, y-aksen, 5v/div<br />

x-aksen, 10ms/div, y-aksen, 5v/div<br />

U1C<br />

9<br />

10<br />

11<br />

U2C<br />

9<br />

10<br />

11<br />

8<br />

74HC10<br />

8<br />

74HC10<br />

C7<br />

VCC<br />

DGND<br />

100n<br />

2<br />

D Q<br />

3<br />

CLK<br />

5<br />

Q 6<br />

VCC<br />

U4A<br />

VCC<br />

PRE 4<br />

CLR<br />

1<br />

VCC<br />

PRE 10<br />

74HC74<br />

12<br />

D Q<br />

11<br />

CLK<br />

9<br />

Q 8<br />

VCC<br />

CLR<br />

13<br />

U4B<br />

74HC74<br />

StepmotorA<br />

StepmotorB


5.2.2.4 TEMPERATUR HARDWARE<br />

Anvendte instumenter:<br />

Spændings forsyning: Hamrack - HM8040.<br />

Multimeter: Meterman 37XR.<br />

Hamag rack – HM8011<br />

Andet: Jofra ITC – 155A +/- 0,25°C<br />

Opstilling:<br />

Resultat:<br />

V 1 =10,00 V<br />

Temperatur i ºC 0 15 30<br />

-9,009 0,064 9,287<br />

gain -<br />

0,08<br />

offset -<br />

9,222<br />

-9,208<br />

gain -<br />

-9,001<br />

???<br />

-10,055<br />

gain -<br />

0,003<br />

-9,388 8,772<br />

offset +<br />

-9,015 0,029 8,901<br />

???<br />

9,094<br />

gain -<br />

-8,965<br />

offset -<br />

9,051<br />

Slut spændinger på V2 -9,005 -0,013 8,992<br />

Svare til i ºC -0,00833 14,97833 29,98667<br />

Kalibering<br />

Afvigelse i ºC 0,008333 0,021667 0,013333<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Konklusion:<br />

Kravet er at displayet, som styres fra computeren, ikke afviger mere end ±0,5 ºC. Der ved mener vi<br />

at printet levere præcist nok.<br />

93


94<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.2.2.5 STATUSPANEL<br />

Anvendte instumenter:<br />

Spændings forsyning: Hamrack - HM8040.<br />

Multimeter: Meterman 37XR.<br />

Hamag rack – HM8011<br />

Opstilling:<br />

+5V<br />

Resultat:<br />

A=18,6 mA<br />

V= 2 V<br />

1<br />

R41<br />

3k<br />

BC547B<br />

Konklusion:<br />

Resultatet var som forventet, lysdioderne lyste.<br />

2<br />

+5V<br />

R31<br />

100<br />

A<br />

V<br />

D1


5.3 INTEGRATIONSTESTS<br />

5.3.1 INTEGRATIONSTEST NR. 1 · PRINT<br />

Dato: 11/11-2004<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Formålet med testen var at kontrollere at alt virkede som det skulle. Sikre at printbaner var rigtigt forbundet<br />

og komponenter placeret rigtigt, samt teste funktionerne.<br />

Anvendte instrumenter:<br />

IO kort: Humusoft AD512<br />

Oscilloskop: Hamag rack – HM203.<br />

Spændings forsyning: Hamag rack - HM8040.<br />

Multimeter: Meterman 37XR.<br />

Hamag rack – HM8011<br />

Andet: Softdrik simulator nr. 8. og 2.<br />

Jofra ITC – 155A +/- 0,25°C<br />

Computer<br />

med<br />

AD512<br />

IOkort<br />

AD512<br />

Print<br />

Digital<br />

Analog<br />

Simulerings<br />

Boks/Test<br />

Boks<br />

Vi begyndte med at undersøge, hvordan stikkene skulle forbindes. Svaret blev skrevet på printet, men<br />

alligevel kom vi til at forbinde stikket til IO kortet omvendt. Det resulterede i at computeren ikke ville<br />

starte op. Vi prøvede at starte op igen hvor vi vendte stikket rigtigt og denne gang kunne vi starte computeren,<br />

IO kortet var der ingen kontakt med. Vi blev enige om at vente med at prøve igen på en anden<br />

computeren, indtil hver del af kortet var gennemtestet.<br />

Print<br />

Digital<br />

Analog<br />

Simulerings<br />

Boks/Test<br />

Boks<br />

Lysdioder:<br />

I denne test benyttede vi softdrink simulatorboksen og en spændingsforsyning, så vi dermed kunne<br />

simulere det IOkort som lige ovenfor blev defekt. Den første simulerings boks virkede ikke efter<br />

hensigten. Boksen opførte sig ikke som den skulle, idet der kun var nogle af lysdioderne der virkede.<br />

Efter at have kontrolleret vores signaltestboksen konkluderede vi at den var den der var defekt. Den<br />

blev byttet og derefter virkede alle lysdioder.<br />

Den første del vi afprøvede, var lysdioderne og dens transistordriver. De virkede upåklageligt, men<br />

lyste ikke så kraftigt som forventet. For at verificere at det ikke var en fejl, satte vi 5V med en<br />

strømbegrænsning på 20mA direkte fra strømforsyningen til lysdioderne via stikket uden på testboksen.<br />

Lyset styrke var stadig uændret og konklusionen blev, at det heller ikke var vores skyld.<br />

95


96<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

MotorStyring:<br />

Derefter testede vi motorstyringen der skabte en del problemer. Vi målte på clocken som var meget<br />

ustabil. Grunden til det, var at vi havde monteret en forkert kreds. Det var en 74HC02 vi havde<br />

monteret på en 74HC10s plads. Det havde medført at clocken ikke opførte sig normalt. Desværre<br />

have vi stadig problemer med pulstoget fra styringen til motoren. Efter at have målt alle forbindelser<br />

igennem, opdagede vi at vi manglede at lodde 2 forbindelser på oversiden af printet til en af NOR<br />

kredsene. De blev loddet igen og vi nu kunne måle det rigtige pulstog. Vi prøvede at stille på frekvensen<br />

vha. potmeter R24, men kunne ikke nå op på maks. frekvens. Grunden til dette var at en<br />

printbane der forbandt to loddeøer på et potmeteret var forkert. Det blev rettet midlertidigt ved at<br />

ridse banen over. Motorstyringen kørte nu som den skulle bortset fra at den højst kunne gå til 135<br />

Hz på clocken og kravet var 140 Hz. Vi havde ellers testet det til over 140 Hz tidligere med de<br />

samme komponent værdier.<br />

Knapperne:<br />

Testen var nu kommet til knapperne, START og RESET. Da vi havde lavet diagrammet, havde vi<br />

taget som givet, at signalet fra dem var +5V. Derfor var de lavet med en pull-down modstand. Efter<br />

at have konstateret at det var GND de leverede, kunne vi konstatere at det også stod i Input-Output<br />

listen. Her efter blev pull-down modstandene ændret til pull up og kontakt sættet på knapperne blev<br />

ændret fra NO til NC. Desuden fandt vi ud af at testboksens RESET knap var monteret forkert i<br />

forhold til <strong>SDS</strong> styringen. Den var monteret som NC hvor den skulle have virket som NO.<br />

Endelig testede vi om temperaturstyringen virkede som den skulle. Det gjorde den ikke. Det var<br />

åbenlyst da vi havde monteret de forkerte modstande. Vi havde brugt et gammelt diagram hvor<br />

værdierne på modstandene ikke svarede til dem vi havde beregnet i vores MathCad dokument. Det<br />

drejede sig om de fire modstande der bestemmer offset og gain i forstærkerkredsløbet.<br />

Kable:<br />

Dagen efter opdagede vi, at det var nogle forkerte pin numre, vi have brugt på vores print til<br />

IOkortet (AD512). Under udarbejdelse af printet, hvad vi ikke været opmærksom på at det kabel vi<br />

brugte havde to stik. Der ikke brugte den samme nummererings standard, derved bliver pin 2 til pin<br />

20, pin 4 til pin 21 osv.<br />

Temperatur hardwaren:<br />

Det så ud til at virke, det var dog svært at afgøre, da at vi ikke havde to forskellige kendte temperaturer.<br />

At der også var en løs forbindelse i føleren blev det ikke nemmere af.<br />

Der bliv efterfølgende lavet en ny føler, men det virkede stadig ikke optimalt.<br />

Opsamling af fejl:<br />

· Stik til computer sat forkert i.<br />

· 2 ben var ikke loddet<br />

· 4 modstande havde forkert værdi<br />

· 1 kreds var forkert<br />

· Potmeter R24 var ikke forbundet rigtigt.<br />

· Start og reset trykknapperne var med pull-down modstande, men skulle have været pull op<br />

modstande og forbundet med +5V.<br />

· Testboks virkede ikke<br />

· Testboks nr. 2 virkede, men NO og NC var byttet på Reset (ben 7 og 8).<br />

· Kabel forbindelser til IOkortet (AD512) var forkert.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3.2 INTEGRATIONSTEST NR. 2 · SOFTWARE<br />

Formålet var at undersøge om de forskellige dele af softwaren kunne arbejde sammen.<br />

Anvendte instrumenter:<br />

IO kort: Humusoft AD512<br />

Andet: Computer med windows<br />

Testboks til Humusoft AD512<br />

Programering værktøj: Ms Visual Studio .NET<br />

Opstilling:<br />

Computer<br />

med<br />

AD512<br />

IOkort<br />

AD512<br />

AD512<br />

TestBox<br />

Kompilering:<br />

Der var en del små fejl,men de blev hurtigt lavet.<br />

Fejlene bestod mest af taste og stavefejl.<br />

Test af programmet:<br />

Hoved programmet kørte fint, dog virkede temperatur klassen ikke rigtig.<br />

Skaleringen af temperaturen var ikke rigtig.<br />

Konklusion:<br />

Det gik bedre end forventet, softwaren er snart ved målet!<br />

97


98<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3.3 INTEGRATIONSTEST NR. 3<br />

Dato: 11/11-2004<br />

Formålet med testen var at kontrollere at alt virkede som det skulle. Sikre at printbaner var rigtigt forbundet<br />

og komponenter placeret rigtigt, samt teste funktionerne.<br />

Anvendte instrumenter:<br />

IO kort: Humusoft AD512<br />

Oscilloskop: Hamag rack – HM203.<br />

Spændings forsyning: Hamag rack - HM8040.<br />

Multimeter: Meterman 37XR.<br />

Hamag rack – HM8011<br />

Andet: Softdrik simulator nr. 8. og 2.<br />

Jofra ITC – 155A<br />

Computer med windows<br />

Programering værktøj: Ms Visual Studio .NET<br />

Opstilling:<br />

Denne gang begyndte vi med at kontrol måle alle stikforbindelserne. Samt at dobbelt kontrollere<br />

komponenterne.<br />

Ændringer:<br />

· Stikket til PC kortet (AD512) var blevet ændret.<br />

· Pull-down modstandene var blevet til pull up, som beskrevet i den første integrationstest.<br />

· Modstandene var blevet optimeret til transistorerne som står for at levere strøm til lysdioderne.<br />

Grunden var at vi denne gang have haft undervisning om netop transistor.<br />

· Modstanden til clock generatoren var blevet justeret lidt, så vi kunne justere frekevensen som<br />

beskrevet i krav specifikationen.(60-140 Hz)<br />

· Modstanden til temperatur styringen var blevet ændret til et andet udgangsområde. Før brugte vi<br />

0-10 Volt, men for at få maksimal spændings opløsning, er vi gået over til at bruge -10 til 10 Volt<br />

· Software skalering af temperaturen var blevet lavet<br />

Lysdioderne:<br />

De virkede perfekt.<br />

Motorstyring:<br />

Virkede også som forventet.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Knapperne:<br />

Kontrol switchen ville ikke give et lavt signal. Det viste sig at en 10k&! pull-down modstand ikke<br />

kunne presse spændingen ned til 0V. Dette blev ændret med en 200&! modstand som blev loddet<br />

parallelt over den eksisterende 10 k&!. Valget af denne modstand blev bestemt af at vi tilfældigvis<br />

havde med os ned i lokale 109. En fra gruppen have den i sit penal hus. Derefter virkede kontrol<br />

switchen.<br />

Modstanden vil blive ændret, hvis der bliver tid til overs, men da det bare er en pull-down modstand<br />

vil det ikke have det store at sige.<br />

Start og Reset virkede også.<br />

Temperatur hardwaren:<br />

Temperatur hardwaren virkede desværre ikke helt som forventet. Det er lige som om vores føler<br />

ikke er lineær, men når vi simulere det i Pspice, lader det til at virke.<br />

Vi fandt dette ud af senere på dagen. Det var på grund af at vores indgangs impedans på forstærkere<br />

var blevet for lille, pga. den store forstærkning.<br />

Dette løste vi med at påmontere en spændingsfølger, se enhedstest for temperatur hardwaren.<br />

Derefter virkede denne del af hardwaren, vi blev dog nød til at udskifte en modstand for at flytte<br />

reference spændingen ned til den påkrævede spænding.<br />

Kabler/computer:<br />

Vores analog og digital kabler var rigtige, lige som ved <strong>1.</strong> integrationstest.<br />

For at være helt sikker på at vi ikke skulle ødelægge et PC kort igen (AD512). Blev benene på<br />

denne stik målt efter.<br />

Derefter blev den sat til computeren.<br />

p<br />

Computer<br />

med<br />

AD512<br />

IOkort<br />

AD512<br />

Print<br />

Her virkede alt som det skulle, efter at områderne for AD og DA var blevet defineret.<br />

Det viste sig dog, at være svære end ventet, da koden til driveren ikke virkede til det område vi have<br />

valgt (±10V). Denne blev modificeret og kom til at virke.<br />

Opsamling af fejl som blev lavet:<br />

· Pull-down modstand var for lille.<br />

· Indgangsimpedansen på forstærkeren var for lille, bliv løst med en spændingsfølger.<br />

Konklusion:<br />

Hardwaren og softwaren virker som forventet.<br />

Digital<br />

Analog<br />

Simulerings<br />

Boks/Test<br />

Boks<br />

99


100<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3.4 INTEGRATIONSTEST NR. 4<br />

Dato: 2/12-2004<br />

Formålet med testen var at kontrollere at alt virkede som det skulle. Sikre at vores hardware samt software<br />

passer til selve maskinen.<br />

Andledning var, at vi skulle teste doseringssoftware klassen.<br />

Anvendte instrumenter:<br />

IO kort: Humusoft AD512<br />

Multimeter: Meterman 37XR.<br />

Hamag rack – HM8011<br />

Andet: Softdrik simulator nr. 8. og 2.<br />

Computer med windows<br />

Programering værktøj: Ms Visual Studio .NET<br />

Opstilling:<br />

Computer<br />

med<br />

AD512<br />

IOkort<br />

AD512<br />

Print<br />

Ændringer:<br />

· Temperatur hardwaren.<br />

· Pull-down modstanden til kontrol switchen<br />

Lysdioderne:<br />

Virkede perfekt.<br />

MotorStyring:<br />

Virkede også som forventet.<br />

Digital<br />

Analog<br />

Soft Drikke<br />

maskinen<br />

Knapper:<br />

Selv om at pull-down modstanden var ændret fra en 10kΩ til 1kΩ, var den stadig ikke lille nok til at<br />

aflade kredsløbet. Den blev derfor ændret til en 562Ω.<br />

Temperatur hardwaren:<br />

Virkede rigtig godt.<br />

Kabler:<br />

Der var en lille løs forbindelse i analog kablet fra printet til maskinen.<br />

Software:<br />

Programmet virkede stort set som forventet. Doseringen af vand og saft var lidt upræcis, hvilket også<br />

var den primære årsag til at vi lavede denne test.<br />

At vi også kunne teste alt det andet, var kun et plus.<br />

Ellers var der fejl i AutomatBrugerinterfacet, i run funktionen, temperatur sensor og overvågnings<br />

klassen.


Opsamling af fejl som blev lavet:<br />

· Pull-down modstand var for lille og blev ændre til 562Ω.<br />

· Software fejl i AutomatBrugerInterface classen.<br />

· Software fejl i Run funktionen.<br />

· Softwarefejl i TemperaturSensor classen.<br />

· Softwarefejl i TemperaturSensor classen.<br />

Konklusion:<br />

Hardwaren virker som forventet.<br />

Softwaren virkede næsten.<br />

Alt i alt er vi rigtig tæt ved målet.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

101


102<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3 ACCEPTTEST<br />

5.3.1 USECASE 1<br />

Accepttest<br />

Defination: Normalt scenario<br />

Styringen er forbundet til doseringsmekanikken med kabler til digital og analog connector. Der skal vand i vandbeholderen og saft i saft<br />

beholderen. Koppen skal være placeret i kopholderen og den skal stå i udgangspositionen.<br />

Use Case 1<br />

Krav Test nr. Betingelser Metode Forventet Resultat Aktuelt resultat<br />

Use Case 1 Normalt scenario <strong>1.</strong> Tryk på START <strong>1.</strong> Lampen FREM tænder og<br />

1 Normal Scenario<br />

knappen<br />

kopholderen kører frem til<br />

doseringspositionen.<br />

2. POS.DOS lampen tændes og FREM<br />

slukkes.<br />

3. Koppen fyldes med saft, mens SAFT<br />

lampen er tændt og vand, mens<br />

OK<br />

VAND lampen er tændt, i det<br />

ønskede blandingsforhold.<br />

4. Kopholderen kører tilbage til<br />

startpositionen og lampen<br />

TILBAGE tænder.<br />

5. Lampen POS.START tændes, når<br />

startpositionen nås og TILBAGE<br />

slukkes.


5.3.2 TEST AF VÆSKEDOSERING<br />

Test nr. Resultat<br />

1 180ml<br />

2 180ml<br />

3 180ml<br />

4 179ml<br />

5 180ml<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 198 ml. Og der skal<br />

minimum være 162 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

Test nr. Resultat<br />

1 186ml<br />

2 188ml<br />

3 191ml<br />

4 193ml<br />

5 194ml<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 198 ml. Og der skal<br />

minimum være 162 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 198 ml. Og der skal<br />

minimum være 162 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Test af væskedosering<br />

<strong>1.</strong> Test af vand Ligesom Use<br />

+ saft Case 1 test <strong>1.</strong><br />

mængde Vand og saft<br />

beholderne skal<br />

være fyldt op til<br />

maksimum.<br />

Blandingsforhold<br />

et skal stå til 1:1<br />

2. Test af vand Ligesom Use<br />

+ saft Case 1 test <strong>1.</strong><br />

mængde Vand og saft<br />

beholderne skal<br />

være fyldt op til<br />

minimum.<br />

Blandingsforhold<br />

et skal stå til 1:1<br />

3. Test af vand Ligesom Use<br />

+ saft Case 1 test <strong>1.</strong><br />

mængde Vand og saft<br />

beholderne skal<br />

være fyldt op til<br />

maksimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

4. Test af vand Ligesom Use<br />

+ saft Case 1 test <strong>1.</strong><br />

mængde Vand og saft<br />

beholderne skal<br />

være fyldt op til<br />

minimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

Test nr. Resultat<br />

1 188ml<br />

2 188ml<br />

3 187ml<br />

4 184ml<br />

5 185ml<br />

Test nr. Resultat<br />

1 187ml<br />

2 188ml<br />

3 189ml<br />

4 192ml<br />

5 194ml<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 198 ml. Og der skal<br />

minimum være 162 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

103


104<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/2 ml +- 10 %. Dvs.,<br />

mellem 99 ml og 81 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong><br />

Vand beholderne<br />

skal være fyldt op<br />

til maksimum.<br />

Blandingsforholdet<br />

skal stå til 1:1<br />

Saftslangen skal<br />

være blokeret, så<br />

ledes at der ikke<br />

kommer noget<br />

saft ud.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong><br />

Vand beholderne<br />

skal være fyldt op<br />

til minimum.<br />

Blandingsforhold<br />

et skal stå til 1:1<br />

Saftslangen skal<br />

være blokeret, så<br />

ledes at der ikke<br />

kommer noget<br />

saft ud.<br />

5. Test af vand<br />

+ saft<br />

mængde<br />

OK<br />

Test nr. Resultat<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/2 ml +- 10 %. Dvs.,<br />

mellem 99 ml og 81 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

6. Test af vand<br />

+ saft<br />

mængde<br />

1 92ml<br />

2 93ml<br />

3 94ml<br />

4 96ml<br />

5 95ml


Test nr. Resultat<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/2 ml +- 10 %. Dvs.,<br />

mellem 99 ml og 81 ml.<br />

3. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong> Saft<br />

beholderne skal<br />

være fyldt op til<br />

minimum.<br />

Blandingsforhold<br />

et skal stå til 1:1<br />

Vandslangen<br />

skal være<br />

blokeret, så ledes<br />

at der ikke<br />

kommer noget<br />

vand ud.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong> Saft<br />

beholderne skal<br />

være fyldt op til<br />

maksimum.<br />

Blandingsforhold<br />

et skal stå til 1:1<br />

Vandslangen<br />

skal være<br />

blokeret, så ledes<br />

at der ikke<br />

kommer noget<br />

vand ud.<br />

7. Test af vand<br />

+ saft<br />

mængde<br />

1 94ml<br />

2 95ml<br />

3 97ml<br />

4 97ml<br />

5 99ml<br />

Test nr. Resultat<br />

8. Test af vand<br />

+ saft<br />

mængde<br />

1 86ml<br />

2 86ml<br />

3 87ml<br />

4 86ml<br />

5 86ml<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/2 ml +- 10 %. Dvs.,<br />

mellem 99 ml og 81 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

105


106<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Test nr. Resultat<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/11 ml +- 10 %. Dvs.,<br />

ca. mellem 15 ml og 17 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong> Saft<br />

beholderne skal<br />

være fyldt op til<br />

maksimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

Vandslangen<br />

skal være<br />

blokeret, så ledes<br />

at der ikke<br />

kommer noget<br />

vand ud.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong> Saft<br />

beholderne skal<br />

være fyldt op til<br />

minimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

Vandslangen<br />

skal være<br />

blokeret, så ledes<br />

at der ikke<br />

kommer noget<br />

vand ud.<br />

9. Test af vand<br />

+ saft<br />

mængde<br />

1 16ml<br />

2 16ml<br />

3 16ml<br />

4 16ml<br />

5 16ml<br />

Test nr. Resultat<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/11 ml +- 10 %. Dvs.,<br />

ca. mellem 15 ml og 17 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

10. Test af vand<br />

+ saft<br />

mængde<br />

1 17ml<br />

2 17ml<br />

3 17ml<br />

4 16ml<br />

5 16ml


Test nr. Resultat<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/11 · 10 ml +- 10 %.<br />

Dvs., ca. mellem 147 ml og 179 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong><br />

vand beholderne<br />

skal være fyldt op<br />

til maksimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

Saftslangen skal<br />

være blokeret, så<br />

ledes at der ikke<br />

kommer noget<br />

saft ud.<br />

Ligesom Use<br />

Case 1 test <strong>1.</strong><br />

vand beholderne<br />

skal være fyldt op<br />

til minimum.<br />

Blandingsforhold<br />

et skal stå til 1:10<br />

Saftslangen skal<br />

være blokeret, så<br />

ledes at der ikke<br />

kommer noget<br />

saft ud.<br />

1<strong>1.</strong> Test af vand<br />

+ saft<br />

mængde<br />

1 170ml<br />

2 169ml<br />

3 169ml<br />

4 170ml<br />

5 171ml<br />

Test nr. Resultat<br />

12. Test af vand<br />

+ saft<br />

mængde<br />

1 170ml<br />

2 171ml<br />

3 172ml<br />

4 176ml<br />

5 178ml<br />

<strong>1.</strong> Volumen af det påfyldte væske ikke<br />

overstiger 180/11 · 10 ml +- 10 %.<br />

Dvs., ca. mellem 147 ml og 179 ml.<br />

2. Mængden noteres<br />

<strong>1.</strong> Tryk på START<br />

knappen.<br />

2. Volumen måles i<br />

kobler.<br />

3. Testen gentages<br />

5 gange.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

107


108<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3.3 UNDTAGELSER FRA NORMAL SCENARIO<br />

OK<br />

<strong>1.</strong> Kopholderen køres tilbage til<br />

startposotion.<br />

2. Use Casen afsluttes.<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

OK<br />

<strong>1.</strong> Udskriver fejlmeddelelsen<br />

”Manglende kop i kopholderen” på<br />

skærmen.<br />

2. Use Casen afsluttes.<br />

<strong>1.</strong> Udskriv fejlmeddelelsen ”For høj<br />

vandtemperatur” på skærmen.<br />

2. Use Casen afsluttes.<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

OK<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

OK<br />

Undtagelser fra normal scenario<br />

2 Normalt scenario<br />

Kopholderen er bortset fra at<br />

ikke i start- kopholder ikke<br />

position er i startposition<br />

3 Normalt scenario<br />

Ingen kop i bortset fra at der<br />

kopholderen ikke er kop i<br />

kopholderen.<br />

4 Normalt scenario<br />

Vandets bortset fra at<br />

temperatur vandtemperatur<br />

>MAX_TEMP en er over<br />

MAX_TEMP<br />

5 Normalt scenario<br />

For lidt vand i bortset fra at der<br />

vandbeholderen er for lidt vand i<br />

vandbeholderen<br />

<strong>1.</strong> Udskriv fejlmeddelelsen ”For lidt<br />

vand i vandbeholderen<br />

– påfyld vand indtil max. grænsen<br />

og genstart systemet”.<br />

2. Use Casen afsluttes.<br />

<strong>1.</strong> Udskriv fejlmeddelelsen ”For lidt<br />

saft i saftbeholderen.<br />

– påfyld saft indtil max. grænsen og<br />

genstart systemet”.<br />

2. Use Casen afsluttes.<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

OK<br />

Normalt scenario<br />

bortset fra at der<br />

er for lidt saft i<br />

saftbeholderen<br />

6<br />

For lidt saft i<br />

saftbeholderen


Tryk på START<br />

knappen<br />

Koppen fjernes<br />

under drift<br />

System startes<br />

som normalt<br />

scenario, men<br />

koppen fjernes<br />

under drift<br />

7<br />

Koppen fjernes<br />

fra kopholderen<br />

OK<br />

<strong>1.</strong> Tryk på START<br />

knappen<br />

2. Tryk på RESET<br />

knappen under<br />

drift<br />

System startes<br />

som normalt<br />

scenario men,<br />

RESET<br />

aktiveres under<br />

drift<br />

8<br />

Kunden aktiverer<br />

kontroltasten<br />

RESET<br />

OK<br />

<strong>1.</strong> Stop doseringen af vand og saft og<br />

udskriv fejlmeddelelsen:<br />

”Stop pga. manglende kop – aktiver<br />

RESET tasten”.<br />

2. Systemet afventer at kunden<br />

aktiverer RESET kontroltasten.<br />

3. Kopholderen kører tilbage til<br />

startpositionen og lampen<br />

TILBAGE tænder.<br />

4. Lampen POS.START tændes, når<br />

startpositionen nås og TILBAGE<br />

slukkes.<br />

<strong>1.</strong> Evt. igangværende fremkørsel eller<br />

dosering afbrydes og de tilhørende<br />

statuslamper på knappanelet slukkes.<br />

2. Kopholderen kører tilbage til<br />

startpositionen og lampen<br />

TILBAGE tænder.<br />

3. Lampen POS.START tændes, når<br />

startpositionen nås og TILBAGE<br />

slukkes.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

109


110<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

5.3.4 USECASE 2<br />

Use Case 2<br />

Krav Test nr. Betingelser Metode Forventet Resultat Aktuelt resultat<br />

Use Case 1 Styringen er for- <strong>1.</strong> Maskinen er <strong>1.</strong> Displayet viser vandets temperatur.<br />

2 Vandtemperatur bundet til<br />

tændt<br />

< MAX_TEMP doserings- 2. hælder vand i<br />

mekanikken med vandbeholderen<br />

OK<br />

kabler til digital der har<br />

og analog<br />

temperatur <<br />

connector<br />

MAX_TEMP<br />

<strong>1.</strong> Lampen ”Væske varm” tændes på<br />

statuspanelet.<br />

<strong>1.</strong> Maskinen er<br />

tændt<br />

2. hælder vand i<br />

vandbeholderen<br />

der har<br />

temperatur ><br />

2<br />

Vandtemperatur<br />

> MAX_TEMP<br />

OK<br />

MAX_TEMP<br />

<strong>1.</strong> Displayet viser ”30” 0,5ºC<br />

OK<br />

<strong>1.</strong> Maskinen er<br />

tændt<br />

2. Tester føleren<br />

med 30ºC varmt<br />

3<br />

Vandtemperatur<br />

= 30 ºC<br />

vand.<br />

<strong>1.</strong> Displayet viser ”0” 0,5ºC<br />

OK<br />

<strong>1.</strong> Maskinen er<br />

tændt<br />

2. hælder 0 ºC<br />

koldt vand i<br />

vandbeholderen<br />

<strong>1.</strong> Afmonter<br />

4<br />

Vandtemperatur<br />

= 0 ºC<br />

<strong>1.</strong> Der udlæses 0 til displayet – lampen<br />

”Væske alarm” slukkes.<br />

forbindelse til<br />

OK<br />

temperaturfølere<br />

n<br />

5<br />

Fejl i indlæst<br />

værdi<br />

2. Maskinen<br />

tændes


5.3.5 USECASE 3<br />

Use Case 3<br />

Krav Test nr. Betingelser Metode Forventet Resultat Aktuelt resultat<br />

Use Case 1 Styringen er for- <strong>1.</strong> Computeren <strong>1.</strong> Værdien viser 1:5 og maskinen blander<br />

3 Defaultværdi for bundet til<br />

startes.<br />

i forholdet 1 del saft og 5 dele vand.<br />

Blandingsforhold doseringsmekanikken<br />

med<br />

OK<br />

kabler til digital<br />

og analog<br />

connector<br />

OK<br />

<strong>1.</strong> Værdien viser 1:1 og maskinen blander<br />

i forholdet 1 del saft og 1 dele vand.<br />

2<br />

Blandingsforhold<br />

=1 (min.)<br />

OK<br />

<strong>1.</strong> Værdien viser 1:10 og maskinen<br />

blander i forholdet 1 del saft og 10 dele<br />

vand.<br />

3<br />

Blandingsforhold<br />

=10 (maks.)<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

4<br />

Blandingsforhold<br />

over grænse.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Værdien 1<br />

indtastes i<br />

blandingsforhold<br />

.<br />

<strong>1.</strong> Værdien 10<br />

indtastes i<br />

blandingsforhold<br />

.<br />

<strong>1.</strong> Værdien 11<br />

indtastes i<br />

blandingsforhold<br />

.<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

blandingsforhold<br />

.<br />

<strong>1.</strong> Værdien -1<br />

indtastes i<br />

blandingsforhold<br />

.<br />

5<br />

Blandingsforhold<br />

=0<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

6<br />

Blandingsforhold<br />

under nedre<br />

grænse.<br />

111


112<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

<strong>1.</strong> Temperatur grænse værdien viser<br />

16ºC.<br />

<strong>1.</strong> Computeren<br />

startes.<br />

OK<br />

<strong>1.</strong> Værdien viser 10ºC<br />

OK<br />

<strong>1.</strong> Værdien viser 20ºC<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Værdien 10<br />

indtastes i<br />

Temperatur<br />

grænse<br />

<strong>1.</strong> Værdien 20<br />

indtastes i<br />

Temperatur<br />

grænse.<br />

<strong>1.</strong> Værdien 21<br />

indtastes i<br />

Temperatur<br />

grænse.<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

Temperatur<br />

grænse.<br />

<strong>1.</strong> Værdien 9<br />

indtastes i<br />

Temperatur<br />

grænse.<br />

<strong>1.</strong> Computeren<br />

startes.<br />

7<br />

Defaultværdi for<br />

Temperatur<br />

grænse<br />

8<br />

Temperatur<br />

grænse =10<br />

(min.)<br />

9<br />

Temperatur<br />

grænse =20<br />

(maks.)<br />

10<br />

Temperatur<br />

grænse over øvre<br />

grænse.<br />

11<br />

Temperatur<br />

grænse =0<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

<strong>1.</strong> Minimum værdien viser 500 ml.<br />

OK<br />

<strong>1.</strong> Minimum vand værdien viser 500ml.<br />

OK<br />

<strong>1.</strong> Værdien 500<br />

indtastes i<br />

Minimum vand<br />

værdien.<br />

12<br />

Temperatur<br />

grænse under<br />

nedre grænse.<br />

13<br />

Defaultværdi for<br />

Minimum vand<br />

værdien<br />

14<br />

Minimum vand<br />

=500 (min.)


<strong>1.</strong> Minimum vand værdien viser 1000 ml.<br />

OK<br />

<strong>1.</strong> Værdien 1000<br />

indtastes i<br />

Minimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 1001<br />

indtastes i<br />

Minimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

Minimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 499<br />

indtastes i<br />

Minimum vand<br />

værdien.<br />

<strong>1.</strong> Computeren<br />

startes.<br />

15<br />

Minimum vand<br />

=1000 (maks.)<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

16<br />

Minimum vand<br />

over øvre<br />

grænse.<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

17<br />

OK<br />

Minimum vand<br />

=0<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Maksimum værdien viser 4000 ml.<br />

OK<br />

<strong>1.</strong> Maksimum vand værdien viser<br />

2000ml.<br />

18<br />

Minimum vand<br />

værdien under<br />

nedre grænse.<br />

19<br />

Defaultværdi for<br />

Maksimum vand<br />

værdien<br />

20<br />

Maksimum vand<br />

=2000 (min.)<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

OK<br />

<strong>1.</strong> Maksimum vand værdien viser 4500<br />

ml.<br />

OK<br />

<strong>1.</strong> Værdien 2000<br />

indtastes i<br />

Maksimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 4500<br />

indtastes i<br />

Maksimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 4501<br />

indtastes i<br />

Maksimum vand<br />

værdien.<br />

21<br />

Maksimum vand<br />

=4500 (maks.)<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

22<br />

Maksimum vand<br />

over øvre<br />

grænse.<br />

113


114<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

Maksimum vand<br />

værdien.<br />

<strong>1.</strong> Værdien 1999<br />

indtastes i<br />

Maksimum vand<br />

værdien.<br />

<strong>1.</strong> Computeren<br />

startes.<br />

23<br />

Maksimum vand<br />

=0<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

OK<br />

<strong>1.</strong> Minimum værdien viser 500 ml.<br />

OK<br />

<strong>1.</strong> Minimum saft værdien viser 500ml.<br />

OK<br />

24<br />

Maksimum vand<br />

værdien under<br />

nedre grænse.<br />

25<br />

Defaultværdi for<br />

Minimum saft<br />

værdien<br />

26<br />

Minimum saft<br />

=500 (min.)<br />

<strong>1.</strong> Minimum saft værdien viser 1000 ml.<br />

OK<br />

<strong>1.</strong> Værdien 500<br />

indtastes i<br />

Minimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 1000<br />

indtastes i<br />

Minimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 1001<br />

indtastes i<br />

Minimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

Minimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 499<br />

indtastes i<br />

Minimum saft<br />

værdien.<br />

27<br />

Minimum saft<br />

=1000 (maks.)<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

28<br />

Minimum saft<br />

over øvre<br />

grænse.<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

29<br />

OK<br />

Minimum saft<br />

=0<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

30<br />

Minimum saft<br />

værdien under<br />

nedre grænse.


<strong>1.</strong> Maksimum værdien viser 4500 ml.<br />

OK<br />

<strong>1.</strong> Computeren<br />

startes.<br />

<strong>1.</strong> Maksimum saft værdien viser 2000ml.<br />

OK<br />

31<br />

Defaultværdi for<br />

Maksimum saft<br />

værdien<br />

32<br />

Maksimum saft<br />

=2000 (min.)<br />

<strong>1.</strong> Maksimum saft værdien viser 4500 ml.<br />

OK<br />

<strong>1.</strong> Værdien 2000<br />

indtastes i<br />

Maksimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 4500<br />

indtastes i<br />

Maksimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 4501<br />

indtastes i<br />

Maksimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 0<br />

indtastes i<br />

Maksimum saft<br />

værdien.<br />

<strong>1.</strong> Værdien 1999<br />

indtastes i<br />

Maksimum saft<br />

værdien.<br />

33<br />

Maksimum saft<br />

=4500 (maks.)<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

34<br />

Maksimum saft<br />

over øvre<br />

grænse.<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

35<br />

OK<br />

Maksimum saft<br />

=0<br />

OK<br />

<strong>1.</strong> Programmet returnere en<br />

fejlmeddelelse.<br />

36<br />

Maksimum saft<br />

værdien under<br />

nedre grænse.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

115


116<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6 BILAG<br />

6.1 C++ INTERFACE TIL HUMUSOFT AD 512 I/O KORT<br />

6.<strong>1.</strong>1 SOFTWARE DRIVER<br />

Der er lavet nogle funktioner hvormed de forskellige ind og udgange kan aktiveres og læses fra et C++<br />

program.<br />

Disse funktioner findes i filen AD512drv.cpp og i header filen AD512.hpp . Disse to filer skal være i jeres<br />

projekt for at kunne bruge AD 512 kortet.<br />

Bemærk at det kun er muligt at køre jeres program på de pc’er der har AD 512 kortet installeret. På<br />

andre maskiner vil i få en runtime fejl.<br />

Til testformål er der lavet et hovedprogram AD512test.cpp hvormed de enkelte funktioner kan testes.<br />

De enkelte funktioner der skal bruges for at interface til AD512 er følgende.<br />

A) enableAD512<br />

Enabler kortet og skal kaldes inden nogle af de andre funktioner kaldes.<br />

Prototype : int enableAD512(void)<br />

Parameter : ingen<br />

Returværdi :<br />

0 = enable af ad 512 udført<br />

alle andre værdier fejl i ad512 kort eller driver<br />

B) Analog indgange<br />

Læser den analog værdi fra en af de 8 analoge indgange<br />

Prototype : unsigned short AnalogInput(int ch, int range)<br />

Parameter:<br />

ch : Analog indgang legale værdi 0-7<br />

range : Hvilket spændings område skal væges<br />

Legale værdier 0-3. Hvor<br />

0 = 0 - 5 volt område<br />

1 = +/- 5 volt område<br />

2 = 0 - 10 volt område<br />

3 = +/- 10 volt område<br />

Returværdi :<br />

Den læste værdi. 12 bit som en værdi 0-4095 ved unipolar (0-5v og 0-10V)<br />

ved Bipolar områder (+/- 5V og +/- 10V) +/- 2074<br />

C) Analog udgange


Sætter en af de to analog udgang<br />

Prototype : void AnalogOutput( int ch, int value)<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Parameter:<br />

ch : Analog udgang legale værdi 0-1<br />

value : værdi til output 12 bit legale værdie 0-4095<br />

Med standardopsætning af AD512 kortet er der valgt en range for de analoge output på +/- 5 volt<br />

Returværdi : ingen<br />

D) Digitale indgange<br />

Læser de 8 digitale indgange<br />

Prototype : int DigitalInput(void)<br />

Parameter: ingen<br />

Returværdi :<br />

en byte hvor hver bit angiver en af de 8 digitale indgange.<br />

Værdien er imellem 0 og 255<br />

E) Digitale udgange<br />

Sætter de 8 digitale udgange<br />

Prototype : void DigitalOutput(int value)<br />

Parameter:<br />

value : En bit for hver digital udgang. legale værdier 0-255<br />

Returværdi : ingen<br />

117


118<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.<strong>1.</strong>2 DATABLAD 1<br />

AD 512<br />

DATA ACQUISITION CARD<br />

USER'S MANUAL<br />

© 1997 HUMUSOFT ®


© COPYRIGHT 1997 by HUMUSOFT s.r.o.. All rights reserved.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

No part of this publication may be reproduced or distributed in any form or by any means, or<br />

stored in a database or retrieval system, without the prior written consent of HUMUSOFT<br />

s.r.o.<br />

Limited Warranty: HUMUSOFT s.r.o. disclaims all liability for any direct or indirect<br />

damages caused by use or misuse of the AD 512 device or this documentation.<br />

HUMUSOFT is a registered trademark of HUMUSOFT s.r.o.<br />

Other brand and product names are trademarks or registered trademarks of their respective<br />

holders.<br />

Printed in Czech Republic<br />

119


120<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Table of Contents<br />

Table of Contents<br />

<strong>1.</strong> Introduction 4<br />

<strong>1.</strong><strong>1.</strong> General Description ....................................... 4<br />

<strong>1.</strong>2. Features List ............................................. 4<br />

2. Hardware Installation 6<br />

2.<strong>1.</strong> DIP Switch and Jumper Settings ............................. 6<br />

2.2. Installation .............................................. 7<br />

3. Programming Guide 8<br />

3.<strong>1.</strong> I/O Port Map ............................................ 8<br />

3.2. A/D Convertor ........................................... 9<br />

3.3. D/A Convertors ......................................... 11<br />

3.4. Digital Inputs ........................................... 12<br />

3.5. Digital Outputs .......................................... 12<br />

4. I/O Signals 13<br />

4.<strong>1.</strong> Output Connector Signal Description......................... 13<br />

3


Introduction<br />

4<br />

<strong>1.</strong> Introduction<br />

<strong>1.</strong><strong>1.</strong> General Description<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

The AD 512 data acquisition card is desined for the need of connecting IBM PC<br />

compatible computers to real world signals. The AD 512 contains a 100 kHz<br />

throughput 12 bit A/D converter with sample/hold circuit, four software selectable<br />

input ranges and 8 channel input multiplexer, 2 independent double buffered 12 bit<br />

D/A converters, 8 bit digital input port and 8 bit digital output port. The card is<br />

designed for standard data acquisition and control applications and optimized for<br />

use with Real Time Toolbox for MATLAB®. Because of the small size and low<br />

power consumption AD 512 can be used not only in desktop computers but also in<br />

portable computers and notebooks.<br />

<strong>1.</strong>2. Features List<br />

The AD 512 offers following features:<br />

100 kHz 12 bit A/D converter with sample & hold circuit<br />

8 channel single ended fault protected input multiplexer<br />

Software selectable input ranges ±10V, ±5V, 0-10V, 0-5V<br />

Internal clock & voltage reference<br />

2 double buffered D/A converters with 12 bit resolution and simultaneous<br />

update<br />

Output ranges ±10V, ±5V, 0-10V, 0-5V jumper selectable for each analog<br />

output<br />

121


122<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

8 bit TTL compatible digital input port<br />

8 bit TTL compatible digital output port<br />

DIP switch selectable I/O port base address<br />

Requires one ISA slot<br />

Power consumption 100 mA@+5V, 50 mA@+12V, 50 mA@-12V<br />

Operating temperature 0°C to +70°C<br />

Introduction<br />

5


Tutorial<br />

6<br />

2. Hardware Installation<br />

2.<strong>1.</strong> DIP Switch and Jumper Settings<br />

The bank of eight switches (SW1) on the AD<br />

512 specifies the base address of I/O ports on<br />

this card. AD 512 occupies eight consequent<br />

addresses in PC's I/O address space. Weights of<br />

these switches are listed in table <strong>1.</strong> According to<br />

this table selecting I/O address 300H means that<br />

switches 1, 2 and 8 should be switched OFF and<br />

all other switches ON. Factory setting of base<br />

address is 300H. Switch 8 should be always set<br />

OFF otherwise the card is disabled.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Switch OFF ON<br />

1 200H 0H<br />

2 100H 0H<br />

3 80H 0H<br />

4 40H 0H<br />

5 20H 0H<br />

6 10H 0H<br />

7 8H 0H<br />

8 enable disable<br />

Table <strong>1.</strong> I/O Address Setting<br />

Jumper JP1 is used to select the D/A converters analog outputs range. Output<br />

voltage ranges can be set for each analog output independently to ±10V, ±5V<br />

(factory default), 0-10V or 0-5V according to table 2.<br />

Output range ±10V ±5V 0-10V 0-5V<br />

D/A0 1-2 1-2, 4-5 2-3 2-3, 4-5<br />

D/A1 6-7 6-7, 9-10 7-8 7-8, 9-10<br />

Table 2. JP1 Analog Outputs Range Setting<br />

123


124<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2.2. Installation<br />

Tutorial<br />

Once you have properly set all jumpers and switches you can install the AD 512<br />

card in any free ISA expansion slot of your computer. Follow the steps outlined<br />

below:<br />

Turn off the power to the computer system and unplug the power cord.<br />

Disconnect all cables connected to the computer system.<br />

Using a screwdriver (or nut driver), remove the cover-mounting screws. that<br />

screws are at the rear side of the PC.<br />

Remove the computer system's cover.<br />

Find an empty expansion slot for in your computer for AD 512 card. If the<br />

slot still has the metal expansion-slot cover attached, remove the cover with<br />

a screwdriver (or nut driver). Save the screw to install the AD 512.<br />

Hold the AD 512 firmly at the top of the board, and press the gold edge<br />

connector into an empty expansion slot.<br />

Using a screwdriver (or nut driver), screw the retaining bracket tightly against<br />

the rear plate of the computer system.<br />

Replace the cover of the computer, and plug in the power cord.<br />

Reconnect all cables that were previously attached to the rear of the computer.<br />

7


Reference<br />

8<br />

3. Programming Guide<br />

3.<strong>1.</strong> I/O Port Map<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

I/O space of AD 512 card consists of eight registers immediately following the<br />

base address selected by SW1:<br />

Address Read Write<br />

Base+0 ADLO - A/D data low byte DA0LO - D/A 0 data low byte<br />

Base+1 ADHI - A/D data high byte DA0HI - D/A 0 data high byte<br />

Base+2 DA1LO - D/A 1 data low byte<br />

Base+3 DA1HI - D/A 1 data high byte<br />

Base+4 DACTRL - D/A control reg.<br />

Base+5 ADSTAT - A/D status reg. ADCTRL - A/D control reg.<br />

Base+6<br />

Base+7 DIN - Digital input register DOUT - Digital output register<br />

Table 3. I/O Port Map<br />

3.2. A/D Converter<br />

All functions of A/D converter are accessible through four registers.<br />

A/D control register ADCTRL is used to select input channel, input range and to<br />

125


126<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

start conversion. For ADCTRL bit assignment see table 4.<br />

Reference<br />

D7 D6 D5 D4 D3 D2 D1 D0<br />

(MSB) (LSB)<br />

0 1 0 RNG BIP A2 A1 A0<br />

BIT NAME DESCRIPTION<br />

7 Must be always 0<br />

6 Must be always 1<br />

5 Must be always 0<br />

4 RNG Selects 10V input range (see table 5)<br />

3 BIP Selects bipolar input range (see table 5)<br />

2, 1, 0 A2, A1, A0 Selects input channel (see table 6)<br />

Table 4. A/D Control Byte Format<br />

RNG BIP INPUT RANGE (V)<br />

0 0 0 to 5<br />

1 0 0 to 10<br />

0 1 ± 5<br />

1<br />

Table 5. Input Range Selection<br />

1 ± 10<br />

9


Reference<br />

10<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

A2 A1 A0 CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7<br />

0 0 0 *<br />

0 0 1 *<br />

0 1 0 *<br />

0 1 1 *<br />

1 0 0 *<br />

1 0 1 *<br />

1 1 0 *<br />

1 1 1 *<br />

Table 6. Input Channel Selection<br />

Conversion is initiated with a write operation to ADCTRL register which also<br />

selects the input multiplexer channel and input range. When the conversion is<br />

complete bit 7 in A/D status register ADSTAT is set to zero. Then the data is<br />

ready and can be read from ADLO and ADHI registers. The read operation of<br />

ADLO and ADHI registers sets the conversion complete bit in ADSTAT<br />

register back to one. Writing a new control byte during conversion cycle will<br />

abort conversion and start a new conversion cycle.<br />

D7 D6 D5 D4 D3 D2 D1 D0<br />

(MSB) (LSB)<br />

CC 0 0 0 0 0 0 0<br />

Table 7. A/D Status Byte Format<br />

127


128<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Reference<br />

D7 D6 D5 D4 D3 D2 D1 D0<br />

ADLO D7 D6 D5 D4 D3 D2 D1 D0<br />

ADHI 0 or 0 or 0 or 0 or D11 D10 D9 D8<br />

D11 D11 D11 D11<br />

Table 8. A/D Data Registers Format<br />

The output data format is binary in unipolar mode and twos-complement binary<br />

in bipolar mode. When reading ADLO the lower eight bits are read. When<br />

reading ADHI the upper four MSBs are available and the output data bits D4-<br />

D7 are either set 0 (in unipolar mode) or set to the value of MSB (in bipolar<br />

mode) as described in Table 8.<br />

AD converter voltage reference can be adjusted by R1<strong>1.</strong><br />

3.3. D/A Converters<br />

D/A converters are accessed through four data input latch registers (DA0LO,<br />

DA0HI, DA1LO, DA1HI) and one control register DACTRL. D/A converters<br />

are double-buffered with simultaneous update of DAC registers from input latch<br />

registers which allows synchronous update of both analog outputs. Therefore<br />

analog outputs are updated in following two steps:<br />

<strong>1.</strong> New output values are written to DA0LO, DA0HI, DA1LO, DA1HI<br />

registers.<br />

2. Any value is written into DACTRL register which results in loading<br />

current values from DA0LO, DA0HI, DA1LO, DA1HI registers into<br />

DAC registers and simultaneous update of both analog outputs.<br />

11


Reference<br />

12<br />

D7 D6 D5 D4 D3 D2 D1 D0<br />

DA0LO D7 D6 D5 D4 D3 D2 D1 D0<br />

DA0HI 0 0 0 0 D11 D10 D9 D8<br />

DA1LO D7 D6 D5 D4 D3 D2 D1 D0<br />

DA1HI 0 0 0 0 D11 D10 D9 D8<br />

Table 9. D/A Data Registers Format<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Output voltage ranges of D/A converters can be set to either ±10V, ±5V, 0-10V<br />

or 0-5V by jumper JP1 as described in table 2.<br />

3.4. Digital Inputs<br />

AD 512 contains one 8-bit digital input port which can be accessed directly by<br />

read from DIN register. Inputs are TTL compatible.<br />

3.5. Digital Outputs<br />

AD 512 contains one 8-bit digital output port which can be accessed directly by<br />

write to DOUT register. Outputs are TTL compatible.<br />

129


130<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

4. I/O Signals<br />

4.<strong>1.</strong> Output Connector Signal Description<br />

The AD 512 data acquisition card is equipped with a 37 pin D-type female<br />

connector X1 with pin assignment as described in table 10.<br />

Reference<br />

AD0-AD7 Analog inputs<br />

DA0-DA1 Analog outputs<br />

+5V REFOUT D/A converter reference voltage output (+5V)<br />

+4.096V REFOUT A/D converter reference voltage output (+4.096V)<br />

DIN0-DIN7 TTL compatible digital inputs<br />

DOUT0-DOUT7 TTL compatible digital outputs<br />

+12V +12V power supply<br />

-12V -12V power supply<br />

+5V +5V power supply<br />

AGND Analog ground<br />

GND Digital ground<br />

13


Reference<br />

14<br />

AD0 1<br />

AD1 2<br />

AD2 3<br />

AD3 4<br />

AD4 5<br />

AD5 6<br />

AD6 7<br />

AD7 8<br />

AGND 9<br />

AGND 10<br />

GND 11<br />

DIN0 12<br />

DIN1 13<br />

DIN2 14<br />

DIN3 15<br />

DIN4 16<br />

DIN5 17<br />

DIN6 18<br />

DIN7 19<br />

Table 10. X1 Connector Pin Assignement<br />

20 DA0<br />

21 DA1<br />

22 AGND<br />

23 +5V REFOUT<br />

24 +4.096V REFOUT<br />

25 AGND<br />

26 -12V<br />

27 +12V<br />

28 +5V<br />

29 GND<br />

30 DOUT0<br />

31 DOUT1<br />

32 DOUT2<br />

33 DOUT3<br />

34 DOUT4<br />

35 DOUT5<br />

36 DOUT6<br />

37 DOUT7<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

131


132<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Reference<br />

Contact address:<br />

HUMUSOFT s.r.o.<br />

Novákových 6<br />

180 00 Praha 8<br />

Czech Republic<br />

tel.: + 420 2 66315767<br />

tel./fax: + 420 2 6844174<br />

E-mail: info@humusoft.cz<br />

Homepage: http//www.humusoft.cz<br />

16


6.<strong>1.</strong>3 DATABLAD 2<br />

Humusoft: Data Acquisition Products (AD512 entry-level data acquisition card)<br />

HUMUSOFT<br />

info@humusoft.com<br />

Features<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Eight single-ended 12-bit analog input channels<br />

Two 12-bit analog output channels<br />

Sampling rate up to 100 kHz<br />

8 digital input channels, 8 digital output channels<br />

Programmable A/D ranges<br />

Jumper selectable D/A ranges<br />

Low power consumption<br />

Driver for Extended Real Time Toolbox for MATLAB included<br />

Applications<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

DC voltage measurement<br />

Transducer and sensor interfacing<br />

Vibration and transient analysis<br />

Process monitoring and control<br />

Waveform acquisition and analysis<br />

Multichannel data acquisition<br />

Real-time simulation<br />

Programmable voltage output<br />

Specifications<br />

<br />

Analog Input<br />

Channels: 8 single-ended<br />

A/D converter: 12-bit, 10 microsec. conversion time<br />

Input ranges: +-10 V, +-5 V, 0-10 V, 0-5 V<br />

Trigger mode: software<br />

Overvoltage: +-16 V max.<br />

Analog Output<br />

Channels: 2 double-buffered 12-bit channels<br />

Output Ranges: +-10 V, +-5 V, 0-10 V, 0-5 V<br />

Output current: 10 mA max.<br />

<br />

Digital I/O<br />

Input lines: 8, TTL compatible<br />

Output lines: 8, TTL compatible<br />

General<br />

AD512 entry-level data acquisition card<br />

Introduction | AD612 | MF614 | MF604 | AD512 | MC101<br />

Power consumption: 100 mA @ +5 V, 50 mA @ +12 V, 50 mA @ -12 V<br />

Operating temperature: 0 to 50 °C<br />

Connector: DB-37<br />

I/O ports: 16 consecutive addresses<br />

http://www.humusoft.cz/datacq/ad512.htm<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Side 1 af 1<br />

Get it with 30% disc<br />

16-12-2004<br />

133


134<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2 PIN NUMRE PÅ AD512/PRINTET


6.2 AKTIVITETS DIAGRAMMER<br />

6.2.1 AUTOMATBRUGERINTERFACE<br />

Use Case 3<br />

char valg<br />

double nyvaerdie<br />

char afslut = 'r'<br />

Opret variabler:<br />

Clear screen<br />

system("cls")<br />

Udskriv menu<br />

[valg != 'a' &&<br />

valg != 'b' &&<br />

valg != 'c' &&<br />

valg != 'd' &&<br />

valg != 'e' &&<br />

valg != 'f' &&<br />

valg != 'g']<br />

[kbhit() != true && checkKonfigurering == true]<br />

[false]<br />

[checkKonfigurering == true]<br />

valg = det tastede menupunkt<br />

[false]<br />

valg = 'q'<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[true]<br />

[valg == 'a']<br />

Udskriv: Doseringsforhold + Indtast nyt Indlæs: indtastede doseringsforhold<br />

[(vaerdie < 1 || vaerdie > 10) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[true]<br />

[false]<br />

Gem vaerdi<br />

1<br />

135


136<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[valg == 'b']<br />

Udskriv: max. temperatur + Indtast nyt Indlæs: indtastede max. temperatur<br />

[(vaerdie < 10 || vaerdie > 20) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem vaerdi<br />

[valg == 'c']<br />

Udskriv : max. saft + indtast nyt Indlæs: indtastede max. saft<br />

[(vaerdie < 2000 || vaerdie > 4500) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem værdi<br />

[valg == 'd']<br />

Udskriv: min. saft + indtast nyt Indlæs: Indtastede min. saft<br />

[(vaerdie < 500 || vaerdie > 1000) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem værdi<br />

[valg == 'e']<br />

Udskriv: max. vand + Indlæs nyt Indlæs: indtastede max. vand<br />

[(vaerdie < 2000 || vaerdie > 4500) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

2<br />

Gem værdi


[valg == 'f']<br />

Udskriv: min. vand + Indlæs nyt Indlæs: indtastede min. vand<br />

[(vaerdie < 500 || vaerdie > 1000) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem værdi<br />

[valg == 'g']<br />

Udskriv: sæt værdier til default default-værdier gemmes<br />

[false]<br />

Afslutning af programmet<br />

[valg == 'q']<br />

Udskriv: Automaten er klar til brug...<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[false]<br />

[checkKonfigurering == true]<br />

[false]<br />

3<br />

137


138<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.1 DOSERINGSENHED<br />

saftRetur checkVand<br />

restSaftMaengde += saft *(doseringsmaengdeSaft/SaftMaengdeMillisekunder)<br />

vandRetur<br />

restVandMaengde += vand *(doseringsmaengdeVand/VandMaengdeMillisekunder)<br />

restVandMaengde = Konfig.laesMaxVand()<br />

doseringsmaengdeSaft = (1/double(Konfig.laesDoseringsForhold()+1))*180<br />

restSaftMaengde -= doseringsmaengdeSaft<br />

SaftMaengdeMillisekunder = "udregning vises i kassen ved siden af."<br />

restVandMaengde > Konfig.laesMinVand()<br />

checkSaft<br />

resetVand resetSaft<br />

beregnSaftMaengde<br />

restSaftMaengde > Konfig.laesMinSaft()<br />

restSaftMaengde = Konfig.laesMaxSaft()<br />

SaftMaengdeMillisekunder =<br />

240.79896131361 * pow((restSaftMaengde +(doseringsmaengdeSaft/2)),<br />

0.75422309843375)) - (240.79896131361 *<br />

pow((restSaftMaengde -(doseringsmaengdeSaft/2)), 0.75422309843375)


eregnVandMaengde<br />

doseringsmaengdeVand = (double(Konfig.laesDoseringsForhold())/(double(Konfig.laesDoseringsForhold()+1)))*180<br />

restVandMaengde -= doseringsmaengdeVand<br />

VandMaengdeMillisekunder = "Udregning vises i kassen ved siden af."<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

VandMaengdeMillisekunder =<br />

166.71975270924 * pow((restVandMaengde +(doseringsmaengdeVand/2)),<br />

0.79905863392452))-(166.71975270924 *<br />

pow((restVandMaengde -(doseringsmaengdeVand/2)), 0.79905863392452)<br />

139


140<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.3 INPUTOUTPUT<br />

Constructor: InputOutput<br />

Outputbit<br />

[Første gang klassen bliver kørt]<br />

InputBit<br />

Skriver alle output bit = 0 og gemmer det i en variabel<br />

Flytter bittene til højre, så den ønskede bit står til sidst<br />

Sortere de andre bit fra ved at AND'de med 1<br />

[Bittet er ikke allerede sat til den ønskede værdi]<br />

Modtager bit/portnummeret man ønsker at kigge på.<br />

Returner det aktuelle bits værdi, i en bool.<br />

Modtager det bit/portnummer som man ønsker at ændre som int, og den værdi som skal ændres til en bool.<br />

Sætter et bit og flytter den til det ønskede port/bitnummer<br />

XOR'er den lige lavet værdi med den gemte udgangsværdi og gemmer den<br />

Skriver den gemte værdi videre til udgangskortet


Funktioner der gør det lettere at teste InputOutput classen:<br />

PrintOutputBit<br />

PrintInputBit<br />

Printer overskriften ud<br />

Definer variabel: int taeller=7<br />

[Else]<br />

[taeller >=0]<br />

Printer den afsluttende tekst ud<br />

Printer overskriften ud<br />

Definer variabel: int taeller=7<br />

[Else]<br />

[taeller >=0]<br />

Printer den afsluttende tekst ud<br />

printer bittet på pladsen "taeller" ud.<br />

printer bittet på pladsen "taeller" ud.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Trækker en fra taeller<br />

Trækker en fra taeller<br />

141


142<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.4 KONFIGURERINGSPARAMETRE<br />

laesDoseringsForhold<br />

return doseringsforhold<br />

laesMinSaft<br />

return minSaft<br />

skrivDoseringsForhold<br />

doseringsforhold = nydoseringsforhold<br />

skrivMinSaft<br />

minSaft = nyMinSaft<br />

laesMaxTemp<br />

return maxTemp<br />

laesMaxVand<br />

return maxVand<br />

skrivMaxTemp<br />

maxTemp = nyMaxTemp<br />

skrivMaxVand<br />

laesMaxSaft<br />

return maxSaft<br />

laesMinVand<br />

return minVand<br />

skrivMaxSaft<br />

maxSaft = nyMaxSaft<br />

skrivMinVand<br />

maxVand = nyMaxVand minVand = nyMinVand


6.2.5 KONFIGURERINGSSWITCH<br />

checkKonfigurering<br />

return false<br />

6.2.6 KONTROLPANEL<br />

return objInputOutput.inputBit( 1 )<br />

[inputBit( 5 ) == true]<br />

[id == "RESET"]<br />

return true<br />

checkForTast<br />

[id == "START"]<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

return objInputOutput.inputBit( 0 )<br />

143


144<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.7 KOPTRANSPORTENHED<br />

return false<br />

[false]<br />

[fyldtKop == true &&<br />

checkForKopIHolder() == false ]<br />

checkForFyldtKop<br />

fyldtKop = false<br />

return false<br />

[fyldtKop == true &&<br />

checkForKopIHolder() == true]<br />

return true


6.2.8 SOFTDRINKSTYRING<br />

[UseCase1 == 10]<br />

[UseCase1 == 15]<br />

[UseCase1 == 20]<br />

[UseCase1 == 30]<br />

[UseCase1 == 40]<br />

[UseCase1 == 61]<br />

[UseCase1 == 62]<br />

[UseCase1 == 71]<br />

[UseCase1 == 72]<br />

[UseCase1 == 80]<br />

[UseCase1 == 90]<br />

Udskriv: "Automaten er klar til brug, tryk start!"<br />

UseCase1 = 10<br />

Se UseCase 2<br />

Se UseCase 3<br />

[UseCase1 == 75]<br />

Se case 10<br />

Se case 15<br />

Se case 20<br />

Se case 30<br />

Se case 40<br />

Se case 61<br />

Se case 62<br />

Se case 71<br />

Se case 72<br />

Se case 75<br />

Se case 80<br />

Se case 90<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[checkKonfigurering == false]<br />

145


146<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.8.1 USECASE 1<br />

[false]<br />

Case 10<br />

[checkForTast ("START") = true]<br />

Case 15<br />

[false]<br />

udskriv: "Kopholderen er ikke i start postion"<br />

system("cls")<br />

[chechkForStartPosition = true]<br />

udskriv: "Kopholderen er i start postion"<br />

switch to case 80 switch to case 20<br />

switch to case 15


[false]<br />

[false]<br />

[false]<br />

[false]<br />

switch to case 10<br />

[false]<br />

[checkForKopIHolder = false]<br />

Udskriv "Manglende kop i kopholderen."<br />

[checkForMaxTemperatur = false]<br />

Udskriv "For høj vandtemperatur."<br />

[checkVand = false]<br />

Udskriv "For lidt vand i vandbeholderen."<br />

[checkSaft = false]<br />

Udskriv "For lidt saft i saftbeholderen."<br />

[checkForFyldtKop = true]<br />

Case 20<br />

Udskriv "Udskift koppen i kopholderen."<br />

[checkForKopIHolder = true,<br />

checkForMaxTemperatur = true,<br />

checkVand = true, checkSaft = true,<br />

checkForFyldtKop = false]<br />

[false]<br />

Udskriv: "Kopholderen er ikke i startposition"<br />

switch to case 80<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[checkForStartPosition = true]<br />

Udskriv: "Startbetingelserne er opfyldt"<br />

switch to case 30<br />

147


148<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Case 30<br />

[false]<br />

Udskriv: "Motoren kører frem"<br />

startMotorFrem<br />

taendLampe(FREM)<br />

switch to case 40<br />

Case 40<br />

[false]<br />

[false]<br />

[checkForTast(RESET) = true]<br />

[checkForTast(RESET) = true]<br />

[checkForDoseringsPosition = true]<br />

Udskriv: "Doseringsposition nået"<br />

switch to case 80<br />

switch to case 80<br />

stopMotor<br />

slukLampe(FREM)<br />

switch to case 61


Case 61<br />

[false]<br />

beregnSaftMaengde<br />

Udskriv: "Doserer saft i ....ms"<br />

Start timer i "SaftMaengdeMillisekunder" antal ms<br />

taendLampe(SAFT)<br />

fyldtKop = true<br />

switch to case 62<br />

[checkForTast(RESET) = true]<br />

switch to case 80<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

149


150<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[false]<br />

[false]<br />

[checkForKopIHolder = true]<br />

Udskriv: "Saftdosering afbrudt ..."<br />

slukLampe(SAFT)<br />

saftRetur(stop())<br />

switch to case 10<br />

Case 62<br />

[false]<br />

[chechForTimeout = true]<br />

Udskriv: "Tjekker timeout ..."<br />

slukLampe(SAFT)<br />

switch to case 71<br />

[checkForTast(RESET) = true]<br />

Udskriv: "Saftdosering afbrudt - modregner ..."<br />

slukLampe(SAFT)<br />

saftRetur(stop())<br />

switch to case 80


eregnVandMaengde<br />

Start timer i "VandMaengdeMillisekunder" antal sek.<br />

[false]<br />

Case 71<br />

[false]<br />

Udskriv: "Doserer vand i ....ms"<br />

[false]<br />

taendLampe(VAND)<br />

fyldtKop = true<br />

switch to case 72<br />

[checkForKopIHolder = true]<br />

slukLampe(VAND)<br />

saftRetur(stop())<br />

switch to case 10<br />

[checkForTast(RESET) = true]<br />

Case 72<br />

[false]<br />

Udskriv: "Vanddosering afbrudt ..."<br />

[chechForTimeout = true]<br />

Udskriv: "Tjekker timeout ..."<br />

slukLampe(VAND)<br />

switch to case 80<br />

switch to case 80<br />

[checkForTast(RESET) = true]<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Udskriv: "Vanddosering afbrudt - modregner ..."<br />

slukLampe(VAND)<br />

saftRetur(stop())<br />

switch to case 80<br />

151


152<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Case 90<br />

[false]<br />

[false]<br />

Case 75<br />

[checkForTast( RESET) == true]<br />

[checkForStartPosition = true]<br />

Udskriv: "Stop pga. manglende kop ..."<br />

switch to case 80<br />

Udskriv: "Drinken er færdig. Automaten er klar ..."<br />

stopMotor<br />

slukLampe(TILBAGE)<br />

switch to case 10<br />

Case 80<br />

Udskriv: "Motoren kører tilbage med koppen"<br />

stopMotor<br />

slukLampe(FREM)<br />

startMotorTilbage<br />

taendLampe(TILBAGE)<br />

switch to case 90


6.2.8.2 USECASE 2<br />

[!objTemperaturOvervaager.overvaagerOgOpdatere()<br />

= true]<br />

udskriv "Følerfejl, kontroler at føleren er monteret og ikke er kortsluttet."<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[overvaagerOgOpdatere() == true]<br />

153


154<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.8.3 USECASE 3<br />

Use Case 3<br />

char valg<br />

double nyvaerdie<br />

char afslut = 'r'<br />

Opret variabler:<br />

Clear screen<br />

system("cls")<br />

Udskriv menu<br />

[valg != 'a' &&<br />

valg != 'b' &&<br />

valg != 'c' &&<br />

valg != 'd' &&<br />

valg != 'e' &&<br />

valg != 'f' &&<br />

valg != 'g']<br />

[kbhit() != true && checkKonfigurering == true]<br />

[false]<br />

[checkKonfigurering == true]<br />

valg = det tastede menupunkt<br />

[false]<br />

valg = 'q'<br />

[true]<br />

[valg == 'a']<br />

Udskriv: Doseringsforhold + Indtast nyt Indlæs: indtastede doseringsforhold<br />

[(vaerdie < 1 || vaerdie > 10) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[true]<br />

[false]<br />

Gem vaerdi<br />

1


[valg == 'b']<br />

Udskriv: max. temperatur + Indtast nyt Indlæs: indtastede max. temperatur<br />

[(vaerdie < 10 || vaerdie > 20) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem vaerdi<br />

[valg == 'c']<br />

Udskriv : max. saft + indtast nyt Indlæs: indtastede max. saft<br />

[(vaerdie < 2000 || vaerdie > 4500) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem værdi<br />

[valg == 'd']<br />

Udskriv: min. saft + indtast nyt Indlæs: Indtastede min. saft<br />

[(vaerdie < 500 || vaerdie > 1000) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[false]<br />

Gem værdi<br />

[valg == 'e']<br />

Udskriv: max. vand + Indlæs nyt Indlæs: indtastede max. vand<br />

[(vaerdie < 2000 || vaerdie > 4500) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

2<br />

Gem værdi<br />

155


156<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

[valg == 'f']<br />

Udskriv: min. vand + Indlæs nyt Indlæs: indtastede min. vand<br />

[(vaerdie < 500 || vaerdie > 1000) == false]<br />

Fejlmeddelelse Indlæs ny værdi<br />

[false]<br />

Gem værdi<br />

[valg == 'g']<br />

Udskriv: sæt værdier til default default-værdier gemmes<br />

[false]<br />

Afslutning af programmet<br />

[valg == 'q']<br />

Udskriv: Automaten er klar til brug...<br />

[false]<br />

[checkKonfigurering == true]<br />

[false]<br />

3


6.2.9 STATUSPANEL<br />

taendLampe<br />

[Else]<br />

[Else]<br />

[Else]<br />

[Else]<br />

[Else]<br />

[Else]<br />

[id == "FREM"]<br />

[id == "SAFT"]<br />

[id == "VAND"]<br />

[id == "TILBAGE"]<br />

[id == "VAESKE_VARM"]<br />

[id == "ALLE"]<br />

Udskriver en fejl meddelse<br />

6.2.10 TEMPERATURDISPLAY<br />

udlaesTemperatur<br />

setAnalogOutput(0,( ((temp*4095)/1000)) )<br />

Sætter udgangen "FREM" via classen: InputOutput Break<br />

Sætter udgangen "SAFT" via classen: InputOutput Break<br />

Sætter udgangen "VAND" via classen: InputOutput Break<br />

Sætter udgangen "TILBAGE" via classen: InputOutput Break<br />

Sætter udgangen "VAESKE_VARM" via classen: InputOutput Break<br />

Sætter alle udgangene der er i denne switch høj, via classen: InputOutput Break<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

157


158<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.2.11 TEMPERATUROVERVAAGER<br />

[false]<br />

udlaesTemperatur (0)<br />

slukLampe ("VAESKE_VARM")<br />

6.2.12 TEMPERATURSENSOR<br />

opdaterTemp<br />

resultat = getAnalogInput( 0, 3 ) + 2047<br />

temp = ((resultat-204.75)*10)/122.85<br />

overvaagerOgOpdatere<br />

aktuelTemperatur = laesTemperatur()<br />

return fejlcheck()<br />

[fejlcheck() == true]<br />

laesTemperatur<br />

opdaterTemp()<br />

return (float) temp<br />

udlaesTemperatur ( aktuelTemperatur )<br />

fejlcheck(void)<br />

return( (-08.3 < temp) && (temp < 308.3) )


6.2.13 TIMER<br />

Timer ( void )<br />

startSec = 0<br />

startMSec = 0<br />

timeoutTid = 0<br />

CheckForTimeout( void )<br />

_ftime (&tidNu)<br />

tidGaaet = ((tidNu.time - startSec) * 1000)<br />

return (tidGaaet < timeoutTid)<br />

Start (int milliseconds )<br />

timeoutTid = milliseconds<br />

timeoutTid = milliseconds<br />

startSec = startTid.time<br />

startMSec = startTid.millitm<br />

Stop( void )<br />

_ftime (&tidNu)<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

int tidTilbage = timeoutTid - (((tidNu.time - startSec) * 1000) + (tidNu.millitm - startMSec))<br />

startSec = 0<br />

startMSec = 0<br />

timeoutTid = 0<br />

return tidTilbage<br />

159


160<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3 SOFTWARE KODE<br />

6.3.1 AD512DRV<br />

6.3.<strong>1.</strong>1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AD512drv.hpp<br />

// Projekt Humusoft AD 512 kort<br />

//<br />

// Fil AD512DRV.hpp<br />

// Forfatter Erik Gross Jensen<br />

//<br />

// Beskrivelse Header file til funktioner til styring af I/O porte på<br />

// Humusoft AD512 Data Acquisition Kort<br />

// Version <strong>1.</strong>0 201000<br />

// 2.0 240204<br />

// 2.1 271104/RSK : Ændret så Analog indgangen virker til +-5/+-10Volt<br />

#pragma once<br />

#include <br />

using namespace std;<br />

#include <br />

#include <br />

class AD512<br />

{<br />

public:<br />

AD512();<br />

int getDigitalInput(void);<br />

void setDigitalOutput(int value);<br />

short getAnalogInput(int channel, int range);<br />

void setAnalogOutput( int channel, int value);<br />

private:<br />

};<br />

1


6.3.<strong>1.</strong>2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AD512drv.cpp<br />

// Projekt Humusoft AD 512 kort<br />

//<br />

// Fil AD512DRV.cpp<br />

// Forfatter Erik Gross Jensen<br />

//<br />

// Beskrivelse Funktioner til styring af I/O porte på<br />

// Humusoft AD512 Data Acquisition Kort<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

// Version <strong>1.</strong>0 201000<br />

// 2.0 290304/EGJ : Ændret til objekter<br />

// 2.1 271104/RSK : Ændret så Analog indgangen virker til +-5/+-10Volt<br />

#include "AD512drv.hpp"<br />

#define IOENABLE 0x100<br />

// base address for the AD512 kort<br />

#define AD512BASE 0x300<br />

#define IOLENGTH 8<br />

/*****************************************************************************<br />

constructor<br />

enable direct access to I/O ports<br />

/****************************************************************************/<br />

AD512::AD512()<br />

{<br />

OSVERSIONINFO ver;<br />

HANDLE drvhandle;<br />

unsigned long cb;<br />

unsigned message[2];<br />

/* Test the Win32 platform we run on. If this is not Windows NT/2000, we can<br />

just return success because I/O access is already allowed. */<br />

ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);<br />

GetVersionEx(&ver);<br />

if (ver.dwPlatformId = VER_PLATFORM_WIN32_NT)<br />

{<br />

/* Open the handle to the DIRECTHW device driver. The driver must be installed<br />

for this to succeed. If this fails the board cannot be accessed. */<br />

}<br />

}<br />

drvhandle = CreateFile("\\\\.\\DIRECTHW", GENERIC_READ | GENERIC_WRITE, 0, NULL,<br />

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);<br />

if (drvhandle == INVALID_HANDLE_VALUE)<br />

{<br />

cout


162<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AD512drv.cpp<br />

Input: channel : kanalnummer fra 0-7<br />

range : 0 = 0 - 5 volt return: 0 to 4095<br />

1 = +/- 5 volt (-2047) to 2047<br />

2 = 0 - 10 volt 0 to 4095<br />

3 = +/- 10 volt (-2047) to 2047<br />

Output: den læste værdi 12 bit som en int fra 0-4095<br />

;****************************************************************************/<br />

short AD512::getAnalogInput(int ch, int range)<br />

{<br />

_outp(AD512BASE+5, ch | (range


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AutomatBrugerInterface.cpp<br />

}<br />

cout


164<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.2 AUTOMATBRUGERINTERFACE<br />

6.3.2.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AutomatBrugerInterface.h<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil AutomatBrugerInterface.h<br />

Beskrivelse Klassen er ansvarlig for at kommunikere med automatbrugeren dvs. med<br />

automatejeren, der har mulighed for at<br />

konfigurere automaten vha. operationen ”editerKonfigParametre”. Klassen<br />

SoftDrinkStyring anvender<br />

AutomatBrugerInterface til at udskrive meddelelser på skærmen til brugeren<br />

vha. operationen ”udskrivTekst”.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version 3.0 - 021104<br />

*/<br />

#include <br />

#include <br />

#include <br />

#include "KonfigureringsParametre.h"<br />

#include "KonfigureringsSwitch.h"<br />

using namespace std;<br />

class AutomatBrugerInterface<br />

{<br />

public:<br />

void editKonfigParametre();<br />

private:<br />

KonfigureringsSwitch objKonfigureringsSwitch;<br />

KonfigureringsParametre nyEdit;<br />

int rundOpNed(double);<br />

int valg;<br />

};<br />

1


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.2.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AutomatBrugerInterface.cpp<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil AutomatBrugerInterface.cpp<br />

Beskrivelse Klassen er ansvarlig for at kommunikere med automatbrugeren dvs. med<br />

automatejeren, der har mulighed for at<br />

konfigurere automaten vha. operationen ”editerKonfigParametre”. Klassen<br />

SoftDrinkStyring anvender<br />

AutomatBrugerInterface til at udskrive meddelelser på skærmen til brugeren<br />

vha. operationen ”udskrivTekst”.<br />

Forfatter(e) Runar Birgir Gislason og Jonas<br />

Version 3.0 - 021104<br />

*/<br />

#include "AutomatBrugerInterface.h"<br />

void AutomatBrugerInterface::editKonfigParametre()<br />

{<br />

char valg;<br />

double nyvaerdie;<br />

while (objKonfigureringsSwitch.checkKonfigurering())<br />

{<br />

do<br />

{<br />

system ("cls");<br />

cout


166<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AutomatBrugerInterface.cpp<br />

}<br />

else if ( valg == 'b' )<br />

{<br />

cout


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\AutomatBrugerInterface.cpp<br />

}<br />

cout


168<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.3 DOSERINGSENHED<br />

6.3.3.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\DoseringsEnhed.h<br />

/*<br />

DoseringsEnhed<br />

Ansvar:<br />

- Beregn saft- og vandmængden der skal fyldes i koppen og omregn til antal sekunder<br />

ventilen skal være åben.<br />

- Fratræk den doserede væskemængde fra væskemængden i beholderen.<br />

- Reset væskemængde i beholderen til MAX (til brug ved påfyldning).<br />

- Tjek om væskemængden i beholderen er over MIN.<br />

- Udregner resterende væskemængde fra resttiden og ligger det til væskemængden i<br />

beholderen i tilfælde af reset under væskedosering.<br />

*/<br />

#include "KonfigureringsParametre.h"<br />

#include <br />

using namespace std;<br />

class DoseringsEnhed<br />

{<br />

public:<br />

DoseringsEnhed();<br />

bool checkVand();<br />

bool checkSaft();<br />

void resetVand();<br />

void resetSaft();<br />

void beregnSaftMaengde();<br />

void beregnVandMaengde();<br />

void saftRetur(int);<br />

void vandRetur(int);<br />

int SaftMaengdeMillisekunder;<br />

int VandMaengdeMillisekunder;<br />

private:<br />

int restSaftMaengde;<br />

int restVandMaengde;<br />

KonfigureringsParametre Konfig;<br />

double doseringsmaengdeSaft;<br />

double doseringsmaengdeVand;<br />

};<br />

1


6.3.3.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\DoseringsEnhed.cpp<br />

/*<br />

DoseringsEnhed.cpp<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Ansvar:<br />

- Beregn saft- og vandmængden der skal fyldes i koppen og omregn til antal sekunder<br />

ventilen skal være åben.<br />

- Fratræk den doserede væskemængde fra væskemængden i beholderen.<br />

- Reset væskemængde i beholderen til MAX (til brug ved påfyldning).<br />

- Tjek om væskemængden i beholderen er over MIN.<br />

- Udregner resterende væskemængde fra resttiden og ligger det til væskemængden i<br />

beholderen i tilfælde af reset under væskedosering.<br />

*/<br />

#include "DoseringsEnhed.h"<br />

DoseringsEnhed::DoseringsEnhed()<br />

{<br />

restSaftMaengde = 0;<br />

restVandMaengde = 0;<br />

doseringsmaengdeSaft = 0;<br />

doseringsmaengdeVand = 0;<br />

SaftMaengdeMillisekunder = 0;<br />

VandMaengdeMillisekunder = 0;<br />

}<br />

void DoseringsEnhed::saftRetur(int saft) //saft = antal millisekunder der ikke er blevet<br />

fyldt i koppen.<br />

{<br />

}<br />

restSaftMaengde += saft *(doseringsmaengdeSaft/SaftMaengdeMillisekunder);<br />

void DoseringsEnhed::vandRetur(int vand) //vand = antal millisekunder der ikke er blevet<br />

fyldt i koppen.<br />

{<br />

restVandMaengde += vand *(doseringsmaengdeVand/VandMaengdeMillisekunder);<br />

}<br />

bool DoseringsEnhed::checkVand()<br />

{<br />

return restVandMaengde > Konfig.laesMinVand(); //Tjekker om væskestanden er over<br />

Minimum vand i konfigparametre<br />

}<br />

bool DoseringsEnhed::checkSaft()<br />

{<br />

return restSaftMaengde > Konfig.laesMinSaft(); //Tjekker om væskestanden er over<br />

Minimum saft i konfigparametre<br />

}<br />

void DoseringsEnhed::resetVand()<br />

{<br />

restVandMaengde = Konfig.laesMaxVand(); //Sætter væskemængden i beholderen til default<br />

fra konfigparametre<br />

}<br />

void DoseringsEnhed::resetSaft()<br />

{<br />

restSaftMaengde = Konfig.laesMaxSaft(); //Sætter væskemængden i beholderen til default<br />

fra konfigparametre<br />

}<br />

void DoseringsEnhed::beregnSaftMaengde()<br />

{<br />

cout


170<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\DoseringsEnhed.cpp<br />

}<br />

//SaftMaengdeMillisekunder = antal millisekunder saftventilen skal være åben.<br />

void DoseringsEnhed::beregnVandMaengde()<br />

{<br />

cout


6.3.4 INPUTOUTPUT<br />

6.3.4.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\InputOutput.h<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

/*<br />

Projekt: SoftDrinkautomatStyring<br />

Fil: TemperaturDisplay.cpp<br />

Beskrivelse: Klassen InputOutput har til funktion at gøre det nemmere at:<br />

- Læse de digitale indgange<br />

- Skrive til udgangene.<br />

Forfattere: Rune Søe-Knudsen<br />

Version: <strong>1.</strong>0 - 031104 - oprindelig version<br />

*/<br />

#pragma once<br />

#include <br />

#include "AD512drv.hpp"<br />

using namespace std;<br />

class InputOutput<br />

{<br />

public:<br />

InputOutput();<br />

bool inputBit(int portnummer);<br />

void outputBit(int portnummer, bool vaerdi);<br />

void printOutputBit(void);<br />

void printInputBit(void);<br />

private:<br />

static bool intralisering; //static betyder: Fælles variabel alle objekter<br />

static int outputStatus; // der bliver lavet af denne klasse<br />

AD512 objAD512;<br />

};<br />

1<br />

171


172<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.4.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\InputOutput.cpp<br />

#include "InputOutput.h"<br />

bool InputOutput::intralisering;<br />

int InputOutput::outputStatus;<br />

InputOutput::InputOutput()<br />

{<br />

if(!intralisering)<br />

{<br />

outputStatus = 0;<br />

objAD512.setDigitalOutput(outputStatus);<br />

intralisering = true;<br />

}<br />

}<br />

bool InputOutput::inputBit(int portnummer)<br />

{<br />

return (objAD512.getDigitalInput() >> portnummer) & 1;<br />

}<br />

// eksempel: 76543210<br />

// ordet vi modtager fra ingangs kortet er: 00111001<br />

// Nu ønsker vi at kigge på mit nummer 3<br />

// vi flytter dens pladser 3 gange til højre.<br />

// ***76543<br />

// 00000111<br />

// så "AND"'er vi med 1 dvs: AND 00000001<br />

// Når vi har "AND"'et bit for bit = 00000001 ->True<br />

//<br />

// Hvis det var bit 2 vi var interesseret i:<br />

// 76543210<br />

// 00111001<br />

// flyttet 2 gange til højer<br />

// **765432<br />

// 00001110<br />

//AND 00000001<br />

//= 00000000 ->false<br />

//<br />

void InputOutput::outputBit(int portnummer, bool vaerdi)<br />

{<br />

if(vaerdi!=(outputStatus >> portnummer & 1))<br />

{<br />

outputStatus = outputStatus ^ (1


\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\InputOutput.cpp<br />

}<br />

{<br />

cout > taeller) & 1)


174<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.5 KONFIGURERINGSPARAMETRE<br />

6.3.5.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KonfigureringsParametre.h<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil KonfigureringsParametre.h<br />

Beskrivelse Klassen har ansvaret for <strong>SDS</strong> systemets konfigureringsparametre. Hver<br />

parameter har en deaultværdi, der kan<br />

ændres af automatejeren under konfigureringen. Klassen har operationer til<br />

hhv. at læse og skrive de enkelte<br />

attributter.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#pragma once<br />

#include <br />

using namespace std;<br />

class KonfigureringsParametre<br />

{<br />

public:<br />

KonfigureringsParametre();<br />

void skrivDoseringsForhold (int);<br />

void skrivMaxTemp (int);<br />

void skrivMaxSaft (int);<br />

void skrivMinSaft (int);<br />

void skrivMaxVand (int);<br />

void skrivMinVand (int);<br />

int laesDoseringsForhold ();<br />

int laesMaxTemp ();<br />

int laesMaxSaft ();<br />

int laesMinSaft ();<br />

int laesMaxVand ();<br />

int laesMinVand ();<br />

private:<br />

static bool intralisering;<br />

static doseringsforhold;<br />

static int maxTemp;<br />

static int maxSaft;<br />

static int minSaft;<br />

static int maxVand;<br />

static int minVand;<br />

};<br />

1


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.5.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KonfigureringsParametre.cpp<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil KonfigureringsParametre.cpp<br />

Beskrivelse Klassen har ansvaret for <strong>SDS</strong> systemets konfigureringsparametre. Hver<br />

parameter har en deaultværdi, der kan<br />

ændres af automatejeren under konfigureringen. Klassen har operationer til<br />

hhv. at læse og skrive de enkelte<br />

attributter.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#include "KonfigureringsParametre.h"<br />

//AutomatBrugerinterface ændrer værdierne<br />

bool KonfigureringsParametre::intralisering;<br />

int KonfigureringsParametre::doseringsforhold;<br />

int KonfigureringsParametre::maxTemp;<br />

int KonfigureringsParametre::maxSaft;<br />

int KonfigureringsParametre::minSaft;<br />

int KonfigureringsParametre::maxVand;<br />

int KonfigureringsParametre::minVand;<br />

KonfigureringsParametre::KonfigureringsParametre()<br />

{<br />

if(!intralisering)<br />

{<br />

doseringsforhold = 5;<br />

maxTemp = 160;<br />

maxSaft = 4000;<br />

minSaft = 500;<br />

maxVand = 4000;<br />

minVand = 500;<br />

intralisering = true;<br />

}<br />

}<br />

int KonfigureringsParametre::laesDoseringsForhold ()<br />

{<br />

return doseringsforhold;<br />

}<br />

int KonfigureringsParametre::laesMaxTemp ()<br />

{<br />

return maxTemp;<br />

}<br />

int KonfigureringsParametre::laesMaxSaft ()<br />

{<br />

return maxSaft;<br />

}<br />

int KonfigureringsParametre::laesMinSaft ()<br />

{<br />

return minSaft;<br />

}<br />

int KonfigureringsParametre::laesMaxVand ()<br />

{<br />

return maxVand;<br />

}<br />

int KonfigureringsParametre::laesMinVand ()<br />

{<br />

return minVand;<br />

}<br />

void KonfigureringsParametre::skrivDoseringsForhold (int nydoseringsforhold)<br />

{<br />

doseringsforhold = nydoseringsforhold;<br />

}<br />

void KonfigureringsParametre::skrivMaxTemp (int nyMaxTemp)<br />

{<br />

maxTemp = nyMaxTemp;<br />

}<br />

void KonfigureringsParametre::skrivMaxSaft (int nyMaxSaft)<br />

1<br />

175


176<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KonfigureringsParametre.cpp<br />

{<br />

maxSaft = nyMaxSaft;<br />

}<br />

void KonfigureringsParametre::skrivMinSaft (int nyMinSaft)<br />

{<br />

minSaft = nyMinSaft;<br />

}<br />

void KonfigureringsParametre::skrivMaxVand (int nyMaxVand)<br />

{<br />

maxVand = nyMaxVand;<br />

}<br />

void KonfigureringsParametre::skrivMinVand (int nyMinVand)<br />

{<br />

minVand = nyMinVand;<br />

}<br />

2


6.3.6 KONFIGURERINGSSWITCH<br />

6.3.6.1 HEADER<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KonfigureringsSwitch.h<br />

/*<br />

Fil : KonfigureringsSwitch.h<br />

Beskrivelse : Klassen varetager SW interface til den konfiguereringsswitch,<br />

der implementeres på elektronikkortet.<br />

Forfatter Robert J.Guilford<br />

*/<br />

#pragma once<br />

#include "InputOutput.h"<br />

class KonfigureringsSwitch<br />

{<br />

public:<br />

bool checkKonfigurering();<br />

private:<br />

InputOutput objInputOutput;<br />

};<br />

1<br />

177


178<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.6.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KonfigureringsSwitch.cpp<br />

/*<br />

Projekt : <strong>1.</strong><strong>Semester</strong><br />

Fil : KonfigureringsSwitch.cpp<br />

Beskrivelse : Klassen varetager SW interface til den konfiguereringsswitch,<br />

der implementeres på elektronikkortet.<br />

Robert J.Guilford<br />

Version <strong>1.</strong>0<br />

*/<br />

#include "KonfigureringsSwitch.h"<br />

bool KonfigureringsSwitch::checkKonfigurering()<br />

{<br />

if( objInputOutput.inputBit( 5 ) == true )<br />

{<br />

return true;<br />

}<br />

else<br />

{<br />

return false;<br />

}<br />

}<br />

1


6.3.7 KONTROLPANEL<br />

6.3.7.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KontrolPanel.h<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

// Projekt : <strong>1.</strong>semester<br />

//<br />

// Fil : KontrolPanel.h<br />

//<br />

// Beskrivelse : Klassen er SW interface til doseringsmekanikkens kontroltaster<br />

// START og RESET. Klassen indeholder en operation til at teste om der er<br />

aktiveret<br />

// en tast og en operation til at læse den konkrete tast.<br />

//<br />

// Forfatter : Robert J. Guilford<br />

//<br />

// Version <strong>1.</strong>0<br />

#pragma once<br />

#include <br />

#include <br />

#include "InputOutput.h"<br />

using namespace std;<br />

class KontrolPanel<br />

{<br />

public:<br />

bool checkForTast(string);<br />

private:<br />

InputOutput objInputOutput;<br />

};<br />

1<br />

179


180<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.7.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KontrolPanel.cpp<br />

// Projekt : <strong>1.</strong>semester<br />

//<br />

// Fil : KontrolPanel.cpp<br />

//<br />

// Beskrivelse : Klassen er SW interface til doseringsmekanikkens kontroltaster<br />

// START og RESET. Klassen indeholder en operation til at teste om der er<br />

aktiveret<br />

// en tast og en operation til at læse den konkrete tast.<br />

//<br />

// Forfatter : Robert J. Guilford<br />

//<br />

// Version <strong>1.</strong>0<br />

#include "KontrolPanel.h"<br />

bool KontrolPanel::checkForTast(string id)<br />

{<br />

if (id == "START")<br />

{<br />

return objInputOutput.inputBit( 0 );<br />

}<br />

}<br />

else if (id == "RESET")<br />

{<br />

return objInputOutput.inputBit( 1 );<br />

}<br />

1


6.3.8 KOPTRANSPORTENHED<br />

6.3.8.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KopTransportEnhed.h<br />

/*<br />

Søren G.<br />

3/11/2004<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

KopTransportEnhed<br />

Ansvar: Klassen er SW interface til den elektronik, der styrer hhv. stepmotor<br />

og aflæser positionssensorer.<br />

*/<br />

#include "InputOutput.h"<br />

class KopTransportEnhed<br />

{<br />

public:<br />

KopTransportEnhed();<br />

void startMotorFrem();<br />

void startMotorTilbage();<br />

void stopMotor();<br />

bool checkForKopIHolder();<br />

bool checkForStartPosition();<br />

bool checkForDoseringsPosition();<br />

bool checkForFyldtKop();<br />

void kopFyldt( bool );<br />

private:<br />

bool fyldtKop;<br />

InputOutput objInputOutput;<br />

};<br />

1<br />

181


182<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.8.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\KopTransportEnhed.cpp<br />

/*<br />

Søren G.<br />

3/11/2004<br />

KopTransportEnhed<br />

Ansvar: Klassen er SW interface til den elektronik, der styrer hhv. stepmotor<br />

og aflæser positionssensorer.<br />

*/<br />

#include "KopTransportEnhed.h"<br />

KopTransportEnhed::KopTransportEnhed()<br />

{<br />

/*Koppen er tom når automaten opstartes*/<br />

fyldtKop = false;<br />

}<br />

void KopTransportEnhed::startMotorFrem()<br />

{<br />

objInputOutput.outputBit( 5, 1 );<br />

}<br />

void KopTransportEnhed::startMotorTilbage()<br />

{<br />

objInputOutput.outputBit( 6, 1 );<br />

}<br />

void KopTransportEnhed::stopMotor()<br />

{<br />

/* Stopper Motoren: */<br />

objInputOutput.outputBit( 5 ,0 );<br />

objInputOutput.outputBit( 6, 0 );<br />

}<br />

bool KopTransportEnhed::checkForKopIHolder()<br />

{<br />

return objInputOutput.inputBit( 4 );<br />

}<br />

bool KopTransportEnhed::checkForStartPosition()<br />

{<br />

return objInputOutput.inputBit( 2 );<br />

}<br />

bool KopTransportEnhed::checkForDoseringsPosition()<br />

{<br />

return objInputOutput.inputBit( 3 );<br />

}<br />

void KopTransportEnhed::kopFyldt( bool status )<br />

{<br />

fyldtKop = status;<br />

}<br />

bool KopTransportEnhed::checkForFyldtKop()<br />

{<br />

/*Hvis koppen er fyldt og der sidder en kop i holderen*/<br />

if ( fyldtKop == true && checkForKopIHolder() == true)<br />

return true;<br />

}<br />

/*Hvis koppen er fyldt, men er fjernet fra holderen*/<br />

/*Koppen sættes til tom*/<br />

else if ( fyldtKop == true && checkForKopIHolder() == false )<br />

{<br />

fyldtKop = false;<br />

return false;<br />

}<br />

else<br />

{<br />

return false;<br />

}<br />

1


6.3.9 SOFTDRINKSTYRING<br />

6.3.9.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.h<br />

/*<br />

Fil : SoftDrinkStyring.h<br />

*/<br />

#pragma once<br />

#include <br />

using namespace std;<br />

#include "Timer.h"<br />

#include "TemperaturOvervaager.h"<br />

#include "StatusPanel.h"<br />

#include "DoseringsEnhed.h"<br />

#include "KopTransportenhed.h"<br />

#include "KonfigureringsSwitch.h"<br />

#include "KontrolPanel.h"<br />

#include "AutomatBrugerInterface.h"<br />

#include "KonfigureringsParametre.h"<br />

class SoftDrinkStyring<br />

{<br />

public:<br />

SoftDrinkStyring();<br />

void run();<br />

private:<br />

int useCase1,useCase2, useCase3; //Pointer initraliseres.<br />

};<br />

/* Opretter objekter af klasserne */<br />

Timer objTimerSaft, objTimerVand;<br />

TemperaturOvervaager objTemperaturOvervaager;<br />

StatusPanel objStatusPanel;<br />

DoseringsEnhed objDoseringsEnhed;<br />

KopTransportEnhed objKopTransportEnhed;<br />

KonfigureringsSwitch objKonfigureringsSwitch;<br />

KontrolPanel objKontrolPanel;<br />

AutomatBrugerInterface objAutomatBrugerInterface;<br />

KonfigureringsParametre objKonfigureringsParametre;<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

1<br />

183


184<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.9.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.cpp<br />

/*<br />

Søren G.<br />

20/10/2004<br />

3/11-2004<br />

SoftDrinkStyring<br />

Ansvar:<br />

Denne klasse er hove<strong>dk</strong>lassen i <strong>SDS</strong> systemet, der har ansvaret for den overordnede styring<br />

af softdrinkautomaten.<br />

Klassen implementerer logikken i Use Casen ”Fremstil drink”. Funktionaliteten er designet<br />

vha. en tilstandsmaskine,<br />

der er vist på tilstandsdiagrammet i kapitel 4.2.<br />

Der oprettes en instans af denne klasse i hovedprogrammet main, hvorefter main aktiverer<br />

klassens run() funktion.<br />

Klassen har attributterne restSaftMaengde og restVandMaengde, der justeres hver gang, der<br />

er doseret en drink.<br />

Attributter:<br />

restSaftMaengde: int<br />

initialiseres ved opstart og nedjusteres for hver dosering<br />

restVandMaegde: int<br />

initialiseres ved opstart og nedjusteres for hver dosering<br />

Operationer:<br />

SoftDrinkStyring: constructor<br />

Opretter objektet og initialiserer attributterne og associationerne til de øvrige objekter.<br />

run(): void<br />

Aktiverer <strong>SDS</strong> programmet og indeholder hovedløkken i <strong>SDS</strong> programmet.<br />

Programmet implementeres vha. tilstandsmaskinen, der er vist på Figur 3.<br />

checkVand(): bool<br />

Checker om det er MINIMUM_VAND i vandbeholderen – returnerer sand eller falsk<br />

checkSaft(): bool<br />

Checker om det er MINIMUM_SAFT i saftbeholderen – returnerer sand eller falsk<br />

*/<br />

#include "SoftDrinkStyring.h"<br />

void main()<br />

{<br />

// Opretter et Objekt af SoftDrinkStyring<br />

SoftDrinkStyring objSoftDrinkStyring;<br />

objSoftDrinkStyring.run();<br />

}<br />

SoftDrinkStyring::SoftDrinkStyring()<br />

{<br />

objDoseringsEnhed.resetSaft();<br />

objDoseringsEnhed.resetVand();<br />

useCase1=10;<br />

}<br />

void SoftDrinkStyring::run()<br />

{<br />

cout


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.cpp<br />

}<br />

else<br />

{<br />

cout


186<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.cpp<br />

objKopTransportEnhed.startMotorFrem();<br />

objStatusPanel.taendLampe("FREM");<br />

useCase1=40;<br />

break;<br />

case 40:<br />

if(objKontrolPanel.checkForTast("RESET"))<br />

useCase1=80;<br />

if(objKopTransportEnhed.checkForDoseringsPosition())<br />

{<br />

cout


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.cpp<br />

cout


188<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\SoftDrinkStyring.cpp<br />

motoren<br />

lysdioden<br />

UseCase1<br />

}<br />

}<br />

break;<br />

objKopTransportEnhed.stopMotor(); // Stopper<br />

objStatusPanel.slukLampe("TILBAGE"); // Slukker<br />

useCase1=10; // Afslutter<br />

default:<br />

useCase1=10;<br />

break;<br />

//USE CASE 2<br />

// Overvågning:<br />

objKopTransportEnhed.checkForFyldtKop(); //Holder øje med om koppen bliver<br />

udskiftet/tømt<br />

objTemperaturOvervaager.checkForMaxTemperatur();<br />

if( !objTemperaturOvervaager.overvaagerOgOpdatere() )<br />

{<br />

system("cls");<br />

cout


6.3.10 STATUSPANEL<br />

6.3.10.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\StatusPanel.h<br />

/*<br />

Søren G.<br />

20/10/2004<br />

Rune S-K<br />

06/11/2004<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

StatusPanel<br />

Ansvar:<br />

Klassen er SW interface til doseringsmekanikkens status lamper. Hver lampe har en eentydig<br />

id (en enumeration type), der anvendes til hhv. at styre og slukke en given lampe.<br />

Lamperne Vand og Saft er specielle idet de samtidig også styrer hhv. vand og<br />

saftventilen.<br />

LampeId = (SAFT, VAND, FREM, TILBAGE,VAESKE_VARM, ALLE)<br />

Bemærk at lamperne: (POS_START, POS_DOS) bliver styret via hardware'en<br />

*/<br />

#pragma once<br />

#include <br />

#include "InputOutput.h"<br />

#include <br />

using namespace std;<br />

class StatusPanel<br />

{<br />

public:<br />

void taendLampe(string);<br />

void slukLampe(string);<br />

private:<br />

InputOutput objOutput;<br />

};<br />

1<br />

189


190<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.10.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\StatusPanel.cpp<br />

/*<br />

Søren G.<br />

20/10/2004<br />

Rune S-K<br />

06/11/2004<br />

StatusPanel<br />

Ansvar: Klassen er SW interface til doseringsmekanikkens status lamper. Hver lampe har en<br />

eentydig id (en enumeration type),<br />

der anvendes til hhv. at styre og slukke en given lampe. Lamperne Vand og Saft er<br />

specielle idet de samtidig<br />

også styrer hhv. vand og saftventilen. LampeId = (SAFT, VAND, FREM, TILBAGE,<br />

VAESKE_VARM, ALLE)<br />

Bemærk at lamperne: (POS_START, POS_DOS) bliver styret via hardware'en<br />

*/<br />

#include "StatusPanel.h"<br />

void StatusPanel::taendLampe(string id)<br />

{<br />

if(id=="FREM")<br />

{<br />

objOutput.outputBit( 0, true);<br />

}<br />

else if(id=="SAFT")<br />

{<br />

objOutput.outputBit( 1, true);<br />

}<br />

else if(id=="VAND")<br />

{<br />

objOutput.outputBit( 2, true);<br />

}<br />

else if(id=="TILBAGE")<br />

{<br />

objOutput.outputBit( 3, true);<br />

}<br />

else if(id=="VAESKE_VARM")<br />

{<br />

objOutput.outputBit( 4, true);<br />

}<br />

else if(id=="ALLE")<br />

{<br />

objOutput.outputBit( 0, true);<br />

objOutput.outputBit( 1, true);<br />

objOutput.outputBit( 2, true);<br />

objOutput.outputBit( 3, true);<br />

objOutput.outputBit( 4, true);<br />

}<br />

else<br />

{<br />

cout


\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\StatusPanel.cpp<br />

}<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

objOutput.outputBit( 4, false);<br />

}<br />

else if(id=="ALLE")<br />

{<br />

objOutput.outputBit( 0, false);<br />

objOutput.outputBit( 1, false);<br />

objOutput.outputBit( 2, false);<br />

objOutput.outputBit( 3, false);<br />

objOutput.outputBit( 4, false);<br />

}<br />

else<br />

{<br />

cout


192<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.11 TEMPERATURDISPLAY<br />

6.3.1<strong>1.</strong>1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturDisplay.h<br />

/*<br />

Projekt: SoftDrinkautomatStyring<br />

Fil: TemperaturDisplay.cpp<br />

Beskrivelse: Klassen er SW interface til den elektronik,<br />

der udlæser en temperaturværdi til hardware displayet<br />

Classen modtager temperaturen i decigrader censius dvs. grader*10.<br />

Forfattere: Søren Rasmussen og Rune Søe-Knudsen<br />

Version: <strong>1.</strong>0 - 031104 - oprindelig version<br />

*/<br />

#pragma once<br />

#include <br />

#include "AD512drv.hpp"<br />

using namespace std;<br />

class TemperaturDisplay<br />

{<br />

public:<br />

void udlaesTemperatur(double);<br />

private:<br />

AD512 objAD512;<br />

};<br />

1


6.3.1<strong>1.</strong>2 SOURCE<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturDisplay.cpp<br />

/*<br />

Projekt: SoftDrinkautomatStyring<br />

Fil: TemperaturDisplay.cpp<br />

Beskrivelse: Klassen er SW interface til den elektronik,<br />

der udlæser en temperaturværdi til hardware displayet<br />

Classen modtager temperaturen i decigrader censius dvs. grader*10.<br />

Forfattere: Søren Rasmussen og Rune Søe-Knudsen<br />

Version: <strong>1.</strong>0 - 031104 - oprindelig version<br />

*/<br />

#include "TemperaturDisplay.h"<br />

#include <br />

using namespace std;<br />

void TemperaturDisplay::udlaesTemperatur(double temp)<br />

{<br />

objAD512.setAnalogOutput(0,( ((temp*4095)/1000)) );<br />

}<br />

1<br />

193


194<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.12 TEMPERATUROVERVAAGER<br />

6.3.12.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturOvervaager.h<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil TemperaturOvervaager.h<br />

Beskrivelse Klassen har ansvaret for at overvåge og vise vandets temperatur.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#include <br />

#include "KonfigureringsParametre.h"<br />

#include "TemperaturSensor.h"<br />

#include "TemperaturDisplay.h"<br />

#include "StatusPanel.h"<br />

using namespace std;<br />

class TemperaturOvervaager<br />

{<br />

public:<br />

TemperaturOvervaager();<br />

bool checkForMaxTemperatur(); //True hvis temperaturen er OK<br />

bool overvaagerOgOpdatere(void); //True hvis der ingen fejl er at melde<br />

private:<br />

double aktuelTemperatur;<br />

int maxTemp;<br />

KonfigureringsParametre objKonfigureringsParametre;<br />

TemperaturSensor objTemperaturSensor;<br />

TemperaturDisplay objTemperaturDisplay;<br />

StatusPanel objStatusPanel;<br />

};<br />

1


6.3.12.2 SOURCE<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturOvervaager.cpp<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil TemperaturOvervaager.cpp<br />

Beskrivelse Klassen har ansvaret for at overvåge og vise vandets temperatur.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#include "TemperaturOvervaager.h"<br />

TemperaturOvervaager::TemperaturOvervaager()<br />

{<br />

}<br />

bool TemperaturOvervaager::checkForMaxTemperatur (void)<br />

{<br />

aktuelTemperatur = objTemperaturSensor.laesTemperatur(); // Opdatere Temperaturen<br />

}<br />

/* Hvis temperaturen er for høj og der ingen følerfejl er*/<br />

if ((int(aktuelTemperatur) > objKonfigureringsParametre.laesMaxTemp()) || !<br />

objTemperaturSensor.fejlcheck() )<br />

{<br />

objStatusPanel.taendLampe ("VAESKE_VARM"); // - tændes lysdioden<br />

return false;<br />

}<br />

else // Hvis temperaturen iorden<br />

{<br />

objStatusPanel.slukLampe ("VAESKE_VARM"); // - slukkes lysdioden<br />

return true;<br />

}<br />

bool TemperaturOvervaager::overvaagerOgOpdatere(void)<br />

{<br />

aktuelTemperatur = objTemperaturSensor.laesTemperatur(); // Opdatere Temperaturen<br />

}<br />

if(objTemperaturSensor.fejlcheck())<br />

{<br />

objTemperaturDisplay.udlaesTemperatur ( aktuelTemperatur ); // Udlæser<br />

temperaturen til displayet<br />

}<br />

else<br />

{<br />

objTemperaturDisplay.udlaesTemperatur (0); // Føler fejl der udlæser 0<br />

til displayet<br />

objStatusPanel.slukLampe ("VAESKE_VARM"); // Lysdioden slukkes<br />

}<br />

return objTemperaturSensor.fejlcheck(); // Hvis føler fejl så<br />

returneres "false" eller "true"<br />

1<br />

195


196<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.13 TEMPERATURSENSOR<br />

6.3.13.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturSensor.h<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil TemperaturSensor.h<br />

Beskrivelse Klassen er SW interface til den elektronik, der indlæser en temperaturværdi<br />

fra en<br />

temperaturføler i vandbeholderen.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#include <br />

#include "AD512drv.hpp"<br />

using namespace std;<br />

class TemperaturSensor<br />

{<br />

public:<br />

TemperaturSensor();<br />

void opdaterTemp();<br />

double laesTemperatur();<br />

bool fejlcheck();<br />

private:<br />

static double temp;<br />

double getAnalogInput;<br />

unsigned short resultat;<br />

AD512 objAD512;<br />

};<br />

1


6.3.13.2 SOURCE<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\TemperaturSensor.cpp<br />

/*<br />

Projekt SoftDrinkautomatStyring<br />

Fil TemperaturSensor.cpp<br />

Beskrivelse Klassen er SW interface til den elektronik, der indlæser en temperaturværdi<br />

fra en<br />

temperaturføler i vandbeholderen.<br />

Forfatter(e) Runar Birgir Gislason<br />

Version <strong>1.</strong>0 - 021104<br />

*/<br />

#include "TemperaturSensor.h"<br />

#include <br />

using namespace std;<br />

double TemperaturSensor::temp;<br />

TemperaturSensor::TemperaturSensor()<br />

{<br />

temp = 0;<br />

}<br />

void TemperaturSensor::opdaterTemp()<br />

{<br />

resultat = objAD512.getAnalogInput( 0, 3 ) + 2047;<br />

temp = ((resultat-204.75)*10)/122.85;<br />

}<br />

double TemperaturSensor::laesTemperatur()<br />

{<br />

opdaterTemp();<br />

return temp;<br />

}<br />

bool TemperaturSensor::fejlcheck(void)<br />

{<br />

/*<br />

Enhedsstørrelse = 30grader/18volt=1,666 grader/Volt<br />

Fejlmarginen er en halv volt = 1,666/2 = 0,83<br />

*/<br />

return( (-08.3 < temp) && (temp < 308.3) );<br />

}<br />

1<br />

197


198<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.3.14 TIMER<br />

6.3.14.1 HEADER<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\Timer.h<br />

/*<br />

Søren G.<br />

01/11-2004<br />

Beskrivelse: Klassen implementerer en software timer.<br />

Timeren kan startes og stoppes. Timeren tæller ned til nul.<br />

checkForTimeout chekker status for timeren.<br />

*/<br />

#include <br />

class Timer {<br />

public:<br />

Timer (void);<br />

void Start (int);<br />

int Stop (void);<br />

bool CheckForTimeout (void);<br />

private:<br />

int startMSec, startSec, timeoutTid, tidGaaet;<br />

_timeb startTid, tidNu;<br />

};<br />

1


6.3.14.2 SOURCE<br />

\\home2.iha.<strong>dk</strong>\groups\<strong>EIT</strong>1-1\Projekt\Software(final)\Kode\Timer.cpp<br />

/*<br />

Søren G.<br />

01/11-2004<br />

*/<br />

#include "Timer.h"<br />

#include <br />

using namespace std;<br />

Timer::Timer ( void )<br />

{<br />

startSec = 0;<br />

startMSec = 0;<br />

timeoutTid = 0;<br />

}<br />

void Timer::Start (int milliseconds )<br />

{<br />

timeoutTid = milliseconds;<br />

_ftime (&startTid);<br />

startSec = startTid.time;<br />

startMSec = startTid.millitm;<br />

}<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

// skal retunere millisec tilbage!<br />

int Timer::Stop( void )<br />

{<br />

/*Udregner tiden som er tilbage*/<br />

_ftime (&tidNu);<br />

int tidTilbage = timeoutTid - (((tidNu.time - startSec) * 1000) + (tidNu.millitm -<br />

startMSec));<br />

}<br />

/*Nulstiller*/<br />

startSec = 0;<br />

startMSec = 0;<br />

timeoutTid = 0;<br />

/*returnere tid der er tilbage*/<br />

return tidTilbage;<br />

bool Timer::CheckForTimeout( void )<br />

{<br />

_ftime (&tidNu);<br />

tidGaaet = ((tidNu.time - startSec) * 1000) + (tidNu.millitm - startMSec);<br />

return (tidGaaet < timeoutTid);<br />

}<br />

1<br />

199


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.4 DATAOPSAMLING VANDDOSERING<br />

Måledata<br />

200<br />

22 <br />

24<br />

<br />

26 <br />

28 <br />

<br />

30<br />

<br />

32 <br />

34 <br />

<br />

36 <br />

38 <br />

40 <br />

<br />

42 <br />

44 <br />

<br />

46<br />

<br />

48 <br />

50 <br />

<br />

52 <br />

54 <br />

56 <br />

<br />

58 <br />

60 <br />

<br />

62<br />

<br />

64 <br />

66 <br />

<br />

68 <br />

70 <br />

72 <br />

<br />

74 <br />

76 <br />

<br />

78<br />

<br />

80 <br />

82 <br />

<br />

84 <br />

86 <br />

Tid 88 <br />

<br />

444<br />

499<br />

554.5<br />

610<br />

666.5<br />

723.5<br />

78<strong>1.</strong>5<br />

840<br />

899<br />

958.5<br />

<strong>1.</strong>018 10<br />

SaftTank<br />

3<br />

<br />

<strong>1.</strong>079 10 3<br />

<br />

<strong>1.</strong>14 10 3<br />

<br />

<strong>1.</strong>202 10 3<br />

<br />

<strong>1.</strong>264 10 3<br />

<br />

<strong>1.</strong>327 10 3<br />

<br />

<strong>1.</strong>39 10 3<br />

<br />

<strong>1.</strong>454 10 3<br />

<br />

<strong>1.</strong>518 10 3<br />

<br />

<strong>1.</strong>583 10 3<br />

<br />

<strong>1.</strong>647 10 3<br />

<br />

<strong>1.</strong>713 10 3<br />

<br />

<strong>1.</strong>779 10 3<br />

<br />

<strong>1.</strong>845 10 3<br />

<br />

<strong>1.</strong>913 10 3<br />

<br />

<strong>1.</strong>98 10 3<br />

<br />

2.047 10 3<br />

<br />

2.115 10 3<br />

<br />

2.186 10 3<br />

<br />

2.256 10 3<br />

<br />

2.326 10 3<br />

<br />

2.397 10 3<br />

<br />

2.468 10 3<br />

<br />

2.54 10 3<br />

<br />

2.612 10 3<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

370<br />

426.5<br />

483<br />

540.5<br />

598.5<br />

656<br />

714.5<br />

773<br />

833<br />

893<br />

953.5<br />

<strong>1.</strong>015 10<br />

VandTank<br />

3<br />

<br />

<strong>1.</strong>077 10 3<br />

<br />

<strong>1.</strong>14 10 3<br />

<br />

<strong>1.</strong>203 10 3<br />

<br />

<strong>1.</strong>266 10 3<br />

<br />

<strong>1.</strong>331 10 3<br />

<br />

<strong>1.</strong>395 10 3<br />

<br />

<strong>1.</strong>461 10 3<br />

<br />

<strong>1.</strong>526 10 3<br />

<br />

<strong>1.</strong>593 10 3<br />

<br />

<strong>1.</strong>659 10 3<br />

<br />

<strong>1.</strong>728 10 3<br />

<br />

<strong>1.</strong>796 10 3<br />

<br />

<strong>1.</strong>864 10 3<br />

<br />

<strong>1.</strong>933 10 3<br />

<br />

2.002 10 3<br />

<br />

2.073 10 3<br />

<br />

2.144 10 3<br />

<br />

2.215 10 3<br />

<br />

2.287 10 3<br />

<br />

2.359 10 3<br />

<br />

2.432 10 3<br />

<br />

2.506 10 3<br />

<br />

2.579 10 3<br />

saft mængde vand mængde<br />

Tid


90 <br />

2.686 10<br />

92 <br />

<br />

94<br />

<br />

96 <br />

98 <br />

<br />

100 <br />

102 <br />

104 <br />

<br />

106 <br />

108 <br />

<br />

110<br />

<br />

112 <br />

114 <br />

<br />

116 <br />

118 <br />

120 <br />

<br />

122 <br />

124 <br />

<br />

126<br />

<br />

128 <br />

130 <br />

<br />

132 <br />

134 <br />

136 <br />

<br />

138 <br />

140 <br />

<br />

142<br />

<br />

144 <br />

146 <br />

<br />

148 <br />

150 <br />

152 <br />

<br />

154 <br />

3<br />

<br />

2.759 10 3<br />

<br />

2.832 10 3<br />

<br />

2.906 10 3<br />

<br />

2.982 10 3<br />

<br />

3.057 10 3<br />

<br />

3.132 10 3<br />

<br />

3.208 10 3<br />

<br />

3.285 10 3<br />

<br />

3.363 10 3<br />

<br />

3.441 10 3<br />

<br />

3.52 10 3<br />

<br />

3.599 10 3<br />

<br />

3.679 10 3<br />

<br />

3.759 10 3<br />

<br />

3.839 10 3<br />

<br />

3.92 10 3<br />

<br />

4.002 10 3<br />

<br />

4.083 10 3<br />

<br />

4.166 10 3<br />

<br />

4.249 10 3<br />

<br />

4.332 10 3<br />

<br />

4.415 10 3<br />

<br />

4.499 10 3<br />

<br />

4.583 10 3<br />

<br />

4.669 10 3<br />

<br />

4.754 10 3<br />

<br />

4.84 10 3<br />

<br />

4.926 10 3<br />

<br />

5.013 10 3<br />

<br />

5.101 10 3<br />

<br />

5.188 10 3<br />

<br />

<br />

2.653 10<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

3<br />

<br />

2.728 10 3<br />

<br />

2.804 10 3<br />

<br />

2.88 10 3<br />

<br />

2.957 10 3<br />

<br />

3.035 10 3<br />

<br />

3.113 10 3<br />

<br />

3.191 10 3<br />

<br />

3.269 10 3<br />

<br />

3.349 10 3<br />

<br />

3.429 10 3<br />

<br />

3.509 10 3<br />

<br />

3.59 10 3<br />

<br />

3.671 10 3<br />

<br />

3.752 10 3<br />

<br />

3.834 10 3<br />

<br />

3.917 10 3<br />

<br />

3.999 10 3<br />

<br />

4.083 10 3<br />

<br />

4.167 10 3<br />

<br />

4.252 10 3<br />

<br />

4.337 10 3<br />

<br />

4.423 10 3<br />

<br />

4.508 10 3<br />

<br />

4.595 10 3<br />

<br />

4.681 10 3<br />

<br />

4.768 10 3<br />

<br />

4.855 10 3<br />

<br />

4.942 10 3<br />

<br />

5.03 10 3<br />

<br />

5.119 10 3<br />

<br />

5.207 10 3<br />

Tid saft mængde vand mængde<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

201


202<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.5 MANUAL<br />

Til lykke med din nye Softdrinkmaskine fra Softdrink Company A/S. Vi håber du vil nyde at bruge denne<br />

maskine.<br />

Virkemåde:<br />

4 liter vand hældes i vandholderen, samt 4 liter saft i saftholderen. En kop placeres i kopholderen og<br />

brugeren trykker på START knappen. Hvis koppen ikke er i startposition vil den nu køre der til.<br />

Efter at koppen har været i startposition, og der er blevet trykket på start. Køre koppen til<br />

doseringsposition. Derefter doseres først saft og så vand i rigtig mængde i forhold til valgt doseringsforhold.<br />

Koppen kører så tilbage til startposition hvor brugeren kan modtage en kop saftevand.<br />

Hvis RESET knappen bliver tastet mens maskinen kører stopper den og kører tilbage til startposition.<br />

Hvis koppen bliver fjernet før den kommer til doseringsposition, kører maskinen normalt, uden<br />

dosering.<br />

Hvis temperaturen er over valgt maksimum, lyser lysdioden VASKE VARM og maskinen kører<br />

ikke. Default er maksimum temperatur 16° C.<br />

Hvis der er for lidt vand, i forhold til valgt minimum vand eller saft i kontrolpanelet, stopper maskinen<br />

med en fejlmeddelelse om dette. Dette rettes ved at flyde 4 liter saft og/eller vand i beholderne og<br />

maskinen genstartes.<br />

Vandets temperatur kan læses på et display på kontrol panelet.<br />

På kontrol panelet er syv lysedioder som viser i hvilken fase maskinen er i.<br />

Hvis brugeren synes at saftevandet ikke smager rigtig, for stærkt eller for tynd, skal en superbruger /<br />

automatens ejer kontaktes da han har adgang til automatens brugerinterface og dermed kan ændre<br />

doseringsforhold mm.<br />

Tekniske oplysninger:<br />

Default doseringsforhold 1:5<br />

Default maksimum temperatur 16°<br />

Default minimum vand 500 ml<br />

Default minimum saft 500 ml<br />

4 liter vandbeholder<br />

4 liter saftbeholder<br />

180 ml kopper<br />

Superbruger manual:<br />

Superbrugeren har mulighed for at ændre i Automatens opsætning. For at gøre dette, skal<br />

konfigurationsswitchen på hardwaren slås til. Nu vil der komme følgende billede på computerens<br />

skærm.<br />

Her er det muligt at bladre sig gennem de forskellige menupunkter.<br />

Hvis man nu ønskede at ændre automatens doseringsforhold, trykkes „a“.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Programmet spørger efter et nyt doseringsforhold, som skal ligge i intervallet 1 – 10.<br />

Der vælges 4 og trykkes på ENTER.<br />

Her ses det nye doseringsforhold.<br />

Opsætningen af de andre punkter fungerer på samme måde.<br />

Ønskes standardopsætningen igen vælges „g“.<br />

Når automaten er opsat sættes konfigurationsswitchen fra.<br />

203


204<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.6 PRINT LAYOUT OG KOMPONENTER<br />

Bill Of Materials December 5,2004 14:18:31 Pa<br />

Item Quantity Reference Part<br />

______________________________________________<br />

1 7 C1,C2,C3,C4,C5,C6,C7 100n<br />

2 3 C11,C12,C13 10u<br />

3 1 D4 BZX79 10V<br />

4 2 J1,J2 CONN PLUG 13x2<br />

5 1 J3 CONN SOCKET 20x2<br />

6 7 Q1,Q2,Q3,Q4,Q5,Q6,Q7 BC547B<br />

7 1 R1 9.31k<br />

8 1 R2 5<strong>1.</strong>1k<br />

9 1 R3 3.01k<br />

10 1 R4 <strong>1.</strong>50k<br />

11 1 R5 365k<br />

12 1 R6 2.21k<br />

13 1 R8 22.0k<br />

14 2 R9,R12 470<br />

15 1 R10 105k<br />

16 1 R11 1<strong>1.</strong>3k<br />

17 1 R13 562<br />

18 2 R15,R16 10k<br />

19 1 R21 42.2k<br />

20 1 R23 221k<br />

21 1 R24 220k<br />

22 7 R31,R32,R33,R34,R35,R36, 100<br />

R37<br />

23 7 R41,R42,R43,R44,R45,R46, 3k<br />

R47<br />

24 1 SW3 SW MAG-SPDT<br />

25 2 U1,U2 74HC10<br />

26 1 U3 74HC02<br />

27 1 U4 74HC74<br />

28 1 U6 LM741<br />

Komponent placering<br />

Top layout Bund layout


6.7 KOMPONENTER<br />

6.7.1 OPERATIONSFORSTÆRKER LM741C<br />

LM741<br />

Operational Amplifier<br />

General Description<br />

The LM741 series are general purpose operational amplifiers<br />

which feature improved performance over industry standards<br />

like the LM709. They are direct, plug-in replacements<br />

for the 709C, LM201, MC1439 and 748 in most applications.<br />

The amplifiers offer many features which make their application<br />

nearly foolproof: overload protection on the input and<br />

output, no latch-up when the common mode range is exceeded,<br />

as well as freedom from oscillations.<br />

Connection Diagrams<br />

Metal Can Package<br />

Note 1: LM741H is available per JM38510/10101<br />

Typical Application<br />

DS009341-2<br />

Order Number LM741H, LM741H/883 (Note 1),<br />

LM741AH/883 or LM741CH<br />

See NS Package Number H08C<br />

Offset Nulling Circuit<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

The LM741C is identical to the LM741/LM741A except that<br />

the LM741C has their performance guaranteed over a 0˚C to<br />

+70˚C temperature range, instead of −55˚C to +125˚C.<br />

Dual-In-Line or S.O. Package<br />

DS009341-3<br />

Order Number LM741J, LM741J/883, LM741CN<br />

See NS Package Number J08A, M08A or N08E<br />

DS009341-7<br />

Ceramic Flatpak<br />

Order Number LM741W/883<br />

See NS Package Number W10A<br />

August 2000<br />

DS009341-6<br />

© 2000 National Semiconductor Corporation DS009341 www.national.com<br />

LM741 Operational Amplifier<br />

205


LM741<br />

206<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Absolute Maximum Ratings (Note 2)<br />

If Military/Aerospace specified devices are required, please contact the National Semiconductor Sales Office/<br />

Distributors for availability and specifications.<br />

(Note 7)<br />

LM741A LM741 LM741C<br />

Supply Voltage ±22V ±22V ±18V<br />

Power Dissipation (Note 3) 500 mW 500 mW 500 mW<br />

Differential Input Voltage ±30V ±30V ±30V<br />

Input Voltage (Note 4) ±15V ±15V ±15V<br />

Output Short Circuit Duration Continuous Continuous Continuous<br />

Operating Temperature Range −55˚C to +125˚C −55˚C to +125˚C 0˚C to +70˚C<br />

Storage Temperature Range −65˚C to +150˚C −65˚C to +150˚C −65˚C to +150˚C<br />

Junction Temperature<br />

Soldering Information<br />

150˚C 150˚C 100˚C<br />

N-Package (10 seconds) 260˚C 260˚C 260˚C<br />

J- or H-Package (10 seconds)<br />

M-Package<br />

300˚C 300˚C 300˚C<br />

Vapor Phase (60 seconds) 215˚C 215˚C 215˚C<br />

Infrared (15 seconds) 215˚C 215˚C 215˚C<br />

See AN-450 “Surface Mounting Methods and Their Effect on Product Reliability” for other methods of soldering<br />

surface mount devices.<br />

ESD Tolerance (Note 8) 400V 400V 400V<br />

Electrical Characteristics (Note 5)<br />

Parameter Conditions LM741A LM741 LM741C Units<br />

Min Typ Max Min Typ Max Min Typ Max<br />

Input Offset Voltage TA = 25˚C<br />

RS ≤ 10 kΩ <strong>1.</strong>0 5.0 2.0 6.0 mV<br />

RS ≤ 50Ω<br />

TAMIN ≤ TA ≤ TAMAX 0.8 3.0 mV<br />

RS ≤ 50Ω 4.0 mV<br />

RS ≤ 10 kΩ 6.0 7.5 mV<br />

Average Input Offset<br />

Voltage Drift<br />

15 µV/˚C<br />

Input Offset Voltage<br />

Adjustment Range<br />

TA = 25˚C, VS = ±20V ±10 ±15 ±15 mV<br />

Input Offset Current TA = 25˚C 3.0 30 20 200 20 200 nA<br />

TAMIN ≤ TA ≤ TAMAX 70 85 500 300 nA<br />

Average Input Offset<br />

Current Drift<br />

0.5 nA/˚C<br />

Input Bias Current TA = 25˚C 30 80 80 500 80 500 nA<br />

TAMIN ≤ TA ≤ TAMAX 0.210 <strong>1.</strong>5 0.8 µA<br />

Input Resistance TA = 25˚C, VS = ±20V <strong>1.</strong>0 6.0 0.3 2.0 0.3 2.0 MΩ<br />

TAMIN ≤ TA ≤ TAMAX, VS = ±20V<br />

0.5 MΩ<br />

Input Voltage Range TA = 25˚C ±12 ±13 V<br />

TAMIN ≤ TA ≤ TAMAX ±12 ±13 V<br />

www.national.com 2


Electrical Characteristics (Note 5) (Continued)<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Parameter Conditions LM741A LM741 LM741C Units<br />

Min Typ Max Min Typ Max Min Typ Max<br />

Large Signal Voltage Gain TA = 25˚C, RL ≥ 2kΩ<br />

VS = ±20V, VO = ±15V 50 V/mV<br />

VS = ±15V, VO = ±10V<br />

TAMIN ≤ TA ≤ TAMAX, RL ≥ 2kΩ,<br />

50 200 20 200 V/mV<br />

VS = ±20V, VO = ±15V 32 V/mV<br />

VS = ±15V, VO = ±10V 25 15 V/mV<br />

VS = ±5V, VO = ±2V 10 V/mV<br />

Output Voltage Swing VS = ±20V<br />

RL ≥ 10 kΩ ±16 V<br />

RL ≥ 2kΩ<br />

VS = ±15V<br />

±15 V<br />

RL ≥ 10 kΩ ±12 ±14 ±12 ±14 V<br />

RL ≥ 2kΩ ±10 ±13 ±10 ±13 V<br />

Output Short Circuit TA = 25˚C 10 25 35 25 25 mA<br />

Current TAMIN ≤ TA ≤ TAMAX 10 40 mA<br />

Common-Mode TAMIN ≤ TA ≤ TAMAX Rejection Ratio RS ≤ 10 kΩ, VCM = ±12V 70 90 70 90 dB<br />

RS ≤ 50Ω, VCM = ±12V 80 95 dB<br />

Supply Voltage Rejection TAMIN ≤ TA ≤ TAMAX, Ratio VS = ±20V to VS = ±5V<br />

RS ≤ 50Ω 86 96 dB<br />

RS ≤ 10 kΩ 77 96 77 96 dB<br />

Transient Response TA = 25˚C, Unity Gain<br />

Rise Time 0.25 0.8 0.3 0.3 µs<br />

Overshoot 6.0 20 5 5 %<br />

Bandwidth (Note 6) TA = 25˚C 0.437 <strong>1.</strong>5 MHz<br />

Slew Rate TA = 25˚C, Unity Gain 0.3 0.7 0.5 0.5 V/µs<br />

Supply Current TA = 25˚C <strong>1.</strong>7 2.8 <strong>1.</strong>7 2.8 mA<br />

Power Consumption TA = 25˚C<br />

VS = ±20V 80 150 mW<br />

VS = ±15V 50 85 50 85 mW<br />

LM741A VS = ±20V<br />

TA =TAMIN 165 mW<br />

TA =TAMAX 135 mW<br />

LM741 VS = ±15V<br />

TA =TAMIN 60 100 mW<br />

TA =TAMAX 45 75 mW<br />

Note 2: “Absolute Maximum Ratings” indicate limits beyond which damage to the device may occur. Operating Ratings indicate conditions for which the device is<br />

functional, but do not guarantee specific performance limits.<br />

3<br />

www.national.com<br />

LM741<br />

207


LM741<br />

208<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Electrical Characteristics (Note 5) (Continued)<br />

Note 3: For operation at elevated temperatures, these devices must be derated based on thermal resistance, and T j max. (listed under “Absolute Maximum Ratings”).<br />

T j =T A +(θ jA P D).<br />

Thermal Resistance Cerdip (J) DIP (N) HO8 (H) SO-8 (M)<br />

θjA (Junction to Ambient) 100˚C/W 100˚C/W 170˚C/W 195˚C/W<br />

θjC (Junction to Case) N/A N/A 25˚C/W N/A<br />

Note 4: For supply voltages less than ±15V, the absolute maximum input voltage is equal to the supply voltage.<br />

Note 5: Unless otherwise specified, these specifications apply for VS = ±15V, −55˚C ≤ TA ≤ +125˚C (LM741/LM741A). For the LM741C/LM741E, these specifications<br />

are limited to 0˚C ≤ TA ≤ +70˚C.<br />

Note 6: Calculated value from: BW (MHz) = 0.35/Rise Time(µs).<br />

Note 7: For military specifications see RETS741X for LM741 and RETS741AX for LM741A.<br />

Note 8: Human body model, <strong>1.</strong>5 kΩ in series with 100 pF.<br />

Schematic Diagram<br />

www.national.com 4<br />

DS009341-1


Physical Dimensions inches (millimeters) unless otherwise noted<br />

Metal Can Package (H)<br />

Order Number LM741H, LM741H/883, LM741AH/883, LM741AH-MIL or LM741CH<br />

NS Package Number H08C<br />

Ceramic Dual-In-Line Package (J)<br />

Order Number LM741J/883<br />

NS Package Number J08A<br />

5<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

www.national.com<br />

LM741<br />

209


LM741<br />

210<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Physical Dimensions inches (millimeters) unless otherwise noted (Continued)<br />

Dual-In-Line Package (N)<br />

Order Number LM741CN<br />

NS Package Number N08E<br />

10-Lead Ceramic Flatpak (W)<br />

Order Number LM741W/883, LM741WG-MPR or LM741WG/883<br />

NS Package Number W10A<br />

www.national.com 6


LIFE SUPPORT POLICY<br />

Notes<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

NATIONAL’S PRODUCTS ARE NOT AUTHORIZED FOR USE AS CRITICAL COMPONENTS IN LIFE SUPPORT<br />

DEVICES OR SYSTEMS WITHOUT THE EXPRESS WRITTEN APPROVAL OF THE PRESIDENT AND GENERAL<br />

COUNSEL OF NATIONAL SEMICONDUCTOR CORPORATION. As used herein:<br />

<strong>1.</strong> Life support devices or systems are devices or<br />

systems which, (a) are intended for surgical implant<br />

into the body, or (b) support or sustain life, and<br />

whose failure to perform when properly used in<br />

accordance with instructions for use provided in the<br />

labeling, can be reasonably expected to result in a<br />

significant injury to the user.<br />

National Semiconductor<br />

Corporation<br />

Americas<br />

Tel: 1-800-272-9959<br />

Fax: 1-800-737-7018<br />

Email: support@nsc.com<br />

www.national.com<br />

National Semiconductor<br />

Europe<br />

Fax: +49 (0) 180-530 85 86<br />

Email: europe.support@nsc.com<br />

Deutsch Tel: +49 (0) 69 9508 6208<br />

English Tel: +44 (0) 870 24 0 2171<br />

Français Tel: +33 (0) 1 41 91 8790<br />

2. A critical component is any component of a life<br />

support device or system whose failure to perform<br />

can be reasonably expected to cause the failure of<br />

the life support device or system, or to affect its<br />

safety or effectiveness.<br />

National Semiconductor<br />

Asia Pacific Customer<br />

Response Group<br />

Tel: 65-2544466<br />

Fax: 65-2504466<br />

Email: ap.support@nsc.com<br />

National Semiconductor<br />

Japan Ltd.<br />

Tel: 81-3-5639-7560<br />

Fax: 81-3-5639-7507<br />

National does not assume any responsibility for use of any circuitry described, no circuit patent licenses are implied and National reserves the right at any time without notice to change said circuitry and specifications.<br />

LM741 Operational Amplifier<br />

211


212<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.7.2 TRANSISTOR BC547B<br />

Switching and Applications<br />

High Voltage: BC546, V CEO=65V<br />

Low Noise: BC549, BC550<br />

Complement to BC556 ... BC560<br />

NPN Epitaxial Silicon Transistor<br />

Absolute Maximum Ratings T a=25°C unless otherwise noted<br />

Symbol Parameter Value Units<br />

VCBO Collector-Base Voltage : BC546<br />

80<br />

V<br />

: BC547/550<br />

50<br />

V<br />

: BC548/549<br />

30<br />

V<br />

VCEO Collector-Emitter Voltage : BC546<br />

65<br />

V<br />

: BC547/550<br />

45<br />

V<br />

: BC548/549<br />

30<br />

V<br />

VEBO Emitter-Base Voltage : BC546/547<br />

6<br />

V<br />

: BC548/549/550<br />

5<br />

V<br />

IC Collector Current (DC) 100 mA<br />

PC Collector Power Dissipation 500 mW<br />

TJ Junction Temperature 150 °C<br />

TSTG Storage Temperature -65 ~ 150 °C<br />

Electrical Characteristics T a =25°C unless otherwise noted<br />

Symbol Parameter Test Condition Min. Typ. Max. Units<br />

ICBO Collector Cut-off Current VCB =30V, IE =0 15 nA<br />

hFE DC Current Gain VCE =5V, IC =2mA 110 800<br />

VCE (sat) Collector-Emitter Saturation Voltage IC =10mA, IB =0.5mA<br />

IC=100mA, IB=5mA VBE (sat) Base-Emitter Saturation Voltage IC=10mA, IB=0.5mA IC =100mA, IB =5mA<br />

VBE (on) Base-Emitter On Voltage VCE =5V, IC =2mA<br />

VCE =5V, IC =10mA<br />

h FE Classification<br />

BC546/547/548/549/550<br />

1<br />

TO-92<br />

<strong>1.</strong> Collector 2. Base 3. Emitter<br />

©2002 Fairchild Semiconductor Corporation Rev. A2, August 2002<br />

90<br />

200<br />

700<br />

900<br />

250<br />

600<br />

580 660 700<br />

720<br />

fT Current Gain Bandwidth Product VCE =5V, IC =10mA, f=100MHz 300 MHz<br />

Cob Output Capacitance VCB =10V, IE =0, f=1MHz 3.5 6 pF<br />

Cib Input Capacitance VEB =0.5V, IC =0, f=1MHz 9 pF<br />

NF Noise Figure : BC546/547/548 VCE =5V, IC =200µA<br />

2 10 dB<br />

: BC549/550 f=1KHz, RG=2KΩ <strong>1.</strong>2 4 dB<br />

: BC549<br />

VCE =5V, IC =200µA<br />

<strong>1.</strong>4 4 dB<br />

: BC550<br />

RG =2KΩ, f=30~15000MHz<br />

<strong>1.</strong>4 3 dB<br />

Classification A B C<br />

hFE 110 ~ 220 200 ~ 450 420 ~ 800<br />

mV<br />

mV<br />

mV<br />

mV<br />

mV<br />

mV<br />

BC546/547/548/549/550


Typical Characteristics<br />

I C [mA], COLLECTOR CURRENT<br />

hFE, DC CURRENT GAIN<br />

Cob[pF], CAPACITANCE<br />

100<br />

80<br />

60<br />

40<br />

20<br />

1000<br />

0<br />

0 2 4 6 8 10 12 14 16 18 20<br />

100<br />

10<br />

I B = 400µA<br />

I = 350µA<br />

B<br />

I = 300µA<br />

B<br />

I B = 250µA<br />

I B = 200µA<br />

I B = 150µA<br />

I B = 100µA<br />

I B = 50µA<br />

V CE [V], COLLECTOR-EMITTER VOLTAGE<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

0.1<br />

0.0 0.2 0.4 0.6 0.8 <strong>1.</strong>0 <strong>1.</strong>2<br />

Figure <strong>1.</strong> Static Characteristic Figure 2. Transfer Characteristic<br />

1<br />

1 10 100 1000<br />

100<br />

10<br />

1<br />

VCE = 5V<br />

IC[mA], COLLECTOR CURRENT<br />

Figure 3. DC current Gain Figure 4. Base-Emitter Saturation Voltage<br />

Collector-Emitter Saturation Voltage<br />

f=1MHz<br />

IE = 0<br />

0.1<br />

1 10 100 1000<br />

VCB[V], COLLECTOR-BASE VOLTAGE<br />

Figure 5. Output Capacitance Figure 6. Current Gain Bandwidth Product<br />

©2002 Fairchild Semiconductor Corporation Rev. A2, August 2002<br />

IC[mA], COLLECTOR CURRENT<br />

VBE(sat), VCE(sat)[mV], SATURATION VOLTAGE<br />

fT, CURRENT GAIN-BANDWIDTH PRODUCT<br />

100<br />

10<br />

1<br />

10000<br />

1000<br />

1000<br />

100<br />

100<br />

10<br />

VCE = 5V<br />

IC = 10 IB<br />

VBE[V], BASE-EMITTER VOLTAGE<br />

VBE(sat)<br />

VCE(sat)<br />

10<br />

1 10 100 1000<br />

VCE = 5V<br />

IC[A], COLLECTOR CURRENT<br />

1<br />

0.1 1 10 100<br />

IC[mA], COLLECTOR CURRENT<br />

BC546/547/548/549/550<br />

213


214<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Package Dimensions<br />

0.46 ±0.10<br />

<strong>1.</strong>27TYP<br />

3.86MAX [<strong>1.</strong>27 ±0.20]<br />

<strong>1.</strong>02 ±0.10<br />

0.38 +0.10<br />

–0.05<br />

4.58 +0.25<br />

–0.15<br />

3.60 ±0.20<br />

<strong>1.</strong>27TYP<br />

[<strong>1.</strong>27 ±0.20]<br />

(R2.29)<br />

TO-92<br />

(0.25) 14.47 ±0.40<br />

4.58 ±0.20<br />

0.38 +0.10<br />

–0.05<br />

Dimensions in Millimeters<br />

©2002 Fairchild Semiconductor Corporation Rev. A2, August 2002<br />

BC546/547/548/549/550


TRADEMARKS<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

The following are registered and unregistered trademarks Fairchild Semiconductor owns or is authorized to use and is not<br />

intended to be an exhaustive list of all such trademarks.<br />

ACEx<br />

ActiveArray<br />

Bottomless<br />

CoolFET<br />

CROSSVOLT<br />

DOME<br />

EcoSPARK<br />

E 2 CMOS<br />

EnSigna<br />

DISCLAIMER<br />

FAIRCHILD SEMICONDUCTOR RESERVES THE RIGHT TO MAKE CHANGES WITHOUT FURTHER NOTICE TO ANY<br />

PRODUCTS HEREIN TO IMPROVE RELIABILITY, FUNCTION OR DESIGN. FAIRCHILD DOES NOT ASSUME ANY<br />

LIABILITY ARISING OUT OF THE APPLICATION OR USE OF ANY PRODUCT OR CIRCUIT DESCRIBED HEREIN;<br />

N<strong>EIT</strong>HER DOES IT CONVEY ANY LICENSE UNDER ITS PATENT RIGHTS, NOR THE RIGHTS OF OTHERS.<br />

LIFE SUPPORT POLICY<br />

FAIRCHILD’S PRODUCTS ARE NOT AUTHORIZED FOR USE AS CRITICAL COMPONENTS IN LIFE SUPPORT<br />

DEVICES OR SYSTEMS WITHOUT THE EXPRESS WRITTEN APPROVAL OF FAIRCHILD SEMICONDUCTOR<br />

CORPORATION.<br />

As used herein:<br />

<strong>1.</strong> Life support devices or systems are devices or systems<br />

which, (a) are intended for surgical implant into the body,<br />

or (b) support or sustain life, or (c) whose failure to perform<br />

when properly used in accordance with instructions for use<br />

provided in the labeling, can be reasonably expected to<br />

result in significant injury to the user.<br />

PRODUCT STATUS DEFINITIONS<br />

Definition of Terms<br />

FACT<br />

FACT Quiet series<br />

FAST ®<br />

FASTr<br />

FRFET<br />

GlobalOptoisolator<br />

GTO<br />

HiSeC<br />

I 2C Across the board. Around the world.<br />

The Power Franchise<br />

Programmable Active Droop<br />

2. A critical component is any component of a life support<br />

device or system whose failure to perform can be<br />

reasonably expected to cause the failure of the life support<br />

device or system, or to affect its safety or effectiveness.<br />

Datasheet Identification Product Status Definition<br />

Advance Information Formative or In<br />

Design<br />

ImpliedDisconnect<br />

ISOPLANAR<br />

LittleFET<br />

MicroFET<br />

MicroPak<br />

MICROWIRE<br />

MSX<br />

MSXPro<br />

OCX<br />

OCXPro<br />

OPTOLOGIC ®<br />

OPTOPLANAR<br />

PACMAN<br />

POP<br />

Power247<br />

PowerTrench ®<br />

QFET<br />

QS<br />

QT Optoelectronics<br />

Quiet Series<br />

RapidConfigure<br />

RapidConnect<br />

SILENT SWITCHER ®<br />

SMART START<br />

SPM<br />

Stealth<br />

SuperSOT-3<br />

SuperSOT-6<br />

SuperSOT-8<br />

SyncFET<br />

TinyLogic<br />

TruTranslation<br />

UHC<br />

UltraFET ®<br />

VCX<br />

This datasheet contains the design specifications for<br />

product development. Specifications may change in<br />

any manner without notice.<br />

Preliminary First Production This datasheet contains preliminary data, and<br />

supplementary data will be published at a later date.<br />

Fairchild Semiconductor reserves the right to make<br />

changes at any time without notice in order to improve<br />

design.<br />

No Identification Needed Full Production This datasheet contains final specifications. Fairchild<br />

Semiconductor reserves the right to make changes at<br />

any time without notice in order to improve design.<br />

Obsolete Not In Production This datasheet contains specifications on a product<br />

that has been discontinued by Fairchild semiconductor.<br />

The datasheet is printed for reference information only.<br />

©2002 Fairchild Semiconductor Corporation Rev. I1<br />

215


216<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.7.4 DIODE (TEMPERATURFØLER) 1N4148<br />

Silicon Epitaxial Planar Diodes<br />

Features<br />

Electrically equivalent diodes: 1N4148 – 1N914<br />

1N4448 – 1N914B<br />

Applications<br />

Extreme fast switches<br />

Absolute Maximum Ratings<br />

T j = 25C<br />

1N4148.1N4448<br />

Vishay Telefunken<br />

Parameter Test Conditions Type Symbol Value Unit<br />

Repetitive peak reverse voltage V RRM 100 V<br />

Reverse voltage V R 75 V<br />

Peak forward surge current t p=1s I FSM 2 A<br />

Repetitive peak forward current I FRM 500 mA<br />

Forward current I F 300 mA<br />

Average forward current V R=0 I FAV 150 mA<br />

Power dissipation l=4mm, T L=45C P V 440 mW<br />

l=4mm, T L25C P V 500 mW<br />

Junction temperature T j 200 C<br />

Storage temperature range T stg –65...+200 C<br />

Maximum Thermal Resistance<br />

T j = 25C<br />

Parameter Test Conditions Symbol Value Unit<br />

Junction ambient l=4mm, T L=constant R thJA 350 K/W<br />

Document Number 85521<br />

www.vishay.de • FaxBack +1-408-970-5600<br />

Rev. 2, 01-Apr-99 1 (4)<br />

94 9367


1N4148.1N4448<br />

Vishay Telefunken<br />

Electrical Characteristics<br />

T j = 25C<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Parameter Test Conditions Type Symbol Min Typ Max Unit<br />

Forward voltage g IF=5mA 1N4448 VF 0.62 0.72 V<br />

IF=10mA 1N4148 VF 1 V<br />

IF=100mA 1N4448 VF 1 V<br />

Reverse current VR=20 V IR 25 nA<br />

VR=20 V, Tj=150 C IR 50 A<br />

VR=75 V IR 5 A<br />

Breakdown voltage IR=100A, tp/T=0.01, tp=0.3ms V (BR) 100 V<br />

Diode capacitance<br />

Rectification efficiency<br />

VR=0, f=1MHz, VHF=50mV VHF=2V, f=100MHz<br />

CD r 45<br />

4 pF<br />

%<br />

Reverse recovery y time IF=IR=10mA, iR=1mA trr 8 ns<br />

IF=10mA, VR=6V, iR=0.1xIR, RL=100 trr 4 ns<br />

Characteristics (T j = 25C unless otherwise specified)<br />

V F – Forward Voltage ( V )<br />

94 9169<br />

<strong>1.</strong>2<br />

<strong>1.</strong>0 IF = 100 mA<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0.1 mA<br />

0<br />

–30 0 30 60 90<br />

Tj – Junction Temperature ( °C )<br />

10 mA<br />

1mA<br />

120<br />

Figure <strong>1.</strong> Forward Voltage vs. Junction Temperature<br />

0.1<br />

Tj =25°C<br />

0 0.4 0.8 <strong>1.</strong>2 <strong>1.</strong>6<br />

www.vishay.de • FaxBack +1-408-970-5600 Document Number 85521<br />

2 (4)<br />

Rev. 2, 01-Apr-99<br />

I F – Forward Current ( mA )<br />

94 9170<br />

1000<br />

100<br />

10<br />

1<br />

1 N 4148<br />

Scattering Limit<br />

VF – Forward Voltage ( V )<br />

2.0<br />

Figure 2. Forward Current vs. Forward Voltage<br />

217


218<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

I F – Forward Current ( mA )<br />

94 9171<br />

1000<br />

100<br />

10<br />

1<br />

1 N 4448<br />

Scattering Limit<br />

0.1<br />

Tj =25°C<br />

0 0.4 0.8 <strong>1.</strong>2 <strong>1.</strong>6<br />

VF – Forward Voltage ( V )<br />

2.0<br />

Figure 3. Forward Current vs. Forward Voltage<br />

Dimensions in mm<br />

technical drawings<br />

according to DIN<br />

specifications<br />

94 9366<br />

Standard Glass Case<br />

54 A 2 DIN 41880<br />

JEDEC DO 35<br />

Weight max. 0.3 g<br />

∅ <strong>1.</strong>7 max.<br />

26 min.<br />

1<br />

1 10<br />

1N4148.1N4448<br />

Vishay Telefunken<br />

Document Number 85521<br />

www.vishay.de • FaxBack +1-408-970-5600<br />

Rev. 2, 01-Apr-99 3 (4)<br />

I R – Reverse Current ( nA )<br />

94 9098<br />

1000<br />

100<br />

10<br />

Tj =25°C<br />

Scattering Limit<br />

VR – Reverse Voltage ( V )<br />

100<br />

Figure 4. Reverse Current vs. Reverse Voltage<br />

Cathode Identification<br />

3.9 max.<br />

26 min.<br />

∅ 0.55 max.


1N4148.1N4448<br />

Vishay Telefunken<br />

Ozone Depleting Substances Policy Statement<br />

It is the policy of Vishay Semiconductor GmbH to<br />

<strong>1.</strong> Meet all present and future national and international statutory requirements.<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

2. Regularly and continuously improve the performance of our products, processes, distribution and operating<br />

systems<br />

with respect to their impact on the health and safety of our employees and the public, as well as their impact on<br />

the environment.<br />

It is particular concern to control or eliminate releases of those substances into the atmosphere which are known<br />

as ozone depleting substances (ODSs).<br />

The Montreal Protocol (1987) and its London Amendments (1990) intend to severely restrict the use of ODSs and<br />

forbid their use within the next ten years. Various national and international initiatives are pressing for an earlier ban<br />

on these substances.<br />

Vishay Semiconductor GmbH has been able to use its policy of continuous improvements to eliminate the use<br />

of ODSs listed in the following documents.<br />

<strong>1.</strong> Annex A, B and list of transitional substances of the Montreal Protocol and the London Amendments respectively<br />

2. Class I and II ozone depleting substances in the Clean Air Act Amendments of 1990 by the Environmental<br />

Protection Agency (EPA) in the USA<br />

3. Council Decision 88/540/EEC and 91/690/EEC Annex A, B and C (transitional substances) respectively.<br />

Vishay Semiconductor GmbH can certify that our semiconductors are not manufactured with ozone depleting<br />

substances and do not contain such substances.<br />

We reserve the right to make changes to improve technical design and may do so without further notice.<br />

Parameters can vary in different applications. All operating parameters must be validated for each customer<br />

application by the customer. Should the buyer use Vishay-Telefunken products for any unintended or unauthorized<br />

application, the buyer shall indemnify Vishay-Telefunken against all claims, costs, damages, and expenses, arising out<br />

of, directly or indirectly, any claim of personal damage, injury or death associated with such unintended or<br />

unauthorized use.<br />

Vishay Semiconductor GmbH, P.O.B. 3535, D-74025 Heilbronn, Germany<br />

Telephone: 49 (0)7131 67 2831, Fax number: 49 (0)7131 67 2423<br />

www.vishay.de • FaxBack +1-408-970-5600 Document Number 85521<br />

4 (4)<br />

Rev. 2, 01-Apr-99<br />

219


220<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.7.4 DOBBELT NOR GATE 74HC02<br />

DATA SHEET<br />

Product specification<br />

File under Integrated Circuits, IC06<br />

INTEGRATED CIRCUITS<br />

For a complete data sheet, please also download:<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Family Specifications<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Package Information<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Package Outlines<br />

74HC/HCT02<br />

Quad 2-input NOR gate<br />

December 1990


December 1990 2<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Quad 2-input NOR gate 74HC/HCT02<br />

FEATURES<br />

• Output capability: standard<br />

• ICC category: SSI<br />

GENERAL DESCRIPTION<br />

The 74HC/HCT02 are high-speed Si-gate CMOS devices and are pin compatible with low power Schottky TTL (LSTTL).<br />

They are specified in compliance with JEDEC standard no. 7A.<br />

The 74HC/HCT02 provide the 2-input NOR function.<br />

QUICK REFERENCE DATA<br />

GND = 0 V; Tamb =25°C; tr =tf = 6 ns<br />

TYPICAL<br />

SYMBOL PARAMETER CONDITIONS<br />

HC HCT<br />

UNIT<br />

tPHL/ tPLH propagation delay nA, nB to nY CL = 15 pF; VCC =5V 7 9 ns<br />

CI input capacitance 3.5 3.5 pF<br />

CPD power dissipation capacitance per gate notes 1 and 2 22 24 pF<br />

Notes<br />

<strong>1.</strong> CPD is used to determine the dynamic power dissipation (PD in µW):<br />

PD =CPD × VCC 2 × fi + ∑ (CL × VCC 2 × fO) where:<br />

fi = input frequency in MHz<br />

fo = output frequency in MHz<br />

CL = output load capacitance in pF<br />

VCC = supply voltage in V<br />

∑ (CL × VCC 2 × fo) = sum of outputs<br />

2. For HC the condition is VI = GND to VCC<br />

For HCT the condition is VI = GND to VCC − <strong>1.</strong>5 V<br />

ORDERING INFORMATION<br />

See “74HC/HCT/HCU/HCMOS Logic Package Information”.<br />

221


222<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Quad 2-input NOR gate 74HC/HCT02<br />

PIN DESCRIPTION<br />

PIN NO. SYMBOL NAME AND FUNCTION<br />

1, 4, 10, 13 1Y to 4Y data outputs<br />

2, 5, 8, 11 1A to 4A data inputs<br />

3, 6, 9, 12 1B to 4B data inputs<br />

7 GND ground (0 V)<br />

14 VCC positive supply voltage<br />

Fig.1 Pin configuration. Fig.2 Logic symbol. Fig.3 IEC logic symbol.<br />

Fig.4 Functional diagram. Fig.5 Logic diagram (one gate).<br />

December 1990 3<br />

FUNCTION TABLE<br />

INPUTS OUTPUT<br />

nA nB nY<br />

L<br />

L<br />

H<br />

H<br />

L<br />

H<br />

L<br />

H<br />

Notes<br />

<strong>1.</strong> H = HIGH voltage level<br />

L = LOW voltage level<br />

H<br />

L<br />

L<br />

L


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Quad 2-input NOR gate 74HC/HCT02<br />

DC CHARACTERISTICS FOR 74HC<br />

For the DC characteristics see “74HC/HCT/HCU/HCMOS Logic Family Specifications”.<br />

Output capability: standard<br />

ICC category: SSI<br />

AC CHARACTERISTICS FOR 74HC<br />

GND = 0 V; tr =tf = 6 ns; CL = 50 pF<br />

SYMBOL PARAMETER<br />

tPHL/ tPLH<br />

propagation delay<br />

nA, nB to nY<br />

tTHL/ tTLH output transition time<br />

December 1990 4<br />

Tamb (°C) TEST CONDITIONS<br />

74HC<br />

+25 −40 to +85 −40 to +125<br />

min. typ. max. min. max. min. max.<br />

25<br />

9<br />

7<br />

19<br />

7<br />

6<br />

90<br />

18<br />

15<br />

75<br />

15<br />

13<br />

115<br />

23<br />

20<br />

95<br />

19<br />

16<br />

135<br />

27<br />

23<br />

110<br />

22<br />

19<br />

UNIT VCC<br />

(V)<br />

ns<br />

ns<br />

2.0<br />

4.5<br />

6.0<br />

2.0<br />

4.5<br />

6.0<br />

WAVEFORMS<br />

Fig.6<br />

Fig.6<br />

223


224<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Quad 2-input NOR gate 74HC/HCT02<br />

DC CHARACTERISTICS FOR 74HCT<br />

For the DC characteristics see “74HC/HCT/HCU/HCMOS Logic Family Specifications”.<br />

Output capability: standard<br />

ICC category: SSI<br />

Notes to HCT types<br />

The value of additional quiescent supply current (∆ICC) for a unit load of 1 is given in the family specifications.<br />

To determine ∆ICC per input, multiply this value by the unit load coefficient shown in the table below.<br />

INPUT UNIT LOADCOEFFICIENT<br />

nA, nB <strong>1.</strong>50<br />

AC CHARACTERISTICS FOR 74HCT<br />

GND = 0 V; tr =tf = 6 ns; CL = 50 pF<br />

AC WAVEFORMS<br />

PACKAGE OUTLINES<br />

See “74HC/HCT/HCU/HCMOS Logic Package Outlines”.<br />

December 1990 5<br />

Tamb (°C) TEST CONDITIONS<br />

74HCT<br />

SYMBOL PARAMETER<br />

+25 −40 to+85 −40 to+125<br />

UNIT VCC<br />

(V)<br />

WAVEFORMS<br />

min. typ. max. min. max. min. max.<br />

tPHL/ tPLH propagation delay<br />

nA, nB to nY<br />

11 19 24 29 ns 4.5 Fig.6<br />

tTHL/ tTLH output transition time 7 15 19 22 ns 4.5 Fig.6<br />

HC: VM = 50%; VI = GND to VCC<br />

HCT: VM = <strong>1.</strong>3 V; VI = GND to 3 V.<br />

Fig.6 Waveforms showing the input (nA, nB) to output (nY) propagation delays and the output transition times.


6.7.5 TRIBBEL NAND GATE 74HC10<br />

DATA SHEET<br />

Product specification<br />

File under Integrated Circuits, IC06<br />

INTEGRATED CIRCUITS<br />

For a complete data sheet, please also download:<br />

74HC/HCT10<br />

Triple 3-input NAND gate<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Family Specifications<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Package Information<br />

• The IC06 74HC/HCT/HCU/HCMOS Logic Package Outlines<br />

December 1990<br />

225


226<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Triple 3-input NAND gate 74HC/HCT10<br />

FEATURES<br />

• Output capability: standard<br />

• ICC category: SSI<br />

GENERAL DESCRIPTION<br />

The 74HC/HCT10 are high-speed Si-gate CMOS devices and are pin compatible with low power Schottky TTL (LSTTL).<br />

They are specified in compliance with JEDEC standard no. 7A.<br />

The 74HC/HCT10 provide the 3-input NAND function.<br />

QUICK REFERENCE DATA<br />

GND = 0 V; Tamb =25°C; tr =tf = 6 ns<br />

TYPICAL<br />

SYMBOL PARAMETER CONDITIONS<br />

HC HCT<br />

UNIT<br />

tPHL/ tPLH propagation delay nA, nB, nC to nY CL = 15 pF; VCC =5V 9 11 ns<br />

CI input capacitance 3.5 3.5 pF<br />

CPD power dissipation capacitance per gate notes 1 and 2 12 14 pF<br />

Notes<br />

<strong>1.</strong> CPD is used to determine the dynamic power dissipation (PD in µW):<br />

PD =CPD × VCC 2 × fi + ∑ (CL × VCC 2 × fO) where:<br />

fi = input frequency in MHz<br />

fo = output frequency in MHz<br />

CL = output load capacitance in pF<br />

VCC = supply voltage in V<br />

∑ (CL × VCC 2 × fo) = sum of outputs<br />

2. For HC the condition is VI = GND to VCC<br />

For HCT the condition is VI = GND to VCC − <strong>1.</strong>5 V.<br />

ORDERING INFORMATION<br />

See “74HC/HCT/HCU/HCMOS Logic Package Information”.<br />

December 1990 2


December 1990 3<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Triple 3-input NAND gate 74HC/HCT10<br />

PIN DESCRIPTION<br />

PIN NO. SYMBOL NAME AND FUNCTION<br />

1, 3, 9 1A to 3A data inputs<br />

2, 4, 10 1B to 3B data inputs<br />

13, 5, 11 1C to 3C data inputs<br />

12, 6, 8 1Y to 3Y data outputs<br />

7 GND ground (0 V)<br />

14 VCC positive supply voltage<br />

Fig.1 Pin configuration. Fig.2 Logic symbol. Fig.3 IEC logic symbol.<br />

Fig.4 Functional diagram. Fig.5 Logic diagram (one gate).<br />

FUNCTION TABLE<br />

INPUTS OUTPUT<br />

nA nB nC nY<br />

L L L H<br />

L L H H<br />

L H L H<br />

L H H H<br />

H L L H<br />

H L H H<br />

H H L H<br />

H H H L<br />

Notes<br />

<strong>1.</strong> H = HIGH voltage level<br />

L = LOW voltage level<br />

227


228<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Triple 3-input NAND gate 74HC/HCT10<br />

DC CHARACTERISTICS FOR 74HC<br />

For the DC characteristics see “74HC/HCT/HCU/HCMOS Logic Family Specifications”.<br />

Output capability: standard<br />

ICC category: SSI<br />

AC CHARACTERISTICS FOR 74HC<br />

GND = 0 V; tr =tf = 6 ns; CL = 50 pF<br />

SYMBOL PARAMETER<br />

December 1990 4<br />

Tamb (°C)<br />

74HC<br />

+25 −40 to + 85 −40 to + 125<br />

UNIT<br />

min. typ. max. min. max. min. max.<br />

tPHL/ tPLH propagation delay<br />

30 95 120 145<br />

2.0<br />

nA, nB, nC to nY 11 19 24 29 ns 4.5<br />

9 16 20 25 6.0<br />

tTHL/ tTLH output transition time 19 75 95 110<br />

2.0<br />

7 15 19 22 ns 4.5<br />

6 13 16 19 6.0<br />

TEST CONDITIONS<br />

VCC<br />

(V)<br />

WAVEFORMS<br />

Fig.6<br />

Fig.6


December 1990 5<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Triple 3-input NAND gate 74HC/HCT10<br />

DC CHARACTERISTICS FOR 74HCT<br />

For the DC characteristics see “74HC/HCT/HCU/HCMOS Logic Family Specifications”.<br />

Output capability: standard<br />

ICC category: SSI<br />

Note to HCT types<br />

The value of additional quiescent supply current (∆ICC) for a unit load of 1 is given in the family specifications.<br />

To determine ∆ICC per input, multiply this value by the unit load coefficient shown in the table below.<br />

INPUT UNIT LOAD COEFFICIENT<br />

nA, nB, nC <strong>1.</strong>5<br />

AC CHARACTERISTICS FOR 74HCT<br />

GND = 0 V; tr =tf = 6 ns; CL = 50 pF<br />

SYMBOL PARAMETER<br />

tPHL/ tPLH propagation delay<br />

nA, nB, nC to nY<br />

tTHL/ tTLH<br />

AC WAVEFORMS<br />

PACKAGE OUTLINES<br />

See “74HC/HCT/HCU/HCMOS Logic Package Outlines”.<br />

Tamb (°C)<br />

74HCT<br />

+ 25 −40 to + 85 −40 to +125<br />

min. typ. max. min. max. min. max.<br />

UNIT<br />

TEST CONDITIONS<br />

VCC<br />

(V)<br />

14 24 30 36 ns 4.5 Fig.6<br />

output transition time 7 15 19 22 ns 4.5 Fig.6<br />

(1) HC : VM = 50%; VI = GND to VCC.<br />

HCT: VM = <strong>1.</strong>3 V; VI = GND to 3 V.<br />

WAVEFORMS<br />

Fig.6 Waveforms showing the input (nA, nB, nC) to output (nY) propagation delays and the output transition times.<br />

229


230<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

6.7.6 DOBBELT D-FLIPFLOP<br />

DATA SHEET<br />

Product specification<br />

Supersedes data of 1998 Feb 23<br />

INTEGRATED CIRCUITS<br />

74HC74; 74HCT74<br />

Dual D-type flip-flop with set and<br />

reset; positive-edge trigger<br />

2003 Jul 10


2003 Jul 10 2<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

FEATURES<br />

• Wide supply voltage range from 2.0 to 6.0 V<br />

• Symmetrical output impedance<br />

• High noise immunity<br />

• Low power dissipation<br />

• Balanced propagation delays<br />

• ESD protection:<br />

HBM EIA/JESD22-A114-A exceeds 2000 V<br />

MM EIA/JESD22-A115-A exceeds 200 V.<br />

QUICK REFERENCE DATA<br />

GND = 0 V; Tamb =25°C; tr =tf =6ns<br />

Notes<br />

<strong>1.</strong> CPD is used to determine the dynamic power dissipation (PD in µW).<br />

PD =CPD × VCC 2 × fi × N+Σ(CL × VCC 2 × fo) where:<br />

fi = input frequency in MHz;<br />

fo = output frequency in MHz;<br />

CL = output load capacitance in pF;<br />

VCC = supply voltage in Volts;<br />

N = total load switching outputs;<br />

Σ(CL × VCC 2 × fo) = sum of the outputs.<br />

2. For 74HC74 the condition is VI = GND to VCC.<br />

For 74HCT74 the condition is VI = GND to VCC − <strong>1.</strong>5 V.<br />

GENERAL DESCRIPTION<br />

74HC74; 74HCT74<br />

The 74HC/HCT74 is a high-speed Si-gate CMOS device<br />

and is pin compatible with low power Schottky TTL<br />

(LSTTL). They are specified in compliance with JEDEC<br />

standard no. 7A.<br />

The 74HC/HCT74 are dual positive-edge triggered, D-type<br />

flip-flops with individual data (D) inputs, clock (CP) inputs,<br />

set (SD) and reset (RD) inputs; also complementary<br />

Q and Q outputs.<br />

The set and reset are asynchronous active LOW inputs<br />

and operate independently of the clock input. Information<br />

on the data input is transferred to the Q output on the<br />

LOW-to-HIGH transition of the clock pulse. The D inputs<br />

must be stable one set-up time prior to the LOW-to-HIGH<br />

clock transition for predictable operation.<br />

Schmitt-trigger action in the clock input makes the circuit<br />

highly tolerant to slower clock rise and fall times.<br />

TYPICAL<br />

SYMBOL PARAMETER CONDITIONS<br />

HC HCT<br />

UNIT<br />

tPHL/tPLH propagation delay CL = 15 pF; VCC =5V<br />

nCP to nQ, nQ 14 15 ns<br />

nSD to nQ, nQ 15 18 ns<br />

nRD to nQ, nQ 16 18 ns<br />

fmax maximum clock frequency 76 59 MHz<br />

CI input capacitance 3.5 3.5 pF<br />

CPD power dissipation capacitance per flip-flop notes 1 and 2 24 29 pF<br />

231


232<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

FUNCTION TABLES<br />

Table 1 See note 1<br />

Table 2 See note 1<br />

Note<br />

<strong>1.</strong> H = HIGH voltage level;<br />

L = LOW voltage level;<br />

X = don’t care;<br />

↑ = LOW-to-HIGH CP transition;<br />

Qn+1 = state after the next LOW-to-HIGH CP transition.<br />

ORDERING INFORMATION<br />

2003 Jul 10 3<br />

74HC74; 74HCT74<br />

INPUT OUTPUT<br />

SD RD CP D Q Q<br />

L H X X H L<br />

H L X X L H<br />

L L X X H H<br />

INPUT OUTPUT<br />

SD RD CP D Qn+1 Qn+1<br />

H H ↑ L L H<br />

H H ↑ H H L<br />

TYPE NUMBER TEMPERATURE<br />

RANGE<br />

PINS<br />

PACKAGE<br />

PACKAGE MATERIAL CODE<br />

74HC74N −40 to +125 °C 14 DIP14 plastic SOT27-1<br />

74HCT74N −40 to +125 °C 14 DIP14 plastic SOT27-1<br />

74HC74D −40 to +125 °C 14 SO14 plastic SOT108-1<br />

74HCT74D −40 to +125 °C 14 SO14 plastic SOT108-1<br />

74HC74DB −40 to +125 °C 14 SSOP14 plastic SOT337-1<br />

74HCT74DB −40 to +125 °C 14 SSOP14 plastic SOT337-1<br />

74HC74PW −40 to +125 °C 14 TSSOP14 plastic SOT402-1<br />

74HCT74PW −40 to +125 °C 14 TSSOP14 plastic SOT402-1<br />

74HC74BQ −40 to +125 °C 14 DHVQFN14 plastic SOT762-1<br />

74HCT74BQ −40 to +125 °C 14 DHVQFN14 plastic SOT762-1


2003 Jul 10 4<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

PINNING<br />

PIN SYMBOL DESCRIPTION<br />

1 1RD asynchronous reset-direct input (active LOW)<br />

2 1D data input<br />

3 1CP clock input (LOW-to-HIGH, edge-triggered)<br />

4 1SD asynchronous set-direct input (active LOW)<br />

5 1Q true flip-flop output<br />

6 1Q complement flip-flop output<br />

7 GND ground (0 V)<br />

8 2Q complement flip-flop output<br />

9 2Q true flip-flop output<br />

10 2SD asynchronous set-direct input (active LOW)<br />

11 2CP clock input (LOW-to-HIGH, edge-triggered)<br />

12 2D data input<br />

13 2RD asynchronous reset-direct input (active LOW)<br />

14 VCC positive supply voltage<br />

handbook, halfpage<br />

1RD<br />

1D<br />

1CP<br />

1SD<br />

1Q<br />

1Q<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

74<br />

GND 7 8 2Q<br />

MNA417<br />

14<br />

13<br />

12<br />

11<br />

10<br />

9<br />

V CC<br />

2RD<br />

2D<br />

2CP<br />

2SD<br />

2Q<br />

Fig.1 Pin configuration DIP14, SO14 and<br />

(T)SSOP14.<br />

handbook, halfpage<br />

1D<br />

1CP<br />

1SD<br />

1Q<br />

1Q<br />

2<br />

3<br />

4<br />

5<br />

6<br />

Top view<br />

74HC74; 74HCT74<br />

1RD V CC<br />

1 14<br />

GND (1)<br />

7<br />

GND<br />

8<br />

2Q<br />

13<br />

12<br />

11<br />

10<br />

9<br />

MNB038<br />

2RD<br />

2D<br />

2CP<br />

2SD<br />

(1) The die substrate is attached to this pad using conductive die<br />

attach material. It can not be used as a supply pin or input.<br />

2Q<br />

Fig.2 Pin configuration DHVQFN14.<br />

233


234<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

handbook, halfpage<br />

handbook, halfpage<br />

2<br />

12<br />

3<br />

11<br />

1SD<br />

4 10<br />

2SD<br />

SD<br />

Q<br />

FF<br />

RD<br />

1Q<br />

1D<br />

D<br />

2D<br />

2Q<br />

1CP<br />

2CP<br />

CP<br />

Q<br />

1Q<br />

2Q<br />

1RD 2RD<br />

1 13<br />

MNA418<br />

Fig.3 Logic symbol.<br />

4<br />

SD<br />

Q<br />

FF<br />

1Q<br />

2<br />

1D<br />

D<br />

5<br />

3<br />

1CP<br />

CP<br />

Q<br />

1Q<br />

6<br />

10<br />

1SD<br />

1 1RD<br />

2SD<br />

RD<br />

SD<br />

Q<br />

FF<br />

2Q<br />

12<br />

2D<br />

D<br />

9<br />

11<br />

2CP<br />

CP<br />

Q<br />

2Q<br />

8<br />

13 2RD<br />

RD<br />

2003 Jul 10 5<br />

5<br />

9<br />

6<br />

8<br />

MNA420<br />

Fig.5 Functional diagram.<br />

handbook, halfpage<br />

4<br />

3<br />

2<br />

1<br />

10<br />

11<br />

12<br />

13<br />

S<br />

C1<br />

1D<br />

R<br />

S<br />

C1<br />

1D<br />

R<br />

74HC74; 74HCT74<br />

MNA419<br />

Fig.4 IEC logic symbol.<br />

5<br />

6<br />

9<br />

8


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

handbook, full pagewidth<br />

D<br />

RD<br />

SD<br />

CP<br />

2003 Jul 10 6<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

Fig.6 Logic diagram (one flip-flop).<br />

C<br />

C<br />

C<br />

C<br />

74HC74; 74HCT74<br />

MNA421<br />

Q<br />

Q<br />

235


236<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

RECOMMENDED OPERATING CONDITIONS<br />

2003 Jul 10 7<br />

74HC74; 74HCT74<br />

SYMBOL PARAMETER CONDITIONS<br />

MIN.<br />

74HC74<br />

TYP. MAX. MIN.<br />

74HCT74<br />

TYP. MAX.<br />

UNIT<br />

VCC supply voltage 2.0 5.0 6.0 4.5 5.0 5.5 V<br />

VI input voltage 0 − VCC 0 − VCC V<br />

VO output voltage 0 − VCC 0 − VCC V<br />

Tamb operating ambient<br />

temperature<br />

−40 +25 +125 −40 +25 +125 °C<br />

tr, tf input rise and fall VCC = 2.0 V − − 1000 − − 500 ns<br />

times<br />

VCC = 4.5 V − 6.0 500 − 6.0 500 ns<br />

VCC = 6.0 V − − 400 − − 500 ns<br />

LIMITING VALUES<br />

In accordance with the Absolute Maximum Rating System (IEC 60134); voltages are referenced to GND (ground = 0 V).<br />

SYMBOL PARAMETER CONDITIONS MIN. MAX. UNIT<br />

VCC supply voltage −0.5 +7.0 V<br />

IIK input diode current VI < −0.5 V or VI >VCC + 0.5 V;<br />

note 1<br />

− ±20 mA<br />

IOK output diode current VO < −0.5 V or VO >VCC + 0.5 V;<br />

note 1<br />

− ±20 mA<br />

IO output source or sink current −0.5V


2003 Jul 10 8<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

DC CHARACTERISTICS<br />

Family 74HC<br />

At recommended operating conditions; voltages are referenced to GND (ground =0V).<br />

SYMBOL PARAMETER<br />

Note<br />

<strong>1.</strong> All typical values are measured at Tamb =25°C.<br />

TEST CONDITIONS<br />

WAVEFORMS VCC (V)<br />

74HC74; 74HCT74<br />

MIN. TYP. MAX. UNIT<br />

Tamb = −40 to +85 °C; note 1<br />

VIH<br />

HIGH-level input<br />

2.0 <strong>1.</strong>5 <strong>1.</strong>2 − V<br />

voltage<br />

4.5 3.15 2.4 − V<br />

6.0 4.2 3.2 − V<br />

VIL LOW-level input voltage 2.0 − 0.8 0.5 V<br />

4.5 − 2.1 <strong>1.</strong>35 V<br />

6.0 − 2.8 <strong>1.</strong>8 V<br />

VOH<br />

HIGH-level output VI =VIH or VIL<br />

voltage<br />

IO = −4.0 mA 4.5 3.84 4.32 − V<br />

IO = −5.2 mA 6.0 5.34 5.81 − V<br />

VOL<br />

LOW-level output VI =VIH or VIL<br />

voltage<br />

IO = 4.0 mA 4.5 − 0.15 0.33 V<br />

IO = 5.2 mA 6.0 − 0.16 0.33 V<br />

ILI input leakage current VI =VCC or GND 6.0 − − ±<strong>1.</strong>0 µA<br />

ICC<br />

quiescent supply VI =VCC or GND; 6.0 − − 40 µA<br />

current<br />

IO =0<br />

Tamb = −40 to +125 °C<br />

VIH<br />

HIGH-level input<br />

2.0 <strong>1.</strong>5 − − V<br />

voltage<br />

4.5 3.15 − − V<br />

6.0 4.2 − − V<br />

VIL LOW-level input voltage 2.0 − − 0.5 V<br />

4.5 − − <strong>1.</strong>35 V<br />

6.0 − − <strong>1.</strong>8 V<br />

VOH<br />

HIGH-level output VI =VIH or VIL<br />

voltage<br />

IO = −4.0 mA 4.5 3.7 − − V<br />

IO = −5.2 mA 6.0 5.2 − − V<br />

VOL<br />

LOW-level output VI =VIH or VIL<br />

voltage<br />

IO = 4.0 mA 4.5 − − 0.4 V<br />

IO = 5.2 mA 6.0 − − 0.4 V<br />

ILI input leakage current VI =VCC or GND 6.0 − − ±<strong>1.</strong>0 µA<br />

ICC<br />

quiescent supply VI =VCC or GND; 6.0 − − 80 µA<br />

current<br />

IO =0<br />

237


238<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

Note<br />

<strong>1.</strong> All typical values are measured at Tamb =25°C.<br />

2003 Jul 10 9<br />

74HC74; 74HCT74<br />

Family 74HCT<br />

At recommended operating conditions; voltages are referenced to GND (ground =0V).<br />

TEST CONDITIONS<br />

SYMBOL PARAMETER<br />

WAVEFORMS VCC (V)<br />

MIN. TYP. MAX. UNIT<br />

Tamb = −40 to +85 °C; note 1<br />

VIH<br />

HIGH-level input<br />

voltage<br />

4.5 to 5.5 2.0 <strong>1.</strong>6 − V<br />

VIL LOW-level input voltage 4.5 to 5.5 − <strong>1.</strong>2 0.8 V<br />

VOH<br />

HIGH-level output VI =VIH or VIL; 4.5 3.84 4.32 − V<br />

voltage<br />

IO = −4.0 mA<br />

VOL<br />

LOW-level output VI =VIH or VIL; 4.5 0.33 0.15 − V<br />

voltage<br />

IO = 4.0 mA<br />

ILI input leakage current VI =VCC or GND 5.5 − − ±<strong>1.</strong>0 µA<br />

ICC<br />

quiescent supply VI =VCC or GND; 5.5 − − 40 µA<br />

current<br />

IO =0<br />

∆ICC<br />

additional quiescent VI =VCC −2.1 V other 4.5 to 5.5 − 100 450 µA<br />

supply current per input inputs at VCC or GND;<br />

IO =0<br />

Tamb = −40 to +125 °C<br />

VIH<br />

HIGH-level input<br />

voltage<br />

4.5 to 5.5 2.0 − − V<br />

VIL LOW-level input voltage 4.5 to 5.5 − − 0.8 V<br />

VOH<br />

HIGH-level output VI =VIH or VIL; 4.5 3.7 − − V<br />

voltage<br />

IO = −4.0 mA<br />

VOL<br />

LOW-level output VI =VIH or VIL; 4.5 − − 0.4 V<br />

voltage<br />

IO = 4.0 mA<br />

ILI input leakage current VI =VCC or GND 5.5 − − ±<strong>1.</strong>0 µA<br />

ICC<br />

quiescent supply VI =VCC or GND; 5.5 − − 80 µA<br />

current<br />

IO =0<br />

∆ICC<br />

additional quiescent VI =VCC −2.1 V other 4.5 to 5.5 − − 490 µA<br />

supply current per input inputs at VCC or GND;<br />

IO =0<br />

Remark to HCT types<br />

The value of additional quiescent supply current (∆ICC) for a unit load of 1 is given here. To determine ∆ICC per input,<br />

multiply this value by the unit load coefficient shown in the table.<br />

INPUT UNIT LOAD COEFFICIENT<br />

nD 0.70<br />

nRD 0.70<br />

nSD 0.80<br />

nCP 0.80


2003 Jul 10 10<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

AC CHARACTERISTICS<br />

Family 74HC<br />

GND = 0 V; tr =tf = 6 ns; CL =50pF.<br />

SYMBOL PARAMETER<br />

Tamb = −40 to +85 °C<br />

tPHL/tPLH propagation delay<br />

nCP to nQ, nQ<br />

propagation delay<br />

nSD to nQ, nQ<br />

TEST CONDITIONS<br />

WAVEFORMS VCC (V)<br />

74HC74; 74HCT74<br />

MIN. TYP. MAX. UNIT<br />

see Fig.7 2.0 − 47 220 ns<br />

4.5 − 17 44 ns<br />

6.0 − 14 37 ns<br />

see Fig.8 2.0 − 50 250 ns<br />

4.5 − 18 50 ns<br />

6.0 − 14 43 ns<br />

propagation delay see Fig.8 2.0 − 52 250 ns<br />

nRD to nQ, nQ<br />

4.5 − 19 50 ns<br />

6.0 − 15 43 ns<br />

tTHL/tTLH output transition time see Fig.7 2.0 − 19 95 ns<br />

4.5 − 7 19 ns<br />

6.0 − 6 16 ns<br />

tW<br />

clock pulse width see Fig.7 2.0 100 19 − ns<br />

HIGH or LOW<br />

4.5 20 7 − ns<br />

6.0 17 6 − ns<br />

set or reset pulse width see Fig.8 2.0 100 19 − ns<br />

LOW<br />

4.5 20 7 − ns<br />

6.0 17 6 − ns<br />

trem<br />

removal time set or see Fig.8 2.0 40 3 − ns<br />

reset<br />

4.5 8 1 − ns<br />

6.0 7 1 − ns<br />

tsu set-up time nD to nCP see Fig.7 2.0 75 6 − ns<br />

4.5 15 2 − ns<br />

6.0 13 2 − ns<br />

th hold time nCP to nD see Fig.7 2.0 3 −6 − ns<br />

4.5 3 −2 − ns<br />

6.0 3 −2 − ns<br />

fmax<br />

maximum clock pulse see Fig.7 2.0 4.8 23 − MHz<br />

frequency<br />

4.5 24 69 − MHz<br />

6.0 28 82 − MHz<br />

239


240<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

SYMBOL PARAMETER<br />

Tamb = −40 to +125 °C<br />

tPHL/tPLH propagation delay<br />

nCP to nQ, nQ<br />

propagation delay<br />

nSD to nQ, nQ<br />

TEST CONDITIONS<br />

WAVEFORMS VCC (V)<br />

2003 Jul 10 11<br />

74HC74; 74HCT74<br />

MIN. TYP. MAX. UNIT<br />

see Fig.7 2.0 − − 265 ns<br />

4.5 − − 53 ns<br />

6.0 − − 45 ns<br />

see Fig.8 2.0 − − 300 ns<br />

4.5 − − 60 ns<br />

6.0 − − 51 ns<br />

propagation delay see Fig.8 2.0 − − 300 ns<br />

nRD to nQ, nQ<br />

4.5 − − 60 ns<br />

6.0 − − 51 ns<br />

tTHL/tTLH output transition time see Fig.7 2.0 − − 110 ns<br />

4.5 − − 22 ns<br />

6.0 − − 19 ns<br />

tW<br />

clock pulse width HIGH see Fig.7 2.0 120 − − ns<br />

or LOW<br />

4.5 24 − − ns<br />

6.0 20 − − ns<br />

tW<br />

set or reset pulse width see Fig.8 2.0 120 − − ns<br />

LOW<br />

4.5 24 − − ns<br />

6.0 20 − − ns<br />

trem<br />

removal time set or see Fig.8 2.0 45 − − ns<br />

reset<br />

4.5 9 − − ns<br />

6.0 8 − − ns<br />

tsu set-up time nD to nCP see Fig.7 2.0 90 − − ns<br />

4.5 18 − − ns<br />

6.0 15 − − ns<br />

th hold time nCP to nD see Fig.7 2.0 3 − − ns<br />

4.5 3 − − ns<br />

6.0 3 − − ns<br />

fmax<br />

maximum clock pulse see Fig.7 2.0 4.0 − − MHz<br />

frequency<br />

4.5 20 − − MHz<br />

6.0 24 − − MHz


2003 Jul 10 12<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

Family 74HCT<br />

GND = 0 V; tr =tf = 6 ns; CL =50pF.<br />

SYMBOL PARAMETER<br />

TEST CONDITIONS<br />

WAVEFORMS VCC (V)<br />

74HC74; 74HCT74<br />

MIN. TYP. MAX. UNIT<br />

Tamb = −40 to +85 °C<br />

tPHL/tPLH propagation<br />

delay nCP to nQ, nQ<br />

see Fig.7 4.5 − 18 44 ns<br />

propagation<br />

delay nSD to nQ, nQ<br />

see Fig.8 4.5 − 23 50 ns<br />

propagation<br />

delay nRD to nQ, nQ<br />

see Fig.8 4.5 − 24 50 ns<br />

tTHL/tTLH output transition time see Fig.7 4.5 − 7 19 ns<br />

tW<br />

clock pulse width HIGH<br />

or LOW<br />

see Fig.7 4.5 23 9 − ns<br />

set or reset pulse width<br />

LOW<br />

see Fig.8 4.5 20 9 − ns<br />

trem<br />

removal time set or<br />

reset<br />

see Fig.8 4.5 8 1 − ns<br />

tsu set-up time nD to nCP see Fig.7 4.5 15 5 − ns<br />

th hold time nCP to nD see Fig.7 4.5 +3 −3 − ns<br />

fmax<br />

maximum clock pulse<br />

frequency<br />

see Fig.7 4.5 22 54 − MHz<br />

Tamb = −40 to +125 °C<br />

tPHL/tPLH propagation<br />

delay nCP to nQ, nQ<br />

see Fig.7 4.5 − − 53 ns<br />

propagation<br />

delay nSD to nQ, nQ<br />

see Fig.8 4.5 − − 60 ns<br />

propagation<br />

delay nRD to nQ, nQ<br />

see Fig.8 4.5 − − 60 ns<br />

tTHL/tTLH output transition time see Fig.7 4.5 − − 22 ns<br />

tW<br />

clock pulse width HIGH<br />

or LOW<br />

see Fig.7 4.5 27 − − ns<br />

set or reset pulse width<br />

LOW<br />

see Fig.8 4.5 24 − − ns<br />

trem<br />

removal time set or<br />

reset<br />

see Fig.8 4.5 9 − − ns<br />

tsu set-up time nD to nCP see Fig.7 4.5 18 − − ns<br />

th hold time nCP to nD see Fig.7 4.5 3 − − ns<br />

fmax<br />

maximum clock pulse<br />

frequency<br />

see Fig.7 4.5 18 − − MHz<br />

241


242<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

AC WAVEFORMS<br />

handbook, full pagewidth<br />

nD input<br />

nCP input<br />

nQ output<br />

nQ output<br />

2003 Jul 10 13<br />

V I<br />

GND<br />

V I<br />

GND<br />

V OH<br />

V OL<br />

V OH<br />

V OL<br />

V M<br />

t su<br />

t PLH<br />

t h<br />

V M<br />

tW tPHL V M<br />

V M<br />

1/f max<br />

t su<br />

t PHL<br />

The shaded areas indicate when the input is permitted to change for predictable output performance.<br />

74HC74: VM = 50%; VI = GND to VCC.<br />

74HCT74: VM = <strong>1.</strong>3 V; VI = GND to 3 V.<br />

t h<br />

74HC74; 74HCT74<br />

Fig.7 The clock (nCP) to output (nQ, nQ) propagation delays, the clock pulse width, the nD to nCP set-up,<br />

the nCP to nD hold times, the output transition times and the maximum clock pulse frequency.<br />

t PLH<br />

MNA422


2003 Jul 10 14<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

handbook, full pagewidth<br />

nCP input<br />

nSD input<br />

nRD input<br />

nQ output<br />

nQ output<br />

74HC74: VM = 50%; VI = GND to VCC.<br />

74HCT74: VM = <strong>1.</strong>3 V; VI = GND to 3 V.<br />

V I<br />

GND<br />

V I<br />

GND<br />

V I<br />

GND<br />

V OH<br />

V OL<br />

V OH<br />

V OL<br />

V M<br />

t W<br />

V M<br />

V M<br />

t PLH<br />

t PHL<br />

V M<br />

t W<br />

t PHL<br />

t PLH<br />

V M<br />

t rem<br />

MNA423<br />

74HC74; 74HCT74<br />

Fig.8 The set (nSD) and reset (nRD) input to output (nQ, nQ) propagation delays, the set and reset pulse widths<br />

and the nRD, nRD to nCP removal time.<br />

243


244<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

handbook, full pagewidth<br />

tPZH<br />

tPZL<br />

tPHZ<br />

tPLZ<br />

TEST S1<br />

GND<br />

VCC<br />

GND<br />

VCC<br />

PULSE<br />

GENERATOR<br />

V CC<br />

2003 Jul 10 15<br />

V I<br />

R T<br />

D.U.T.<br />

V O<br />

C L<br />

S1<br />

RL =<br />

1 kΩ<br />

Fig.9 Load circuitry for switching times.<br />

MNA183<br />

VCC open<br />

GND<br />

74HC74; 74HCT74<br />

Definitions for test circuit:<br />

RL = Load resistor.<br />

CL = Load capacitance including jig and probe capacitance.<br />

RT = Termination resistance should be equal to the output impedance Zo of the pulse generator.


2003 Jul 10 16<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

PACKAGE OUTLINES<br />

DIMENSIONS (inch dimensions are derived from the original mm dimensions)<br />

UNIT<br />

mm<br />

inches<br />

A<br />

max.<br />

OUTLINE<br />

VERSION<br />

SOT27-1<br />

A 1 A 2 (1) (1)<br />

min. max.<br />

b b1 c D E e e1 L ME MH REFERENCES<br />

IEC JEDEC J<strong>EIT</strong>A<br />

74HC74; 74HCT74<br />

DIP14: plastic dual in-line package; 14 leads (300 mil) SOT27-1<br />

seating plane<br />

L<br />

Z<br />

14<br />

pin 1 index<br />

1<br />

4.2 0.51 3.2<br />

0.17 0.02 0.13<br />

e<br />

<strong>1.</strong>73<br />

<strong>1.</strong>13<br />

0.068<br />

0.044<br />

D<br />

0.53<br />

0.38<br />

0.021<br />

0.015<br />

0.36<br />

0.23<br />

0.014<br />

0.009<br />

19.50<br />

18.55<br />

0.77<br />

0.73<br />

6.48<br />

6.20<br />

0.26<br />

0.24<br />

050G04 MO-001 SC-501-14<br />

b<br />

b 1<br />

8<br />

7<br />

A 1<br />

w M<br />

A 2<br />

0 5<br />

scale<br />

10 mm<br />

Note<br />

<strong>1.</strong> Plastic or metal protrusions of 0.25 mm (0.01 inch) maximum per side are not included.<br />

E<br />

A<br />

2.54 7.62<br />

0.1 0.3<br />

c<br />

3.60<br />

3.05<br />

0.14<br />

0.12<br />

ME<br />

(e )<br />

1<br />

M H<br />

8.25<br />

7.80<br />

0.32<br />

0.31<br />

EUROPEAN<br />

PROJECTION<br />

10.0<br />

8.3<br />

0.39<br />

0.33<br />

w<br />

0.254<br />

0.01<br />

(1)<br />

Z<br />

max.<br />

ISSUE DATE<br />

99-12-27<br />

03-02-13<br />

2.2<br />

0.087<br />

245


246<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

UNIT<br />

mm<br />

inches<br />

A<br />

max.<br />

<strong>1.</strong>75<br />

OUTLINE<br />

VERSION<br />

2003 Jul 10 17<br />

74HC74; 74HCT74<br />

SO14: plastic small outline package; 14 leads; body width 3.9 mm SOT108-1<br />

DIMENSIONS (inch dimensions are derived from the original mm dimensions)<br />

A1 A2 A3 bp c D (1) E (1) (1)<br />

e HE L LpQ v w y Z θ<br />

0.25<br />

0.10<br />

<strong>1.</strong>45<br />

<strong>1.</strong>25<br />

0.25<br />

0.49<br />

0.36<br />

0.25<br />

0.19<br />

8.75<br />

8.55<br />

Note<br />

<strong>1.</strong> Plastic or metal protrusions of 0.15 mm (0.006 inch) maximum per side are not included.<br />

SOT108-1<br />

14<br />

1<br />

Z<br />

0.069 0.010<br />

0.004<br />

y<br />

pin 1 index<br />

0.057<br />

0.049<br />

e<br />

0.01<br />

D<br />

0.019<br />

0.014<br />

0.0100<br />

0.0075<br />

bp<br />

4.0<br />

3.8<br />

REFERENCES<br />

<strong>1.</strong>27<br />

IEC JEDEC J<strong>EIT</strong>A<br />

076E06 MS-012<br />

8<br />

7<br />

w M<br />

c<br />

6.2<br />

5.8<br />

A2<br />

A1<br />

0 2.5<br />

scale<br />

5 mm<br />

0.35<br />

0.34<br />

0.16<br />

0.15<br />

0.05<br />

0.244<br />

0.228<br />

<strong>1.</strong>05<br />

0.041<br />

<strong>1.</strong>0<br />

0.4<br />

0.039<br />

0.016<br />

E<br />

HE<br />

detail X<br />

0.7<br />

0.6<br />

0.028<br />

0.024<br />

L<br />

L p<br />

Q<br />

A<br />

(A )<br />

3<br />

EUROPEAN<br />

PROJECTION<br />

θ<br />

A<br />

X<br />

v M A<br />

0.7<br />

0.25 0.25 0.1<br />

0.3 o<br />

8<br />

o<br />

0.028 0<br />

0.01 0.01 0.004<br />

0.012<br />

ISSUE DATE<br />

99-12-27<br />

03-02-19


2003 Jul 10 18<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

DIMENSIONS (mm are the original dimensions)<br />

74HC74; 74HCT74<br />

SSOP14: plastic shrink small outline package; 14 leads; body width 5.3 mm SOT337-1<br />

UNIT A1 A2 A3 bp c D (1) E (1) A<br />

max.<br />

e HE L LpQ v w y Z(1)<br />

θ<br />

mm 2<br />

0.21<br />

0.05<br />

<strong>1.</strong>80<br />

<strong>1.</strong>65<br />

0.25<br />

0.38<br />

0.25<br />

0.20<br />

0.09<br />

6.4<br />

6.0<br />

5.4<br />

5.2<br />

0.65<br />

7.9<br />

7.6<br />

<strong>1.</strong>25<br />

<strong>1.</strong>03<br />

0.63<br />

0.9<br />

0.7<br />

0.2 0.13 0.1<br />

<strong>1.</strong>4<br />

0.9<br />

o<br />

8<br />

o<br />

0<br />

Note<br />

<strong>1.</strong> Plastic or metal protrusions of 0.25 mm maximum per side are not included.<br />

OUTLINE<br />

VERSION<br />

SOT337-1<br />

Z<br />

y<br />

D<br />

14 8<br />

pin 1 index<br />

1 7<br />

e<br />

bp<br />

w M<br />

REFERENCES<br />

IEC JEDEC J<strong>EIT</strong>A<br />

MO-150<br />

c<br />

A2<br />

A1<br />

0 2.5<br />

scale<br />

5 mm<br />

E<br />

HE<br />

L<br />

detail X<br />

L p<br />

Q<br />

(A )<br />

3<br />

A<br />

θ<br />

EUROPEAN<br />

PROJECTION<br />

A<br />

X<br />

v M A<br />

ISSUE DATE<br />

99-12-27<br />

03-02-19<br />

247


248<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

DIMENSIONS (mm are the original dimensions)<br />

2003 Jul 10 19<br />

74HC74; 74HCT74<br />

TSSOP14: plastic thin shrink small outline package; 14 leads; body width 4.4 mm SOT402-1<br />

UNIT A1 A2 A3 bp c D (1) A<br />

max.<br />

E (2) e HE L LpQ v w y Z (1) θ<br />

mm <strong>1.</strong>1<br />

0.15<br />

0.05<br />

0.95<br />

0.80<br />

0.25<br />

0.30<br />

0.19<br />

0.2<br />

0.1<br />

5.1<br />

4.9<br />

4.5<br />

4.3<br />

0.65<br />

6.6<br />

6.2<br />

1<br />

0.75<br />

0.50<br />

0.4<br />

0.3<br />

0.2 0.13 0.1<br />

0.72<br />

0.38<br />

o<br />

8<br />

o<br />

0<br />

Notes<br />

<strong>1.</strong> Plastic or metal protrusions of 0.15 mm maximum per side are not included.<br />

2. Plastic interlead protrusions of 0.25 mm maximum per side are not included.<br />

OUTLINE<br />

VERSION<br />

y<br />

REFERENCES<br />

IEC JEDEC J<strong>EIT</strong>A<br />

SOT402-1 MO-153<br />

Z<br />

e<br />

D<br />

14 8<br />

pin 1 index<br />

1 7<br />

bp<br />

w M<br />

c<br />

A2<br />

A1<br />

0 2.5<br />

scale<br />

5 mm<br />

E<br />

HE<br />

L<br />

detail X<br />

L p<br />

Q<br />

A<br />

(A )<br />

3<br />

EUROPEAN<br />

PROJECTION<br />

X<br />

θ<br />

v M A<br />

A<br />

ISSUE DATE<br />

99-12-27<br />

03-02-18


2003 Jul 10 20<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

OUTLINE<br />

VERSION<br />

terminal 1<br />

index area<br />

0 2.5 5 mm<br />

scale<br />

DIMENSIONS (mm are the original dimensions)<br />

UNIT<br />

A<br />

A1 b c<br />

Dh Eh e e1 L v w y y1 mm 1<br />

0.05<br />

0.00<br />

0.30<br />

0.18<br />

0.2<br />

3.1<br />

2.9<br />

<strong>1.</strong>65<br />

<strong>1.</strong>35<br />

2.6<br />

2.4<br />

<strong>1.</strong>15<br />

0.85<br />

0.5 2<br />

0.5<br />

0.3<br />

0.1 0.05 0.05 0.1<br />

(1)<br />

max.<br />

E (1)<br />

D (1)<br />

REFERENCES<br />

IEC JEDEC J<strong>EIT</strong>A<br />

SOT762-1 - - -<br />

MO-241 - - -<br />

74HC74; 74HCT74<br />

DHVQFN14: plastic dual in-line compatible thermal enhanced very thin quad flat package; no leads;<br />

14 terminals; body 2.5 x 3 x 0.85 mm<br />

terminal 1<br />

index area<br />

L<br />

E h<br />

1<br />

14<br />

e<br />

D<br />

e 1<br />

2 6<br />

13 9<br />

D h<br />

b<br />

7<br />

8<br />

B A<br />

e<br />

E<br />

v M<br />

w M<br />

Note<br />

<strong>1.</strong> Plastic or metal protrusions of 0.075 mm maximum per side are not included.<br />

C<br />

C<br />

A<br />

B<br />

A A1<br />

y 1 C<br />

detail X<br />

EUROPEAN<br />

PROJECTION<br />

X<br />

C<br />

y<br />

c<br />

ISSUE DATE<br />

SOT762-1<br />

02-10-17<br />

03-01-27<br />

249


250<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors Product specification<br />

Dual D-type flip-flop with set and reset;<br />

positive-edge trigger<br />

DATA SHEET STATUS<br />

LEVEL<br />

DATA SHEET<br />

STATUS (1)<br />

PRODUCT<br />

STATUS (2)(3)<br />

2003 Jul 10 21<br />

DEFINITION<br />

74HC74; 74HCT74<br />

I Objective data Development This data sheet contains data from the objective specification for product<br />

development. Philips Semiconductors reserves the right to change the<br />

specification in any manner without notice.<br />

II Preliminary data Qualification This data sheet contains data from the preliminary specification.<br />

Supplementary data will be published at a later date. Philips<br />

Semiconductors reserves the right to change the specification without<br />

notice, in order to improve the design and supply the best possible<br />

product.<br />

III Product data Production This data sheet contains data from the product specification. Philips<br />

Semiconductors reserves the right to make changes at any time in order<br />

to improve the design, manufacturing and supply. Relevant changes will<br />

be communicated via a Customer Product/Process Change Notification<br />

(CPCN).<br />

Notes<br />

<strong>1.</strong> Please consult the most recently issued data sheet before initiating or completing a design.<br />

2. The product status of the device(s) described in this data sheet may have changed since this data sheet was<br />

published. The latest information is available on the Internet at URL http://www.semiconductors.philips.com.<br />

3. For data sheets describing multiple type numbers, the highest-level product status determines the data sheet status.<br />

DEFINITIONS<br />

Short-form specification ⎯ The data in a short-form<br />

specification is extracted from a full data sheet with the<br />

same type number and title. For detailed information see<br />

the relevant data sheet or data handbook.<br />

Limiting values definition ⎯ Limiting values given are in<br />

accordance with the Absolute Maximum Rating System<br />

(IEC 60134). Stress above one or more of the limiting<br />

values may cause permanent damage to the device.<br />

These are stress ratings only and operation of the device<br />

at these or at any other conditions above those given in the<br />

Characteristics sections of the specification is not implied.<br />

Exposure to limiting values for extended periods may<br />

affect device reliability.<br />

Application information ⎯ Applications that are<br />

described herein for any of these products are for<br />

illustrative purposes only. Philips Semiconductors make<br />

no representation or warranty that such applications will be<br />

suitable for the specified use without further testing or<br />

modification.<br />

DISCLAIMERS<br />

Life support applications ⎯ These products are not<br />

designed for use in life support appliances, devices, or<br />

systems where malfunction of these products can<br />

reasonably be expected to result in personal injury. Philips<br />

Semiconductors customers using or selling these products<br />

for use in such applications do so at their own risk and<br />

agree to fully indemnify Philips Semiconductors for any<br />

damages resulting from such application.<br />

Right to make changes ⎯ Philips Semiconductors<br />

reserves the right to make changes in the products -<br />

including circuits, standard cells, and/or software -<br />

described or contained herein in order to improve design<br />

and/or performance. When the product is in full production<br />

(status ‘Production’), relevant changes will be<br />

communicated via a Customer Product/Process Change<br />

Notification (CPCN). Philips Semiconductors assumes no<br />

responsibility or liability for the use of any of these<br />

products, conveys no licence or title under any patent,<br />

copyright, or mask work right to these products, and<br />

makes no representations or warranties that these<br />

products are free from patent, copyright, or mask work<br />

right infringement, unless otherwise specified.


<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

Philips Semiconductors – a worldwide company<br />

Contact information<br />

For additional information please visit http://www.semiconductors.philips.com. Fax: +31 40 27 24825<br />

For sales offices addresses send e-mail to: sales.addresses@www.semiconductors.philips.com.<br />

© Koninklijke Philips Electronics N.V. 2003 SCA75<br />

All rights are reserved. Reproduction in whole or in part is prohibited without the prior written consent of the copyright owner.<br />

The information presented in this document does not form part of any quotation or contract, is believed to be accurate and reliable and may be changed<br />

without notice. No liability will be accepted by the publisher for any consequence of its use. Publication thereof does not convey nor imply any license<br />

under patent- or other industrial or intellectual property rights.<br />

Printed in The Netherlands 613508/03/pp22 Date of release: 2003 Jul 10 Document order number: 9397 750 11259<br />

251


252<br />

<strong>1.</strong> <strong>Semester</strong> · Gruppe 4. · Efteråret 2004<br />

7. REFERENCER<br />

Biering-Sørensen, S.: Håndbog i struktureret programudvikling<br />

Hansen, F.O.: UML-Light<br />

Hardware:<br />

Hambley, A.: Electrical Engineering. Principles & Applications<br />

Wakerly, J.F.: Digital Design, Principles & Practices<br />

OrCAD Capture CIS ver. 10<br />

OrCAD Layout ver. 10<br />

Software:<br />

Adams, J. & L. Nyhoff: C++ An Introduction to Computing<br />

Microsoft Visual Studio .NET 2003<br />

Bit C++ Bitwise Manipulators - http://juicystudio.com/tutorial/cpp/bitwise.asp<br />

Mathematical Operations With Signed Numbers -<br />

http://pages.cpsc.ucalgary.ca/~becker/231/Notes/Binary/ExtraNotes/math_signed.html

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!