poniedziałek, 15 lutego 2010

Pozory mylą

W pracy trafiło mi nieco zaskakujące zadanie. Otóż dostałem silnik elektryczny, kontroler do tego silnika, oraz polecenie:


  • Pan zrobi tak, żeby z PC'ta kontrolować ten silnik

  • A dokumentacja gdzie ?

  • Na tej płycie, jest tam też jakiś soft.

  • Ok.


4 godziny później.

  • Na tej płycie nie ma dokumentacji, to jakiś katalog handlowy.

  • Niemożliwe.

  • Na stronie internetowej też nie ma dokumentacji.

  • Niemożliwe.


Po dwóch tygodniach (plus okres świąteczny, w którym ja pracowałem) przysłali dokumentację i dedykowany program komunikacyjny.
Zdobyłem wtyczki, przylutowałem kable, wszystko spiąłem zgodnie z dokumentacją i ostatecznie udało się cały zestaw uruchomić. Kontrolując napięcie na kilku pinach mogę regulować kierunek i prędkość.
Przyszedł czas, aby podłączyć to cudo do PC. Komunikacja ma odbywać się poprzez port szeregowy RS232. I tu zaczęły się schody. Na początku stycznia nie można nigdzie dostać żeńskich wtyczek, panuje globalny brak towaru pod tytułem „Remanent”.
Ostatecznie udało mi się połączyć kontroler z komputerem, dzięki zakupowi ostatniej sztuki dostępnej w okolicach uczelni. Uruchomiłem ten dedykowany program i lipa, nie działa. Po wielu kombinacjach odkryłem przyczynę. Domyślna wartość parametru baud rate nie umożliwia komunikacji. Prawidłowa wartość to powalające 110 bodów na sekundę !?
Potem okazało się, że program się wiesza przy próbie modyfikacji parametrów pracy. Pomyślałem, więc o nowszej wersji. Znalazłem 2.03, miałem 0.06 !? Ta nowsza jest jednak tylko po japońsku i również nie działa !?
Po straceniu mnóstwa czasu, uznałem, że skoro ten soft nie potrafi nawet poprawnie rozpoznać kontrolera (wyświetla złą nazwę) to chyba to po prostu nie ma prawa zadziałać. Został wysłany e-mail do dostawcy z prośbą o pomoc. Po tygodniu odpowiedział mi przedstawiciel niemieckiego oddział, że oczywiście udzielą nam wsparcia, ale on aktualnie jest w Istambule i żebym póki co sprawdził czy wtyczki są dobrze podłączone !?
Minęły już trzy tygodnie od oryginalnego maila i wciąż nie dostałem żadnych informacji. Firma jest japońska, a oddział niemiecki, wydawało mi się, że nasza "współpraca" będzie nieco rzetelniejsza. Ehh.



Z zadań bliższych memu sercu, napisałem program do odbierania danych z portu szeregowego i przekazujący je do nazwanego pipe'a. Przy tej okazji odkryłem kilka ciekawostek:


  • system Windows daje procesowi wyłączny dostęp do portu szeregowego. Ponieważ typowy desktop ma tylko jeden taki port, debugowanie aplikacji jest utrudnione. Wyjść jest kilka:

    • podłączyć inne urządzenie,

    • zdobyć drugi port szeregowy, na przykład taki pod usb,

    • użyć loopback, proces może jednocześnie pisać i czytać z portu.


    Najbardziej polecam drugi port, choć powodował na „moim” komputerze dość regularne restarty :(

  • wszystkie testy jakie wykonałem pozwalają mi sądzić, że pipe'y (wykorzystywane lokalnie) są w zasadzie niezawodne i stosowanie do nich dodatkowych protokołów mija się z celem. Trzeba jedynie zapewnić, że dane będą pobierane w miarę równomiernie do ich zapisywania, aby nie dopuścić do przepełnienia bufora,

  • memcpy nie działa poprawnie, gdy bufor źródłowy i docelowy się pokrywają, lepiej użyć memmove.



I to by było wszystko na dziś.

Brak komentarzy: