Department of Science and Technology Institutionen för teknik och naturvetenskap
LiU-ITN-TEK-G--08/030--SE
Databasinmatning för PLC-skåp
på Händelöverket
Silver Kreek
Stefan Saveski
2008-06-05
LiU-ITN-TEK-G--08/030--SE
Databasinmatning för PLC-skåp
på Händelöverket
Examensarbete utfört i elektroteknik
vid Tekniska Högskolan vid
Linköpings universitet
Silver Kreek
Stefan Saveski
Handledare Jan johansson
Examinator Ulf Sannemo
Upphovsrätt
Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare –
under en längre tid från publiceringsdatum under förutsättning att inga
extra-ordinära omständigheter uppstår.
Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner,
skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för
ickekommersiell forskning och för undervisning. Överföring av upphovsrätten
vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av
dokumentet kräver upphovsmannens medgivande. För att garantera äktheten,
säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ
art.
Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i
den omfattning som god sed kräver vid användning av dokumentet på ovan
beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan
form eller i sådant sammanhang som är kränkande för upphovsmannens litterära
eller konstnärliga anseende eller egenart.
För ytterligare information om Linköping University Electronic Press se
förlagets hemsida
http://www.ep.liu.se/Copyright
The publishers will keep this document online on the Internet - or its possible
replacement - for a considerable time from the date of publication barring
exceptional circumstances.
The online availability of the document implies a permanent permission for
anyone to read, to download, to print out single copies for your own use and to
use it unchanged for any non-commercial research and educational purpose.
Subsequent transfers of copyright cannot revoke this permission. All other uses
of the document are conditional on the consent of the copyright owner. The
publisher has taken technical and administrative measures to assure authenticity,
security and accessibility.
According to intellectual property law the author has the right to be
mentioned when his/her work is accessed as described above and to be protected
against infringement.
For additional information about the Linköping University Electronic Press
and its procedures for publication and for assurance of document integrity,
Databasinmatning för PLC-skåp på Händelöverket
Examensprojekt
Av: Stefan Saveski
Silver Kreek
Sammanfattning
Detta examensprojekt är genomfört hos E.On Electro Sandberg Sverige AB som är en underentreprenör till E.On. Uppgiften gick ut på att vi skulle skapa en databas till E.On som ska användas på Händelöverket. Databasen skulle kunna hålla reda på vilka PLC-kort som finns i skåp runt om i anläggningen och var exakt dessa finns för att man på så sätt ska kunna byta ut ett kretskort vid behov av reparation. Händelöverket använder dessa olika skåp med olika PLC-system till att styra förbränningar, pumpar och andra processer. Uppgiften
omfattade programmering och logiskt tänkande samt en hel del problemlösande. För att kunna skapa en databas, har vi använt oss av Microsofts databasprogram Microsoft Access. I
Förord
Först och främst så vill vi tacka alla som har varit involverade i vårt examensprojekt. Håkan Aronsson och Jan Nilsson för ständiga och intensiva genomgångar hur vi skulle gå tillväga på bästa möjliga sätt för att få ett tillfredsställande resultat.
Innehållsförteckning
1. Inledning ... 1
1.1 Bakgrund ... 1
1.2 Historik ... 1
1.3 Syfte ... 2
1.4 Metod och källor ... 2
1.5 Avgränsningar ... 2 2 Genomförande ... 3 3. Startsidan ... 4 4.1 Formulärkonfiguration för skåp ... 5 4.2 Formulärkonfiguration för noder ... 6 4.3 Formulärkonfiguration för komponenter ... 7 5. Sökfunktion ... 8 6. Konfigurering av skåp ... 9 7. Programfunktioner ... 11 8. Resultat ... 12 9. Diskussion ... 13 10. Referenser ... 14 Bilageförteckning ... 15
1. Inledning
1.1 Bakgrund
E.On på Händelöverket sysslar med avfallshantering och materialförbränning. För att kunna styra olika förbränningsprocesser krävs många olika PLC-kort. PLC-korten sitter i olika noder som i sin tur sitter i olika PLC-skåp. En nod är utrustad med cirka 20 kretskort, varje kretskort har sin egen specifika uppgift i noden. För att kunna hålla reda på alla kort som sitter i olika skåp på Händelöverket så bad E.On oss konstruera ett program där man ska kunna registrera alla skåp med sina kort, programmet ska sedan kunna hålla reda på vilka kort som sitter i vilka skåp och hur många av varje kort som finns ute i anläggningen.
1.2 Historik
E.on utrikes
1920 grundades VIAG och VEBA i Tyskland. De var stora industriföretag som ägdes av staten fram till 1960-1980 talet. Det var då de blev börsnoterade för första gången. VIAG och VEBA fortsatte sin framgångshistoria, år 2000 slogs de ihop till vad vi kallar E.on.
E.on har gjort sig av med stora delar av bland annat VIAG:s mobiltelefondel . för att fokusera på energibranschen. Man satsade på att köpa upp företag i och runtom Europa, däribland Sydkraft Sverige. Drygt 70 000 anställda och en omsättning runt ca 50 miljarder kronor gör E.on till ett av världens största privatägda företag.
E.on lokalt
Norrköping anses vara ledande inom fjärrvärmeproduktion. Fjärrvärme har funnits i Norrköping sedan slutet på 1950-talet. Sedan Händelöverket togs i bruk 1980 så har
Norrköping blivit försett med både producerad el och värme. Händelöverket har fyra pannor där blandat material bränns upp och ger el. Material som trä, returflis, kol, gummiflis och avfall blir bränsle.
1.3 Syfte
Det finns en uppsjö av olika PLC-skåp och PLC-system i Händelöverket. För att ha en bättre uppsikt kring alla system och kretskort, tilldelade E.On oss uppgiften att vi skulle utveckla ett databassystem åt dem.
Databassystemet ska göra det möjligt att mata in ett skåps unika nummer och då få fram information om skåpet och vilka PLC-kort som det innehåller.
Programmet i sig skall kunna åskådliggöra alla aktiva kretskort som sitter i noderna utmed hela Händelöverket. Därefter skall man själva kunna ”handplocka” det kretskort man vill ha med information om och vart det sitter. Kretskortets placering och information skall enkelt kunna skrivas ut med ett specialutformat dokument.
Man ska även kunna söka efter en viss typ av PLC-kort och då skall programmet göra en automatisk sökning över alla skåp som finns registrerade i programmet. Därefter ska antal skåp, noder och kretskort sammanställas i en tabell.
1.4 Metod och källor
För att kunna förstå och lära oss databasuppbyggnad i Access, har vi använt oss av flera olika böcker och Internet samt manualer. Då det också handlade mycket om ”vanlig”
programmeringskod, fanns olika lärare till förfogande.
För att kunna påbörja programmeringen så använde vi oss av Office Xp Pro 2003 paketet. Från Officepaketet installerade vi Access 2003.
Böcker såsom Microsoft Access 2007 bibel [1], databashantering [2] och Microsoft Office Xp [3] har använts. Böckerna var en bidragande källa till förbättring i många avseenden.
1.5 Avgränsningar
I brist på tid så kunde vi tyvärr inte förfina programmet ytterligare, utseendemässigt. Vi hade idéer och planer om hur vi ville att programmet skulle se ut. E.Ons ledningsgrupp ville själva fortsätta modifiera programmet, vi lämnade det ”öppet” för vidare modifieringar.
2 Genomförande
Det finns många matnyttiga program med bra funktioner och möjligheter att använda för att lösa uppgiften. Valet föll på Microsoft Access 2003 pga. att det är mest utbrett. Det var också enkelt att sätta sig in i programmet samt att komma igång med programmeringen. Vi började med att skissa en bild på hur vi ville att det skulle se ut i form av ett enkelt blockdiagram, se bild1.
Bild 1: Illustrering av själva genomförandet
Illustreringen blev vårt utgångsunderlag. Efter att ha presenterat blockdiagrammet för E.ons ledning fick vi klartecken att fortsätta med denna ide. Alla anställda på Eon skulle enkelt kunna använda sig av programmet när nya kretskort skulle registreras. Användarvänlighet har legat i fokus för vårt arbete.
3. Startsidan
Den första deluppgiften som blev genombrottet i programmeringen var att konstruera en startsida för programmet. Vi ansåg att vi skulle lägga ner mycket tid och möda på användarvänligheten och snabbheten.
Vi började konstruera en startsida som såg ut på följande sätt. Se bild 2. För att kunna komma in i registret måste man ange ett lösenord. Vi vill inte att obehöriga personer skall kunna ta del av programmet och komma åt känslig information.
Bild 2: Programmets startsida
Vi överlappade en egendesignad bild som var integrerad med två knappar, register och avsluta.
4.1 Formulärkonfiguration för skåp
När det första skedet i programmeringen var slutfört, var det dags att ta itu med den andra delen, huvudsidan. Vi konstruerade en smidig och lättöverskådlig visningssida, se bild 2. Med hjälp av huvudsidan kan man enkelt få reda på historik kring inmatade skåp, vad för sorts typ av skåp. Nyinmatat skåp har ett unikt nummer som gör det enkelt användaren att lokalisera det vid behov av reparation. För att få med ytterligare information om skåpet, utökade vi med en ”Fabrikat” flik. Fabrikaten varierade över hela anläggningen så det var därför av stor vikt att råda bot på alla problem som har med fabrikat att göra. Förut kunde man förväxla ett fabrikat med ett annat till exempel ett Siemens med ett ABB, mycket pengar kan gå förlorade tack vare sådana misstag. Dagens konjunktur tillåter inte sådana misstag.
4.2 Formulärkonfiguration för noder
Efter Skåpslistan dirigeras man automatiskt till nod-sektionen.
Oftast brukar ett skåps id vara densamma som nodnamnet för att det inte ska bli för
komplicerat, se bild 3. Noderna utgör en kritisk del av arbetet och E.On är beroende av dem. En nod styr olika processer på anläggningen som till exempel styrning av en pump,
förbränning, kylning, timer och andra processer. De ska fungera felfritt.
4.3 Formulärkonfiguration för komponenter
Sista skedet i sammanställningen är själva huvudinnehållet. I själva noden finns kort med olika egenskaper beroende på önskad funktion. Nu får man fram en fullständig lista över vilka kort som finns inkluderade i noden och kort som inte är i bruk (inaktiva kort), se bild 4. Det måste alltid finnas ett visst antal inaktiva kretskort till förfogande vid risk för haveri. Ett defekt kretskort skall omgående bytas ut med ett nytt. Att E.On ville ha inaktiva kort registrerade i programmet berodde på flera orsaker. De ville kartlägga olika korttyper med avseende på dess ”beteende”, pålitlighet och funktioner. Om en viss korttyp går sönder ofta så behöver det inte betyda att det är fel på noden, utan det kan vara ett fabrikationsfel. Som tidigare nämnts, loggas alla felkort samt inaktiva kort av programmet.
Komponentlistan har en avgörande roll för förebyggande av framtida fel. Nu kan man följa utvecklingen av en viss korttyp som sitter i en nod, uppträder samma fel på korten så löses det på att annat sätt gentemot förut. Det var oklart tidigare om kretskorten hade gått sönder i drift, leverans eller slitage.
Nu tar man det direkt med tillverkaren och informerar dem att x antal kort av en viss typ inte presterar riktigt som de ska. Nu har man sakliga fakta och historik kring alla fel som har uppkommit. Inte nog med att E.On nu slipper köpa in fler kretskort av samma typ, nu har de blivit besparade på enorma kortbuffertar. Detta har minskat deras kostnad rejält. I sin tur så har programmet lett till att tillverkaren av korten tvingas tillverka bättre och hållbarare kretskort.
Bild 4: Komponentlistan visar vilka kort noden innehåller.
För förstå sig på alla konfigureringar samt bestyckningar av olika kretskort, skapade vi en manual som beskriver steg för steg hur man går tillväga för att bestycka en nod: Se bilaga 1
5. Sökfunktion
För att kunna ge ett optimalt gränssnitt som passade de anställda hos E.On, utökade vi med en sökfunktion. Den ”egna” sökfunktionen kan enkelt ta reda på hur många kretskort av en viss korttyp som finnas aktiva/inaktiva, eller det totala antalet. Som operatör ska man snabbt och enkelt få information kring kretskorten som sitter i noderna, se bild 5. Man kan enkelt få reda på information om något kretskort fattas i någon nod och beställa in ett nytt omedelbart. Programmet underlättar väldigt mycket när man ska göra inventeringar av olika slag, efter ett musklick genomför det en sökning över hela verket till skillnad mot förut. Det som tidigare kunde ta flera veckor att utföra, tar nu ca 10s att få uträknat.
6. Konfigurering av skåp
I detta avsnitt ser man programmets fulla potential och ambition.
Vi bröt ner själva huvudprogrammet i flera beståndsdelar, eftersom allt ska kunna
åskådliggöras enkelt och smidigt. Efter undersökningar vad E.On var ute efter ,började vi skräddarsy programmet utefter deras behov. Indelning av alla förslag och lösningar sorterades i olika subrutiner, vilket resulterade i lösningen nedan, se bild 6.
Kategoriseringen av programmet löstes med flera huvudrubriker och med en enkel
kombination av underrubriker. Huvudrubriken i primärkolumnen är skapad för att mata in ett skåps id, se bild 6 punkt 1. Ett unikt id för respektive nod skapades för att enkelt kunna urskilja alla skåp som finns placerade utmed hela verket. Vet man exempelvis ett skåps id, då vet man hur hela noden är bestyckad. Efter att ett skåps id har matats in så finns det ytterligare en kategori i primärkolumnen, ”Fabrikat”. Där ska man mata in vem som är leverantör till skåpet, eftersom det är bra att veta om ett fel inträffar och man är i snabbt behov av
reparation. Istället för att ödsla tid på att ta reda på vilket fabrikat skåpet är av, så finns det redan inmatat i programmet. Detta gör det möjligt för den anställda att enkelt kunna beställa in servicedelar eller ta reda på mer information kring skåpet. Vi lade även till en övrig flik på E.ons begäran. Nu är det möjligt för dem att få reda på lite mer djupgående info tack vare ”övrigt” fliken. Tack vare specificeringen så vet man enkelt vad som är vad och risken för missförstånd minimeras. Övrigt fliken har en avgörande roll i prioriteringar. Om det är något som krånglar och man ser att det är exempelvis en kommunikationsdator, då är man i behov av experter på just en sådan.
Efter inmatade värden och siffror i primärkolumnen dirigeras man automatiskt över till kolumn två. Se bild 6 punkt 2.
I kolumn två ska man registrera vad det är för sorts nod som sitter i skåpet. En nod består primärt av två delar, ett magasin och kort. Ett magasin består av ca 20 tomma fack. I de tomma facken trycker man in kretskort för att få önskade funktioner som exempelvis att styra en förbränning eller en pump under en viss tid.
Noderna har ett eget unikt serienummer, därför är det av stor vikt att man skall kunna mata in detta unika id-nummer. Numret är av stor vikt därför att om något går sönder, skall man snabbt få reda på vad det är för skåp och vart det är beläget vid Händelöverket med hjälp av numret.
Kolumn tre visar vad det är för sorts kretskort som ingår i noden. Se bild 6 punkt 3. Här skräddarsyr man sitt eget system efter olika standarder och föreskrifter för att få en optimal funktion som passar E.On. Korttypen registreras och visas i fältet ”komponenter”. Nod id:t ska alltid finnas till hands för att man enkelt skall kunna se i en pärm hur man bestyckar noden med rätt kort.
I kolumn fyra gjorde vi det så kallade grovjobbet. Denna operation var en engångsföreteelse, att mata in alla kretskort manuellt. Nu kan man själva välja vilka kort som skall inkluderas i en nod. Man scrollar i komponentlistan och dubbelklickar på korttypen som sedan registreras i ”Komponentlistan”. Se bild 6 punkt 4.
7. Programfunktioner
Registrera ny nod
Registrerar en helt ny nod genom ”Registrera ny nod” knappen. Efter man har matat in alla de väsentliga värdena och nummer så måste man spara noden.
Spara skåp
När man registrerat en ny nod och valt en lämplig kombination av kort så är det viktigt att man sparar allt, vilket görs med ”spara skåp” knappen. Det kan finnas risk att tidigare arbeten kan försvinna om man inte sparar ändringar av olika slag.
Registrera ny komponent
Teknologin rusar framåt med stormsteg och detta program kommer att bli tvunget att hänga med utvecklingstrenden. Problemet löstes genom att vi valde att lägga till ”Registrera ny komponent” knapp. Det gör det möjligt för de anställda att mata in nya sorters korttyper men samtidigt kunna behålla de gamla.
Visa konfiguration
Efter man skräddarsytt en nod efter E.Ons önskan och ska göra en avsyning samt en fullständig sammanställning över alla kretskort . I ”visa konfiguration” visas en fullständig sammanställning över noden samt alla kretskort och nod id:t i ett specialutformat dokument med datum.
Ta bort skåp.
Om en nod har rustats ned och företaget inte längre är i behov av den, så konstruerades en ”Borrtagnings funktion”. För säkerhets skull konstruerades även en ytterligare fråga då man är på väg att ta bort en nod, ”är du säker”. Extrafrågan lades till i efterhand för att minska risken för misstag.
8. Resultat
Eftersom ett projekt som detta aldrig tidigare har genomförts på E.On, kan vi glatt säga att vi nådde upp till deras förväntningar. E.On hade tidigare inget system överhuvudtaget för att hålla reda på sina kretskort. E.On har nu fått en bredare uppsikt kring kretskort samt hur många av samma typ av kretskort det finns. Programmet har underlättat vid inventeringen av olika sorters kretskort.
9. Diskussion
Eftersom ett sådant examensprojekt inte tidigare har genomförts, fick vi själva stå för logiskt och ett problemlösande tänkande. Vi förde en ständig dialog med E.Ons ledning angående arbetet och dess riktning och mål. Vi hade väldigt fria händer och var tvungna att själva komma på hur vi skulle gå till väga och hur programmet skulle behöva fungera för att leva upp till deras önskemål.
Access var den väsentligaste delen i arbetet för att allt arbete utfördes med den förutom när vi skulle testa vilken information som skulle ingå i databasen, detta gjordes i programmet ”Excel” vilket tog ganska långt tid för att det var många olika PLC-system som skulle testas. När detta var gjort, började vi med själva programmeringen i Access och eftersom vi aldrig har jobbat med programmet tidigare var det väldigt svårt att komma någonvart i början. Access är väldigt stegbaserat program så att vi fick lära oss att programmera steg för steg innan vi blev någorlunda fullärda inom programspråket Visual Basic.
Databasprogrammet utvecklade vi efter eget tycke eftersom vi fick fria händer av E.Ons ledning att göra något som vi tyckte skulle passa dem, för att de visste inte mer än vi gjorde & vad som skulle vara passande. Därför fick vi visa upp programmet allt eftersom och höra vad de tyckte att man kunde förbättra. Kommunikationen mellan oss och ledningsgruppen ledde till att programmet blev mer avancerat än vi först hade räknat med.
E.On har nu fått ett välbehövligt och robust databassystem som är enkelt att använda. Programmets påverkan i företaget har lett till att de nu kan övervaka kretskort utmed hela deras anläggning, lokalisera olika noder/skåp vid behov av reparation och dylikt.
10. Referenser
[1] Groh, Michael. Microsoft. Access 2007 bibel. ISBN: 0470046732 [2] Lambert, M Dow. Microsoft Access 2007: steg för steg. ISBN: 9789163609206 [3] Young, Michael J. Microsoft Office utan och innan. ISBN: 9172417048
Bilageförteckning
Bilaga 1 Manual Bilaga 2 Källkod
MANUAL FÖR E.ON DATABAS
Författare Silver Kreek Stefan Saveski
INNEHÅLL
Figurförteckning ... 18 Inledning till E.On Databas ... 19 Installation ... 19 Börja använda E.On databas ... 19 Huvudmeny ... 19 Att använda E.On Databas ... 20 1. Lägga till information i E.On Databas ... 20 1.1 Lägga till skåp ... 20 1.2 Lägga till en ny nod i ett skåp ... 23 1.3 Lägga till en komponent i en nod ... 23 2. Få ut information från databasen ... 24 2.1 Skriva ut konfigurationen för något skåp ... 24 2.2 Skriva ut komponentlista ... 25 3. Redigera och radera data ... 26 3.1 Radera ett skåp ... 26 3.2 Radera en komponent från en nod ... 26 3.3 Redigering av ett skåp ... 27 3.4 Redigering av en komponent ... 28 Bilagor ... 29
Figurförteckning
Figur1.1.1. Huvudmeny av registersida för skåp. figur 1.1.2. Skåpkonfigurationsfönster.
figur 1.1.3. Skåpkonfigurationsfönstret när man håller på att lägga till ett nytt skåp. figur 1.2.1. "Lägg till en ny nod” rutan.
figur2.2.1. Registersida för komponenter. figur3.2.1 ”Ta bort komponent” rutan
Inledning till E.On Databas
Installation
Installationen bör gå till på följande sätt:
• Kopiera filen ”EonDBS.mdb” på en server som är tillgänglig för alla som kommer att använda databasen.
• Kopiera därefter filen ”Eon2003.mds” på varje dator som man ska använda databasen på och länka sedan till filen ”EonDBS.mdb”. Hur man går tillväga med det finner ni under nästa avsnitt.
Börja använda E.On databas
Starta databasen genom att öppna filen Eon2003.mdb med Microsoft Access. När man startar E.On databas för första gången, måste man länka till själva databasfilen. För att kunna använda databasen på flera datorer ska man ha själva databasfilen på en filserver. Databasfilen heter EonDBS.dbs, kontakta systemadministratören om var filen finns. När detta är gjort kan man börja använda E-On Databas.
Huvudmeny
Huvudmenyn ser ut på följande sätt
• Tryck på start för att börja lägga till eller redigera ett skåp eller noder, alternativt tryck Avsluta för att avsluta.
Att använda E.On Databas
1. Lägga till information i E.On Databas
1.1 Lägga till skåp• Tryck på start i huvudmenyn. Då kommer denna ruta upp
figur 1.1.1. illustrerar huvudmenyn av registersida för skåp
Då får man fram denna ruta.
figur 1.1.2. illustrerar skåpkonfigurationsfönstret
• Tryck därefter på knappen ”Nytt skåp”. Tryck sedan på okej i det lilla varningsfönstret.
”Konfigurera skåp” fönstret kommer därefter att se ut på följande sätt
figur 1.1.3. illustrerar skåpkonfigurationsfönstret när man håller på att lägga till ett nytt skåp. • Skriv in skåpets värden längst uppe i det vänstra hörnet och tryck sedan på knappen
”Spara skåp” i högra hörnet.
1.2 Lägga till en ny nod i ett skåp
• Markera det önskade skåpet i ”Konfigurera skåp” fönstret (till vänster i figur1.1.2). Tryck därefter på ”Registrera ny nod” knappen
figur 1.2.1. visar hur "lägg till en ny nod” ser ut.
• Skriv in nodens id (om denna ej finns så använd skåpets id följt med -1 och om flera noder finns så fortsätt med skåpets id följt med -2 etc.) och tryck sedan på uppdatera och stäng.
Din nod har nu skapats i skåpet och i den kan du lägga till komponenter.
1.3 Lägga till en komponent i en nod
• Markera det önskade skåpet i ”Konfigurera skåp” fönstret (till vänster i figur1.1.2.). • Klicka sedan på noden du vill lägga till komponenter i (övre mitten i figur1.1.2.) • Därefter dubbelklickar man på den önskade komponenten (till höger i figur1.1.2.) som
2. Få ut information från databasen
2.1 Skriva ut konfigurationen för något skåp• Markera ett skåp i ”Konfigurera skåp” (figur1.1.2.).
• Klicka sedan på knappen ”visa konfiguration”, då får man upp vilka komponenter som finns i skåpet och på vilken nod de sitter i och den informationen kan man sedan skriva ut.
2.2 Skriva ut komponentlista
• Tryck på knappen ”Sök komponenter” i (se figur1.1.1.).
Figuren ändrar då utseende och i stället för skåplista finns istället en komponentlista (se vänster i figur2.2.1.)
figur2.2.1. visar en bild av registersida för komponenter.
• Klicka sedan på ”Visa komponentlista”.
Då visas en utskriftsvänlig komponentlista som innehåller information över hur många
kretskort en nod innehåller, id nr samt sammanställning för kretskort över hela anläggningen. För att se hur en sådan utskrift kan se ut, se Bilaga 2.
3. Redigera och radera data
VARNING! Tänk innan du tar bort eller ändrar någon information i E.On databas. Konsultera
gärna systemadministratören innan om du är osäker.
3.1 Radera ett skåp
• Öppna fönstret ”Konfigurera skåp” (figur1.1.2.).
• Markera sedan det skåp du vill ta bort och klicka på knappen ”Ta bort skåp” och sedan på ”Bekräfta”.
VARNING ETT BORTAGET SKÅP KAN EJ ÅTERFÅS!!
3.2 Radera en komponent från en nod
• Klicka på den komponent du vill ta bort från skåpet i fönstret ”Konfigurera skåp” (nedre mitten i figur1.1.2.).
Då visas denna förfrågan.
figur3.2.1 visar hur en ”Ta bort komponent” ruta ser ut.
3.3 Redigering av ett skåp
• Öppna fönstret ”Konfigurera skåp” (figur1.1.2.).
• Markera sedan det skåp som du vill ändra och klicka sedan på knappen ”Redigera skåp”
Då kommer denna ruta upp.
Figur3.3.1. visar hur en ”Redigera skåp” ruta ser ut.
• Skriv in de nya värdena och klicka sedan på ”Uppdatera och stäng” knappen. De nya värdena har nu sparats i databasen.
3.4 Redigering av en komponent
• Klicka på knappen ”Sök komponenter” i (se figur1.1.1.). • Markera den komponent du vill ändra (till vänster i figur2.2.1.) • Klicka sedan på ”Redigera komponent”.
Då kommer denna ruta upp.
Figur3.4.1. visar hur en ”Redigera komponent” ruta ser ut.
• Skriv in de nya värdena och klicka sedan på ”Uppdatera och stäng”. Dina nya värden har nu sparats i databasen.
Bilagor
Bilageförteckning
Bilaga 1: Utskriften för skåpskonfiguration………..15 Bilaga 2: Utskriften för komponentlistan………..16
Bilaga 2 Källkod
Option Compare Database Option Explicit
Private Sub cmdReg_Click() ‘Start knapp’ DoCmd.OpenForm "Start"
End Sub
Private Sub Form_Activate()
'DoCmd.ShowToolbar "Formulär", acToolbarNo 'DoCmd.ShowToolbar "FormStatistik", acToolbarNo 'DoCmd.ShowToolbar "FormMeny", acToolbarNo 'DoCmd.ShowToolbar "Huvudmeny", acToolbarYes End Sub
Private Sub Form_Load() If CheckLinks() = False Then ' Försök länka om tabellerna. 'Om går inte stäng formuläret If RelinkTables() = False Then DoCmd.Quit
End If End If 'CheckUser End Sub
Private Sub Kommandoknapp3_Click() ’Avslutaknappen’ On Error GoTo Err_Kommandoknapp3_Click
DoCmd.Quit Exit_Kommandoknapp3_Click: Exit Sub Err_Kommandoknapp3_Click: MsgBox Err.Description Resume Exit_Kommandoknapp3_Click End Sub
Ny komp:
Option Compare Database Option Explicit
Sub AddKomp() Dim DB As Database Dim rstKomp As Recordset Dim strSQLKomp As String
strSQLKomp = "Select * From tblKomp Where UCase(tblKomp.Komponent) = '" & UCase(Trim(Komp.Value)) & "'"
strSQLKomp = strSQLKomp & " Order By tblKomp.KompID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstKomp = DB.OpenRecordset(strSQLKomp) If Not rstKomp.EOF Then
Beep
MsgBox "Finns redan komponent med samma namn!", vbCritical Exit Sub Else rstKomp.AddNew rstKomp!Komponent = Trim(Komp.Value) rstKomp.Update rstKomp.Close DB.Close DoCmd.Close End If End Sub
Private Sub cmdUpdate_Click() If IsNull(Komp.Value) Then Beep
MsgBox "Saknas värde för komponent!", vbCritical DoCmd.GoToControl "Komp" Exit Sub Else AddKomp End If End Sub
Private Sub Form_Close() intCheckNodOpen = 0
DoCmd.GoToControl "lstKompLista" End Sub
Ny nod:
Option Compare Database Option Explicit
Sub AddNod() Dim DB As Database Dim rstNod As Recordset Dim strSQLNod As String
strSQLNod = "Select * From tblNod Order By tblNod.NodID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstNod = DB.OpenRecordset(strSQLNod) rstNod.AddNew
rstNod!SkapID = strSkapId If Not IsNull(Nod.Value) Then rstNod!Nod = Nod.Value End If rstNod.Update rstNod.Close DB.Close End Sub
Private Sub cmdUpdate_Click() AddNod
DoCmd.Close End Sub
Private Sub Form_Close() intCheckNodOpen = 0
DoCmd.SelectObject acForm, "NyttSkap", False DoCmd.GoToControl "lstNod"
Nytt skap:
Option Compare Database Option Explicit
Private Sub Listruta7_Click() End Sub
Private Sub cmdDelete_Click() If IsNull(lstSkap.Value) Then Beep
MsgBox "Du har inte valt skåp du vill ta bort!", vbCritical Exit Sub
End If
If cmdDelete.Caption = "Ta bort skåp" Then cmdDelete.Caption = "Bekräfta..."
ElseIf cmdDelete.Caption = "Bekräfta..." Then TaBortSkap
lstSkap.Requery lstNod.Requery lstKomp.Requery
cmdDelete.Caption = "Ta bort skåp" End If
End Sub
Private Sub cmdNyKomp_Click() DoCmd.OpenForm "NyKomp" End Sub
Private Sub cmdNyNod_Click() strSkapId = SkapID.Value DoCmd.OpenForm "NyNod" End Sub
Private Sub cmdNySkap_Click()
If cmdNySkap.Caption = "Nytt skåp" Then SkapID.Visible = True
Fabrik.Visible = True Ovrigt.Visible = True Ovrigt.Locked = False SkapID.Locked = False
Fabrik.Locked = False
cmdNySkap.Caption = "Spara skåp" Beep
MsgBox "Skriv in värdena för skåp id och fabrikat och spara skåp sedan!", vbInformation DoCmd.GoToControl "SkapID"
ElseIf cmdNySkap.Caption = "Spara skåp" Then If IsNull(SkapID.Value) Then
Beep
MsgBox "Saknas skåp id!", vbCritical Exit Sub Else AddSkap End If End If End Sub
Private Sub cmdVisa_Click()
DoCmd.OpenReport "VisaSkap", acViewPreview End Sub
Sub AddKomp() Dim DB As Database
Dim rstDelaKomp As Recordset Dim strSQLDelaKomp As String
strSQLDelaKomp = "Select * From tblDelaNodKomp Order By tblDelaNodKomp.DelaID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstDelaKomp = DB.OpenRecordset(strSQLDelaKomp) rstDelaKomp.AddNew rstDelaKomp!NodID = lstNod.Value rstDelaKomp!KompID = lstKompLista.Value rstDelaKomp.Update rstDelaKomp.Close DB.Close End Sub Sub AddNod() End Sub Sub AddSkap()
Dim DB As Database Dim rstSkap As Recordset Dim strSQLSkap As String
strSQLSkap = "Select * From tblSkap Where UCase(tblSkap.SkapID) = '" & UCase(SkapID.Value) & "'"
strSQLSkap = strSQLSkap & " Order By tblSkap.SkapID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstSkap = DB.OpenRecordset(strSQLSkap) If Not rstSkap.EOF Then
Beep
MsgBox "Skåp du försöker registrera finns redan!", vbCritical rstSkap.Close DB.Close DoCmd.GoToControl "SkapID" Exit Sub Else rstSkap.AddNew rstSkap!SkapID = SkapID.Value If Not IsNull(Fabrik.Value) Then rstSkap!Fabrikat = Fabrik.Value End If
If Not IsNull(Ovrigt.Value) Then rstSkap!Ovrigt = Ovrigt.Value End If rstSkap.Update rstSkap.Close DB.Close cmdNySkap.Caption = "Nytt skåp"
MsgBox "Nytt skåp har lagts till i register.", vbInformation SkapID.Locked = True Fabrik.Locked = True Ovrigt.Locked = True Ovrigt.Visible = False SkapID.Visible = False Fabrik.Visible = False lstSkap.Requery End If End Sub Sub SearchSkap() Dim DB As Database Dim rstSkap As Recordset Dim strSQLSkap As String
strSQLSkap = "Select * From tblSkap Where UCase(tblSkap.SkapID) = '" & UCase(lstSkap.Value) & "'"
strSQLSkap = strSQLSkap & " Order By tblSkap.SkapID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstSkap = DB.OpenRecordset(strSQLSkap) SkapID.Value = rstSkap!SkapID
If Not IsNull(rstSkap!Fabrikat) Then Fabrik.Value = rstSkap!Fabrikat End If
If Not IsNull(rstSkap!Ovrigt) Then Ovrigt.Value = rstSkap!Ovrigt End If rstSkap.Close DB.Close End Sub
Private Sub Form_Close()
DoCmd.SelectObject acForm, "NyttSkap", False DoCmd.GoToControl "lstSkap"
End Sub
Private Sub lstKomp_Click() DoCmd.OpenForm "TabortKomp" End Sub
Private Sub lstKomp_GotFocus() lstKomp.Requery
End Sub
Private Sub lstKompLista_DblClick(Cancel As Integer) AddKomp
lstKomp.Requery End Sub
Private Sub lstKompLista_GotFocus() lstKompLista.Requery
End Sub
Private Sub lstNod_Click() lstKompLista.Locked = False lstKomp.Requery
End Sub
Private Sub lstNod_GotFocus() lstNod.Requery
End Sub
Private Sub lstSkap_Click() lstKompLista.Locked = True SkapID.Visible = True Fabrik.Visible = True Ovrigt.Visible = True SearchSkap cmdNyNod.Enabled = True lstNod.Requery End Sub Sub TaBortSkap() Dim DB As Database Dim rstSkap As Recordset Dim strSQLSkap As String Dim rstNod As Recordset Dim strSQLNod As String Dim rstKomp As Recordset Dim strSQLKomp As String Dim lngNodID As Long
strSQLSkap = "Select * From tblSkap Where UCase(tblSkap.SkapID) = '" & UCase(lstSkap.Value) & "'"
strSQLSkap = strSQLSkap & " Order By tblSkap.SkapID;"
strSQLNod = "Select * From tblNod Where UCase(tblNod.SkapID) = '" & UCase(lstSkap.Value) & "'"
strSQLNod = strSQLNod & " Order By tblNod.NodID;"
strSQLKomp = "Select * From tblDelaNodKomp Where tblDelaNodKomp.KompID = " & lngNodID & ""
Set DB = DBEngine.Workspaces(0).Databases(0) Set rstSkap = DB.OpenRecordset(strSQLSkap) Set rstNod = DB.OpenRecordset(strSQLNod) If Not rstNod.EOF Then
Do While Not rstNod.EOF lngNodID = rstNod!NodID
strSQLKomp = "Select * From tblDelaNodKomp Where tblDelaNodKomp.KompID = " & lngNodID & ""
strSQLKomp = strSQLKomp & " Order By tblDelaNodKomp.KompID;" Set rstKomp = DB.OpenRecordset(strSQLKomp)
If Not rstKomp.EOF Then Do While Not rstKomp.EOF rstKomp.Delete rstKomp.MoveNext Loop rstKomp.Close Else rstKomp.Close End If rstNod.Delete rstNod.MoveNext Loop rstNod.Close Else rstNod.Close End If
If Not rstSkap.EOF Then rstSkap.Delete rstSkap.Close Else rstSkap.Close End If DB.Close End Sub
Register:
Option Compare Database Option Explicit
Private Sub cmdConfSkap_Click() DoCmd.OpenForm "NyttSkap" End Sub
Private Sub cmdSearch_Click()
If cmdSearch.Caption = "Sök komponenter" Then lstSkap.RowSource = "qrySearchKompLista" lstSkap.Requery
lblSkap.Caption = "Komponentlista" cmdVisa.Visible = True
cmdSearch.Caption = "Sök skåp"
ElseIf cmdSearch.Caption = "Sök skåp" Then lstSkap.RowSource = "qrySkapLista" lstSkap.Requery lblSkap.Caption = "Skåplista" cmdSearch.Caption = "Sök komponenter" cmdVisa.Visible = False End If End Sub
Private Sub cmdVisa_Click()
DoCmd.OpenReport "VisaKomponeneter", acViewPreview End Sub
Private Sub lstKomp_GotFocus() lstKomp.Requery
End Sub
Private Sub lstNod_Click() lstKomp.Requery
End Sub
Private Sub lstNod_GotFocus() lstNod.Requery
End Sub
Private Sub lstSkap_Click() lstNod.Requery If cmdSearch.Caption = "Sök skåp" Then cmdVisa.Enabled = True Else cmdVisa.Enabled = False End If End Sub
Private Sub lstSkap_GotFocus() lstSkap.Requery
Start:
Option Compare Database Option Explicit
Private Sub Form_Open(Cancel As Integer) Me.TimerInterval = 7000
'intCount = 1 End Sub
Private Sub Form_Timer()
' If-uttryck som används för att återställa egenskapen TimerInterval. If Me.TimerInterval <> 0 Then
Me.TimerInterval = 0 End If
' Anropa proceduren DisplayStartup för att avgöra inställningen för ' den egna databasegenskapen VisaStartformulär.
If DisplayStartup = True Then DoCmd.OpenForm "Huvudmeny" End If
DoCmd.Close acForm, "Start"
Ta bort komp:
Option Compare Database Option Explicit
Private Sub cmdUpdate_Click() TaBort
DoCmd.Close End Sub
Private Sub Form_Close() intCheckNodOpen = 0
DoCmd.SelectObject acForm, "NyttSkap", False DoCmd.GoToControl "lstKomp"
End Sub
Private Sub krsDelete_AfterUpdate() If krsDelete.Value <> 0 Then cmdUpdate.Enabled = True Else cmdUpdate.Enabled = False End If End Sub Sub TaBort() Dim DB As Database Dim rstKomp As Recordset Dim strSQLKomp As String
strSQLKomp = "Select * From tblDelaNodKomp Where tblDelaNodKomp.NodID = " & NodID.Value & " AND tblDelaNodKomp.KompID = " & KompID.Value & ""
strSQLKomp = strSQLKomp & " Order By tblDelaNodKomp.NodID;" Set DB = DBEngine.Workspaces(0).Databases(0)
Set rstKomp = DB.OpenRecordset(strSQLKomp) If Not rstKomp.EOF Then
Do While Not rstKomp.EOF rstKomp.Delete
rstKomp.MoveNext Loop
rstKomp.Close Else rstKomp.Close End If DB.Close End Sub
Timer:
Option Compare Database Option Explicit
Dim intCounter As Integer Private Sub Form_Load() Me.TimerInterval = 50 txtCounter.Value = "." 'Form_Timer
End Sub
Private Sub Form_Open(Cancel As Integer) Form_Timer
End Sub
Private Sub Form_Timer()
If intCounter = 39 Then txtCounter.Value = "." intCounter = 0
Else
intCounter = intCounter + 1
txtCounter.Value = txtCounter.Value & "." 'DoCmd.RepaintObject acForm, "Timer" End If
Report visa komponenter:
Option Compare Database Option Explicit
Private Sub Report_Open(Cancel As Integer) DoCmd.Maximize
End Sub
Report visa skåp:
Option Compare Database Option Explicit
Private Sub Report_Open(Cancel As Integer) DoCmd.Maximize