RBWARE.TXT 6 Jan '89 Hard- en software beschrijving van het RULBUS-systeem Alvorens de hard- en software te gebruiken verdient het aanbeveling deze beschrijving te lezen om zo een algemeen beeld van de gekozen opzet te verkrijgen. Allereerst komt de hardware aan de orde, daarna vindt u een beschrijving van de software zoals die voor de IBM PC gerealiseerd is. Daarna kunt u dan de uitgebreide specifieke beschrijvingen bekijken in de RULBUS-documentatie en, voor de software, in de listings. De hardware. Het RULBUS-systeem is speciaal ontwikkeld om onderdeel uit te maken van geautomatiseerde meet en regel- en test-opstellingen. Afhankelijk van de toepassing besturen wij het RULBUS-rack vanuit een IBM PC, of wordt er een zogenaamde KLUS2 computer-kaart ingezet zodat het rack zelfstandig of samen met de PC kan werken. De kaarten zijn geplaatst in metalen cassettes, die in het meegeleverde 19-inch rack geschoven kunnen worden. Dit rack maakt het mogelijk om de kaarten, al dan niet in de cassettes geplaatst, te testen en te analiseren. Achterin de kast is de voeding ondergebracht, deze voorziet de kast van de benodigde spanningen (+5V en +/- 15V), via de RULBUS-flatcable. Op de achterkant van de kast zijn twee RULBUS-connectors te vinden. Deze zijn bedoeld voor de externe aansluiting van de RULBUS. Een is voor de verbinding met de IBM-PC (of een andere computer met RULBUS-aansluiting), de andere kan gebruikt worden voor het (extern) aansluiten van een losse kaart, dan wel een complete kast. Bij deze connectors ziet u op het aansluitplaatje, of de voedingsspanningen al dan niet op de betreffende connector aangesloten zijn. De aansluitkabel naar de IBM-PC moet vrij zijn van de voedingsspanning uit het rack; wilt u eventueel een losse kaart of cassette buiten de kast testen, dan dient u de connector te gebruiken waarop de spanningen wel zijn aangesloten. Hiermee wordt voorkomen, dat u direct een voeding nodig heeft, als u even een kastje "los" wilt testen. Hoewel dit voor de RULBUS niet essentieel is, vormt de gekozen opzet een mooie busstructuur: de kabel loopt van de IBM-RULBUS-kaart naar de kast toe, daarna door de kast en kan tenslotte aan de andere zijde eventueel verlengd worden. Zo treden dus geen splitsingen op. De RULBUS-flatcable van de I/O-kast moet verbonden worden met de IBM- RULBUS-converterkaart. Deze kaart moet dan (uiteraard) in een vrij slot in de IBM-PC gestoken worden. De software. De taal C. Voor het schrijven van de van driver-software en de testprogramma's van RULBUS-kaarten is de computertaal C gekozen. Een van de grote voordelen van C is de strakke taaldefinitie (B.W. Kernighan & D.M. Ritchie, The C programming Language). Goede implementeerbaarheid, efficientie, het grote assortiment aan operatoren zijn bij C belangrijker dan de 'veiligheid' van de taal. Evenals assembler laat C de programmeur een grote vrijheid bij het realiseren van de programma's, doch het biedt daarnaast de voordelen van een krachtige, gestructureerde hogere orde taal. De simpele wijze van type- conversie maakt C erg geschikt voor programma's, die direct met de hardware communiceren. Deze eigenschappen maken het dan ook tot een snelle taal, wat voor I/O doeleinden natuurlijk een groot voordeel is. Op dit moment zijn reeds vele C-compilers, al of niet als cross-compiler, beschikbaar voor een diversiteit aan processoren. Dit maakt, samen met de reeds genoemde strakke taaldefinitie, dat ook de overdraagbaarheid van C gewaarborgd is. Voor de IBM PC's gebruiken wij de Turbo-C compiler. Voor de KLUS2 computerkaart gebruiken wij de TDD 6809 C cross-compiler. De software-structuur. De opzet van de software is zo gemaakt, dat op ieder niveau een optimale werkomgeving gecreeerd kan worden. We onderscheiden de volgende niveau's: A) De gebruiker Deze heeft in principe, behoudens het gebruik ervan, niets met de software te maken. Zijn enige zorg is het optimaal "samenstellen" van zijn eigen RULBUS- systeem, dus: welke kaarten heb ik nodig voor het realiseren van de opdracht, hoeveel exemplaren heb ik van iedere kaart nodig, en, gezien de huidige opzet, welke RULBUS- adressen gebruik ik daarvoor. Het enige dat de gebruiker hiervoor moet doen is het invoeren van een lijstje in de computer. B) De applicatie-programmeur Voor het schrijven van applicatie-software zijn device-drivers aanwezig. Deze drivers verzorgen de communicatie met de hardware. Mocht er een fout-conditie optreden, dan wordt dit doorgegeven, zodat de applicatie- programmeur hieruit zijn (mogelijke) consequenties kan trekken. Ter illustratie hiervan wordt verwezen naar de diverse test- of demonstratie programma's. Ook is het uiteraard mogelijk om de fout- meldingen te laten verzorgen door een algemene error-routine. C) De systeem-programmeur Ook voor de systeem-programmeur zijn de drivers uiteraard geschikt, doch in voorkomende gevallen kan hij de routines wijzigen of nieuwe toevoegen. Hierbij kan bv. gedacht worden aan gevallen, waarbij de snelheid zo ver verhoogd moet worden, dat er minder tests in de drivers gedaan mogen(kunnen) worden. Hieronder wordt ieder niveau wat uitgebreider besproken: De gebruiker. In het algemene geval zal de gebruiker zelf geen software schrijven, maar alleen gebruik maken van kant-en-klare pakketten of van een menu-gestuurd systeem. Zijn enige interesse is om een zo optimaal mogelijk systeem op te bouwen met kaarten uit het RULBUS-assortiment. Deze keuze kan voor een bepaalde toepassing bestaan uit bijvoorbeeld enige ADC-kaarten, een DAC-kaart en een paar serie-communicatie kaarten. Na deze keuze is het enige dat de gebruiker moet doen het samenstellen van een kleine file, dat zijn systeem "beschrijft". Dit file kan gecreeerd worden met een normale text-editor. De beschrijving van het systeem moet in het file "RULBUS.SYS" worden gezet. Dit kan gebeuren op de volgende manier: rulbus 0x200 ; Commentaar, hier: Dit is het Basis-poortadres ; van de RULBUS-kaart in de IBM-PC ; adc 0 0x20 ; ADC kaart 0, op RULBUS-adres 20(hex) adc 1 0x10 ; idem, doch deze kaart zit op adres 10H dac 2 0x60 ; DAC kaart 2, op RULBUS-adres 60H etc, etc. De installatie van deze waarden gebeurt automatisch bij het starten van het hoofdprogramma. De hiervoor benodigde functie "rb_ini()" is hiertoe opgenomen in de RULBUS-bibliotheek "RULBUS.LIB". Mocht de gebruiker eventueel fouten hebben gemaakt in het lijstje, dan zal dit gemeld worden door "rb_ini()". Als voorbeeld is het programma "TESTINI.C" opgenomen. Dit programma initialiseerd het systeem eerst met "rb_ini()" en maakt daarna op het scherm zichtbaar, hoe op dat moment het RULBUS-systeem is samengesteld. De_applicatie-programmeur. Hierbij moet gedacht worden aan een programmeur, die algemene, grote programma's schrijft, in principe voor de hierboven genoemde gebruiker. De applicatie-programmeur heeft device-drivers ter beschikking. Dit zijn de routines die de programmeur in staat stellen om met de hardware te communiceren zonder deze direct te kennen of aan te roepen. De hele vertaling van de aanroepgegevens, de wachtloops, het detecteren van error- condities en het terugmelden hiervan, dit alles geschiedt met behulp van de drivers. De programmeur is dan ook van deze taak verlost, want hij heeft alleen te maken met functie-aanroepen. In het onderhavige geval heeft de applicatie-programmeur de beschikking over de volgende driver-routines: ADC.C voor de ADC-kaart DAC.C voor de DAC-kaart SER.C voor de seriele communicatie-kaart PAR.C voor de parallel-kaart Dit zijn de sources van de driver-routines. De drivers zelf zijn, evenals de rb_ini()-functie, opgenomen in de bibliotheek "RULBUS.LIB". De drivers kunnen eenvoudig worden aangeroepen. Mocht er een error-conditie ontstaan (zijn), dat wordt dit doorgegeven aan het aanroepende programma. Zie ook het onderdeel over de fout-afhandeling. Naast deze .LIB-functions, is er ook nog een header-file die nodig is om de RULBUS goed te gebruiken. Dit is: RULBUS.H : een header die via een "#include" in ieder programma moet worden opgenomen dat de RULBUS gebruikt. Hierin worden de maxima van het betreffende RULBUS-systeem beschreven, dus hoeveel ADC's er maximaal in een RULBUS-systeem voor mogen komen, hoeveel DAC's, etc.. Verder worden hierin de symbolische namen voor de fout-condities gedefinieerd en de structures en de prototypes van de device-drivers bekend gemaakt. De_systeem-programmeur. Ook de systeem-programmeur kan in eerste instantie gebruik maken van de RULBUS device-drivers. Daarnaast kan hij de drivers veranderen, bijvoorbeeld om de snelheid op te voeren door minder error-checking toe te passen. Ook kan hij nieuwe drivers toevoegen. Deze kunnen dan daarna weer opgenomen worden in de bibliotheek "RULBUS.LIB". Om het gebruik van de RULBUS-kaarten, samen met de drivers en de error- routines te verduidelijken zijn enige demonstratie- of testprogramma's gemaakt. Dit zijn: ADCTEST.C DACTEST.C SERTEST.C PARTEST.C Bij het doorlezen van deze testprogramma's zult u functies tegenkomen, die nog niet behandeld zijn. Dit zijn functies uit de library "IOLIB.LIB". De routines in deze bibliotheek zijn speciaal bedoeld voor interactieve input-output via het scherm en het toetsenbord. Door deze routines te gebruiken wordt de overdraagbaarheid nog beter (door voor andere computers een eigen IOLIB te creeeren), terwijl tevens de programmeur de beschikking krijgt over intelligente scherm- en keyboardroutines. Zo zijn in de IOLIB.LIB onder andere opgenomen: header("Demo header"); Het aanroepen van deze functie maakt het scherm schoon, schrijft op de tweede regel van boven, gecentreerd, de opgegeven tekst en trekt er daarna een kader omheen. say(row,column,"anything"); deze functie zet de cursor op de regel "row", kolom nummer "column" en schrijft daar dan de tekst "anything". Voor een uitgebreide opsomming van alle functies wordt verwezen naar de beschijving van de IOLIB bibliotheek. Lijst van files. Volledigheidhalve volgt hier nog een opsomming van alle files met daarbij een korte verklaring van de functie of werking. RULBUS.SYS - (tekst-) file met de RULBUS systeem-beschrijving RULBUS.H - headerfile voor RULBUS programma's en RULBUS.LIB functies Het maximum aantal toegestane ADC's, DAC's, etc. in een RULBUS-systeem kan worden opgegeven in deze header. De gekozen waarden worden vastgelegd bij de compilatie van de RULBUS.LIB functie rb_ini(). Na deze (nieuwe) compilatie moet de rb_ini() functie in de RULBUS.LIB worden vervangen m.b.v. de library manager. Hiervoor kan de batch-file NEWLIB.BAT worden gebruikt. RULBUS.LIB - bibliotheek met de rb_ini(), de device drivers, etc. NEWLIB.BAT - batch file voor het creeren van een nieuwe RULBUS.LIB Dit moet worden gedaan wanneer iets wordt gewijzigd in de header files of de driverfuncties van de RULBUS bibliotheek. RULBUS.LST - output file van de library manager. Hierin staat de inhoud van de RULBUS bibliotheek. ADC.C - device-driver voor ADC-kaart DAC.C - device-driver voor DAC-kaart SER.C - device-driver voor de seriele kaart PAR.C - device-driver voor de parallel kaart RBINI.C - functie om het RULBUS-software systeem te initialiseren IOLIB.LIB - bibliotheek met routines voor het aansturen van het scherm, voor het lezen van het toetsenbord of voor het printen van informatie. IOLIB.H - Headerfile voor IOLIB en voor de programma's TESTINI.C - demonstratie-programma. Dit programma laat zien hoe het huidige RULBUS systeem is opgebouwd. Deze informatie wordt gegenereerd door rb_ini() (d.i. een RULBUS.LIB functie), die gebruik maakt van de systeem beschrijving uit "RULBUS.SYS". ADCTEST.C - demonstratie-programma. Hiermee is het mogelijk om de ADC te besturen/onderzoeken. Onder andere is de gewenste AD- kaart, het kanaal en de gain te kiezen. We kunnen ook een kanaal bekijken, of alle kanalen scannen, etc. DACTEST.C - demonstratie-programma voor de DAC-kaart. Eenvoudig programma om diverse waarden naar de DAC te sturen. Ook is het mogelijk om een calibratie uit te voeren of een zaagtandspanning te genereren. SERTEST.C - demonstratie-programma voor de seriele kaart. Dit programma maakt het mogelijk om op eenvoudige wijze de serie-kaart in te stellen. Hiertoe zijn op het scherm een aantal blokken weergegeven, waarbij boven ieder blok een letter staat. Door een bepaalde letter in te toetsen stappen we door het (hiermee) geselecteerde menu. Zodoende kan simpel de gewenste instelling worden bereikt voor de baudrate, bits- per-character, etc. Metkunt u, indien gewenst, terugkeren naar het operating system. Het indrukken van de toets schakelt de computer met de seriele-kaart in de transparent-mode. Iedere toets die nu nog wordt aangeraakt wordt naar buiten gezonden met de geselecteerde instelling. Evenzo worden karakters die door de serie-kaart ontvangen worden zichtbaar gemaakt op het scherm. De transparent-mode kan weer verlaten worden middels het typen van Control-A (^A). PARTEST.C - demonstratie-programma voor de parallelkaart. Hiermee kan gekozen worden welke bits men voor in- of voor output wil gebruiken. Tevens kan men data naar buiten sturen of deze inlezen. INSTALL.DOC - hierin staat kort beschreven hoe de RULBUS library moet worden geinstalleerd in de Turbo-C omgeving. *.EXE - Executable files *.OBJ - Turbo-C object files *.PRJ - Turbo-C project files *.TC - Turbo-C configuration files De Error-afhandeling. In de RULBUS drivers worden vele mogelijke hardware- en softwarefouten gedetecteerd. De afhandeling van deze fouten geschiedt in het hoofd- programma, waarbij afhankelijk van de fout een melding op het scherm verschijnt, dan wel de verwerking van de gegevens op een andere manier geschiedt. De driverfuncties geven gedetecteerde fouten door aan het hoofdprogramma door een foutcode te retourneren. Deze foutcodes en zijn gedefinieerd in de headerfile RULBUS.H. Voorbeeld: Stel, dat een AD-converter aangeroepen wordt en het blijkt, dat het ingangssignaal op het gekozen kanaal te groot is. Dit wordt dan aan het hoofdprogramma doorgegeven door de foutcode ADCERR_OVRF te retourneren.