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.  Met    kunt 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.