Porty w PC - oprogramowanie

Łączenie komputerów kablem szeregowym i równoległym - konfiguracja oprogramowania

Mam złą wiadomość dla użytkowników win2000/XP - DOSowe programy takie jak Norton Commander czy InterLnk nie będą poprawnie pracować w tych systemach. Jeśli chcesz połączyć komputer pracujący pod DOSem z kompem z win2000/XP, masz do dyspozycji jedynie terminale i "Bezpośrednie Połączenie Kablowe". Jedynym znanym mi programem umożliwiającym prostą wymianę plików pod Windowsami jest Windows Commander. Jeśli jego prostota okaże się niewystarczająca proponuję zestawić Bezpośrednie połączenie kablowe i skorzystać z opcji udostępniania plików.

Norton Commander (prawdopodobnie od wersji 3.0):

Umożliwia dostęp do zasobów dyskowych drugiego komputera. Można skopiować przenieść lub usunąć dowolny plik/katalog. Widoczne są wszystkie dyski komputera pracującego w trybie biernym. Odpalanie wygląda tak:

Na obu komputerach wybieramy opcję połącz:

Image

Informujemy komputer, do którego portu podłączony jest kabel. Wybieramy tryb pracy (na jednym komputerze aktywny,na drugim bierny):

Image

Pojawia się okienko informujące o oczekiwaniu na połączenie...

A po nim:

Na komputerze "aktywny":

Image

Na komputerze "bierny":

Image

Jeśli po oczekiwaniu na połączenie pojawi komunikat:

Image

...wtedy trzeba sprawdzić kable, zresetować komputer, wypróbować inne porty (do wyboru mamy zazwyczaj 2), przetestować wszystkie warianty, sprawdzić przy pomocy np. starej myszki działanie portów, sprawdzić poprawność połączeń śledzia z kartą I/O (albo płytą główną), zobaczyć co na temat COMów ma do powiedzenia jakiś program diagnostyczny np. MSD itd. Co prawda NC jakoś działa pod WINdą, ale zalecam uruchamianie go pod DOSem - w czasie startu systemu: F8 i "wiersz poleceń" (w przypadku takich programów jak NC WINda ma swoje kaprysy i nie zawsze pozwala się dobrać im do COMów).

INTERLNK i INTERSVR z MS-DOSa 6.xx

Umożliwia swobodny dostęp do dysków i drukarek komputera - serwera pracującego w trybie biernym z poziomu komputera klienta z zainstalowanym sterownikiem.

Na komputerze-serwerze odpalamy program INTERSVR (uwaga: nie da się go uruchomić pod WINdą, jedyne co można zrobić to nacisnąć przy starcie systemu F8 i wybrać "wiersz poleceń") Na komputerze-kliencie dodajemy do pliku CONFIG.SYS linijkę:

DEVICE=C:\DOS\INTERLNK.EXE

gdzie C:\DOS to lokalizacja (ścieżka dostępu) do pliku INTERLNK.EXE. Następnie restartujemy komputer.

Po restarcie klient i serwer same się odnajdą (oba programy skanują wszystkie porty). Na komputerze-kliencie pojawią się nowe dyski (udostępniane przez serwer), do których bedzie możliwy dostęp także pod WINDOWSem (ale troche wolny).

Programy terminalowe np. HyperTerminal z WINdy albo Term95 z NC

Umożliwiają przesyłanie tekstów (np. prymitywne "czatowanie") i plików - wtedy odpalamy terminale na obu komputerach. Dzięki nim możliwa jest także praca zdalna, odbieranie i wysyłanie danych tekstowych z/do programów pracujących na drugim komputerze - wtedy na jednym komputerze odpalamy terminal a na drugim wydajemy spacjalna komendę z linii poleceń DOSa/WINdy - o tym za chwilę. Konfiguracja HyperTerminala wygląda tak:

Odpalamy skrót do folderu HyperTerminal: start/programy/akcesoria/komunikacja/HyperTerminal, a następnie program HyperTrm. Wpsujemy nazwę połączenia i wybieramy mu ikonkę.

Image

Wybieramy port (do którego podłączony jest kabel) na liście "połącz używając":

Image

Ustalamy parametry transmisji: prędkość wg. uznania (np. do pracy zdalnej pod DOSem max 9600), bity danych 8, brak parzystości i bity stopu 1. Sterowanie przepływem w przypadku 3-żyłowego kabla nie może być ustawione na sprzęt lub RTS/CTS (term95) - wysyłanie/odbiór nie będzie wtedy możliwy.

Image

Rezultat końcowy: na drugim komputerze w linii poleceń została wydana komenda:ver > com2

Image

W programie Term95 z Nortona Commandera sprawa wygląda podobnie. Uruchamiamy program komendą: term95 lub w NC naciskamy kolejno:F9,o,t. Przechodzimy do menu "Ustawienia" i wybieramy opcję "Łącze". Można to zrobić myszką lub sekwencją Alt+P. Ustawiamy parametry transmisji.

Image

Rezultat końcowy:

Image

Tu akurat zachciało mi się pokazać jak sformatować dyskietkę umieszczoną w stacji 5,25" mojego starego kochanego 386SX, wydając komendę format a: na terminalu odpalonym na moim nowym nabytku. Aby to było możliwe, wcześniej na swojej 386tce musiałem wydać komendę ctty com2.

Warto wiedzieć:

Klawisze szeregowe

W Windowsie 2000/XP, a być może i w starszych jest dostępna opcja Klawisze szeregowe. Po jej uaktywnieniu znaki odbierane z wskazanego w ustawieniach portu szeregowego są traktowane równoznacznie z odpowiadającymi im klawiszom na klawiaturze, a więc wysyłanie znaków do portu przy pomocy podłączonego terminala (którym może być np. odbiornik IR połączony z mikrokontrolerem tłumaczącym sygnały IR na znaki) daje taki sam efekt jak naciskanie klawiszy na lokalnej klawiaturze. Opcję włączamy przechodząc kolejno: Panel sterowania > Opcje ułatwień dostępu > Ogólne

Image

zaznaczamy opcję "Obsluga urządzeń funkcji KlawszeSzeregowe" i wchodzimy w ustawienia celem określenia portu i prędkości. Aby poznać możliwości tej opcji proponuję uruchomić notatnik i wysłać coś do portu np. plik tekstowy - odbierane znaki będą "wklejane" do notatnika.

COMy a wiersz poleceń DOSa/WINdy

Urządzenie o nazwie COMn, gdzie n to numer portu (1..4), traktujemy jak nazwę pliku. Przykładowe komendy wydawane w wierszu poleceń:

Na uwagę zasługuje polecenie ctty umożliwiające zmianę konsoli z urządzenia CON (klawiatura przy pisaniu, monitor przy czytaniu) na inne urządzenie systemowe np. port szeregowy COMn, czyli zdalną pracę. Aby zdalnie popracować na odległym komputerze trzeba w wierszu poleceń wydać komendę ctty comn (n-numer portu), a na swoim odpalić terminal. Przykład takiej pracy był wcześniej. Na koniec ważna uwaga: parametry portu, do którego będziemy wysyłać dane poleceniami DOSu ustala się komendą mode. np. mode com2:9600,n,8,1,p. ustala prędkość transmisji portu na 9600bps. Można ją np. umieścić w pliku autoexec.bat .

Ustawienia portu

Przyjęto pewien standard jeśli chodzi o parametry transmisji przez COMy, którego trzeba sie trzymać:

Piszemy program w QBasicu

Jak napisać program do "czatowania"?

Być może kiedyś znajdzie się tu kurs programowania portów szeregowych pod DOS, a tymczasem zamieszczam dwie wersje prostego programu do czatowania przez RS232C w QBasicu:

adr = &H3F8 'com1predkosc = 1200
'ustalenie parametrow transmisji
OUT adr + 3, INP(adr + 3) OR 128
OUT adr + 1, (115200 / predkosc) / 256 'predkosc
OUT adr, (115200 / predkosc) AND 255
OUT adr + 3, INP(adr + 3) AND NOT 128 'N,8,1
OUT adr + 3, 3 OR 0 OR 0

OUT adr + 4, 3 'DTR i RTS="1"- niektore programy tego wymagaja

PRINT : PRINT
DO
IF INP(adr + 5) AND 1 THEN COLOR 14: PRINT CHR$(INP(adr)); 'wyswietl co przyszlo
i$ = INKEY$ 'czy cos wcisniete?
IF i$ = CHR$(27) THEN OUT adr + 4, 0: END 'ESC - koniec
IF LEN(i$) = 1 THEN 'jesli inny znak ASCII - wyslij
COLOR 15: PRINT i$;
DO: LOOP UNTIL INP(adr + 5) AND &H20 'czekaj az sie zwolni buf
OUT adr, ASC(i$) 'wyslij
END IF
LOOP

Albo inaczej: tym razem korzystając z funkcji I/O i komunikacji asynchronicznej wbudowanych w Qbasic:

numerCOM% = 2
bpsCOM% = 1200

nazwa$ = "COM" + LTRIM$(STR$(numerCOM%)) + ":" + LTRIM$(STR$(bpsCOM%)) + ",N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048"
'wyjasnienie w/w stringa w Helpie do QBasica, patrz: "OPEN COM"

OPEN nazwa$ FOR RANDOM AS #1
COM(numerCOM%) ON 'Wlaczenie obslugi zdarzen
ON COM(numerCOM%) GOSUB ComHandler 'Pojawienie sie znaku powoduje skok do ComHandler

DO
c$ = INKEY$
IF c$ <> "" THEN COLOR 2: PRINT c$; : PRINT #1, c$; 'wysyla znak i wysw. na ekranie
LOOP UNTIL c$ = CHR$(27) 'ESC konczy dzialanie progr.

COM(numerCOM%) OFF
CLOSE #1
END

ComHandler: 'wyswietla znak, ktory przypelzl do COMa
COLOR 10
PRINT INPUT$(1, #1);
RETURN

Jak widać na przykładzie, polecenia takie jak PRINT, czy INPUT stosowane do obsługi plików i klawiatury / monitora, można także zastosować do obsługi portu szeregowego.

Gry:

Osobiście sprawdzałem tylko DOOM2 - działał na 3-żyłowym kablu przy prędkości 19200 (minimalna 9600) , podobnie powinno być z większością gier. Wszystko co działa przez zwykły modem powinno działać przez null-modem, a jeśli wymagają sieci to można ją postawić w oparciu o kabel szeregowy lub równoległy (Bezpośrednie połączenie kablowe w Windowsie).

Słówko o porcie równoległym

Jego wykorzystanie w komunikacji warto rozważyć ze względu na kilkakrotnie większy transfer niż w przypadku portu szeregowego. Dzieje się tak dzięki temu, że dane są wysyłane w 4-bitowych porcjach. W przeciwieństwie do łącza szeregowego, łącze równoległe obciąża procesor w 100% ponieważ cały protokół komunikacyjny jest realizowany programowo. Dlatego nie polecam łącza równoległego w systemach wielozadaniowych jak Windows. Liczba programów potrafiących korzystać z portu równoległego nie jest aż tak liczna. Część z nich była wymieniona wyżej. Poniżej zamieszczam schemat kabelka, z którego korzystają wszystkie znane mi programy łącznie ze sterownikami do PLIPa (Paralell Line IP).

    D0->ERROR       2 - 15          15 - 2
    D1->SLCT 3 - 13          13 - 3
    D2->PAPOUT       4 - 12          12 - 4
    D3->ACK  5 - 10          10 - 5
    D4->BUSY 6 - 11          11 - 6
    SLCTIN      17 - 17
    GROUND      25 - 25
Pozostałych pinów nie łączyć!

Kabelek taki można kupić w sklepie albo na giełdzie, a na upartego zrobić samemu.

Powyższy opis i uwagi dotyczą połączenia w trybie SPP. Warto dodać, że istnieją rozwiązania wykorzystujące port równoległy w trybie ECP z DMA, nieobciążające procesora i zapewniające transfer rzędu 700KB/s. Kabel łączący jest jednak trochę bardziej skomplikowany, a oprogramowania jest mniej.