Het Intelligent Interface met artikelnummer 30402 beschikt over 2 analoge en 8 digitale
ingangen, en 4 uitgangen t.b.v. motoren, lampen en dergelijke. De Extension Module
met artikelnummer 16554 voegt daar 8 digitale ingangen en 4 uitgangen aan toe. Het aansluiten
van de Extension is eenvoudig: Verwijder de 4 schroeven van de het interface en neem de
transparante bovenzijde af. De lintkabel van de Extension kan nu ingeplugd worden. Let er
op dat de rode markering van de lintkabel aan de linkerzijde van beide apparaten zit. Zie
de foto rechts. Daarna kan de bovenzijde teruggeplaatst op het interface. Beide apparaten
hebben 9 Volt gelijkstroom nodig, twee rode led's branden als dat in orde is.
Werken met het Intelligent Interface en eventueel een aangesloten Extension Module vanuit talen als Python en Perl is relatief eenvoudig. Eerst wordt een werkende verbinding opgezet met de COM-poort waar het interface op aangesloten is. Vervolgens kan een dialoog worden gestart waarin de computer steeds een commando met aanvullende info stuurt, het interface antwoordt dan met 1 of meer bytes. De M (Motor) poorten M1 t/m M4 moeten minimaal drie keer per seconde aangestuurd worden, het interface schakelt deze poorten uit na circa 3/10 seconde. Dat betekent in de praktijk dat aansturing steeds opnieuw in een lus gebeurt.
Hieronder een schema met de benodige commando's met bijbehorende parameters, en de bytes die het interface als antwoord terugstuurt.
Command | Info byte(s) | Antwoord van interface |
---|---|---|
1 byte, waarde 193 (hex C1) | 1 byte, een bitmap met instellingen voor M1-M4 | 1 byte, status 8 E-poorten E1-E8 |
1 byte, waarde 194 (hex C2) | 2 bytes, twee bitmaps met instellingen voor M1-M4 en M5-M8 | 2 bytes, 1 byte met status E1-E8 en 1 byte met vaste waarde 255 (hex FF) |
1 byte, waarde 197 (hex C5) | 1 byte, een bitmap met instellingen voor M1-M4 | 3 bytes. 1 byte met status E1-E8 en 2 bytes big endian met de weerstand aan EX (0-1024) |
1 byte, waarde 198 (hex C6) | 2 bytes, twee bitmaps met instellingen voor M1-M4 en M5-M8 | 4 bytes, 1 byte status E1-E8, 1 byte met waarde 255 (hex FF), 2 bytes big endian met weerstand EX |
1 byte, waarde 201 (hex C9) | 1 byte, een bitmap met instellingen voor M1-M4 | 3 bytes. 1 byte met status E1-E8 en 2 bytes big endian met de weerstand aan EY |
1 byte, waarde 202 (hex CA) | 2 bytes, twee bitmaps met instellingen voor M1-M4 en M5-M8 | 4 bytes, 1 byte status E1-E8, 1 byte met waarde 255 (hex FF), 2 bytes big endian met weerstand EY |
Command | Info byte(s) | Antwoord van interface |
---|---|---|
1 byte, waarde 193 (hex C1) | 1 byte, een bitmap met instellingen voor poorten M1-M4 | 1 byte, status 8 E-poorten |
1 byte, waarde 194 (hex C2) | 2 bytes, bitmaps met instellingen voor M1-M4 en M5-M8 | 2 bytes, status van poorten E1-E8 en E9-E16 |
1 byte, waarde 197 (hex C5) | 1 byte, een bitmap met instellingen voor de poorten M1-M4 | 3 bytes, 1 byte met status E1-E8 en 2 bytes big endian met de weerstand poort EX (0-1024) |
1 byte, waarde 198 (hex C6) | 2 bytes, twee bitmaps met instellingen voor M1-M4 en M5-M8 | 4 bytes, 2 bytes met status van E1-E8 en E9-E16, en 2 bytes big endian met de weerstand poort EX (0-1024) |
1 byte, waarde 201 (hex C9) | 1 byte, een bitmap met instellingen voor de poorten M1-M4 | 3 bytes, 1 byte met status E1-E8, en 2 bytes big endian met de weerstand poort EY (0-1024) |
1 byte, waarde 202 (hex CA) | 2 bytes, 2 bitmaps met instellingen voor resp. M1-M4 en M5-M8 | 4 bytes, 2 bytes met status van E1-E8 en E9-E16, en 2 bytes big endian met de weerstand poort EX (0-1024) |
Een toelichting op de gebruikte termen. Het command byte is steeds 1 character met de aangegeven waarde, in termen van Perl dus bijvoorbeeld chr(193). De commando's 193, 197 en 201 zijn primair gedacht voor gebruik met alleen het Intelligent Interface. De Extension Module (art. nr. 16554) voegt 8 E-poorten en 4 M-poorten toe. De commando's 194 198 en 202 zijn voor gebruik met die Extension Module, ze hebben dezelfde functie als de eerder genoemde, maar met extra bytes t.b.v. de extra poorten. Overigens blijven de commando's 193, 197 en 201 bij een aangesloten Extension Module gewoon werken.
De bitmaps voor de M-poorten zijn als volgt samengesteld: Zet bit 0 om de motor aan M1 linksom te laten draaien, en zet
bit 1 om de motor aan M1 rechtsom te laten draaien. Bit 2 en 3 zijn bestemd voor poort M2, resp. linksom en rechtsom. Bit
4 en 5 idem voor M3 en bit 6 en 7 voor M4. Bij gebruik van de Extension Module is er een extra byte voor de poorten M5 t/m M8,
die wordt op dezelfde manier gebruikt.
De poorten E1 t/m E8 zijn bedoeld voor schakelaars, reedcontacten, relais e.d. Per E-poort is er dus steeds wel of juist geen verbinding tussen de 2 contacten. De bitmap met de 8 bits voor E-poorten geeft per bit de status van een E-poort, 1 is aan (wel verbinding) en nul is uit. Bij een aangesloten Extension Module is er steeds een extra byte voor de poorten E9 t/m E16.
De analoge poorten EX en EY meten weerstand. Dat kunnen foto-weerstanden, NTC's of andere sensoren zijn met een weerstand tussen 0 en circa 5,5 kOhm. Het interface geeft niet het aantal gemeten Ohm terug, maar altijd een waarde tussen 0 en 1024. Daarvoor zijn steeds 2 bytes nodig, waarvan het eerste byte most significant is. Als er 2 bytes met resp. waarden 2 en 49 terugkomen dan is de weerstandswaarde bepaald op 561 (2 maal 256 plus 49). Houd er rekening mee dat het opvragen van de sensoren aan EX en EY merkbaar meer tijd kost dan het opvragen van de digitale E-poorten.
Moderne computers zijn veel sneller zijn dan het al wat oudere interface. Zowel in Perl als in Python zijn er direct na het openen van de COMM-poort een paaar variabelen waarmee e.e.a. naar wens ingesteld kan worden. In Perl zijn dat deze:
- read_interval(100); # Maximale tijd tussen read opdrachten (in milliseconden) - read_char_time(5); # Gemiddelde tijd tussen read opdrachten - read_const_time(100); # Totale tijd = (gemiddelde * bytes) + constanteIn Python is het o.m. de variabele 'timeout', ook een eigenschap van het COMM-object. Deze lijkt op de 'read_char_time' hierboven, het is de wachttijd in milliseconden na een gestuurd commando. Als die wachttijd verstreken is keert de besturing terug naar het aanroepende programma ZONDER een antwoord van het interface. Dat hoeft geen bezwaar te zijn omdat bij een volgende aanroep alsnog dat antwoord opgepakt kan worden. Met een lage of nul in 'timeout' werkt het interface heel snel, maar het kan 30-60 seconden duren voordat een weerstandmeting van EX of EY gerapporteerd wordt. Werkend met Windows kunnen te snelle instellingen (en verzuim of het interface met 'close()' af te sluiten) leiden tot 'overlapped I/O' fouten. Zie de site van Microsoft voor een toelichting.
Hieronder een voorbeeldprogramma dat iedere paar seconden de digitale E-poorten en de analoge EX en EY poorten leest. Hiermee kunt u eenvoudig zien of een aangesloten sensor waarden aflevert die u in de programmatuur kunt gebruiken. De Perl-versie van het programma vindt u hier (download). De versie in Python vindt u hier (download).