1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Ответить

Автор темы
stesl
эксперт
эксперт
Сообщения: 1001
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение stesl »

Всем привет!
Ни для кого не секрет, что разработчики IDE для HMI твердо убеждены, раз вы пишите визуализацию, то ПЛК у вас в шаговой доступности, и HORN (аварийный рев) вы и организуете через ПЛК. Но это далеко не всегда так, и почему не дать внятный инструмент для запуска звука на PC - я не понимаю. Причем сколько IDE я не пробовал, всюду одно и то же.

Вот и в WinCC. Тут я новичок, с языками опыта маловато, поэтому радуюсь всякой маленькой победе, и спешу поделиться.
Делаем две Project Function

Код: Выделить всё

BOOL GetProjectPath(char* lpstrProjectPath)
{
BOOL bRet = FALSE;
char szProjectFile[_MAX_PATH+1];
char* psz = NULL;
CMN_ERROR Error;

bRet = DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,&Error);

if (bRet == FALSE)
{
	return FALSE;
}

psz = strrchr(szProjectFile,'\\');

if (psz == NULL)
{
	return FALSE;
}

*(psz+1) = 0;

strcpy(lpstrProjectPath,szProjectFile);

return TRUE;
}
Философия такая - звук (wav) будем хранить в папке Sound, которую создадим в папке проекта. Пока файл и папка в этой общей папке, мы ее не теряем. И архивируем и перекидываем куда. Но вот когда куда то перекинули - нужен новый путь. Эта ф-ция и вернет нам путь папки проекта

Код: Выделить всё

#include "apdefap.h"
void CC_PlaySound(char* lpszSoundFile,INT iPlay)
{
#pragma code("winmm.dll")
BOOL PlaySound(LPCSTR lpszSound,HMODULE, DWORD dwSound);
#define SND_FILENAME 0x00020000L
#define SND_ASYNC 0x0001
#define SND_LOOP  0x0008
#pragma code()

BOOL bRet = FALSE;
BOOL bSound = GetTagBit("Sound");
char szProjectPath[_MAX_PATH];
char szSoundPath[_MAX_PATH];

GetProjectPath(szProjectPath);

sprintf(szSoundPath,"%sSound\\%s",szProjectPath,lpszSoundFile);

if (iPlay == 1)
{
bRet = PlaySound(szSoundPath,NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
}
else
{
bRet = PlaySound(NULL,NULL,SND_FILENAME);
}
if (bRet == FALSE)
{
MessageBeep((WORD)-1);
}
Непосредственно сама ф-ция проигрывания. На вход подаем имя файла и 1 или 0. Если 1 файл играет зациклено, если 0 звук прерывается. Так как подаем имя файла, то в папку Sound можно положить кучку wav и организовать интерфейс по выбору звуков. Ну это все лирика ;) Главное - реализация :ext_hooray:

PS Нисколько не скрываю, что скрипты стырены с различных источников. Но момент допиливания присутствовал ;) Да и в готовом виде, в отдельном топике - считаю: теме быть :!:

fixandr
здесь недавно
здесь недавно
Сообщения: 64
Зарегистрирован: 18 авг 2015, 07:23
Имя: Федоровский Андрей Юрьевич
Страна: Россия
город/регион: Серов
Благодарил (а): 4 раза

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение fixandr »

Добрый день! Актуальная тема! Вот вопрос - звук выключается по кнопке acknowledge horn?

Автор темы
stesl
эксперт
эксперт
Сообщения: 1001
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение stesl »

fixandr писал(а): 12 июл 2019, 08:37 Добрый день! Актуальная тема! Вот вопрос - звук выключается по кнопке acknowledge horn?
В этом скрипте? Тут нужно только послать - 1 - поём, 0 - заткнулись. У меня это сделано через скрытый (на экране) тег, включенный в "Message Assigment"

Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение Dron_Tat »

У нас сделано так:

Код: Выделить всё

//Insert the header starting here

#include "GlobalDefinitions.h" 
void Trigger_Bits()
{
	DWORD AlarmIncomming;
	BOOL AlarmSoundStart;
	BOOL AlarmSoundStop;

	AlarmIncomming= GetTagDWord("Alarm_incomming");
	if (AlarmIncomming >= 256)
	{
		AlarmSoundStart=TRUE;
    		AlarmSoundStop=FALSE;
	} else{
		AlarmSoundStop=TRUE;
    		AlarmSoundStart=FALSE;
	}
	if (AlarmSoundStart==TRUE)
	{
		StartProgram ("C:\\Program Files (x86)\\AIMP3\\AIMP3.exe","/PLAY",1,FALSE);	
	}
	if (AlarmSoundStop==TRUE)
	{
		StartProgram ("C:\\Program Files (x86)\\AIMP3\\AIMP3.exe","/STOP",1,FALSE);
	}
}
Код не мой, но использую постоянно

makesstr
осмотрелся
осмотрелся
Сообщения: 187
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 32 раза

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение makesstr »

На VBS
Dim shell,bgsound
Set shell=CreateObject("wscript.shell")
Dim warning
Set warning=HMIRuntime.Tags("Warning")
Dim warning_pumps
Set warning_pumps=HMIRuntime.Tags("Warning_pumps")

If warning.Read = 1 or warning_pumps.Read = 1 Then
shell.Run "D:\project\Pakr_45_50_tia\Horn.wav",0,False
End If

Автор темы
stesl
эксперт
эксперт
Сообщения: 1001
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение stesl »

makesstr писал(а): 19 сен 2019, 11:46На VBS

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 35 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение ZuElecRu »

Dron_Tat писал(а): 15 авг 2019, 15:57 StartProgram ("C:\\Program Files (x86)\\AIMP3\\AIMP3.exe","/PLAY",1,FALSE);
А можно синтаксис по подробнее для лохов чайников?
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2315
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1642 раза
Поблагодарили: 160 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение keysansa »

Воспроизводится этот ALARM через колонки, которые где стоят?
ЗЫ. Лично мое мнение - от контроллера колонна, с гудочком - и слышно и видно откуда гудит.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 35 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение ZuElecRu »

keysansa писал(а): 03 фев 2022, 19:09 ично мое мнение - от контроллера колонна, с гудочком - и слышно и видно откуда гудит.
Это само собой, а на дополнительном АРМе еще гудит, дежурный же не в цеху, а у АРМа тусуется, чай пьет... :ext_sleep:
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2315
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1642 раза
Поблагодарили: 160 раз

Звук в WinCC посредством Win API (C скрипты) #лайфхак

Сообщение keysansa »

ZuElecRu писал(а): 04 фев 2022, 09:04
keysansa писал(а): 03 фев 2022, 19:09 ично мое мнение - от контроллера колонна, с гудочком - и слышно и видно откуда гудит.
Это само собой, а на дополнительном АРМе еще гудит, дежурный же не в цеху, а у АРМа тусуется, чай пьет... :ext_sleep:
У нас даже дежурным механикам в их "кондейке" колонна установлена. Для легкого чаепития )
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Ответить

Вернуться в «WinCC»