Spis treści
1. Wstęp 9
2. Zagadnienie rozpoznawania mowy w sterowaniu 11
2.1. Sygnał mowy 11
2.1.1. Opis sygnału głosowego w dziedzinie czasu 12
2.1.2. Opis sygnału w dziedzinie częstotliwości 13
2.1.3. Czasowo-częstotliwościowa zmienność sygnału głosowego 14
2.2. Rozpoznawanie mowy 15
3. Moduły rozpoznawania głosu 17
3.1. Moduł VRbot 17
3.2. Moduł EasyVR 18
3.2.1. Różnice między modułami EasyVR a VRbot 20
3.3. Moduł SmartVR 20
3.4. Obwód rozpoznawania mowy SR-07 22
3.5. Moduł VR Stamp 23
4. Sterowanie głosowe dla interfejsu RS-232 25
4.1. Specyfikacja modułu EasyVR wraz z komponentami 25
4.1.1. Interfejs szeregowy modułu EasyVR 27
4.1.2. MAX323 Board 28
4.1.3. Mikrofon 30
4.1.4. Programowanie modułu EasyVR 31
4.1.5. Wykorzystanie i konfiguracja portów I/O 32
4.2. Interfejs RS-232 33
4.2.1. Opis magistrali interfejsu 34
4.2.2. Kable w interfejsie RS-232 36
4.2.3. Tryby pracy interfejsu RS-232 38
5. Implementacja sterowania głosowego w sterowniku PLC 40
5.1. Komunikacja Point-to-Point 41
5.1.1. Konfiguracja portów modułu komunikacyjnego RS-232 42
5.1.2. Konfiguracja parametrów nadawczych 44
5.1.3. Konfiguracja parametrów odbiorczych 45
5.1.4. Tryby pracy komunikacji punkt-punkt 51
5.1.5. Instrukcje konfiguracyjne 51
5.1.6. Instrukcja SEND_PTP 54
5.1.7. Instrukcja RCV_PTP 55
5.1.8. Instrukcje pomocnicze 56
5.1.9. Status i kody warunkowe 57
5.2. Analiza sygnałów w komunikacji z EasyVR 59
5.2.1. Analiza poprawnie wykonanej transmisji z rozpoznaniem głosu 60
5.2.2. Analiza niepoprawnych transmisji rozpoznania głosu 61
5.3. Program do komunikacji sterownika PLC z modułem EasyVR 63
5.3.1. Konfiguracja właściwości modułu RS232 pod komunikacje z EasyVR 63
5.3.2. Program sterowania głosowego modułem dla sterownika PLC 64
5.4. Dalsze kierunki rozwoju badań nad sterowaniem głosowym 68
6. Wnioski 70
Spis literatury 71
Wstęp
Tematem pracy dyplomowej jest sterowanie głosowe w sterownikach PLC. Programowalne Sterowniki Logiczne są uniwersalnymi urządzeniami mikroprocesorowymi służącymi do sterowania pracą urządzeń oraz maszyn. Są niezwykle uniwersalne ponieważ można dostosować każdy ze sterowników do konkretnego urządzenia a także przeznaczenia jakie mu nadajemy dzięki wprowadzeniu algorytmu pisanego w jednym z kilku dedykowanych języków programowania do pamięci sterownika. Sterowniki są szeroko stosowane w przemyśle automatyzując
w sposób znaczny pracę fabryk. Sterowanie w sterownikach PLC odbywało się przede wszystkich za pomocą przycisków stykowych lub paneli dotykowych HMI. Jednak
w dobie ciągłych udoskonaleń i ułatwień stało się jasnym iż technika pozwoli na sterowanie nimi za pomocą głosu. Wiele firm i instytucji mogłoby przyjąć tą drogę rozwoju w celu jeszcze większego ułatwienia pracownikom obsługi sterowników
i maszyn, którymi sterują, zwiększyły by bezpieczeństwo samych pracowników oraz pracy z uwagi na szybszy czas reakcji w nagłym przypadku zagrożenia życia. Ileż łatwiej byłoby wydać komendę głosową niż podbiec do odpowiedniego przycisku by wyłączyć park maszynowy w sytuacji zagrożenia dla życia ludzkiego lub uszkodzenia maszyn. Praca porusza temat nowy dla sterowników, gdyż nie zostało jeszcze rozpowszechnione sterowanie głosem przez firmy produkujące sterowniki.
Rozpoznawanie mowy jest szeroko stosowane w komputerach osobistych PC oraz technice biometrycznej, tworzone jest oprogramowanie mające na celu rozpoznawanie głosu pod względem fizycznych właściwości. Wiadomo, że sygnał mowy zawiera złożoną informację pozwalającą odebrać nie tylko podstawowe znaczenie wypowiedzi, ale także ocenić między innymi płeć, wiek, stan zdrowia, nastrój, pochodzenia, status społeczny, wykształcenie i inne podobne cechy. Jednak dla celów przemysłowych nie dopatruje się jednak potrzeby wykorzystania wszystkich tych cech. Dla poprawnej pracy sterowników ważne jest tylko znaczenie wypowiedzi, które wprowadzone do algorytmu powodowałoby zaistnienie jakiejś operacji na sterowniku, nie jest natomiast ważne dla sterownika czy wypowiadającym komendę jest kobietą, mężczyzna, mający 20 lat czy 50. Program obsługujący moduł rozpoznawania głosu powinien zatem zająć się detekcją znaczenia komend w językach, które zostały mu zaprogramowane. Istnieje szereg modułów rozpoznawania głosu, niestety niekoniecznie przeznaczonych dla sterowników PLC, w pracy zbadam ich efektywność, a także sposób najlepszego przekwalifikowania ich do użyteczności w automatyce przemysłowej, a szczególnie we współpracy ze sterownikami PLC.
Celem pracy więc jest odnalezienie modułów rozpoznawania mowy, wybranie jednego, spełniającego największą ilość przydatnych w automatyce cech, wybranie konkretnego sterownika PLC, przeanalizowanie możliwości przekwalifikowania danego modułu pod wybrany sterownik PLC, skonfigurowaniu połączenia między nimi a także napisaniu odpowiedniego programu dla sterownika, mogącego wykorzystać atuty modułu w automatyce. Niestety brak jest prac z tego obszaru badań, więc ciężko będzie porównać efekty pracy dyplomowej z innymi pracami z obszaru badań. Dlatego trzeba założyć iż priorytetem jest doprowadzeniu do układu tych dwóch urządzeń tak by możliwa była ingerencja w algorytm sterownika za pomocą głosu. Wszelkie inne uzyskane podczas prac efekty mogą zostać wykorzystane do rozbudowy a także wskażą kierunek ich rozwoju
W następnych rozdziałach pracy dyplomowej będę chciał przybliżyć opis sygnału mowy i problem jego rozpoznawania. Przedstawić bogatą ofertę modułów rozpoznawania głosu, by móc wybrać najbardziej optymalny model i go opisać. Poruszę także kwestię komunikacji przez interfejs RS-232 a także rozwiązanie tej kwestii
w sterowniku PLC, dla którego omówię bardzo dokładnie sposób nawiązywania transmisji, konfigurację sprzętową i programową, a także instrukcje służące do komunikacji z urządzeniami zewnętrznymi. Zaprezentuje także prosty program wykonujący połączenie i wymianę danych między modułem rozpoznawania głosu
a sterownikiem.
Zagadnienie rozpoznawania mowy w sterowaniu
Sterowanie głosowe jest czymś niewątpliwie nowym w automatyce przemysłowej
a także ze względu na to bardzo interesującym zagadnieniem. Należało by najpierw ocenić zalety i wady użycia go w automatyce a szczególnie w sterownikach PLC, które i tak same w sobie są w czasach dzisiejszych wręcz niezbędne do funkcjonowania choćby niewielkiej firmy opartej na automatyzacji. Niewątpliwą zaletą byłaby możliwość sterowania sterownikiem a co za tym idzie maszynami za pomocą głosu, co mogłoby ułatwić pracę operatorowi, gdyż sterowanie głosem zwolniłoby go przed przymusem stania za panelem operatorskim lub przy panelu HMI w celu podjęcia jakiejkolwiek akcji związanej ze sterownikiem. Mogłoby także zmniejszyć czas reakcji w sytuacjach zagrożenia, gdy dalsza praca sterownika lub maszyny mogłaby zagrozić życiu ludzkiemu lub samej maszynie. Zniwelowałaby też możliwość zagrożenia samego operatorowa, który nie musiałby zbliżać się nawet do panelu by wyłączyć sterownik
a wystarczy że wydałby komendę słowną, której wykonanie zajmuje znacznie mniej niż ruch. Sterowanie głosowe daje także możliwość operatorowi sprawnego działania także w warunkach ciemności czy stresu fizycznego lub psychicznego. Sterowanie głosowe jest naturalnym sposobem sterowania co upraszcza i skraca dotąd przeważnie długotrwały trening operatora. Wadą sterowania głosowego mogłaby być tylko zatem wada wymowy ludzkiej, która mogłaby być wręcz niwelowana zwiększeniem czułości urządzenia bądź uwrażliwienie go na błędy wymowy ludzkiej.
Sygnał mowy
Wytwarzanie mowy jest złożonym procesem, angażującym do pracy płuca, oskrzela i tchawice, narządy te mają za zadanie doprowadzić strumień powietrza do krtani.
W krtani zaś znajdują się struny głosowe które zdolne są wytworzyć ton krtaniowy, który zostaje filtrowany przez specyficzny ludzki filtr, złożony z:
języka,
języczka,
podniebienia twardego i miękkiego,
zębów,
ust,
nozdrzy (tylko w niektórych przypadkach).
Narządy te tworzą rezonator wnękowy, którego zadaniem jest wzmocnienie pewnych częstotliwości tonu wytworzonego przez krtań. Ludzka odmienność przejawia się także na tym etapie, dlatego też głos każdego z nas jest inny a co za tym idzie parametry wytwarzanego głosu są dla każdej osoby unikalne. Proces wytwarzania głosu można przyrównać na potrzeby przykładu do modelu źródło-filtr (Rys.2.1):
Rys.2.1 Proces wytwarzania sygnału mowy
Z punktu widzenia techniki sygnał mowy jest bardzo interesującym obiektem, gdyż zakodowany najefektywniej może służyć do komunikacji między człowiekiem
a maszyną. Sam sygnał mowy możemy próbować opisywać różnymi metodami i za pomocą różnorakich parametrów, pragnę przedstawić jedynie krótki opis wybranych metod analizy sygnału mowy.
Opis sygnału głosowego w dziedzinie czasu
Jeśli potraktujemy sygnał mowy jako przebieg czasowy dostaniemy skomplikowany przebieg (Rys.2.2), co odwzorowuje złożoność procesu jego artykulacji. Przebieg przedstawia zarejestrowany głos męski wypowiadający słowo „serce”. Na parametry tego sygnału mają wpływ przede wszystkim źródło sygnału czyli wiązadła głosowe oraz własności dynamiczne, które formują strukturę całego sygnału. Kształt tego przebiegu jest przez składniki przypadkowe, dlatego też różne słowa wypowiadane przez tego samego człowieka będą postrzegane przez system jakby miały więcej wspólnego z sobą niż to samo słowo wypowiadane przez różne osoby, co dyskwalifikuje tą metodę opisu jako wiarygodne do pobrania parametrów przydatnych w automatycznych systemach rozpoznawania mowy [1]. Mimo nieprzydatności w automatyce opis ten jest ważny ponieważ stanowi swoisty punkt wyjścia dla innych opisów sygnału głosowego.
Rys.2.2. Przebieg czasowy sygnału mowy [1].
Opis sygnału głosowego w dziedzinie częstotliwości
Metoda opisy w dziedzinie częstotliwości jest podstawową i najbardziej przydatną metodą opisy sygnału głosowego. Widmowa prezentacja sygnału jest niezwykle użyteczna z uwagi na fakt iż podczas powstawania mowy kształtujemy obwiednią amplitudowo-częstotliwościową naszego sygnału, zaś jeszcze w procesie percepcji struktury ucha wewnętrznego wydzielają składowe o poszczególnych częstotliwościach. Zatem cały aparat mowy kształtuje głównie właśnie widmo sygnału [1]. Można dobrać zestaw filtrów do opisu sygnału głosowego i badać przebiegi w wybranych pasmach częstotliwości, które dostarczają niezbędnych informacji o dynamice w wybranym fragmencie widma. Na rysunku 2.3 po raz kolejny mamy do czynienia ze słowem „serce” wypowiadanym przez mężczyznę jak uprzednio (Rys.2.2) lecz tym razem zobrazowaną przy przepuszczeniu sygnału przez dwa różne filtry, o nastawach dobranych przy pomocy metody opisu sygnału w dziedzinie częstotliwości. Widać jak na pierwszej części rysunku widoczne są głównie przebiegi związane z samogłoskami, zaś na drugiej części rysunku znikły prawie wszystkie składowe pochodzące od samogłosek, zaś widoczne są wyłącznie spółgłoski.
Rys.2.3. Przebiegi będące wynikiem filtracji sygnału dopasowanego według metody opisu w dziedzinie częstotliwości: a) szerokość pasma filtra 125 Hz i częstotliwości środkowej 750 Hz, b) szerokość pasma filtra 125 Hz i częstotliwości środkowej 5000 Hz. [1]
Czasowo-częstotliwościowa zmienność sygnału głosowego
Dla pełni badań nad sygnałem głosowym powinno się spróbować połączyć analizę w dziedzinie czasowej z analizą w dziedzinie częstotliwościowej, a w celu równoczesnemu uchwyceniu czasowej zmienności oraz wymiaru częstotliwościowego wybranego sygnału można zaprezentować go w trójwymiarowo. Prawdziwą zaletę prezentacji czasowo-częstotliwościowej odkrywamy dopiero przy analizie różnych słów (Rys.2.4.). Jednak ta metoda jest możliwa do wykorzystania w automatyce jedynie gdy zastąpimy sterownik PLC wystarczająco silnym komputerem by możliwe było prezentowanie „trójwymiarowych” dynamicznych widm.
Rys.2.4. Widma trójwymiarowe różnych wypowiedzi: a) oferta, b) wiosło [1]
Rozpoznawanie mowy
Rozpoznawanie mowy przez systemy elektroniczne zaczynają się od wprowadzenia sygnału mowy do pamięci urządzenia. Następnie należy zredukować objętość informacyjną sygnału poprzez wydobycie z niego najważniejszych parametrów określających znaczenie dźwięku. Jeśli dysponujemy wybranym dla naszych celów opisem parametrycznym należy dokonać na sygnale mowy dostatecznej segmentacji aby wyróżnić dźwięki-klucze. Najlepszym rozwiązaniem wynikającym z naszego punktu widzenia jest stworzenie bazy słów, co ogranicza całą analizę, jednak do naszych celów nie należy określanie całych zdań jako komendy a jedynie rozpoznanie pojedynczych słów. Samo rozpoznawanie zaczynamy od znormalizowania czasu wypowiedzi, ponieważ nawet ta sama osoba może wypowiedzieć dane słowo inaczej
w funkcji czasu, a co dopiero kiedy mamy do czynienia z różnymi osobami. Deformacja skali czasowej ma niestety charakter nieliniowy co może utrudnić sam proces rozpoznawania i to nie tylko biorąc pod uwagę działanie modułów rozpoznawania mowy ale także rozpoznanie mowy przez komputery. Można to zilustrować poprzez prosty przykład (tab.2.1).
Tab. 2.1. Przykład różnego zapisu słów w różnej funkcji czasu
Fonetyczny zapis słowa z nagrania |
Rodzaj nagrania |
sssooowwaaa |
Nagranie wzorcowe |
csoooofffaa |
Obecność szumów w nagraniu |
ssooaoowwaeaa |
Nagranie niewyraźnej wymowy |
zzsssuooooaaa |
Nagranie innej osoby np. kobiety |
Przykład ten miał pokazać jedynie możliwe rozbieżności między nagraniem wzorcowym a innymi nagraniami. Stosowanie słowników wzorców, czyli naszej puli słów jest jedną z dróg rozpoznawania mowy i wyszukuje się najbliższe słowo jednocześnie zgodne z określonym przez nas kryterium. Jest to algorytm działający na bazie programowania dynamicznego, które są dosyć szybkie i sprawne. W systemie automatyki jedyną słuszną racją jest danie operatorowi dość dużego wyboru słów komunikującej jednocześnie tą samą akcję do sterownika, co można wykonać programowo już na samym sterowniku. Dla przykładu na rozruch systemu należy umieścić w bazie wyrazów nie tylko słowo „start”, ale także „rozruch”, „włącz”, „zaczynaj”, daje to operatorowi odczuć pewną naturalność sterowania, o którą właśnie chodzi by wykazać podstawową różnicę między sterowaniem głosem a sterowaniem
z panelu operatorskiego. Najważniejsze problemy z naszego punktu widzenia
w rozpoznawaniu głosu to właśnie problem poziomu akustycznego, który odpowiada za dostatecznie głośne wprowadzenie sygnału do identyfikacji a także problemu poziomu semantycznego, które jest związane z identyfikacją sensu danego słowa, gdyż dla nas przy założeniu korzystania z bazy słów, która porównuje własności podczas procesu rozpoznawania nie ważne są problemy syntaktyczne lub złożoność problemu strukturalnego w takim stopniu jak dla programów rozpoznających mowę ciągłą.
Moduły rozpoznawania głosu
Na rynku istnieje kilka gotowych modułów rozpoznawania głosu, mogących służyć w automatyce, robotyce oraz w zastosowaniu ze sprzętem PC. Wybór najlepszego nie jest łatwy. Należy sobie bowiem postawić pytanie jakich parametrów oczekujemy od naszego modułu. Przede wszystkich możliwość ustalenia własnego słownika wyrazów-kluczy, których będziemy używać do sterowania sterownikiem PLC, następnie należy brać pod uwagę takie parametry jak czułość mikrofonu, odporność urządzenia na szum, czy też cenę takiego modułu. Przydatne jest też przy wyborze sugerować się prostotą urządzenia, łatwością implementowania bazy słów, oprogramowaniem a także możliwością aktualizacji oprogramowania.
Moduł VRbot
Moduł ten jest jednym z pierwszych modułów rozpoznawania głosu firmy Veear (rys.3.1), przeznaczony głównie z myślą o robotach, dostępnych na rynku m.in. Robonova oraz Robozak MR-C3024 (rys.3.2), którym był dedykowany. Moduł ten idealnie nadaje się do współpracy z mikroprocesorami.
Rys.3.1. Moduł VRbot [2]
Cechami tego modułu są:
posiadanie 26 wbudowanych komend głosowych gotowych do użycia bez potrzeby ich nagrywania, komendy te są nagrane w języku: angielskim, włoskim, japońskim i niemieckim,
posiada możliwość nagrania własnej bazy 32 komend głosowych,
moduł posiada interfejs UART (3.3 - 5V),
posiada własny prosty i stabilny protokół do podłączenia się i programowania przez port RS 232 lub USB,
może operować prędkościami transmisji od 9600bps do 115000bps.
Rys.3.2. Sposób połączenia modułu z płytą główną robota ROBONOVA-1 [3]
Moduł EasyVR
Moduł ten jest uniwersalnym modułem rozpoznawania głosu, zaprojektowany by zwiększyć efektywność, stabilność i ekonomiczność poprzez sterowanie głosowe daną aplikacją. EasyVR to druga generacja modułu rozpoznawania głosu firmy Veear (rys.3.3), następca modułu VRbot, zbudowany na funkcjonalności i cechach poprzednika. Moduł ten idealnie nadaje się do współpracy z kartami PIC lub Arduino. Firma Veear zapewniła wręcz specjalnie nakładki modułowe pod Arduino (rys.3.4). Istnieje możliwość dokupienia do modułu firmowego programatora na USB (rys.3.4).
Rys.3.3. Moduł EasyVR [4]
Rys.3.4. Płytki rozszerzające do modułów: nakładka na Arduino (po lewej),
programator USB (po prawej) [4]
Cechy modułu:
posiadanie 26 wbudowanych komend głosowych gotowych do użycia bez potrzeby ich nagrywania, komendy te są nagrane w języku: angielskim, włoskim, japońskim, niemieckim, hiszpańskim i francuskim
posiada możliwość nagrania własnej bazy 32 komend głosowych,
moduł ma interfejs UART (3.3 - 5V),
ma własny prosty i stabilny protokół do podłączenia się i programowania przez port RS 232 lub USB,
3 piny wyjścia mogące być kontrolowane przez komendy protokołu,
wyjście audio do podłączenia głośnika,
funkcje odtwarzania dźwięku z playbacku
rozbudowane biblioteki pod współprace z Arduino, a także gotowe nagłówki do programowania w języku C\C++.
Różnice między modułami EasyVR a VRbot
W porównaniu do starszej wersji w EasyVR posiada dograne dwa języki więcej. Dodano wyjście audio na głośnik 8Ω, z którego możliwe jest odtwarzanie aż do 9 minut dźwięku w kompresji SX-2, które można uzyskać dzięki dołączonemu do oryginalnego oprogramowania programowi Sensory's Quick Synthesis. Samo oprogramowanie zyskało nowe funkcje, aktualizacji oraz podziału komend na zwykłe, hasła oraz komendy nadrzędne. Do układu zostały dodane trzy piny linii wejścia/wyjścia, których sterowanie zapewnia nowy protokół. Dzięki kartom rozszerzającym moduł można łatwiej zastosować w systemie Arduino a także bez problemu programować. Dlatego też EasyVR został okrzyknięty godnym następcą modułu VRbot, którego prawie całkowicie wyparł z rynku sprzedaży, wykorzystując do maksimum nowe oprogramowanie, dołączone przez producenta, EasyVR Commander.
Moduł SmartVR
Jest to moduł wyposażony w platformę do syntezy mowy i aplikacje do rozpoznawania głosu bazującej na sensorycznym procesorze sygnału RSC-4128. Moduł oparty o program Virtual Machine obniża koszty wielu aplikacji przy skupieniu się na rozpoznawaniu mowy.
Rys.3.5. Moduł SmartVR [5].
Cechy modułu:
moduł posiada wbudowany programator USB,
posiada możliwość zasilania wieloma źródłami napięcia: USB, baterie, zasilanie zewnętrzne,
wbudowany mikrofon, który można zastąpić przez mikrofon zewnętrzny lub inne źródło podawane na wejście audio,
wbudowane wyjście na głośnik lub wyjście wzmacniacza,
możliwość obsługi kart SD/SDHC/MMC,
przyciski wraz z diodami LED do testów,
pełny dostęp do wszystkich pinów wejścia/wyjścia,
spora pamięć Flash oraz RAM,
własny dedykowany program Smart VR IDE (Rys.3.6), z możliwością programowania w standardzie C\C++, posiadający menadżer projektów, auto-wypełniacz oraz kompilator.
Rys.3.6. Okno programu SmartVR IDE [5].
Obwód rozpoznawania mowy SR-07
Jest to moduł potrafiący rozpoznać do 40 jednosekundowych słów lub 20 dwu sekundowych (Rys.3.7). Nie posiada wbudowanych słów, cała bazę słów należy stworzyć samemu. Cały obwód oparty jest o pojedynczy chip HM2007. Moduł rozpoznaje mowę w dwóch typach: izolowaną lub połączoną. Mowa izolowana to baza dźwięków pojedynczych jednosekundowych, mowa połączona to rozpoznawanie mowy na podstawie bazy słów lub zdań zawartych w dwusekundowej bazie, symulującą mowę ciągłą. Dodatkowo moduł posiada klawiaturę do programowania oraz wyświetlacz pokazujący status błędu. Moduł posiada dwa tryby pracy: ręczny oraz CPU. W trybie CPU moduł pracuje w sieci pod innym komputerem lub modułem. Moduły SR-07 można łączyć kaskadowo uzyskując poszerzenie pamięci kolejnych słów. W trybie ręcznym posiada wszystko by pracować jako samodzielny układ. Układ można zaprogramować dzięki klawiaturze i wyświetlaczowi bez potrzeby programowania go
z użyciem komputera. Podczas odłączenia od zasilania pamięć zasilana jest z baterii, która podtrzymuje pamięć przed skasowaniem.
Cechy modułu:
system izolowania dźwięków,
zewnętrzną pamięć SRAM (64kB),
możliwość łączenia chipów ze sobą kaskadowo w sieć,
możliwość bezpośredniego podpięcia mikrofonu, chip posiada wbudowany system analizy głosu, system rozpoznawania i system kontroli funkcji,
czas odpowiedzi mniejszy niż 300 ms,
producent przygotował kilka interfejsów do łączenia modułu i różnymi urządzeniami a także do łączenia je w sieć.
Rys.3.7. Zestaw SR-07 [6].
Moduł VR Stamp
Moduł firmy Sensory (Rys.3.8) jest pierwszym urządzeniem używającym szybkiego układu Quick T2SI stanowiącego własność firmy, produkt jest całkowicie programowalny, może posiadać nagraną własną bibliotekę słów u każdym języku. Układ wyposażony w kanał audio o bardzo małym natężeniu szumu, a także układy pozwalające na niezwykle szybkie przetwarzanie dźwięku. Produkt oferuje 24 linie wejścia/wyjścia. Urządzenie włącza się pod wpływem rozpoznania dźwięku.
Rys.3.8. Moduł VR Stamp [7].
Cechy modułu:
wysokiej jakości 2,4-10,8 kbps kompresor mowy i efektów dźwiękowych,
możliwość zablokowania układu hasłem biometrycznym,
syntezator głosu i dźwięków kompatybilnych z MIDI,
oszczędny tryb uśpienia reagujący na dźwięk,
1 MB pamięci Flash oraz 128 kB EEPROM,
przedwzmacniacz mikrofonowy wbudowany w układ,
24 linie I/O
kompatybilny z protokołem RS232,
Rys.3.9. Diagram blokowy modułu [7].
Sterowanie głosowe dla interfejsu RS-232
W pracy dyplomowej mam za zadanie wybrać i skonfigurować moduł rozpoznawania głosu a także zaprogramować sterownik PLC tak aby możliwe było sterowanie głosem. Z bogatej oferty modułów rozpoznawania głosu i mowy wybrałem najprostszy, właśnie ze względu na jego prostotę, najmniejsza ingerencje procesorów dźwięku w sygnał mowy, posiadający wbudowane a także programowalne komendy. Wybór był także kierowany ceną i dostępnością produktu na rynku europejskim. Moim wyborem jest moduł rozpoznawania głosu EasyVR, gdyż spełnia założenia priorytetowe i podstawowe, nie jest potężnym procesorem dźwiękowym jak pozostałe moduły, nie będę także korzystał z możliwości programowania w języku C\C++ jakie dają także pozostałe opcje, skupiając się na pozostawieniu całego algorytmu programu po stronie sterownika. Pisanie programu tylko w języku dedykowanym dla sterownika PLC daje według mnie większą przejrzystość tego algorytmu, pozostawiając moduł rozpoznawania głosu tylko na szczeblu konwertowania sygnału mowy na konkretny rozkaz wchodzący na wejście sterownika. Od strony sterownika wybór padł na sterownik Siemens S7-1200 o jednostce centralnej 1214C DC/DC/DC wraz
z procesorem komunikacyjnym CM 1241 RS232 do komunikacji z interfejsem RS232.
Specyfikacja modułu EasyVR wraz z komponentami
Mając za sobą już ogólny wgląd na możliwości modułu rozpoznawania głosu EasyVR, należy się dokładnie przyjrzeć temu urządzeniu pod względem przydatności urządzenia ze sterownikiem Siemensa. Sam producent modułu wskazuje jego przydatność w automatyce domowej lub do współtworzenia inteligentnych domów. Mimo iż z zastosowań samego produktu wynika jego silne powiązanie z produktem Arduino ja zajmę się przydatnością samego modułu bez kart rozszerzających.
Moduł stworzony przez firmę Veear oprócz cech podanych przeze mnie w ogólnym rozważaniu na temat modułów rozpoznawania głosu jest urządzeniem prostym
w obsłudze i budowie. Posiada jednak wszystkie cechy dobrego modułu rozpoznawania głosu. Sama płytka modułu (Rys.4.1) przedstawiona poniżej nie jest skomplikowana, opis do płytki przedstawiono w tabelce 4.1.
Rys.4.1. Rozkład elementów na płytce drukowanej [4].
Tab. 4.1. Wykaz i opis elementów z płytki modułu EasyVR
Złącze |
Numer pinu |
Nazwa |
Opis |
J1 |
1 |
GND |
Masa |
|
2 |
VCC |
Wejście stałego napięcia |
|
3 |
ERX |
Wejście danych interfejsu UART (TTL) |
|
4 |
ETX |
Wyjście danych interfejsu UART (TTL) |
J2 |
1-2 |
PWM |
Wyjście głośnikowe |
J3 |
1 |
MIC_RET |
Masa wejścia mikrofonowego |
|
2 |
MIC_IN |
Wejście sygnału mikrofonowego |
J4 |
1 |
/RST |
Asynchroniczny reset |
|
2 |
/XM |
Selektor uruchamiania systemu |
|
3 |
IO1 |
Pin wejścia/wyjścia (3VDC TTL) |
|
4 |
IO2 |
Pin wejścia/wyjścia (3VDC TTL) |
|
5 |
IO3 |
Pin wejścia/wyjścia (3VDC TTL) |
Układ pracuje przy minimalnym napięciu 3.3 V do maksymalnego napięcia 5,5V. Oprócz pinów wejścia/wyjścia, które pracują w zakresie 2,4 - 3,3V.
Interfejs szeregowy modułu EasyVR
EasyVR pracuje jako moduł w trybie slave, poprzez asynchroniczny interfejs szeregowy potocznie znany jako UART. Ustawienia interfejsu według instrukcji obsługi są następujące [4]:
liczba bitów na sekundę: 9600 (domyślnie), 19200, 38700, 57600, 115200,
bitów danych: 8,
parzystość: brak,
bity stopu: 1.
Przykład ramki dla interfejsu szeregowego reprezentujący znak „A” (decymalnie 65, heksadecymalnie 41) podana jest na rysunku 4.2.
Rys.4.2. Przykład ramki urządzenia dla znaku „A” [4].
Istnieje kilka sposobów podłączenia modułu EasyVR z urządzeniami zewnętrznymi (np. sterownik, komputer) zalecane przez firmę Veear [8]. Podłączenie obydwa się na zasadzie jak na rysunku 4.3. Sygnał ERX modułu musi być podany na wyjście TX hosta, a sygnał ETX na wejście RX. Ważne jest aby oba urządzenia, moduł i host posiadały identyczną konfigurację interfejsu/portu szeregowego.
Rys.4.3. Sposób połączenia EasyVR z hostem.
Do tego celu można wykorzystać jeden z poniższych sposobów połączenia, jakim jest: kabel programujący 4D Systems, MAX323 Board lub USB UART 2 Board. Sposób połączenia każdym z powyżej wymienionych urządzeń komunikacyjnych jest bardzo prosty (Rys.4.4) i nie powinien sprawiać problemów. Po podłączeniu do portu hosta
Rys.4.4. Sposób połączenia modułu EasyVR z modułami komunikacyjnymi: biała linia - ETX, niebieska linia - ERX, czerwona linia - zasilanie, czarna linia - masa [8].
MAX323 Board
Jest to standardowy interfejs RS232C firmy Mikroelektronika (Rys.4.5) dla PC i urządzeń obsługujących ten standard. Poziom napięciowy konwertera UART TTL do RS232 to -12V do 12V. Układ zbudowany jest na układzie MAX232 firmy National Instruments, które zasilane jest napięciem 5V. Napięcie to należy dostarczyć
z zewnętrznego źródła zasilania. W przypadku zastosowania MAX323 Board wraz EasyVR stosujemy go dwojako, jako podłączenie do komputera PC w celu zaprogramowania bazy słów-kluczy a także jako podłączenie do modułu Siemens'a CM 1241 RS232. Ze względu na fakt iż EasyVR używa tylko sygnałów TX i RX, sygnały znajdujące się na schemacie połączeń MAX323 Board CTS oraz RTS są przez nas nieużywane. Układ mostkuje także sygnały na wtyczce DB-9 z pinów 1,4 oraz 6. Piny te odpowiadają sygnałom protokołu RS232: DCD, DTR oraz DSR (Rys.4.6).
Rys.4.5. MAX323 Board [9].
Rys.4.6. Schemat połączeń oraz widok wtyczki DB-9 dla układu MAX323 Board [9].
Oba układy ze względu na brak zasilania zostały wyposażone w zewnętrzne zasilanie, które zostało wykonane z ładowarki do telefonu firmy Nokia wraz z prostym dzielnikiem napięciowym, zmniejszającym napięcie do wymaganego 5V. Napięcie to zostało podane na oba urządzenia EasyVR oraz MAX323 Board, czego nie uwzględnia instrukcja połączeń tych modułów stworzona przez firmę Veear, a do którym odnosiłem się uprzednio. Tego problemu nie ma w przypadku zasilania z konwertera UART TTL na USB, które zapewnia napięcie podawane przez port USB komputera. Jednak ujednolicając układ tak aby nadawał się zarówno do komunikacji z komputerem jak
i sterownikiem zdecydowałem się na wybranie interfejsu RS232.
Mikrofon
Mikrofon, który został dołączony do zestawu EasyVR to pojemnościowy mikrofon elektretowy, wielokierunkowy o charakterystykach:
czułość: -38dB (0dB=1V/Pa @1KHz),
impedancja obciążenia: 2,2K,
napięcie systemowe: 3V,
zasięg częstotliwości: 100Hz - 20kHz.
Producent zastrzega, iż najlepsze efekty uzyskujemy w odległości ok. 60 cm od mikrofonu, chociaż zalecane jest aby odległość tą zmniejszyć do 30 cm. Niestety jest to jedyny model mikrofonu wspierany przez EasyVR, niejako całe urządzenie jest dedykowane dla niego. Dla najlepszego użytkowania mikrofonu i przede wszystkim by algorytm rozpoznawania mowy działał najskuteczniej należy przestrzegać pewnych reguł dotyczących mechanicznego montażu mikrofonu (Rys.4.7).
Rys.4.7. Reguły mechanicznego zamontowania mikrofonu.
Płaszczyzna mikrofonu powinna być zainstalowana jak najbliżej statywu/obudowy tak by między plastikową obudową mikrofonu a samym mikrofonem nie było tunelu
z pustą przestrzenia, który może prowadzić do rezonansu akustycznego jak na rysunku 4.7 w podpunkcie a. Przestrzeń poza obudową a między operatorem powinien być czysty, mnie zasłonięty przez żadne przedmioty Dziurka obudowy na mikrofon powinna mieć średnice przynajmniej 5mm a grubość plastikowej obudowy nie powinna być większa niż 0,7 mm (Rys.4.7b). Jeśli to możliwe obudowa boczna mikrofonu powinna być odizolowana od samego mikrofonu za pomocą wygłuszającego miękkiego materiału, który zniweluje szum i zakłócenia spowodowane przemieszczaniem mikrofonu, odkładaniem i każdym stuknięciem w obudowę (Rys.4.7c).
Programowanie modułu EasyVR
Protokół komunikacyjny używa do komunikowania się znaków ASCII, które można podzielić na dwie grupy:
znak komendy i statusu reprezentowane są małymi literami,
argument komendy oraz szczegóły statusu, oznaczone zostały dużymi literami,
cała komunikacja podczas programowania EasyVR odbywa się między modułem rozpoznawania głosu a programem EasyVR Commander (Rys.4.8). Program ten pozwala na uczenie modułu nowych wyrazów oprócz gotowych słów, których wykaz znajduje się w tabelce poniżej, z uwagi na brak języka polskiego można nagrać odpowiadającą tym słowom bazę słów w języku polskim, jednak lepiej wykorzystać wolne miejsce na omawianą wcześniej naturalność sterowania głosowego, przypisując różne rozkazy temu samemu znaczeniu. Podczas uczenia program dwukrotnie zapisuje słowo w bazie, porównując oba słowa ze sobą oraz pobierając najważniejsze parametry z nich, które w obu przypadkach nagrania wzorcowego muszą być takie same, każde przekłamanie powtórzenia nagrania będzie skutkowało nienagraniem słowa. Słowa dzielimy na słowo wyzwalacz, słowo hasło, a także komendy programowalne oraz komendy, które są wgrane standartowo w pamięć modułu. Komendy programowalne są pogrupowane w grupy, co ułatwi nam dodawanie rozkazów, gdyż w każdej grupie możemy nagrać komendy o tym samym znaczeniu wypowiadane innymi słowami. Program wykrywa automatycznie jeśli jedna z nowo nagranych komend będzie przypominała pod względem pobranych parametrów komendę, która już jest ulokowana w pamięci. Ma to za zadanie uniknięcie błędów wystawienia niewłaściwej komendy.
Rys.4.8. Wygląd i struktura EasyVR Commandera
Wykorzystanie i konfiguracja pinów I/O
Wolne piny wejścia/wyjścia mogą zostać wykorzystane z różnoraki sposób, od zapalenia diody LED, informującej o ustawieniu aktywności pinu po przesterowanie wejścia urządzenia zewnętrznego lub by odebrać sygnał wyjściowy z urządzenia zewnętrznego. Przed użyciem piny należy skonfigurować programowo, jest to proste
w językach C/C++ i zapewne byłoby możliwe w sterownikach PLC ale może być wykorzystane w dalszych badaniach nad sterowaniem głosowym tym modułem
w sterownikach PLC. By zaadaptować linie jako wyjście należy sprzętowo je skonfigurować, co pokazuje przykład na rysunku 4.9, gdzie mamy pokazaną konfigurację począwszy od założenia zwykłej diody, po napięcia 5 i 12V, budując wyjście 24V uzyskalibyśmy zakres wejść/wyjść zgodny ze sterownikiem Siemens. Podobną konfigurację przedstawia rysunek 4.10, dla wyłącznika oraz napięcia 5V, typowego dla urządzeń opartych na TTL (np. mikroprocesory).
Rys.4.9. Konfiguracja wyjść pinów I/O: dla diody LED (po lewo), na napięcia 5V (środek), dla napięcia 12V (po prawej) [4].
Rys.4.10. Konfiguracja wejść pinów I/O: dla przełącznika (po lewo), dla napięcia 5V (po prawo) [4].
Interfejs RS-232
Jest to interfejs, którego pierwotnym zadaniem było znormalizowanie połączeń między różnymi urządzeniami znakowymi w systemach komputerowych, powstał on
w 1962 roku, znormalizowany zaś 7 lat później jako standard RS-232C. Standard opracowano w celu normalizacji interfejsu pomiędzy urządzeniem komunikacyjnym dla danych (DCE) a urządzeniem końcowym dla danych (DTE). Transmisja odbywa się w trybie asynchronicznym, szeregowo [10]. Zilustrować przesył informacji można za pomocą wyobrażenia sobie go jako przesyłu paczek o z góry określonej objętości
i formacie mające sygnały początku i końca nadawania paczki. Szybkość transmisji
w bitach na sekundę to odwrotność to odwrotność czas trwania pojedynczego bitu, co nosi także nazwę odstępu jednostkowego. Długość pola danych to zakres od 5 do 8 bitów. Istnieje także bit, który można ustawić opcjonalnie w jednej z dwóch funkcji: kontrola parzystości lub kontrola nieparzystości. Koniec transmisji jest znaczony jednym lub dwoma bitami stopu (Rys.4.11).
Rys.4.11. Struktura ramki interfejsu RS-232 [11].
Bit kontroli parzystości przesyłany jest ostatni zaraz przed bitami stopu i jest jedną
z metod monitorowania czy przesył jest poprawny. Sprawdza ilość jedynek w polu danych i ustawia wartość tego bitu na „0” jeśli liczba jedynek jest parzysta, „1” jeśli jest nieparzysta, Bit kontroli nieparzystości działa odwrotnie.
Opis magistrali interfejsu
W interfejsie można spotkać dwa typowe dla niego złącza: 25-stykowe złącze typu CANNON DB-25P lub 9-stykowe złącze typu DB-9 (Rys.4.12). Różnica między nimi jest taka, że na DB-9 dostępne są tylko i wyłącznie najważniejsze sygnały do transmisji, całkowity opis magistrali znajduje się w tabeli 4.2 poniżej:
Tab.4.2. Wyprowadzenia sygnałów dla łącza RS-232C
DB-25 |
DB-9 |
Nazwa sygnału |
Oznaczenie |
1 |
- |
Masa ochronna |
C.GND |
2 |
3 |
Dane wysyłane |
TX |
3 |
2 |
Dane otrzymywane |
RX |
4 |
7 |
Gotowość wysłania danych |
RTS |
5 |
8 |
Gotowość przyjęcia danych |
CTS |
6 |
6 |
Gotowy zestaw danych |
DSR |
7 |
5 |
Masa sygnałowa |
SG |
8 |
1 |
Poziom sygnału odbieranego |
DCD |
9 |
- |
Napięcie testowe dodatnie |
- |
10 |
- |
Napięcie testowe ujemne |
- |
11 |
- |
Select Transmit Channel |
STF |
12 |
- |
Secondary Carrier Detect |
S.CD |
13 |
- |
Secondary Clear to Send |
S.CTS |
14 |
- |
Secondary Transmit Data |
S.TX |
15 |
- |
Transmission Signal Element Timing |
TC |
16 |
- |
Secondary Receive Data |
S.RX |
17 |
- |
Receiver Signal Element Timing |
RC |
18 |
- |
Local Loop Control |
LL |
19 |
- |
Secondary Request to Send |
S.RTS |
20 |
4 |
Urządzenie gotowe |
DTR |
21 |
- |
Remote Loop Control |
EL |
22 |
9 |
Sygnał dzwonienia |
RING |
23 |
- |
Wybór szybkości transmisji |
CH/CI |
24 |
- |
Transmit Clock Out |
XTC |
25 |
- |
Test Mode |
BUSY |
Rys.4.12. Złącza DB-9 oraz DB-25 [12].
Na potrzeby pracy dyplomowej rozważam tylko i wyłącznie złącze DB-9, którego linie można podzielić funkcyjnie na:
linie danych,
linie sterujące,
linie masy.
Linie danych to sygnały TX oraz RX. TX to sygnał danych nadawanych, wykorzystujemy go do przesyłania danych DTE, standard wymaga stanu „1” pomiędzy przesyłanymi ramkami danych. Dla transmisji w tym sygnale muszą być aktywne RTS, CTS, DTR, DSR. Linia RX to natomiast dane odbierane, wykorzystywanych do przesyłania danych przez DCE. Linia powinna być w stanie „1” gdy DCD jest w stanie pasywnym lub RTS jest aktywny. Liniami sterującymi to sygnały RTS, CTS, DSR, DTR, DCD oraz RING. RTS to linia żądania nadania, która gdy staje się aktywna oznacza zgłoszenie DTE do DCE żądanie wysłania danych, DCE załącza wtedy CTS inaczej dane nie zostaną przesłane. RTS nie może zostać włączony jeśli CTS jest aktywny. CTS zaś jest linią gotowości do nadania, za jej pomocą DCE zgłasza do DTE że jest w stanie odebrać od niego dane. Może również oznaczać gotowość nadawania sygnału do innego DCE. DSR to jedna z dwóch najistotniejszych linii sterowania, oznacza gotowość DCE do wymiany sygnałów sterujących w celu nawiązania połączenia, informuje ono że nie zaistniał żaden defekt na torze transmisyjnym. DTR to drugi najistotniejszy sygnał, oznacza gotowość DTE, rozumiany jak sygnał DSR tylko że w odniesieniu do DTE. DCD to poziom sygnału odbieranego informuje iż modem posiada prawidłową częstotliwość transmisyjną co do DTE. Ostatnią linią sterowania jest linia RING i jest wskaźnikiem dzwonienia lub inaczej mówiąc wywołania,
w przypadku specyficznego połączenia DTE z DCE oraz innym oddalonym DCE, DCE przy DTE informuje go że odbiera sygnał z oddalonego DCE. Z linii masy do czynienia w DB9 mamy tylko i wyłącznie z masą sygnałową, stanowiącą odniesienie dla wszystkich sygnałów interfejsu.
Kable w interfejsie RS-232
Problem z łącznością w protokole RS-232 zaczyna się kiedy chcemy go używać do czegoś innego niepołączenie terminalu (DTE) z modemem (DCE). Jeśli chcemy podłączyć urządzenie takie jak mikrokontroler, które może być i terminalem
i modemem jednocześnie musimy oprzeć się na sygnałach potwierdzających poprawności podłączenie, które wysyłają niektóre urządzenia (handshaking), jednak nie wszystkie urządzenia odpowiadają na te sygnały w przypadku ich otrzymania, niektóre w ogóle je ignorują. Niektóre problemy z połączeniem wynikają z problemu zwarcia nieodpowiednich wejść, kiedy to należy zastosować w kablu przelot z pinu 2 na 3, taki kabel nazywamy modemem zerowym. Nie wyczerpuje to niestety wszystkich możliwości, z różnorodności kabli i ich przeplotów. W praktyce możemy wyłonić następujące:
połączenie DTE z DCE, wymagające pełnego potwierdzenia poprawności połączenia (Rys.4.12),
połączenie DTE z DTE lub DCE z DCE, wymagające pełnego potwierdzenia poprawności połączenia (Rys.4.13), modem zerowy,
połączenie DTE z DCE, nie wymagające potwierdzenia poprawności połączenia, ponieważ każde urządzenie wysyła i odbiera własne sygnały potwierdzenia poprawności, o ile ich potrzebuje (Rys.4.14),
połączenie DTE z DTE lub DCE z DCE, nie wymagające potwierdzenia poprawności połączenia, ponieważ każde urządzenie wysyła i odbiera własne sygnały potwierdzenia poprawności, o ile ich potrzebuje (Rys.4.15).
Rys.4.13. Kabel połączeniowy RS-232 terminala z modemem, z potwierdzeniem poprawności połączenia.
Rys.4.14. Kabel połączeniowy RS-232 urządzeń tego samego typu, z potwierdzeniem poprawności połączenia.
Rys.4.15. Kabel połączeniowy RS-232 DTE z DCE.
Rys.4.16. Kabel połączeniowy RS-232 urządzeń tego samego typu.
Tryby pracy interfejsu RS-232
Tryby pracy interfejsu RS-232 zależą od kierunkowości transmisji między terminalem a modemem lub urządzeniami tego samego typu, dzielimy je na:
Dupleks - transmisja między urządzeniami odbywa się w obu kierunkach w tym samym czasie,
Półdupleks - transmisja między urządzeniami odbywa się w obu kierunkach naprzemiennie,
Simpleks - transmisja między urządzeniami odbywa się w tylko w jednym kierunku.
Z trybami pracy interfejsu RS-232 łączy się pojęcie kontroli przepływu. Kontrola ta poruszana została w poprzednich podrozdziałach gdzie była mowa o sygnałach RTS oraz CTS. Kontrolę taką nazywamy sprzętową kontrolą przepływu. Sygnał CTS zostaje dezaktywowany w urządzeniu, które nie może chwilowo odebrać danych i aż do ponownej aktywacji linii sygnału CTS zatrzymuje przepływ kolejnych znaków. Sytuacja, w której urządzenie nie mogłoby odebrać danych to np. pełny bufor odbiorczy. W sprzętowej kontroli przepływu wykorzystuje się wszystkie linie sygnałowe opisane w poprzednich podrozdziałach. Istnieje także druga odmiana kontroli przepływu: programowa, prowadzona przez protokół interfejsu RS-232: XON/XOFF. Programowa kontrola przepływu polega wysyłaniu do urządzenia transmitującego specjalnego znaku, służącego do sterowania tym urządzeniem, znak ten może zatrzymać lub wznowić transmisje. W programowej kontroli przepływu nie potrzeba jest użycia wszystkich sygnałów, wystarczą linie RX oraz TX, natomiast wymogiem działania tego trybu jest transmisji w trybie dupleksu.
Implementacja sterowania głosowego w sterowniku PLC
Wybrany przeze mnie sterownik jak już wspomniałem w poprzednim rozdziale to sterownik Siemens z rodziny S7-1200 to jeden z najlepszych sterowników PLC ze względu na niską cenę, konstrukcję możliwą o rozbudowę przez dołączanie dodatkowych modułów, według potrzeb programującego, baza rozkazów jest także bardzo bogata. Oprogramowanie Siemens Simatic Professional: TIA Portal V11 jest rozbudowanym oprogramowaniem do konfiguracji połączenia między komputerem osobistym a sterownikiem, istnieje możliwość w programowania w trzech dedykowanych językach programowania dla sterowników PLC: STL, LAD, FBD, konfigurowanie i programowanie ekranów HMI. Program posiada bardzo obszerną pomoc help, która w mojej pracy dyplomowej bardzo pomogła mi w zrozumieniu problemu programowania. Oprogramowanie jest kompatybilne z systemem Windows, przy tym także z dwoma jego najpopularniejszymi wersjami Windows XP oraz Windows 7 w obu wersjach: x32 oraz x64.
W pracy dyplomowej całość sterowania głosowego sterownikiem PLC wykonywałem na sterowniku Siemens o jednostce centralnej CPU 1214C DC/DC/DC (Rys.4.17a).
Rys.4.17. Produkty Siemens: a) jednostka centralna, b) moduły komunikacyjne RS-232 (złącze żeńskie-po lewo, złącze męskie-po prawo) [13].
Jest to jednostka posiadająca:
14 wejść cyfrowych 24V prądu stałego,
10 wyjść cyfrowych 24V prądu stałego,
2 wejścia analogowe 0-10V prądu stałego,
50kB pamięci roboczej.
Wraz z jednostką centralną wybrałem moduł komunikacyjny w komunikacji punkt-punkt (point-to-point) Siemens CM 1241 - RS232 ze złączem DB-9 (męskim) (Rys.4.17b).
Komunikacja Point-to-Point
Komunikacja punkt-punkt dla sterownika Siemens S7-1200 jest oparta na dwóch modułach komunikacyjnych, RS-232 oraz RS-485. Protokół punkt-punkt dla znakowej transmisji szeregowej umożliwia swobodne programowanie z użyciem protokołu Point-to-Point. Moduł we współpracy z tym protokołem umożliwia wysyłanie i odbieranie informacji bezpośrednio z urządzeniami zewnętrznymi w trybach pracy interfejsu RS-232 (Rys.5.1).
Rys.5.1. Schemat współdziałania modułów komunikacyjnych ze sterownikiem [14].
W sterowniku Siemens można podłączyć aż do 3 modułów komunikacyjnych RS-232 lub RS-485, które tworzą interfejs elektryczny komunikacja punkt-punt. Instaluje je się z lewej strony jednostki centralnej.
Konfiguracja portów modułu komunikacyjnego RS-232
W programie TIA Portal w drzewie projektu po ustawieniu Device configuration we właściwościach (Properties) modułu komunikacyjnego można skonfigurować port modułu (rys.5.2).
Rys.5.2. Ustawienia konfiguracji portu modułu komunikacyjnego RS232 w TIA Portal.
Objaśnienie poszczególnych elementów konfiguracji portu:
Szybkość transmisji (ang. Transmission rate.): można ustawić w module: 300 bodów; 600 bodów; 1,2 kbps; 2,4 kbps; 4,8 kbps; 9,6 kbps; 19,2 kbps; 28,4 kbps; 57,6 kbps; 76,8 kbps; 115,2 kbps,
Parzystość (ang. Parity): wartość kontrolująca poprawność przesyłanych bloków danych, możliwe do ustawienia: brak parzystości, parzystość ujemna, parzystość dodatnia, znak (bit parzystości zawsze równy 1), spacja (bit parzystości zawsze równy 0),
Bity danych (ang. Data bits): ilość bitów danych w jednej ramce, protokół RS-232 przewiduje 5-8 bitów danych, moduł Siemens'a jednak obsługuje tylko zakres 7-8 bitów, z uwagi na niezwykle rzadkie używanie przesyłu informacji
o mniejszej liczbie bitów danych,
Bity stopu (ang. Stop bits): ilość bitów stopu na końcu ramki, świadczące
o zakończeniu nadawania danego bloku danych, możliwe do ustawienia: 1 lub 2,
Sterowanie przepływem (ang. Flow control): w module RS232 można ustawić sprzętową lub programową kontrole przepływu danych (w RS-485 nie występuję). W sprzętowej gotowość do wysłania (RTS) sygnał mamy na wyjściu pinu 7 a gotowość do odbioru odbierana jest z pinu 8. Opcjonalnie sterowanie przepływem jest ustawione na nie wykorzystywane None, natomiast do wyboru są: sterowanie programowe lub dwa sterowania sprzętowe.
W przypadku wyboru sterowania programowego XON/XOFF możemy ustawić od razu wartości XON (opcjonalnie 11) oraz XOFF (opcjonalnie 13) w konfiguracji portu w HEX'ie oraz w ASCII. Gdy mamy urządzenie które stosuje tylko linie RX oraz TX należy zastosować ten typ przepływu pamiętając, że wymogiem działania tego trybu jest transmisji w trybie dupleksu czyli transmisja między urządzeniami odbywa się w obu kierunkach w tym samym czasie.
W sterowaniu sprzętowym z przełączanym RTS'em (ang. Hardware RTS always switched). w celu wysłania danych moduł aktywuje linie sygnałową RTS i czeka aż na linii sygnału CTS dostanie sygnał aktywacji od urządzenia, gdy dostanie sygnał od urządzenia będący aktywnym sygnałem CTS moduł nadaje tak długo jak ten sygnał jest aktywny. W sterowaniu sprzętowym z zawsze włączonym RTS'em (ang. Hardware RTS always ON) moduł wystawia aktywny sygnał RTS a urządzenie zewnętrzne od razu nadaje bloki danych do modułu komunikacyjnego. Opcja ta daje możliwość nadawania
z urządzenia zewnętrznego do modułu w każdym momencie, kiedy tylko urządzenie ma do przesłania jakikolwiek blok danych. Jedyną wadą tej metody jest konieczność monitorowania przez samo urządzenie, aby nie wysłać zbyt wielu danych co mogłoby przepełnić bufor modułu, co spowodowałoby błąd
w programie.
Czas oczekiwania (ang. Wait time): Zakres wynosi od 0 do 65535 ms, jest to czas oczekiwania modułu na otrzymanie sygnału CTS po aktywacji sygnału RTS, lub oczekiwanie modułu na otrzymanie sygnału XON po aktywacji sygnału XOFF. Jeśli CTS lub XON nie zostaną nadane po tym czasie moduł zwraca do programu błąd.
Konfiguracja parametrów nadawczych
Jest to sposób w jaki moduł komunikacyjny nadaje sygnał do urządzenia zewnętrznego. Często z uwagi na brak informacji o sposobie przesyłania, formacie ramek a także bez wiedzy o tym jakich danych mamy się spodziewać
z pomocą może nam przyjść instrukcja monitorująca opisana w późniejszych podrozdziałach.
Rys.5.3. Ustawienia konfiguracji nadawczych wiadomości modułu komunikacyjnego RS232 w TIA Portal.
Objaśnienie poszczególnych elementów:
Opóźnienie RTS ON (ang. RTS ON delay): jest to czas opóźniania między załączeniem RTS a początkiem nadawania,
Opóźnienie RTS OFF (ang. RTS OFF delay): jest to czas opóźnienia między końcem nadawania a dezaktywowaniem linii RTS,
Wysłanie przerwy na początku wiadomości (ang. Send break at message start): jest to możliwość wysłania przerwy na początku każdego bloku informacji. Warunkami są aby upłynął czas RTS ON delay a także sygnał linii CTS był aktywny. W miejscu Number of bit times in a break (ang. liczba czasów trwania bitu w przerwie) ustawiamy ile czasów trwania bitu będzie trwała nasza spacja (domyślną wartością jest 40 czasów a maksymalnie 65 535 ale mniej niż 8 sekund),
Wysłanie pustego wiersza po przerwie (ang. Send idle line after a break): jeśli wybraliśmy przerwę na początku wiadomości, mamy opcję umieszczenia także pustego wiersza zaraz po spacji. W miejscu pustego wiersza po przerwie (ang. Idle Line after a break) wpisujemy jaka liczba czasów trwania bitu będzie składała się na pusty wiersz,
Konfiguracja parametrów odbiorczych
Właściwości konfiguracji parametrów odbiorczych, podobnie jak przy wysyłaniu wiadomości dają nam możliwość określenia warunków rozpoznawania ich początku
i końca. Konfiguracja odbierania wiadomości jest o wiele bardziej złożona od poprzedniej konfiguracji.
Rys.5.4. Ustawienia konfiguracji odbiorczych początku wiadomości modułu komunikacyjnego
RS-232 w TIA Portal.
Objaśnienie poszczególnych elementów początku wiadomości odbieranej:
Start na dowolny znak (ang. Start on any character): oznacza iż jakikolwiek znak, który pojawi się na wejściu modułu komunikacyjnego będzie uważany za początek wiadomości. Nie określenie znaku początku może skutkować tym, iż jakikolwiek znak, będący nawet zakłóceniem, lub przypadkowo wysłanym znakiem przez urządzenie będzie odbierany jako początek wiadomości. Jest to domyślne ustawienie w przypadku kiedy nie wiemy jakiego rodzaju ramki się spodziewamy i jakie znaki zostaną przekazane od urządzenia.
Start na warunek specjalny (ang. Start on special condition): oznacza przyjęcie wiadomości pod warunkiem wystąpienia w nim określonego znaku lub elementu jak pusty wiersz, znak podziału wiersza, konkretnego znaku lub ciągu znaków. Aby to dobrze zobrazować można podzielić te warunki według priorytetu jak na rysunku poniżej (rys.5.5).
Rys.5.5. Kolejność sprawdzania warunków odbiorczych
Rozpoznanie startu wiadomości poprzez podział wiersza (ang. Recognize message start with broken line): oznacza, że jeżeli moduł komunikacyjny odbierze wiadomość, na której początku pojawi się wiersz danych składających się z samych spacji, których czas trwania będzie dłuższy niż jeden znak to znaczy iż jest to początek wiadomości, każdy inny znak przed wierszem podziału zostanie zignorowany,
Rozpoznanie startu wiadomości poprzez pusty wiersz (ang. Recognize message start with idle line): oznacza, że jeżeli moduł komunikacyjny odbierze wiadomość, na której początku pojawi się pusty wiersz o czasie dłuższym niż krotność określona parametrem czasu pustej linii (ang. Idle line time). Po tym czasie musi nastąpić inny z określonych warunków np. odebranie dowolnego znaku (rys.5.6),
Rys.5.6. Diagram przedstawiający działanie rozpoznawania pustym wierszem: 1 - znak, 2- restart licznika czasu odliczający czas potrzebny by zakwalifikować pusty wiersz jako warunek, 3- wykrycie pustego wiersza [14].
Rozpoznanie startu wiadomości po pojedynczym znaku (ang. Recognize message start with single character): oznacza, że jeżeli moduł komunikacyjny odbierze wiadomość, na której początku pojawi się określony znak startu wiadomości (ang. Message start charakter). Znak ten określamy w liczbie heksadecymalnej, domyślnie wybrana jest wartość „2” (w ASCII: STX - rozwinięcie skrótu Start of Text)
Rozpoznanie startu wiadomości po sekwencji znaków (ang. Recognize message start with a character sequence): oznacza, że jeżeli moduł komunikacyjny odbierze wiadomość, na której początku będzie ciąg znaków w liczbie maksymalnie 5. Możemy wybrać do 4 sekwencji, wybór zaznaczamy w polu liczby sekwencji znaków do zdefiniowania (ang. Number of character sequences to definie), z czego dla każdej możemy sprecyzować 5 znaków, nie wszystkie ze znaków musza być sprawdzane, istnieje możliwość sprawdzenia tylko wybranych znaków w sekwencji (rys.5.7)
Rys.5.7. Okno ustalania znaków w sekwencji rozpoznawania startu wiadomości.
Koniec odbierania wiadomości także można sprecyzować w module komunikacyjnym RS-232 w podobny sposób jak omówione to było z początkiem wiadomości (rys.5.8):
Rys. 5.8. Ustawienia konfiguracji odbiorczych końca wiadomości modułu komunikacyjnego RS-232
w TIA Portal.
Objaśnienia poszczególnych elementów końca wiadomości:
Rozpoznanie końca wiadomości po upływie limitu czasu (ang. Recognize message end by message time out): oznacza, że jeśli upłynie czas zdefiniowany limitem czasu wiadomości (ang. Message timeout), czas liczymy od spełnienia któregokolwiek z warunków startu wiadomości (rys.5.9)
Rys.5.9. Diagram działania warunku końca wiadomości przy limicie czasu wiadomości:
1 - odebrane znaki, 2 - spełnienie warunku początku wiadomości, 3 - timer zliczył czas i kończy wiadomość [14].
Rozpoznanie końca wiadomości po upływie limitu czasu odpowiedzi (ang. Recognize message end by response time out): oznacza, że mimo niespełnienia, któregokolwiek z warunków startu minął zdefiniowany limit czasu oczekiwania na odpowiedz (ang. Response timeout, na rysunku 5.10 zaznaczony jako RCVTIME). W przeciwieństwie do poprzedniego elementu tutaj odliczanie zaczyna się w momencie zakończenia transmisji (rys.5.10),
Rys.5.10. Diagram działania warunku końca wiadomości przy limicie czasu odpowiedzi: 1- wysłane znaki, 2- odebrane znaki, 3 - pomyślne odebranie pierwszego znaku [14].
Rozpoznanie końca wiadomości po przerwie pomiędzy znakami (ang. Recognize message end by inter-character gap): oznacza, że po upłynięciu limitu czasu pomiędzy znakami (ang. Inter-character gap timeout) między dwoma kolejnymi znakami następuje koniec wiadomości (rys.5.11),
Rys.5.11. Diagram działania warunku końca wiadomości po przerwie pomiędzy znakami:
1 - odebrane znaki, 2- restartowanie zegara, 3 - zegar międzyznakowy zliczył ustalony czas [14].
Rozpoznawanie końca wiadomości po maksymalnej długości (ang. Recognize message end by max lenght): oznacza, że po odebraniu liczby znaków zdefiniowanej w maksymalnej długości wiadomości (ang. Maximum lenght of message) nastąpi koniec wiadomości. Jeśli zostanie spełniony także któryś z innych warunków końca wiadomości a nie została osiągnięta maksymalna liczba znaków, poprawne znaki zostaną włączone do wiadomości.
Odczyt długości wiadomości z wiadomości (ang Read message lenght from message): oznacza, że możemy odczytać informacje o długości wiadomości w niej zawartą. Jeśli moduł komunikacyjny otrzyma wiadomość o określonej długości nastąpi jej koniec. Aby móc wybrać ten warunek należy określi trzy parametry długości wiadomości: pozycja znaku zawierającego informacje o długości (ang. Offset of lenght field in message), rozmiar długości pola (ang. Size of lenght field) oraz dane występujące po informacji o długości pola nie wliczane do długości (ang. Data following lenght field not counted in message field).
Rozpoznanie końca wiadomości po sekwencji znaków (ang. Recognize message end with character sequence): jest to analogiczny jak w rozpoznawaniu początku wiadomości sekwencją znaków sposób rozpoznawania końca wiadomości poprzez ustawienie sekwencji znaków.
Tryby pracy komunikacji punk-punkt
Oprócz skonfigurowania urządzenia należy zapoznać się z unikalnymi instrukcjami stworzonymi na potrzeby modułów komunikacyjnych w sterownikach Siemens. Są to instrukcje konfiguracyjne, które będą przedstawione tu tylko ogólnie ze względu na to, że spełniają te same funkcje to opisywane powyżej konfiguracje modułu, instrukcje komunikacyjne oraz instrukcje pomocnicze. W zależności od tego z jakim urządzeniem współpracuje sterownik może on działać jako urządzenie typu „master” lub „slave”, tryby te profesjonalnie nazywają się architekturą odpytywania:
tryb „master”: sekwencja odpytywania powinna zaczynać się instrukcją SEND_PTP, służącą do nadawania. Sterownik jako urządzenie „master” tak jakby wydaje rozkazy urządzeniu zewnętrznemu typu „slave”. Instrukcje powtarzane zostają, dzięki temu mają możliwość monitorowania statusu transmisji w celu uzyskania odpowiedzi o jej końcu, wtedy sterownik wykonuje instrukcje RCV_PTP służącą do odczytywania danych z zewnętrznego urządzenia. Instrukcja powtarza się wielokrotnie aż do momentu spełnienia warunków końca wiadomości,
tryb „slave”: za pomocą instrukcji RCV_PTP odczytywane są informacje
z urządzenia o typie „master”, odbieranie zaczyna się po spełnieniu warunków początkowych wiadomości. Gdy zostaną spełnione także warunki końca wiadomości oznacza to, że sterownik może zacząć nadawać odpowiedź za pomocą instrukcji SEND_PTP.
Instrukcje konfiguracyjne
Instrukcje konfiguracyjne służą do zmiany konfiguracji modułu komunikacyjnego na inną niż ustawianą we właściwościach modułu. Zmiany wprowadzane za pomocą instrukcji konfiguracyjnych nie są stale pamiętane przez sterownik PLC:
Instrukcja PORT_CFG (Rys.5.12) - jest instrukcją służącą do zmiany konfiguracji własności portów ustawianych w Port configuration. Wejście REQ inicjalizuje operację bloku, jest aktywowane zboczem narastającym. Wejście PORT jest to identyfikator portu, który możemy znaleźć we właściwościach modułu komunikacyjnego pod nazwą identyfikator sprzętowy (ang. Hardware identifier). Wejście PROTOCOL nie ma zastosowania, wartość domyślna to „0”, być może znajdzie zastosowanie w przyszłości. Wyjście DONE ma wartość „1” gdy żądana operacja została zakończona bez błędu w danym cyklu programu. Wyjście ERROR ma wartość „1” gdy żądana operacja zakończyła się błędem w danym cyklu programu. Wyjście STATUS informuje o kodzie błędu lub prezentuje bieżący stan danego bloku i zostanie opisane w późniejszej części pracy. Reszta wejść odpowiadają parametrom opisanym w podrozdziale konfiguracji portu i zapisane są w tabelce 5.1:
Tab.5.1. Odpowiedniki wejść instrukcji PORT_CFG
Nazwa wejścia |
Parametr w zakładce Port Configuration |
BAUD |
Transmission rate |
PARITY |
Parity |
DATABITS |
Data bits |
STOPBITS |
Stop bits |
FLOWCTRL |
Flow control |
XONCHAR |
XON character |
XOFFCHAR |
XOFF character |
WAITTIME |
Wait time |
Rys.5.12. Instrukcja PORT_CFG
Instrukcja SEND_CFG (Rys.5.13) - jest instrukcja pozwalającą konfigurować parametry z zakładki Configuration of transmitted message właściwości modułu komunikacyjnego. Wejścia REQ, PORT oraz wyjścia DONE, ERROR i STATUS posiadają dokładnie te same funkcje co w opisie instrukcji PORT_CFG. Reszta wejść odpowiadają parametrom porównanym w tabelce 5.2 poniżej:
Tab.5.2. Odpowiedniki wejść instrukcji SEND_CFG
Nazwa wejścia |
Parametr w zakładce Configuration of transmitted message |
RTSONDLY |
RTS ON delay |
RTSOFFDLY |
RTS OFF delay |
BREAK |
Send break at message start |
IDLELINE |
Send idle line after a break |
Rys.5.13. Instrukcja SEND_CFG
Instrukcja RCV_CFG (Rys.5.14) - jest instrukcja pozwalającą konfigurować parametry z zakładki Configuration of received message właściwości modułu komunikacyjnego. Wejścia REQ, PORT oraz wyjścia DONE, ERROR i STATUS posiadają dokładnie te same funkcje co w opisie instrukcji PORT_CFG. Wejście CONDITIONS jest wejściem określającym warunki początkowe i końcowe
z bazy danych dołączanej do instrukcji RCV_CFG. Dokładny sposób konfiguracji tego pola jest opisany w instrukcji obsługi do sterownika, choć dzięki pomocnemu trybowi TIA Portal podsuwania podpowiedzi do wyboru stałej wejścia można to wejście skonfigurować intuicyjnie.
Rys.5.14. Instrukcja RCV_CFG
Instrukcja SEND_PTP
Jest to jedna z dwóch najważniejszych instrukcji w komunikacji punkt-punkt. Przesyła określony uprzednio bufor do modułu komunikacyjnego w naszym przypadku RS-232 (Rys.5.15). Wejścia REQ, PORT oraz wyjścia DONE, ERROR i STATUS posiadają dokładnie te same funkcje co w opisie instrukcji PORT_CFG. Wejście BUFFER wskazuje położenie początku buforu w bloku danych. Wejście LENGHT definiuje długość nadawanego bloku, zaś wejście PTRCL ustala czy bufor modułu posiada protokoły point-to-point czy inne protokoły Siemensa.
Rys.5.15. Instrukcja SEND_PTP
Instrukcja podczas procesu nadawania między sterownikiem a urządzeniem zewnętrznym ustawia wyjścia DONE oraz ERROR jako „FALSE”, dopiero po zakończeniu nadawania, w zależności od wyniku: czy proces nadawania przebiegł poprawnie, czy pojawił się błąd wyjście DONE lub ERROR zmieniają wartość na „TRUE” na czas danego cyklu programowego. Wyjście STATUS pokazuje, niezależnie od wyniku czy operacja zakończyła się wysłaniem lub błędem, aktualny status instrukcji lub kod błędu. Obrazując tą zasadę działania objaśnię rysunek 5.16. Na rysunku przedstawiono zależności między parametrami przy poprawnym wykonaniu instrukcji w danym cyklu. Status wskazuje iż urządzenie przed przerwaniem REQ nie jest zajętę. Następuje uruchomienie instrukcji zboczem narastającym REQ. STATUS pokazuje iż następuje pierwsze wywołanie (moduł jest zajęty przyjmowaniem żądania) a po nim kolejne dwa wywołania (moduł jest zajęty podczas odpytywania). Gdy moduł skończy nadawać i nie pojawi się żaden błąd aktywuje się wyjście DONE, a na czas aktywacji STATUS zmienia wartość na „16#0000”.
Rys.5.16. Diagram nadawania instrukcji SEND_PTP
Instrukcja RCV_PTP
Druga z najważniejszych instrukcji w komunikacji punkt-punkt. Odbiera wiadomości poprzez moduł komunikacyjny (Rys.5.17). Wejście PORT oraz wyjścia ERROR i STATUS posiadają dokładnie te same funkcje co w opisie instrukcji PORT_CFG. Wejście BUFFER pełni tą samą funkcje co w poprzedniej instrukcji. EN_R jest wejściem działającym na stan wysoki, pełni tą samą funkcję co REQ. Wyjście NDR przyjmuje wartość „TRUE” jeśli w danym cyklu programu gdy dane zostały odczytane bezbłędnie. LENGHT określa długość odczytanej wiadomości.
Rys.5.17. Instrukcja RCV_PTP.
Instrukcje pomocnicze
Instrukcje pomocnicze nie służą ani do konfigurowania urządzenia ani do komunikacji. Nie mniej jednak są przydatne w wielu sytuacjach i pomagają rozwiązać problemy powstałe podczas programowania modułu komunikacyjnego z urządzeniem.
Instrukcja RCV_RST (Rys.5.18) - służy do kasowania bufora wiadomości odebranych. Działa na zbocze narastające REQ, wejście PORT oraz wyjścia DONE, ERROR i STATUS jak w poprzednich przykładach instrukcji.
Rys.5.18. Instrukcja RCV_RST.
Instrukcja SGN_GET (Rys.5.19) - służy do monitorowania stanów sygnałów. Wejścia REQ, PORT oraz wyjścia NDR, ERROR i STATUS tak jak
w poprzednich przykładach. Wyjścia: DTR - oznacza iż terminal jest gotowy do użycia, DSR - oznacza, iż urządzenie zewnętrzne jest gotowe do użycia. RTS - oznacza iż moduł jest gotowy do wysłania danych do urządzenia zewnętrznego, CTS - oznacza, że modem jest gotowy do odbierania danych, DCD - oznacza, że odebrany został sygnał nośny, zaś RING - oznacza, że modem sygnalizuje przychodzenie wywołania.
Rys.5.19. Instrukcja SGN_GET.
Instrukcja SGN_SET (Rys.5.20) - służy do ustawiania sygnałów linii sygnałowych protokołu RS-232. Wejścia REQ, PORT oraz wyjścia DONE, ERROR, STATUS tak jak w poprzednich przykładach. Wejście SIGNAL służy do wyboru sygnału jaki zostanie ustawiony, do wyboru mamy sygnały: RTS, DTR, DSR. Wyjścia: RTS oznacza, iż terminal jest gotowy do nadania transmisji, DTR oznacza, iż terminal jest gotowy, DSR oznacza, iż modem jest gotowy do komunikowania.
Rys.5.20. Instrukcja SGN_SET.
Status i kody warunkowe
Status to jedno z najważniejszych wyjść, wraz z wyjściami DONE, NDR i ERROR daje pełen obraz o tym jak działają instrukcje, moduł komunikacyjny lub urządzenie zewnętrzne. Reprezentacja bitowa dla statusu pokazana została na rysunku 5.21:
Rys.5.21. Reprezentacja bitowa statusu [14].
Odpowiedzi statusu to nie tylko całkowita informacja o zaistniałych błędach ale także o tym jaką prace w danym momencie wykorzystuje urządzenie. Wszystkie kody warunkowe zostały zebrane z instrukcji obsługi sterownika [14] (Tab.5.3)
Tab.5.3. Wartości parametru STATUS dla komunikacji punkt-punkt.
Błąd |
STATUS |
Opis |
Wspólne kody warunkowe |
0000 |
Brak błędu |
|
8x3A |
Nielegalny wskaźnik o parametrze x |
|
8070 |
Całkowita pamięć wewnętrzna jest w użyciu |
|
8080 |
Brak poprawnego numeru portu |
|
8081 |
Przekroczenie limitu czasu lub błąd wewnętrzny |
|
8082 |
Parametryzacja nie powiodła się |
|
8083 |
Przepełnienie bufora |
|
8090 |
Błędna długość wiadomości lub nieprawidłowa |
|
8091 |
Błędna wersja wiadomości parametryzacji |
|
8092 |
Błędna długość rekordu wiadomości parametryzacji |
PORT_CFG |
80A0 |
Określony protokół nie istnieje |
|
80A1 |
Określona prędkość transmisji nie istnieje |
|
80A2 |
Określona opcja parzystości nie istnieje |
|
80A3 |
Określona liczba bitów nie istnieje |
|
80A4 |
Określona liczba bitów stopu nie istnieje |
|
80A5 |
Określony typ sterowania przepływem nie istnieje |
SEND_CFG |
80B0 |
Nie dozwolona konfiguracja przerwania transmisji |
|
80B1 |
Czas trwania przerwy większy niż dozwolony |
|
80B2 |
Czas trwania pustego wiersza większy niż dozwolony |
RCV_CFG |
80C0 |
Wybrany warunek startowy jest nieprawidłowy |
|
80C1 |
Źle wybrany warunek końcowy |
|
80C2 |
Niedozwolony odbiór uaktywnionego przerwania |
SEND_PTP |
80D0 |
Nowe żądanie w trakcie aktywnej transmisji |
|
80D1 |
Brak CTS w ustalonym czasie oczekiwania |
|
80D2 |
Brak DSR z modemu |
|
80D3 |
Przepełnienie kolejki |
|
7000 |
Nie zajęty |
|
7001 |
Zajęty w czasie przyjmowania żądania |
|
7002 |
Zajęty podczas odpytywania |
RCV_PTP |
0000 |
Brak bufora |
|
80E0 |
Przepełnienie bufora odbiorczego |
|
80E1 |
Błąd parzystości |
|
80E2 |
Błąd ramkowania |
|
80E3 |
Błąd przepełnienia |
|
80E4 |
Obliczona długość przewyższa rozmiar bufora |
|
0094 |
Odebrano maksymalną liczbę znaków |
|
0095 |
Przekroczenie limitu czasu wiadomości |
|
0096 |
Przekroczenie limitu czasu międzyznakowego |
|
0097 |
Przekroczenie limitu czasu odpowiedzi |
|
0099 |
Spełnienie warunku sekwencji końcowej |
SGN_GET SGN_SET |
80F0 |
Sygnały nie są dostępne. CM to moduł RS485 |
|
80F1 |
Nie można ustawić DSR, CM jest DTE |
|
80F2 |
Nie można ustawić DTR, CM jest DCE |
Analiza sygnałów w komunikacji z EasyVR
Podłączenie nieznanego urządzenie (tutaj jest to moduł głosowy EasyVR) do portu RS-232 wymaga znajomości parametrów konfiguracyjnych portu. Najczęściej są to: szybkość transmisji 9,6 kbps, brak parzystości, 8 bitów danych, 1 bit stopu i programowe sterowania przepływem XON/XOFF. Niezbędne jest również terminal z oprogramowaniem, które komunikuje się z tym urządzeniem tutaj jest to EasyVR Commander. Do urządzenia należy wczytać polecenia głosowe jakie będą stosowane we współpracy ze sterownikiem. W tym celu nagrano dwa polecenia „Start” oraz „Stop”.
Do ustalenia co jest wysyłane do urządzenie a co odbierane z niego niezbędny jest drugi program który umożliwi podglądnąć te dane. Może to być dowolny monitor RS232 tutaj wybrano Free Serial Port Monitor firmy HDD Software. Należy pamiętać żeby zawsze jako pierwszy włączyć monitor.
Tab.5.4. Lista najistotniejszych komend EasyVR
Komenda [HEX] |
Typ |
Opis |
b (62h) |
I |
Przerwanie wykonywanego działania |
s (73h) |
I |
Włączenie trybu uśpienia |
v (76h) |
I |
Ustawienie poziomu rozpoznawania głosu |
l (6Ch) |
I |
Zmiana języka komend wbudowanych |
o (6Fh) |
I |
Ustawienie limitu czasu rozpoznawania |
i (69h) |
I |
Ustawienie grupy roboczej komend wbudowanych |
d (64h) |
I |
Aktywowanie rozpoznawania głosowego |
y (79h) |
I |
Ustawienie opóźnienia transmisji |
a (61h) |
I |
Ustawienie szybkości transmisji |
q (71h) |
I |
Aktywowanie pinów I/O |
w (77h) |
O |
Wejście w stan przebudzenia |
d (64h) |
O |
Wysłanie argumentu |
e (65h) |
O |
Błąd rozpoznawania głosu |
v (76h) |
O |
Niepoprawny argument lub komenda |
t (74h) |
O |
Upłynięcie limitu czasu |
o (6Fh) |
O |
Status poprawności wykonania czynności |
r (72h) |
O |
Odczyt komend programowalnych powiódł się |
Tab.5.5. Lista argumentów komendy aktywowania rozpoznawania głosem EasyVR
Argument |
Grupa robocza |
A |
Grupa 1: Słowa zatrzaski |
B ÷ P |
Grupy 2-15: Słowa zwykłe |
R |
Grupa 16: Hasła |
Analiza poprawnie wykonanej transmisji z rozpoznaniem głosu
Słowo „start” mieści się w pierwszej grupie roboczej słów programowalnych, zostało dwukrotnie przetrenowane. Analiza poprawnej transmisji tego słowa wygląda następująco:
terminal wysyła żądanie „dB” (64h 42h) (komenda z tabeli 5.4 i argument z tabeli 5.5),
moduł EasyVR odpowiada „r” (72h) (komenda z tabeli 5.4)
terminal wysyła znak spacji „ „ (20h),
moduł EasyVR odpowiada argumentem „A” (41h) (pierwsze na liście ma oznaczenie A (41h) czyli „Start” oraz B (42h) czyli „Stop”
Analiza niepoprawnych transmisji rozpoznania głosu
Badania wykonane zostaną jak uprzednio, z tym iż celowo słowo zostanie powiedziane źle lub niewypowiedziane w ogóle. By zbadać najbardziej typowe odpowiedzi jakich możemy się spodziewać przy błędnym rozpoznaniu głosu:
terminal wysyła żądanie „dB” (64h 42h),
moduł EasyVR odpowiada „e” (65h),
terminal wysyła znak spacji „ „ (20h),
moduł EasyVR odpowiada argumentem „B” (42h),
terminal wysyła znak spacji „ „ (20h),
moduł EasyVR odpowiada argumentem „B” (42h),
W tym przypadku zostało wypowiedziane słowo spoza bazy słów. Moduł wykrywa błąd zwracając odpowiednią komendę do terminalu (Tab.5.6). Terminal dwukrotnie pobiera argument błędu, który daje 8-bitowy kod błędu (80h), który po porównaniu do tablicy błędów poniżej wyjaśnia iż użyliśmy słowa niepasującego parametrycznie do żadnego nagranego w bazie.
Tab.5.6. Tablica błędów urządzenia EasyVR
Argument |
Opis |
03h |
Za duży szum |
04h |
Powiedziane za cicho |
05h |
Powiedziane za głośno |
06h |
Powiedziane za wcześnie |
07h |
Zbyt złożona wypowiedź |
11h |
Rozpoznawanie nieudane |
12h |
Wynik rozpoznawania wątpliwy |
13h |
Możliwy wynik rozpoznawania |
14h |
Błędna komenda przechowywana w pamięci |
17h |
Zły model trwania |
4Ah |
Zły numer odtwarzania |
4Eh |
Błędna kompresja |
80h |
Rozpoznawany dźwięk nie znajduje się w słowniku/bazie słów |
Błędy widać dzielą się na spowodowane złym sposobem mówienia (03h-07h), błędami przechowywanych danych lub niewystarczającą rozpoznawalnością słowa (11h-13h), błędami pamięci (14h-17h), błędami tablicy dźwięków (4Ah-4Eh), oraz błąd wynikający z faktu, że słowa nie ma w słowniku (80h).
W przypadku gdy podczas rozpoznawania nie powiemy nic, limit czasu upłynie transmisja będzie wyglądać następująco:
terminal wysyła żądanie „dB” (64h 42h),
odpowiedź modułu to „t” (74h).
W tym przypadku mamy do czynienia z bezargumentowym rozkazem statusu, który informuje terminal iż limit czas trwania sesji rozpoznawania głosu upłynął.
Program do komunikacji sterownika PLC z modułem EasyVR
Program do komunikacji sterownika z modułem komunikacyjnym RS-232
z modułem rozpoznawania głosu EasyVR jest zwieńczeniem tej pracy dyplomowej. Składać się będzie głównie z omówionych już bloków, konfiguracja poszczególnych modułów jest o tyle ważna, że interfejs RS-232 jest bardzo rozbudowanym interfejsem. Urządzenie interesu UART TTL do EasyVR opiera łączność tylko i wyłącznie na liniach TX oraz RX bez potwierdzenia poprawności przesyłanych danych. Dlatego też należy zastosować tryb pracy pełnego dupleksu dla interfejsu RS-232 oraz programowe sterowanie przepływem kontroli.
Konfiguracja właściwości modułu RS232 pod komunikacje
z EasyVR
Konfiguracja właściwości modułu to przede wszystkim konfiguracja portu
w module komunikacyjnym CM 1241 RS232 (Rys.5.23). A także konfiguracja warunków początkowych i końcowych odbierania wiadomości (Rys.5.24).
Rys.5.23. Okno konfiguracji portu dla potrzeb programu.
Rys.5.24. Okno konfiguracji parametrów odbioru wiadomości.
Program sterowania głosowego modułem dla sterownika PLC
Główne założenia programu to wysyłanie do modułu EasyVR rozkazu wejścia w stan czuwania i zażądania włączenia rozpoznawania głosu dla pierwszej grupy zwykłych rozkazów, gdzie umieszczone są rozkazy do sterowania PLC. Jednocześnie odbierając odpowiedzi od modułu i analizując je wysyłał kolejne rozkazy lub odbierał dane aktywując na wyjściu sterownika odpowiednie porty wyjściowe. Do każdej z instrukcji komunikacyjnej oprogramowanie od razu przyporządkowuje blok danych, należy też stworzyć jeden blok danych więcej, na bufory odbioru i nadania. Tworząc bazę danych należy bezwzględnie pamiętać o zaznaczeniu opcji Standard - compatible with S7-300/400, gdyż dzięki temu będziemy mogli używać pointerów w celu zapisywania buforów (Rys.5.25).
Rys.5.25. Okno dodawania bloku nowego bloku.
Nowo powstały bufor uzupełniamy jak na rysunku 5.26.
Rys.5.26. Okno nowo stworzonego bloku danych.
Definiujemy także tablice TAG'ów (Rys.5.27)
Rys.5.27. Okno tablicy Default TAG table.
Na poniższych rysunkach przedstawiono gotowy program komunikacji urządzenia zewnętrznego EasyVR z sterownikiem PLC, program jest napisany w języku dedykowanym dla sterowników PLC (Rys.5.28; Rys.5.29)
Rys.5.28. Program do obsługi urządzenia EasyVR przez interfejs RS-232 ze sterownikiem. Część 1.
Rys.5.29. Program do obsługi urządzenia EasyVR przez interfejs RS-232 ze sterownikiem. Część 2.
W programie pokazano rozróżnianie tylko 3 słów dla łatwiejszej analizy programu.. Program realizuje więc:
rozpoznawanie słowa „start” i włączenie odpowiedniego wyjścia WYJ_START,
rozpoznanie słów „stop” i „zatrzymaj” i włączenie odpowiedniego wyjścia WYJ_STOP,
rozpoznanie błędu związanego z brakiem danego słowa w tablicy słów programowalnych i włączenie wyjścia (lampki) WYJ_ERROR,
rozpoznawanie błędu związanego z przekroczeniem limitu czasu i włączenie wyjścia WYJ_TIMEOUT.
Jest to przykładowe zastosowanie instrukcji do komunikacji punkt-punkt i jest jednym
z najprostszych pokazujący sposób w jaki należy zaprogramować sterownik do współpracy z modułem EasyVR. Nie obsługuje wszystkich błędów a jedynie te najczęściej występujące. Analogicznie można rozbudować program wprowadzając wszystkie słowa oraz rozpoznanie wszystkich błędów. Bufory nadania wypełnione są instrukcjami, które zostaną zrozumiałe przez moduł rozpoznawania głosu. Bufor nadania dotyczy pierwszej instrukcji SEND_PTP, która rozpoczyna rozpoznawanie głosowe. Bufor nadawczy kolejny dotyczy drugiej instrukcji SEND_PTP, która wysyła pusty znak spacji do urządzenia. W zależności od potrzeby obie instrukcje działają naprzemiennie.
Dalsze kierunki rozwoju badań nad sterowaniem głosowym
Po opracowaniu konfiguracji sprzętowej i programowej między modułami głosowymi a modułami komunikacyjnymi w sterownikach PLC, a także algorytmu pracującego pod tymi urządzeniami należałoby się zastanowić nad wyeliminowaniem błędów, które sporadycznie powstają przy użytkowaniu sterowania głosowego dla niededykowanych modułów na sterowniki PLC. W wyniku badań i obserwacji dokonanych przeze mnie na samym module rozpoznawania głosu, a także współpracy tegoż modułu ze sterownikiem PLC w mojej opinii należałoby zająć się kwestią udoskonalenia samej rozpoznawalności głosu bez ingerencji w sam moduł EasyVR. Gdyż rozpoznawalność komend przećwiczona w próbach dla różnych osób dla urządzenia dała następujące efekty (Tab.5.7).
Tab.5.7. Wyniki badania rozpoznawania głosu modułem EasyVR
Osoba mówiąca |
Ilość prób |
Próby pozytywne |
Procent |
Słowo „Start” |
|||
Autor wzorca |
100 |
99 |
99% |
Osoba starsza |
100 |
92 |
92% |
Kobieta |
100 |
95 |
95% |
Podsumowanie |
95,3% |
||
Słowo „Zatrzymaj” |
|||
Autor wzorca |
100 |
93 |
93% |
Osoba starsza |
50 |
44 |
88% |
Kobieta |
100 |
89 |
89% |
Podsumowanie |
90% |
W przypadku słów nie złożonych co jest naturalnym wynikiem słowa są lepiej rozpoznawane. Takie właśnie słowa należało by użyć do zaprogramowania bazy słów, przynajmniej w modułach do rozpoznawania głosów nie posiadających procesorów dźwiękowych oraz wewnętrznych przedwzmacniaczy. Słowa bardziej złożone nastręczają zapewne pewnych trudności już w samej wymowie, gdyż niekiedy nawet osobom bez wady wymowy zdarza się „seplenić”, przy czym badania odzwierciedlają raczej warunki ekstremalne, w którym osoby badane miały powtarzać te same słowa w odstępie co 1-2 sekund.
Możliwość zmiany mikrofonu na bardziej czuły dałaby prawdopodobnie bardziej stabilne wyniki badania. Jednak wadą modułu EasyVR jest fakt niemożności zamienienia mikrofonu na inny. Można by zastosować korektor akustyczny, w którym można by się pokusić o dobranie takich nastaw dla filtru pasmowego wykluczające zakłócenia, tąpnięcia, a także pasma głosu, które nie znoszą nic do samego znaczenia słowa i jego parametrów a jednocześnie dawałyby sporą rozpoznawalność.
Wnioski
Celem pracy było zapoznanie się z możliwością sterowania sterownikami PLC za pomocą głosu. Praca miała na celu wybór konkretnego modułu rozpoznawania głosu
i zaadaptowania go na potrzeby sterownika PLC. W rozdziale 2 omówiłem zagadnienia związane z głosem a także sposób opisu samego sygnału mowy i interesujące mnie najbardziej sposoby jego rozpoznawania. W rozdziale 3 zaprezentowałem parę naprawdę interesujących modułów rozpoznawania głosu i krótko je opisałem, kładąc nacisk na zaprezentowanie cech przydatnych do implementacji takiego modułu
w obwód sterownika PLC. Jeden wybrany przeze mnie model w rozdziale 4 dogłębnie przeanalizowałem pod względem sprzętowym i programowym a także zaprezentowałem sposób komunikacji dla tego urządzenia i go omówiłem. Należało dokładnie przyjrzeć się interfejsowi RS-232 by móc go umiejętnie i jak najlepiej wykorzystać do komunikacji urządzenia EasyVR wraz ze sterownikiem. W rozdziale piątym skupiłem się na wyjaśnieniu sposobów pracy interfejsu komunikacyjnego CM 1241 RS232,jego trybów pracy, komend a także komunikacji, która pozwoli na transmisję z urządzeniem EasyVR, rozdział ten zawierał także przykładowy program dla połączenia tych dwóch urządzeń, z pełną konfiguracją a także kierunki w jakich można by skierować przyszłe badania nad tym zagadnieniem, celem najlepszego wykorzystania pracy wykonanej w zakresie podjętym przeze mnie.
Uważam, iż mimo obecnego rozwoju technicznego paneli operatorskich sterowanie głosowe już niedługo zostanie szerzej wzięte pod uwagę przez twórców modułów do sterowników PLC. W pracy natykałem się na wiele problemów związanych z samym przystosowaniem komunikacji tych urządzeń, gdyż nie były one przeznaczone do wzajemnej transmisji. W dobie postępu technologicznego uważam, iż badania nad sterowaniem głosowym w sterownikach PLC będą rozwijane, może nie z użyciem starych rozwiązań, jakim z pewnością jest interfejs RS-232, ale z pomocą mogą przyjść już znane nam osiągnięcia technologii jak chociażby transmisja danych drogą bezprzewodową IrDA lub Bluetooth. Ich twórcy natomiast póki co skupieni są na wytwarzaniu nowoczesnych paneli dotykowych, które są coraz powszechniejsze. Nie mniej jednak w wykazanej przeze mnie wyższości sterowania głosem nad technologią paneli można mieć duże nadzieje na szybkie stworzenie właśnie tej gałęzi w technologii modułów do sterowników.
Spis literatury
Tadeusiewicz R.: Sygnał mowy. Warszawa, Wydawnictwo Komunikacji
i Łączności, 1988
VRbot. Dostępny: www.pvelectronic.eu/vrbot.html (odwiedzona 20.10.12)
EasyVR Speech Recognition Module. Dostępny: www.robotshop.com/ProductInfo.aspx?pc=RB-Tig-01 (odwiedzona 20.10.12)
Veear: EasyVR. User Manual. Release 3.3, Dostępny: www.veear.eu (odwiedzona 20.10.12)
Veear: SmartVR. User Manual. Release 2.0, Dostępny: www.veear.eu (odwiedzona 20.10.12)
Images SI Inc.: SR-06/SR-07 Speech Recognition Kit. Construction Manual & User Guide, Dostępny: www.imagesco.com (odwiedzona 20.10.12)
Sensory Inc.: VR Stamp. With EEPROM Speech Recognition Module. Data Sheet, Dostępny: www.sensoryinc.com (odwiedzona 20.10.12)
Veear: EasyVR. How to Interference EasyVR to a PC, Dostępny: www.veear.eu (odwiedzona 20.10.12)
Mikroelektronika: MAX232 Board User Manual, Dostępny: www.mikroe.com (odwiedzona 20.10.12)
Parchański J.: Miernictwo elektryczne i elektroniczne, Warszawa, WSiP, 1995
Jaroczyński J., Łącze szeregowe. Dostępne: www-users.mat.uni.torun.pl/~bala/sem_mgr_2000/porty.html (odwiedzone 20.10.12)
Interface szeregowy RS-232c. Dostepny: www.elektronika24.pl (odwiedzone 20.10.12)
Simatic S7-1200 CPU 1214C DC/DC/DC, Dostępny: www.sklepautomatyka.pl (odwiedzone 20.10.12)
Siemens. Simatic S7 Programowalny sterownik S7-1200. Podręcznik systemu. Wydanie 04/2009. Dostępny: www.automatyka.siemens.pl (odwiedzone 20.10.12)
19
Układ sterujący (mózg)
Sygnał mowy
Filtr
(rezonator wnękowy)
Źródło
(krtań)
Vcc
GND
ERX
ETX
3.3-5V
GND
TX
RX
EasyVR
Host
Dobrze
Materiał izolujący
Dobrze
Źle
Wewnętrzna membrana
Czysta przestrzeń
Pusta
przestrzeń
Źle
Tablica rozkazów
Tablica dźwięków
Hasła
Grupy komend programowalnych
Komendy standardowe
Komendy wyzwalające
DCE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
DTE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
DTE,DCE
5. SG
2. RX
3. TX
4. DTR
1. DCD
6. DSR
7. RTS
8. CTS
9. RI
DTE,DCE
5. SG
2. RX
3. TX
4. DTR
1. DCD
6. DSR
7. RTS
8. CTS
9. RI
DCE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
DTE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
DTE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
DTE
1. DCD
2. RX
3. TX
4. DTR
5. SG
6. DSR
7. RTS
8. CTS
9. RI
b)
a)
Pusty wiersz
Znak podziału wiersza
Znak lub ciąg znaków