ЄС-11

Цифрова комутаційна система

Науково-виробничий центр
"Автоматизовані мікропроцесорні системи"
ЄДРПОУ: 13807402 тел: +380-32-237-21-36

Користувальницькькі налаштування

Налаштування сайту


extrasoft:voicemodem:index

VoiceModem

Програма призначена для прийому/передачі голосових даних через модем. Дана програма побудована по принципу state машини, яка описується діаграмою станів-переходів. Діаграма станів представляє собою орієнтований граф, вершини якого (події і псевдоподії) з'єднані ребрами-переходами. Стани і умови, зв'язані з переходом, на діаграмі відображаються у вигляді мітки на відповідному ребрі. Діаграма станів зображена нижче на рисунку.

Приклад діаграми робочого сценарію:

В будь-який момент часу кінцевий автомат (state машина) знаходиться в одному із станів. При надходженні зовнішньої події (event) або виконанні певної умови, автомат може перейти із активного стану в новий по одному з переходів.

До складу програми входить основний файл:

  • файл сценарію (з файловим розширенням “.scn”);

Опис параметрів командного рядка

Програма VoiceModem запускається тільки з командного рядка. Параметри командного рядка мають наступний формат:

     VoiceModem.exe  -s "назва_скрипта"  -q "Param" "файл_номерів"  -p "назва_пара-ра" "значення"  -l "файл_трасування" "рівень_трасування"

1) Ключ -s вказує на параметр файлу сценарію. Цей ключ є обов'язковим. всі інші ключові параметри можуть бути відсутні.
Наприклад:

             VoiceModem.exe  -s "Script.scn"  

2) Ключ -q вказує на наявність файлу номерів. Кожен номер з Файлу номерів передається як параметр Param у файл сценарію.
Наприклад:

             VoiceModem.exe  -s "Script.scn"  -q Param "Numbers.txt"

3) Ключ -p вказує на передачу пар-рів у файл сценарію з їх відповідною заміною.
Наприклад:

             VoiceModem.exe  -s "Script.scn"  -p COM COM1 -p ComSpeed 115200

4) Ключ -l вказує на наявність в програмі файлу логування. Рівень трасування може приймати значення:

  • 1 - логування першого рівня;
  • 2 - логування другого рівня (записуються байти в 16-му форматі);

Наприклад:

             VoiceModem.exe  -s "Script.scn"  -p COM COM1 -p ComSpeed 115200 -l "VoiceModem.log" 1

Структура файлу сценарію

У файлі повинна бути оголошена обов'язкова секція (у квадратних дужках) під назвою: [Global Options], в якій описуються такі ключові слова (команди):

  • StartAction
  • TimersNumber
  • CountersNumber
  • PortName
  • PortSpeed
  • AutoStart

1) Команда StartAction вказує точку входу в сценарії. Значенням цієї команди може бути будь-який рядок.
Наприклад:

               StartAction    = action_name

2) Команда TimersNumber вказує кількість таймерів в сценарії.
Наприклад:

               TimersNumber    = 5

тобто вказано 5 таймерів (від 0 до 4 відповідно). При TimersNumber = 0 - таймери не використовуються.

3) Команда CountersNumber вказує кількість лічильників в сценарії.
Наприклад:

               CountersNumber    = 5

тобто вказано 5 лічильників (від 0 до 4 відповідно). При CountersNumber = 0 - лічильники не використовуються.

4) Команда PortName вказує на порт, через який працює програма VoiceModem. Наприклад:

           PortName  = COM1
           PortName  = COM2 і т.д.

Ім'я порта може бути передано як параметр (для цього використовуються символи: < > ). Наприклад:

           PortName  = <COM>
           PortName  = <param_Com> і т.д.

5) Команда PortSpeed вказує на швидкість порта.
Примітка:
Швидкість порта - це числова константа, яка може приймати такі значення:

  PortSpeed  = 110
  PortSpeed  = 300
  PortSpeed  = 600
  PortSpeed  = 1200
  PortSpeed  = 2400
  PortSpeed  = 4800
  PortSpeed  = 9600
  PortSpeed  = 14400
  PortSpeed  = 19200
  PortSpeed  = 38400
  PortSpeed  = 56000
  PortSpeed  = 57600
  PortSpeed  = 115200

6) Команда AutoStart дозволяє запустити програму VoiceModem з певним файлом завдання атоматично при
AutoStart = true.

В іншому випадку записується значення false, яке є встановлено по замовчуванню.


Примітка:
1) Значення всіх вище перерахованих команд можуть бути передані через командний рядок у вигляді:

               команда_скрипта = <параметр>

2) Після того як вказано значення певної команди, забороняється вказувати будь-які інші символи, навіть коментарі.

Наприклад:

        PortName  = 'COM2'   // не можна вказувати коментар
        PortSpeed = 115200   ;; тут теж

Якщо потрібно закоментарити певну команду, то потрібно це зробити перед самою командою:

        //PortName  = 'COM2'  
  ;; це також закоментарено      PortSpeed = 115200   

Послідовність обробки action подій

Події описуються у секції Action наступним чином: [action action_name], де action_name - ідентифікатор події.

В секції Action описуються такі ключові слова (команди):

  • ExitScript
  • SetState
  • SetTimer (x)
  • SetCounter(x)
  • CounterModify(x)
  • SetModemCmd
  • SendSound
  • RecordSound
  • FinishSend
  • FinishRecord
  • SetMessage

1) Команда ExitScript вказує на вихід із скрипта.
Наприклад:

              ExitScript =;    

При ExitScript = true номер телефонної лінії попадає в чергу прогрими дя повторного набору.

2) Команда SetState вказує на перехід в інший стан. Значенням цієї команди може бути будь-який ідентифікатор стану.
Наприклад:

              SetState = state_name1

3) Команда SetTimer встановлює таймер на певне значення (інтервал часу задається в мілісекундах: \\1 секунда = 1000 мілісекунд). SetTimer має наступний формат запису:

              SetTimer(x) = інтервал_часу

де x - номер таймера, який потрібно встановити (нумерація на номер таймера починається з нуля);

Наприклад:
Опишемо в сценарії два таймера

              TimersNumber = 2

Пізніше у певній події встановимо випадкові значення цих двох таймерів

              SetTimer(0) = 20000
              SetTimer(1) = 100000

Примітка:
В будь-якому сценарії не може бути встановлено більше таймерів, ніж TimersNumber. Тобто з прикладу зазначеного вище випливає, що SetTimer(2) = значення не існує у сценарії.

4) Команда SetCounter встановлює лічильник певним значенням. SetCounter має наступний формат запису:

              SetCounter(x) = значення_лічильника

де x - номер лічильника, який потрібно встановити (нумерація на номер лічильника починається з нуля); Значенням лічильника може бути ціле число.

Наприклад:
Опишемо в сценарії два лічильника:

              CountersNumber = 2

Пізніше у певній події встановимо випадкові значення цих двох лічильників:

              SetCounter(0) = 5
              SetCounter(1) = 10

Примітка:
В будь-якому сценарії не може бути встановлено більше лічильників, ніж CountersNumber. Тобто з прикладу зазначеного вище випливає, що SetCounter(2) = значення не існує у сценарії.

5) Команда CounterModify здійснює інкремент/декремент певного лічильника. Формат запису команди:

              CounterModify(x) = +-значення

де x - номер лічильника, який потрібно модифікувати;

Щоб використати команду CounterModify(x), до цього потрібно встановити відповідний лічильник.

6) Команда SetModemCmd задає АТ-команду модема.
Наприклад:

              SetModemCmd = atz

7) Команда SendSound задає шлях до файлу даних, який буде передано в голосовому режимі на певний телефонний номер. Наприклад:

             SendSound = D:\VoiceModem\sound.wav

Примітка:
Файл із звуковими даними може бути будь-якого формату.

8) Команда RecordSound задає шлях до файлу, в який буде збережено голосові дані (розмова певного абонента, до якого додзвонилися по визначеному номеру). Наприклад:

             RecordSound = D:\VoiceModem\sound.wav

Зауваження:
Файл для запису звукових даних повинен бути тільки формату (*.wav)!!!

9) Команда FinishSend зупиняє передачу даних, визначених командою SendSound і переводить модем з голосового режиму в командний режим.
FinishSend має такий формат запису:

             FinishSend = true

10) Команда FinishRecord зберігає дані у файл, вказаний командою RecordSound і переводить модем з голосового режиму в командний.
FinishRecord має такий формат запису:

             FinishRecord = true

11) Команда SetMessage передає повідомлення через графічний діалог. Рядок з повідомленням записується в лапках. Наприклад:

             SetMessage = 'Some notification!'

Очікування реакції в стані state

Реакція у стані описуються в секції State наступним чином: [state state_name], де state_name - ідентифікатор стану.

В секції State описуються такі ключові слова (команди):

  • ifTimerExpired(x)
  • ifCounterExpired(x)
  • ifModemAnswer()
  • ifSoundFinished
  • ifUserSays()

1) Команда ifTimerExpired здійснює перехід на action подію, якщо час відповідного таймера закінчився. Формат запису ifTimerExpired:

                                  ifTimerExpired(x) = action_name

де x - відповідний номер таймера;

2) Команда ifCounterExpired здійснює перехід на action подію, якщо відповідний лічильник зменшився до нуля. Формат запису ifCounterExpired:

                                  ifCounterExpired(x) = action_name

де x - відповідний номер лічильника;

3) Команда ifModemAnswer здійснює перехід на action подію, якщо від модема прийшла відповідна відповідь. Формат запису ifModemAnswer:

                                  ifModemAnswer('ANSWER') = action_name

4) Команда ifSoundFinished здійснює перехід на action подію, якщо всі звукові дані були передані через модем (з файлу, встановленого командою SendSound).
Формат запису ifSoundFinished:

                                  ifSoundFinished = action_name

5) Команда ifUserSays здійснює перехід на action подію, якщо користувач в діалозі натиснув певну кнопку.
Стандартний формат запису:

                          ifUserSays('YES')    = action_name
                          ifUserSays('NO')     = action_name
                          ifUserSays('CANCEL') = action_name

Зауваження:
Константи 'YES' 'NO' 'CANCEL' змінювати не можна!!!

extrasoft/voicemodem/index.txt · В останнє змінено: 2015/04/17 15:25 (зовнішнє редагування)