Interfejs szeregowy dla programowalnej aparatury pomiarowej
Interfejs szeregowy dla programowalnej aparatury pomiarowej
Interfejs szeregowy dla programowalnej aparatury pomiarowej. ( Projekt Standardu IEEE 1174 )
Standard IEEE 1174 definiuje sposób implementacji popularnego interfejsu szeregowego RS 232 dla potrzeb sprzętu pomiarowego przeznaczonego do budowy systemów pomiarowych. W chwili obecnej (1999 r.) jest on w fazie opracowania i jego projekt jest dostępny pod nazwą "P 1174, D2.0 Dec_98 Serial Interface for Programmable Instrumentation". W opracowaniu występuje pod przewidywaną nazwą docelową.
1. Wstęp Współczesne urządzenia pomiarowe wykorzystują do komunikacji z kontrolerem łącze, którego własności są podzbiorem modelu przedstawionego na rys.1. Fizyczne połączenie oraz transfer danych zapewnia zastosowane medium transmisyjne np. GBIB (IEEE 488.1). Syntaktyka i struktura komunikatów jest określona przez standard IEEE 488.2, który definiuje także protokół obsługi poleceń przez urządzenie, system raportowania stanu urządzenia itp. Definicje tego standardu wykorzystują właściwości zdefiniowane dla GPIB. Komunikaty urządzeniowe odpowiedzialne za obsługę urządzenia są definiowane przez standardowy język programowania urządzeń pomiarowych SCPI. W jego definicjach wykorzystuje się z kolei własności określone standardem IEEE 488.2. W przypadku wykorzystywania medium transmisyjnego GPIB lub VXI projektant urządzenia nie ma problemów z zastosowaniem wyższych warstw definicyjnych. Jednak dla istniejących połączeń szeregowych jest to niemożliwe z powodu istotnych różnic funkcjonalnych w stosunku do GPIB, np. braku funkcji żądania obsługi lub zerowania urządzenia, których istnienie jest obligatoryjne dla implementacji wspomnianych wyższych warstw definicji. Własności łącz szeregowych predestynują je również do zastosowań pomiarowych (np. ze względu na dopuszczalną długość połączenia oraz prostą budowę kabla połączeniowego) jako alternatywnego medium transmisyjnego dla urządzeń i stąd wyłoniła się potrzeba zdefiniowania odpowiedniego standardu.
Rys.1. Wzajemne relacje standardów łączy interfejsowych aparatury pomiarowej. Standard IEEE 1174 stanowi rozwiązanie tej koncepcji [2]. Wykorzystuje popularny interfejs RS 232 i definiuje szereg własności funkcjonalnych zapewniających mu niezbędną odpowiedniość funkcjonalną obowiązującą w GPIB. Dzięki temu uzyskano możliwość stosowania w urządzeniach alternatywnego, dobrze zdefiniowanego łącza szeregowego z możliwością implementacji definicji wyższych warstw. Standaryzacja zapewnia też łatwiejsze projektowanie urządzeń wyposażonych w różne media transmisyjne oraz redukuje koszty projektu. Ważną cechą jest również uniezależnienie aplikacji użytkowych od stosowanego medium transmisyjnego. Standard IEEE 1174 składa się z trzech dokumentów dotyczących kolejnych poziomów definicyjnych. Wyższy poziom zakłada korzystanie z definicji niższego poziomu. Standard opisuje metody komunikacji łączem szeregowym pomiędzy kontrolerem i urządzeniem a tematyka poszczególnych dokumentów jest następująca:
IEEE 1174.0 - Część pierwsza; jest zestawem definicji użycia interfejsu RS232 w przyrządach i kontrolerach. Definiuje wymagania elektryczne, mechaniczne i obwody połączeniowe. Opisuje 9-cio stykowe złącze przeznaczone do realizacji asynchronicznej, dupleksowej transmisji danych.
IEEE 1174.1 - Część druga; opisuje sposób emulacji cech funkcjonalnych standardu GPIB dla łącza szeregowego. Emulacja zapewnia dostępność własności interfejsu równoległego GPIB w interfejsie szeregowym.
IEEE 1174.2 - Część trzecia; określa cechy funkcjonalne wymagane przez IEEE 488.2 i opisuje ich implementację dla łącza szeregowego. Opisuje jak implementować szczególne elementy syntaktyczne konstrukcji językowych. Redefiniuje też protokół sterowania wymianą komunikatów (MEP - Message Exchange Control Protocol) z uwzględnieniem cech łącza szeregowego z zachowaniem zgodności funkcjonalnej z oryginałem.
Rys.2. Relacje i zakres definicji składników standardu IEEE 1174. Przyrząd może dysponować ograniczonymi możliwościami standardu IEEE 1174, np. tylko do poziomu pierwszego. W przypadku odpowiedniości z poziomem wyższym muszą być spełnione wymagania poziomów niższych. 2. Dokument podstawowy IEEE 1174.0. Standard RS 232 obejmuje tylko część ogólnej definicji łącza szeregowego określonego ogólnymi dokumentami EIA oraz CCITT [3]. Zapewnia połączenie pomiędzy urządzeniem końcowym (DTE; komputerem) i urządzeniem komunikacyjnym (DCE; modemem). Jest bardzo często wykorzystywany poza zdefiniowanym obszarem zastosowań, mianowicie do bezpośredniego łączenia urządzeń końcowych (DTE). W tych warunkach standardowy protokół transmisji nie może mieć zastosowania. Rozwiązaniem dla połączenia dwóch urządzeń DTE (np. komputer - przyrząd pomiarowy) bez udziału modemów jest tzw. połączenie "null modem". Jest to połączenie kablowe, w którym następuje krzyżowanie linii sygnałowych tak jak pokazuje rysunek 3. Część połączenia, która jest ustalana przez oba DCE oraz połączenie między nimi zostaje zastąpione połączeniem kablowym łączącym bezpośrednio urządzenia DTE.
Rys.3. Połączenie "null modem". W połączeniu z modemami wykorzystuje się protokół RTS/CTS. Urządzenie końcowe chcąc wysłać dane musi uzyskać od swojego modemu potwierdzenie nawiązania połączenia z oddalonym modemem. Ustawia więc sygnał RTS żądając w ten sposób od swojego modemu nawiązania komunikacji z oddalonym DCE. Gdy to zostanie zrealizowane modem potwierdza nawiązanie łączności ustawiając sygnał CTS skierowany do swojego DTE w stan ON. Oznacza to, że DTE może transmitować dane. Protokół tego typu nie jest potrzebny przy bezpośrednim połączeniu urządzeń DTE. W zamian tego potrzebny jest mechanizm sterowania przepływem danych, który zapobiegnie przepełnieniu bufora wejściowego urządzenia odbierającego, jeśli nie nadąża ono z przetwarzaniem napływających danych. Urządzenie odbierające musi mieć możliwość zasygnalizowania nadawcy, aby ten wstrzymał chwilowo wysyłanie danych. Ogólna definicja łącza szeregowego według CCITT oraz EIA przewiduje taką potrzebę i definiuje obwód 133 (Ready For Receiving - RFR). Jednak standardy implementacyjne jak RS 232 nie wykorzystują tego obwodu. W połączeniach z wykorzystaniem modemów sterowanie przepływem danych można realizować za pomocą obwodów drugiego kanału, ale w bezpośrednich połączeniach DTE-DTE prowadziłoby to tylko do zbytniej złożoności łącza. Uwzględniając potrzeby bezpośredniej komunikacji DTE-DTE najnowsze rewizje standardu RS 232 pozwalają zastąpić obwód RTS przez RFR, gdy jest wymagane sterowanie przepływem danych. Standard IEEE 1174 używa tego obwodu i wymaga jego implementacji w celu zapewnienia możliwości sprzętowego sterowania przepływem danych. Urządzenie pomiarowe komunikuje się bezpośrednio z kontrolerem i oba są urządzeniami typu DTE. Zatem ich łącze szeregowe nie potrzebuje szeregu obwodów wymaganych w połączeniu DTE-DCE, np. obwodów kanału pomocniczego. Rezygnacja z nich pozwoliła zastąpić 25-cio stykowe złącze zdefiniowane dla RS 232 9-cio stykowym (rys.4), znacznie oszczędniejszym rozmiarowo (ważne z powodu ograniczonych rozmiarów płyt tylnych urządzeń). Przyrząd jest traktowany jako urządzenie DTE i zgodnie z tym złącze jest wtykiem (złącze męskie) i powinno być opisane etykietą "IEEE1174".
Rys. 4. Definicja przyporządkowania styków złącza oraz sposób połączenia urządzeń. Charakterystyki elektryczne odpowiadają wymogom RS 232-D/E ( D i E oznaczają kolejne rewizje standardu). Dopuszcza się szybkość do 64000 bitów/sek. Stosuje się obwody niesymetryczne a dopuszczalne wartości napięć wynoszą :
Linie danych (obowiązuje logika ujemna)
1 logiczna
od -15V do -3V
0 logiczne
od +15V do +3V
Linie sterujące (obowiązuje logika dodatnia)
1 logiczna
od +15V do +3V
0 logiczne
od -15V do -3V
Istniejące protokóły transmisji szeregowej spełniają wymagania aplikacji przyrządowych. Dlatego standard IEEE 1174 nie definiuje nowych ani nie redefiniuje istniejących lecz wskazuje te, które są zadawalające. Protokół sterowania przepływem danych. Do sterowania przepływem danych standard IEEE 1174 wykorzystuje dwa podstawowe zdefiniowane już protokóły :
Sterowanie sprzętowe, używające obwodu RFR/CTS; Sterowanie programowe, używające znaków XON/XOFF.
Rys.5. Sprzętowe sterowanie przepływem danych. Procedura sprzętowa używa obwodu RFR (styk 7) oraz obwodu CTS (styk 8). Przez kabel "null modem" obwód RFR jednego urządzenia jest połączony z obwodem CTS drugiego. Urządzenie DTE odbierające dane obwodem RXD (styk 2) może ustawić :
RFR=ON w celu zasygnalizowania oddalonemu DTE, że jest zdolne do przyjmowania danych.
RFR=OFF w celu zatrzymania wysyłania danych przez oddalone DTE. Ustawienie RFR w stanie OFF musi nastąpić przed przepełnieniem bufora wejściowego. Urządzenie musi mieć możliwość odebrania jeszcze przynajmniej 6 znaków.
Urządzenie DTE zdolne do transmitowania danych przez obwód TXD (styk 3) monitoruje z kolei swój obwód CTS. Stan :
CTS=ON oznacza możliwość nadawania danych.
CTS=OFF oznacza konieczność natychmiastowego wstrzymania nadawania. Zwłoka czasowa pomiędzy pojawieniem się stanu OFF a przerwaniem transmisji dopuszcza wysłanie maksymalnie 4 znaków.
Rys.6. Programowe sterowanie przepływem danych. Programowe sterowanie przepływem danych nie używa wspomnianych obwodów. Stosuje się do tego specjalne znaki przesyłane obwodami TXD używanymi do przesyłania zwykłych danych. XON jest znakiem sterującym kodu ASCII DC1 (11 hex) a XOFF znakiem DC3 (13 hex). Urządzenie DTE odbierające dane przez obwód RXD (styk 2) może wysłać swoim obwodem TXD (styk 3) znak :
XOFF w celu zatrzymania wysyłania danych przez oddalone DTE. Wysłanie XOFF musi nastąpić przed przepełnieniem bufora wejściowego. Po wysłaniu znaku XOFF urządzenie musi mieć możliwość odebrania jeszcze przynajmniej 60 znaków. Wynika to z narzutu czasowego jaki jest potrzebny nadawcy do zdekodowania polecenia i wstrzymania transmisji.
XON w celu wznowienia zatrzymanej transmisji. Znak XON może być wysłany tylko po wstrzymaniu transmisji.
Urządzenie nadające dane, które odebrało przez swój obwód RXD (styk 2) polecenie :
XOFF musi zawiesić nadawanie aż do ponownego zezwolenia. Po pojawieniu się rozkazu XOFF w czasie transmisji ciągu znaków, nadawca może nadać jeszcze maksymalnie 30 znaków.
XON może wznowić zawieszony transfer danych.
Łącze szeregowe jest dwukierunkowe i daje możliwość nadawania i odbioru danych w tym samym czasie. W takiej sytuacji może się zdarzyć, że komunikaty XON/XOFF trzeba wysłać wewnątrz strumienia zwykłych danych. Z tych powodów sterowanie znakowe nie może być stosowane w przypadku wymiany danych binarnych. Wtedy pomocna jest metoda sprzętowa RFR/CTS. Inne ustalenia standardu IEEE 1174 :
Urządzenie musi odbierać i rozpoznawać sygnał BREAK. Czas trwania sygnału 'break' odpowiada sekwencji 2 znaków, po których występują 3 lub więcej bity stopu. Interpretacja BREAK jest określona w IEEE 1174.1. Nie obowiązuje żaden protokół związany z sygnałem BREAK dla urządzenia implementującego tylko pierwszy poziom standardu (IEEE 1174.0).
Można stosować szybkości 1200, 2400, 4800, 9600, 19200 i 38400 bitów/sek. Szczególnie rekomendowane są dwie ostatnie. Istnieje możliwość stosowania innych szybkości.
Należy zapewnić środki pozwalające wybrać jedną z zastosowanych szybkości. Przewiduje się możliwość zdalnego i lokalnego wyboru. Wybrana szybkość musi być przechowywana w pamięci nieulotnej tak, aby po zaniku czy wyłączeniu napięcia zasilania zachować nastawę szybkości.
Ramka transmitowanego znaku jest 10-cio bitowa : bit startu, 8 bitów znaku, jeden bit stopu. Nie używa się bitu parzystości.
Musi być zaimplementowane rozpoznawanie błędu ramki oraz błędu przepełnienia bufora wejściowego. Błędy te są raportowane przez urządzenia wykonane zgodnie z wymogami wyższych poziomów standardu (>IEEE 1174.0). Po wystąpieniu takiego błędu wszystkie następne znaki muszą być akceptowane i odrzucane aż do wystąpienia znaku LF.
3. IEEE 1174.1 - Emulacja funkcji GPIB. Druga część standardu definiuje sposób emulacji funkcji GPIB w celu uzyskania cech funkcjonalnych GPIB dla łącza szeregowego. Jak zaznaczono wcześniej jest to konieczne do uzyskania zgodności z IEEE 488.2 a także możliwości wykorzystania SCPI. Emulację GPIB uzyskano za pomocą kodów emulujących. Kod emulujący rozpoczyna się zawsze znakiem '&' (ampersand, 26 hex), po którym występują trzy litery lub cyfry. Zwykle zapis literowy prezentuje nazwę rozkazu interfejsowego (&GET - GET) a zapis cyfrowy wartość liczbową całkowitą w zapisie dziesiątkowym (&016 - wartość bajtu statusowego). Część kodów musi być zakończona parą znaków: CR i LF. Istnieje problem rozróżnienia zwykłych danych od kodów emulujących. Sposób jest uzależniony od tego czy emulacja dotyczy tylko IEEE 488.1 czy wyższego poziomu (IEEE 488.2) :
Tryb emulacji IEEE 488.1 : Wymaga rozpoznawania kodów w strumieniu danych wejściowych. Do rozróżnienia kodu emulującego od zwykłego znaku wykorzystuje się mechanizm "podwójnego &".
Tryb emulacji IEEE 488.2 : W tym trybie można nadawać kody emulujące wtrącone w dowolne miejsce strumienia danych wejściowych z wyłączeniem elementu danych binarnych (Arbitrary Block Data) oraz danych stringowych. Wynika to z faktu unikalności kodu emulującego w stosunku do ciągów komunikatów urządzeniowych oraz komunikatów danych. Nie dotyczy to tylko wymienionych elementów danych. Kod emulujący wstawiony do takiego elementu zostanie potraktowany jako zwykła dana.
Emulacja żądania obsługi i odpytywania szeregowego. Komunikat SRQ jest używany przez urządzenia GPIB do powiadomienia kontrolera o potrzebie obsługi. W rezultacie tego kontroler prowadzi odpytywanie szeregowe w celu rozpoznania powodów żądania obsługi. Odpytywane urządzenie wysyła do kontrolera bajt statusowy, który zawiera informacje o powodach żądania obsługi. Standard IEEE 1174 emuluje ten proces następująco :
Urządzenie wysyła żądanie obsługi - &SRQ CR LF
Kontroler inicjuje odpytanie - &POL
Urządzenie wysyła bajt statusowy - &ddd CR LF
Kod emulujący odpowiedzi szeregowej jest trzycyfrowym zapisem dziesiątkowym wartości bajtu statusowego urządzenia. Emulacja funkcji zerowania urządzenia - DC. Komunikaty interfejsowe DCL i SDC służą do ustawienia urządzenia w stanie wyjściowym (predefiniowanym). Polecenie wspólne *RST pełni tę samą rolę. Może się wydawać, że rola komunikatów zerujących jest w tej chwili mniej istotna, ponieważ to samo można osiągnąć poleceniem *RST. Jednak w IEEE 488.2 komunikaty zerujące pełnią bardzo istotną funkcję w protokóle MEP. Urządzenie może znaleźć się w stanie impasu ('deadlock') spowodowanym przepełnieniem bufora wejściowego i wyjściowego. Wyjście z tego stanu jest realizowane poprzez zerowanie urządzenia, które inicjalizuje na nowo komunikację z kontrolerem. Nie zrealizuje tego polecenie *RST, ponieważ w stanie impasu urządzenie nie może go przyjąć podobnie jak innych poleceń. Rozkazy interfejsowe SDC i DCL są przyjmowane inną drogą i mogą one wyprowadzić urządzenie ze stanu blokady. Można to porównać do sytuacji, gdy software urządzenia jest zablokowany a zerowanie sprzętowe inicjalizuje go ponownie. Emulacja funkcji DC musi też wykorzystać inny sposób oddziaływania na urządzenie, nie poprzez kod emulujący. Wykorzystano do tego celu sygnał BREAK. Jak wspomniano wcześniej wszystkie urządzenia zgodne z IEEE 1174 muszą rozpoznawać ten sygnał. W emulowanym GPIB BREAK zastępuje komunikaty DCL i SDC. Proces zerowania może prowadzić do utraty danych. W celu uchronienia się przed tym, kontroler wstrzymuje nadawanie danych do urządzenia do momentu potwierdzenia przez nie zakończenia procesu zerowania. Urządzenie potwierdza zakończenie procesu zerowania kodem emulującym '&DCL CR LF'. Emulacja funkcji wyzwalania urządzenia - DT. Rozkaz interfejsowy GET jest emulowany kodem '&GET'. Po odbiorze tego kodu urządzenie musi zachować się identycznie jak urządzenie GPIB po rozkazie GET. Identyczną rolę pełni polecenie wspólne *TRG. Urządzenie może nie implementować funkcji wyzwalania DT, ale musi akceptować kod emulujący GET i pominąć go. Urządzenie kompatybilne z IEEE 488.2 musi w takich warunkach generować błąd 'Command Error'. Emulacja funkcji zdalny/lokalny - RL. Funkcja służy do wyboru źródła danych programujących (płyta czołowa / interfejs). Emulowana funkcja RL funkcjonuje w ten sposób, że gdy tylko zostanie odebrany bajt danych wchodzi w stan wybierający programowanie zdalne. Po ustawieniu w stan programowania zdalnego urządzenie nie może przyjmować żadnych nastaw z płyty czołowej. Odwrotna sytuacja ma miejsce, gdy funkcja RL wybierze programowanie lokalne. Kontroler może przestawić urządzenie w stan programowania lokalnego za pomocą kodu emulującego '>L'. W czasie, gdy urządzenie jest w stanie programowania zdalnego, użytkownik może wywołać komunikat lokalny 'rtl' (z płyty czołowej) i uzyskać w ten sposób możliwość programowania lokalnego. Kod emulujący '&LLO' pozwala kontrolerowi zablokować tę możliwość. Urządzenie jest automatycznie ustawiane w stanie programowania lokalnego, gdy nic nie jest dołączone do portu szeregowego lub kontroler znajduje się w stanie wyłączenia zasilania. Warunki te są dekodowane na podstawie stanu obwodu RLSD-Received Line Signal Detector (styk 1). Wybór rodzaju sterowania przepływem danych. Standard definiuje następujące kody do określenia sposobu sterowania przepływem danych :
&HFC - sterowanie sprzętowe; &SFC - sterowanie programowe XON/XOFF; &DFC - sterowanie wyłączone. 4. IEEE 1174.2 - zapewnienie zgodności z IEEE-488.2 Dokument IEEE 1174.2 zawiera szereg definicji, które są niezbędne do uzyskania odpowiedniości z IEEE 488.2. Standard IEEE 488.2 zapewnia wyższy poziom funkcjonalności oraz precyzuje szereg aspektów komunikacji kontrolera z urządzeniem. Definiuje syntaktykę poleceń zdalnych, zasadniczą strukturę raportowania statusu urządzenia oraz zestaw poleceń wspólnych. Dalej opisuje szczegółowo schemat struktury komunikacyjnej dla komunikatów zdalnych, który jest zdefiniowany przez protokół sterowania wymianą (obsługą) komunikatów (MEP). Bazuje on na zasadzie, że przyrząd może wysłać dane tylko wtedy, gdy jest o nie pytany. Dlatego rozróżnia się rozkazy i zapytania. Cechują się one różną budową syntaktyczną. Rozkazy są poleceniami, powodującymi wykonanie pewnej akcji nie związanej bezpośrednio z przygotowaniem odpowiedzi. Zapytania są z kolei poleceniami wymagającymi odpowiedzi i są stosowane do uzyskiwania informacji z urządzenia. Koncepcja IEEE 488.2 opiera się na standardzie GPIB, korzysta z jego funkcjonalności, definicji i terminologii, która nie zawsze jest odpowiednia dla interfejsu szeregowego. Urządzenie GPIB można adresować do nadawania lub odbioru i nie może ono jednocześnie nadawać i odbierać. Inaczej jest w interfejsie szeregowym, który pozwala nadawać i odbierać w tym samym czasie. W urządzeniu GPIB można korzystać z sygnału 'brq' ('byte request' - żądanie bajtu), który jest generowany, gdy urządzenie jest zaadresowane do nadawania i kontroler żąda wysłania bajtu. Protokół MEP IEEE 488.2 korzysta z niego, ale nie jest to bezpośrednio możliwe w interfejsie szeregowym. Intencją IEEE 1174.2 było dostarczenie sposobu użycia protokołu MEP w stosunku do interfejsu szeregowego. Dlatego specyfikuje on sygnały interfejsu szeregowego, które są potrzebne do zrealizowania protokołu MEP oraz redefiniuje ten protokół w terminach charakterystycznych dla interfejsu szeregowego. IEEE 488.2 definiuje terminator końca komunikatu jako komunikat END interfejsu GPIB, który uzyskuje się ustawiając linię EOI w stanie aktywnym podczas przesyłania ostatniego znaku komunikatu. Ta możliwość jest niedostępna w interfejsie szeregowym i dlatego standard IEEE 1174 korzysta z terminatora znakowego (LF lub pary znaków CR LF). Terminator w postaci pary znaków CR LF jest obowiązującym dla komunikatu odpowiedzi urządzenia. Terminatory znakowe (LF oraz CR LF) są też alternatywnymi terminatorami przyjętymi przez IEEE 488.2. 5. Przykład realizacji interfejsu szeregowego IEEE 1174. Interfejs szeregowy opisanego standardu można zrealizować za pomocą pakietu programowego (program obsługi), który opierając się na typowym porcie RS 232 dostarczy wszystkich własności wymaganych przez IEEE 1174. Przykładem takiego rozwiązania jest pakiet programowy firmy ACEA [3], którego schemat funkcjonalny przedstawia rys.7. Pakiet zawiera emulator GPIB, który zapewnia uzyskanie cech odpowiadających funkcjom DT, DC, RL oraz SR interfejsu IEEE 488.1. Istnieje możliwość wyboru trybu emulacji (IEEE 488.1/488.2), szybkości transmisji oraz sposobu sterowania przepływem danych. Filtry kodów emulujących pozwalają wyselekcjonować je z strumienia odbieranych danych lub wprowadzić je do strumienia danych wysyłanych. Protokół transferu danych pozwala korzystać z arbitralnych bloków danych (dane binarne) oraz danych stringowych.
Rys.7.Schemat funkcjonalny interfejsu szeregowego zgodnego z IEEE 1174.
6. Literatura [1] W. Mielczarek; Szeregowe interfejsy cyfrowe; Helion, 1993 [2] J. Pieper; IEEE 1174 - A new Serial Instrumentation Interface; ACEA [3] Data sheet; IEEE 1174 I/O drivers; Serial Instrumentation Interface on a RS 232 port; ACEA
26 sierpień 1999 r. na podstawie poz. [2] i [3] opr. dr inż. Bogdan Kasprzak