Tip pro VBScript: Převod textu alarmu/události na řeč

19. srpna 2015 | Reliance SCADA

SCADA systém Reliance umožňuje přehrát vybraný zvuk při vzniku, zániku nebo kvitaci alarmu/události. Přehrávaný zvuk může být společný pro všechny alarmy/události v projektu, nebo může být zadán pro každý alarm/událost samostatně. Díky tomu uživatel (dispečer) při vzniku alarmu okamžitě pozná, že jde např. o závažný alarm nebo běžnou událost. Další možností, jak od sebe alarmy zvukově odlišit, je nechat systém Reliance převést text alarmu na řeč a tu pak reprodukovat uživateli.


Pro převod textu na řeč je možné využít objekt SAPI.SpVoice, který je k dispozici od Windows XP a není tedy vyžadována žádná instalace. Dle našich zkušeností není reprodukovaná řeč ve Windows XP příliš kvalitní. Ve Windows 7 je kvalita již vynikající.


Následující příklad demonstruje použití objektu SAPI.SpVoice pro převod jednoduchého textu na řeč:


Dim text, speech

Set speech = CreateObject("SAPI.SpVoice")
text = "High critical limit"
speech.Speak text


Jak vidno, příklad je opravdu jednoduchý. Stačí vytvořit objekt SpVoice a zavolat mu metodu Speak, do které se jako parametr předá text, který má být převeden na řeč.


Upozornění: Je nutné si uvědomit, že metoda Speak je v uvedeném příkladu volána synchronně. To znamená, že skript bude čekat na dokončení řeči a tím budou blokovány další skripty zařazené ke spuštění v rámci stejného podprocesu. Nejjednodušším řešením tohoto problému je vyhradit v projektu systému Reliance samostatný podproces pro ty skripty, které budou provádět převod textu na řeč. Díky tomu nebude ovlivněn běh skriptů důležitých pro ovládání vlastní technologie.


Správce skriptů, Reliance 4 SCADA


Hlas, jazyk a výslovnost mluvící "osoby" jsou přednastaveny podle národního prostředí a podle výčtu hlasů nainstalovaných ve Windows. Lze je změnit nastavením vlastnosti Voice. V následujícím příkladu je naznačeno, jak získat seznam dostupných hlasů a jak určitý hlas nastavit:


Dim speech, voice

Set speech = CreateObject("SAPI.SpVoice")
For Each voice in speech.GetVoices
 If InStr(voice.GetDescription, "English") <> 0 Then
  Set speech.Voice = voice
  Exit For
 End If
Next

Aby se převedl text alarmu při vzniku, zániku nebo kvitaci na řeč, stačí v projektu systému Reliance vytvořit jeden společný skript (typ Událostní) a napojit jej u všech požadovaných alarmů na příslušnou událost (např. vznik).


Správce stanic, Reliance 4 SCADA


Do každého skriptu, který je vyvolán alarmem, je kromě dalších informací předán i text alarmu. Text alarmu je možné ve skriptu získat pomocí metody RScr.GetCurrentScriptDataEx. Tento text je pak snadné použít pro převod na řeč způsobem popsaným v tomto článku. Následující skript je univerzální a bude-li napojen např. na vznik alarmu, bude text alarmu převeden na řeč:


Dim data, text, speech

If RScr.GetCurrentScriptDataEx(data) Then
 text = data.StrPar8
 Set speech = CreateObject("SAPI.SpVoice")
 speech.Speak text
 Set speech = Nothing
End If


Reliance 4 Control Server,  Aktuální alarmy/události


Zvuk textu alarmu "Sensor Error! It could cause the system to behave unpredictably." převedeného na řeč si můžete poslechnout v tomto zvukovém záznamu:





Převod textu na řeč v jazyku VBScript nemusí být použit jen v souvislosti s alarmem, ale obecně při jakékoliv události v systému Reliance, při níž je prováděn skript.

Reliance Earth Icon

Top