воскресенье, 14 мая 2017 г.

Озвучивание показаний мультиметров серий APPA-10x/N

Довольно часто при отладке ответственных узлов различных приборов оказываются заняты не только ваши руки, но и глаза. То и дело ловишь себя на мысли, что "одним глазом" посматриваешь на плату, а "вторым" на измерительный прибор а-ля тестер. А зрение свое надо беречь. А что еще остается из органов чувств для восприятия? Третий глаз и прямой контакт в мозги - это для особо двинутых одаренных ). Слух конечно*. Пусть наш мультиметр/тестер озвучивает то, что он намерял. Данный проект основан на авторской же разработке по удаленному считыванию в ПК/ноутбук данных из мультиметров серий APPA-105, 107, 109/N на базе библиотеки APPA109N.dll по последовательному интерфейсу over USB/Bluetooth/Wi-Fi. В качестве Bluetooth-канала рекомендуем использовать модуль прозрачного UART-а - HC05, а в качестве Wi-Fi подойдут модули ESP-01/03/07 на базе SoC-чипа ESP8266.

Ближе к телу...

Итак, будем считать, что железяка с виндами у вас под рукой, а колонки и пациент мультиметр уже подключены. Для автоматизации сего действа прямо в блокноте напишем простенький VBS-скрипт с подключением через Ole-сервер DynWrapX нашей библиотеки APPA109N.dll, импортом интерфейсов, вызовом необходимых функций и использования функций речевого синтеза через объект SAPI.
* Понятное дело, что в условиях цеха речевой синтез не подходит по шумовой обстановке и отсутствия мобильности, но в лабораторных самое оно.
Получение текстовой информации о значении измеряемого параметра с учетом экспоненты (мантиссы), единиц и режимах измерения осуществим с помощью служебной функции 'multimetr_to_speech_or_txt()' библиотеки. Таблица расшифровок параметров функции:



Для того, чтобы не озвучивать то, что уже было синтезировано за предыдущий цикл опроса, добавим временную переменную, в которую будем сохранять текущий результат функции и в последующем производить сравнение. Если результат будет отрицательным, то будем разрешать синтез. По клавише 'ESC' будем выходить из бесконечного цикла.

Код скрипта:
' runAPPA109N.VBS
' Демонстрационный скрипт озвучивания показаний и режимов измерения мультиметров APPA-105,107,109/N, подключенного по RS-232/USB/Bluetooth
' Видео: http://www.youtube.com/watch?v=AQ4gD44agOs,
' Разработчик: Бадло Сергей Григорьевич aka raxp
' H-page: http://raxp.radioliga.com
'
' Зависимости:
' · Win ALL 32/64-bit
' · COM-сервер DynWrapx.dll
' · SAPI (для озвучивания используется интерфейс по-умолчанию)
' · Физический RS-232 or virtual COM over USB/Bluetooth
' · Подключенный мультиметр APPA-105, 107, 109/N
'
' Региcтрация интерфейсов (обязательно первично однократно):
' · в данном скрипте задайте порт подключения проектора
' · запустите regdynwrapx.bat (на Windows Vista/7/8/8.1 запускать правой кнопкой мыши от имени Администратора)
' · запустите runAPPA109N.cmd
' · для завершения нажмите 'Escape'


' подключаем голосовое сопровождение
' при надоедливости голоса speakon = false

Dim Speak
speakon = true ' разрешаем голосовое сопровождение
Set Speak = CreateObject("sapi.spvoice")
' регистрируем COM объект DynamicWrapperX в тихом режиме
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("regsvr32.exe dynwrapx.dll /s"),3, true
' создаем объект DynamicWrapperX
Set Wrap = CreateObject("DynamicWrapperX.2")
Wrap.Register "user32.dll", "GetAsyncKeyState", "i=l", "f=s", "r=l"
Wrap.Register "APPA109N.dll", "reinit", "i=bb", "f=s", "r=l"
Wrap.Register "APPA109N.dll", "multimetr_to_speech_or_txt", "i=b", "f=s", "r=s"

s = Wrap.reinit(14, true)

' Информируем пользователя о начале работы
if (speakon = true) then
Speak.Speak "Готов читать данные из мультиметра APPA 109."
End if

temp = "0. . ."

On Error Resume Next ' ставим перехватчик ошибок, если не удается удалить файл (да и нечего юзверю на ошибки смотреть)
' запускаем бесконечный цикл по условию нажатия 'Escape' с задержкой

Do While Wrap.GetAsyncKeyState(27) = "0"

 if (speakon = true) then
  s = Wrap.multimetr_to_speech_or_txt(false)
  if (temp <> s) then
   Speak.Speak s
  End if
  temp = s
 End if

 'задержка на кол-во миллисекунд
 WScript.Sleep 500
Err.Clear
loop
On Error GoTo 0

s = Wrap.reinit(14, false)
' озвучиваем
if (speakon = true) then
 Speak.Speak "Программа завершена."
End if

забрать все добро себе

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.