
Hướng dẫn cấu hình âm thanh cảnh báo (Alarm Sound) trong WinCC
1. Tổng quan
WinCC cung cấp hệ thống quản lý Alarm rất mạnh, tuy nhiên không tự động phát âm thanh khi có cảnh báo.
Nếu muốn hệ thống phát file .wav mỗi khi xuất hiện Alarm chưa được xác nhận (Unacknowledged Alarm), bạn cần cấu hình thêm bằng C-Script.
Bài viết này sẽ hướng dẫn cách:
Theo dõi Alarm chưa xác nhận.
Tự động phát âm thanh khi Alarm xuất hiện.
Kiểm tra và xử lý các lỗi thường gặp.
Điều kiện trước khi thực hiện
Chuẩn bị:
WinCC v7.0 trở lên.
Truy cập được WinCC Explorer.
Đã tạo các Internal Tag:
alarmsumalarmunack
Có sẵn file âm thanh định dạng .wav trên máy Runtime.
2. Nguyên lý hoạt động
Chức năng phát âm thanh dựa trên bốn thành phần chính.
GMsgFunction
Đây là Global Message Function.
Hàm này sẽ được WinCC gọi mỗi khi trạng thái Alarm thay đổi.
Internal Tag
Hai Tag nội bộ được sử dụng để theo dõi Alarm.
alarmsum
Tổng số Alarm đang hoạt động.
alarmunack
Số Alarm chưa được xác nhận (Unacknowledged).
Windows PlaySoundA API
WinCC sử dụng API của Windows:
PlaySoundA()để phát file âm thanh.
API này nằm trong thư viện:
winmm.dllFile WAV
Âm thanh phải là file:
*.wavVí dụ:
C:\WinCC\Sounds\alarm.wav3. Tạo Internal Tag
Trong Tag Management, tạo hai Tag nội bộ.
Tên Tag | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
alarmsum | Unsigned 16-bit | Tổng số Alarm đang hoạt động |
alarmunack | Unsigned 16-bit | Số Alarm chưa xác nhận |
Hai Tag này sẽ được Alarm Logging cập nhật tự động.
Bước 1 – Cấu hình Alarm Logging
Mở:
Alarm LoggingTrong WinCC Explorer.
Sau đó:
Alarm Logging
↓
Properties
↓
MessagesCấu hình để Alarm Logging ghi dữ liệu vào:
alarmsum
alarmunack
Kiểm tra khi Alarm xuất hiện, hai Tag này thay đổi đúng giá trị.
Bước 2 – Tạo GMsgFunction
Trong:
Global Scripts
↓
C-Script
↓
GMsgFunctiontạo một Function mới.
Ví dụ:
#include "apdefap.h"
#include "msvcrt.h"
void OnAlarmsTriggered MSG_LOCKED
(
void* pEvent,
void* pCycle
)
{
#pragma code ("winmm.dll")
void WINAPI PlaySoundA(char* pszSound, void* hmode, DWORD dwflag);
#pragma code()
extern unsigned short alarmsum;
extern unsigned short alarmunack;
if (alarmunack > 0)
{
PlaySoundA(
"C:\\WinCC\\Sounds\\alarm.wav",
NULL,
1
);
}
}Giải thích chương trình
Đầu tiên khai báo:
#pragma code ("winmm.dll")
để sử dụng hàm:
PlaySoundA()
Sau đó khai báo hai biến:
extern unsigned short alarmsum;
extern unsigned short alarmunack;
để đọc giá trị từ Internal Tag.
Nếu:
alarmunack > 0
chương trình sẽ phát file:
alarm.wav
Bước 3 – Đăng ký GMsgFunction
Sau khi tạo Script:
Mở Function.
Chuyển sang tab:
RegisterKích hoạt:
OnAlarmĐặt điều kiện:
alarmunack > 0Sau đó Apply để hoàn tất đăng ký.
Kể từ thời điểm này, mỗi khi xuất hiện Alarm chưa được xác nhận, WinCC sẽ tự động gọi Script.
4. Phát âm thanh bằng nút nhấn
Nếu muốn thử nghiệm nhanh hoặc phát âm thanh thủ công, có thể gán C-Script cho một Button.
Ví dụ:
#include "apdefap.h"
void OnClick(
char* lpszPictureName,
char* lpszObjectName,
char* lpszPropertyName,
UINT nFlags,
int x,
int y
)
{
#pragma code ("winmm.dll")
void WINAPI PlaySoundA(char* pszSound,
void* hmode,
DWORD dwflag);
#pragma code()
PlaySoundA(
"C:\\WinCC\\Sounds\\alarm.wav",
NULL,
1
);
}Khi nhấn nút trên giao diện HMI, file âm thanh sẽ được phát.
Giải thích hàm PlaySoundA
Cú pháp:
PlaySoundA(
pszSound,
hmode,
dwflag
);Trong đó:
Tham số | Kiểu | Ý nghĩa |
|---|---|---|
pszSound | char* | Đường dẫn đầy đủ tới file WAV |
hmode | Pointer | Luôn đặt bằng NULL |
dwflag | DWORD | Chế độ phát âm thanh |
Giá trị của dwflag
Giá trị | Hằng số | Ý nghĩa |
|---|---|---|
1 | SND_SYNC | Phát đồng bộ, chờ phát xong mới tiếp tục |
2 | SND_ASYNC | Phát không đồng bộ |
0 | SND_NODEFAULT | Không phát âm thanh mặc định nếu thiếu file |
8 | SND_LOOP | Phát lặp liên tục |
Phát lặp liên tục
Có thể kết hợp các cờ bằng toán tử OR.
Ví dụ:
PlaySoundA(
"...",
NULL,
2 | 8
);Ý nghĩa:
Phát không đồng bộ.
Lặp liên tục cho đến khi dừng.
Đây là lựa chọn thường dùng cho các Alarm quan trọng.
Kiểm tra sau khi cấu hình
Sau khi hoàn thành, thực hiện các bước sau.
1. Compile Script
File
↓
CompileĐảm bảo không có lỗi biên dịch.
2. Chạy WinCC Runtime
Khởi động Runtime.
3. Kích hoạt Alarm
Tạo một Alarm thử nghiệm.
Kiểm tra:
alarmunackđã tăng hay chưa.
4. Kiểm tra âm thanh
Nếu mọi thứ đúng, file:
alarm.wavsẽ tự động phát.
5. Kiểm tra Button
Nếu tạo Button thử nghiệm:
Nhấn Button.
Kiểm tra loa.
Nếu âm thanh phát bình thường nhưng Alarm không phát, vấn đề thường nằm ở Trigger hoặc Internal Tag.
4. Xử lý lỗi thường gặp
Không phát âm thanh
Kiểm tra:
File
.wavcó tồn tại đúng đường dẫn không.Loa hoặc tai nghe có hoạt động không.
Windows có đang ở chế độ Mute không.
WinCC Runtime có quyền truy cập thiết bị âm thanh không.
Giá trị
alarmunackcó tăng đúng khi Alarm xuất hiện không.
Script Compile lỗi
Kiểm tra:
Dòng:
#pragma code ("winmm.dll")có đúng cú pháp không.
Tên Internal Tag có đúng chính tả không.
Ví dụ:
extern unsigned short alarmunack;phải trùng hoàn toàn với tên Tag trong WinCC.
Không tìm thấy winmm.dll
Kiểm tra thư viện:
C:\Windows\System32\winmm.dllNếu thư viện bị thiếu hoặc lỗi, Windows sẽ không thể phát âm thanh.
5. Tài liệu tham khảo
Để tìm hiểu sâu hơn, bạn có thể tham khảo:
Siemens WinCC Alarm Logging Manual
Publication Number: A5E00711714-01
Tài liệu này trình bày chi tiết về:
GMsgFunction.
Alarm Logging.
Cấu hình Message Block.
C-Script trong WinCC.



