Каталог
Зателефонуйте мені
Каталог

Як зібрати статистику з WinCC RT у MS SQL та експортувати в Excel

Як зібрати статистику з WinCC RT у MS SQL та експортувати в Excel
Автор: Andriy Savechka Опубліковано: 29.05.2025 Переглядів: 1741 Коментарів: 0

У сучасних системах автоматизації збір, збереження та аналіз даних стають ключовими елементами ефективного керування технологічними процесами. Одним із популярних рішень для створення HMI та SCADA-проєктів є WinCC RT (Runtime), який дозволяє візуалізувати дані та взаємодіяти з обладнанням у реальному часі. Але коли виникає потреба у збереженні параметрів у базі даних або створенні звітів для керівництва — стандартних можливостей HMI стає недостатньо.

У цій статті ми розглянемо практичне рішення для збереження даних із WinCC RT у базу даних MS SQL та подальшого експорту інформації у вигляді зручних Excel-звітів. Покрокова інструкція допоможе налаштувати зв’язок між SCADA і SQL-сервером, автоматизувати запис параметрів та створити основу для аналітики — без складних скриптів і зайвих витрат.

Перед тим як перейти до основної частини, варто зазначити, що дана інструкція розрахована на користувачів, які вже мають базові знання в роботі з SQL Server. Автор припускає, що читач розуміє, як створювати бази даних і таблиці, знає синтаксис простих SQL-запитів (наприклад, INSERT, SELECT, UPDATE) і орієнтується у структурі реляційних баз даних. Окрім того, для реалізації частини функціоналу, пов’язаного з автоматичним експортуванням даних у Excel, буде використовуватись мова VBA, тому читачу бажано мати уявлення про те, як створюються макроси в Excel, і як працювати з редактором VBA.

 

Щоб було цікавіше: приклад із реального життя

Щоб читання цієї статті не перетворилось на суху технічну інструкцію, ми будемо розглядати роботу з даними на реальному прикладі — міні комбікормового заводу. Це не вигаданий кейс, а цілком типовий сценарій, з яким стикаються інженери з автоматизації на харчових і сільськогосподарських виробництвах.

У процесі виготовлення комбікорму потрібно змішувати кілька компонентів у заданих пропорціях. Серед основних інгредієнтів — пшениця та соя, а також мікродозовані добавки, такі як БІОЕНРАДИН, МІКРОТОКСИН, ПРЕМІКС та олія. Для кожного окремого "замісу" ми хочемо зберігати таку статистику:

  • скільки кожного компонента було задано оператором;

  • скільки реально було віддозовано;

  • дата і час події;

  • як бонус — можливість переглянути сумарний розхід кожного компонента за вибраний день.

На цьому прикладі ми покажемо, як створювати таблиці в SQL, записувати туди дані з WinCC RT Advanced, а також витягувати цю інформацію в Excel для зручного аналізу й формування звітів.

Нижче по тексту ми детально розбиратимемо, як усе це реалізується на практиці — крок за кроком: від створення бази даних до формування зведеної Excel-аналітики.

Необхідне програмне забезпечення

Для реалізації описаного в цій статті рішення вам знадобиться базовий набір програмного забезпечення, який здебільшого вже встановлений на робочому комп’ютері інженера-автоматизатора. Проте, для зручності, ми наведемо повний перелік необхідного ПЗ, коротко опишемо його призначення та залишимо посилання на офіційні джерела.

1. Microsoft SQL Server Express

Це безкоштовна редакція повноцінного SQL-сервера від Microsoft, яка чудово підходить для локального збереження та обробки даних. Якщо у вас вже встановлений TIA Portal, швидше за все SQL Server Express уже є на вашому ПК, оскільки він автоматично встановлюється разом з компонентами WinCC. Проте якщо ні — ви можете завантажити актуальну версію з офіційного сайту Microsoft.

2. SQL Server Management Studio (SSMS)

Це офіційний графічний інструмент від Microsoft для адміністрування SQL Server. З його допомогою ви зможете створювати бази даних, таблиці, переглядати журнали та виконувати SQL-запити. Завантажити SSMS можна безкоштовно з офіційної сторінки:
Завантажити SSMS

3. TIA Portal

Вам знадобиться будь-яка версія TIA Portal, яка підтримує створення проєктів WinCC RT Advanced for PC. Це може бути як повноцінна ліцензійна версія, так і демо (з обмеженням часу роботи Runtime). Саме через WinCC RT ми будемо передавати дані у SQL Server. Якщо у вас ще немає встановленого програмного забезпечення, ви можете скористатися пробною версією з офіційного сайту Siemens.

4. Microsoft Office (Excel)

Для створення звітів, аналізу даних і запуску макросів вам знадобиться Microsoft Excel. У статті буде описано, як за допомогою мови VBA (вбудованої в Excel) автоматизувати запити до бази даних і формувати зручні звіти. Підійде будь-яка версія, починаючи з Office 2010, однак рекомендовано використовувати сучасні версії для повної сумісності з усіма функціями.

Підготовка бази даних

Створення БД та структури таблиці

Перший крок — створення бази даних, у яку WinCC RT Advanced надсилатиме дані про процес дозування. Для цього скористаємося SQL Server Management Studio (SSMS). Якщо у вас MSSQL вже встановлено (а це майже гарантовано, якщо ви працюєте з TIA Portal), то залишилося лише запустити SSMS.

  1. Відкрийте SQL Server Management Studio.

  2. Підключіться до вашого локального SQL-сервера.

  3. Створіть нову базу даних — її назву можна вибрати довільно, наприклад, FeedMillStats.

  4. У цій базі даних ми створимо одну таблицю, яка міститиме всі необхідні поля для зберігання статистики.

Я не буду навантажувати цей розділ описом кожного кліка, адже ми підемо простішим шляхом. Нижче ви знайдете готовий SQL-скрипт, який усе створить автоматично — і базу даних, і таблицю з усіма потрібними колонками. Просто вставте його у вікно запитів SSMS та виконайте.

Звичайно, ви можете адаптувати цей скрипт під свої потреби — змінити назви полів, додати індекси або додаткові таблиці для архіву.

-- Створення бази даних
CREATE DATABASE FeedMillStats;
GO

-- Використання бази даних
USE FeedMillStats;
GO

-- Створення таблиці BatchData
CREATE TABLE BatchData (
    Id INT IDENTITY(1,1) PRIMARY KEY,        -- Унікальний ID для кожного запису
    DT DATETIME NOT NULL,                    -- Дата і час замісу
    RecName NVARCHAR(100),                   -- Назва рецепту
    C1 FLOAT,                                -- БІОЕНРАДИН (kg)
    C2 FLOAT,                                -- МІКРОТОКСИН (kg)
    C3 FLOAT,                                -- ПРЕМІКС (kg)
    C4 FLOAT,                                -- ПШЕНИЦЯ (kg)
    C5 FLOAT,                                -- СОЯ (kg)
    Sunflower FLOAT                          -- ОЛІЯ (kg)
);

Після запуску скрипта у вас повинна бути створерна БД та табличка в ній з відповідними полями

 

Заповнення таблички випадковими даними

Для того, аби вам у подальшому було цікавіше працювати з вибірками, давайте наповнимо таблицю випадковими, але правдоподібними даними.

Для цього свористаємося скриптом нижче

USE FeedMillStats;
GO

-- Очищення таблиці (опційно)
TRUNCATE TABLE BatchData;

DECLARE @i INT = 0;
DECLARE @n INT = 0;
DECLARE @baseDate DATETIME = '2025-05-09 06:00:00'; -- Починаємо з 6:00 ранку

WHILE @i < 50
BEGIN
SET @n = ABS(CHECKSUM(NEWID())) % 5 + 1;
    INSERT INTO BatchData (DT, RecName, C1, C2, C3, C4, C5, Sunflower)
    VALUES (
        DATEADD(MINUTE, @i * 10, @baseDate),  -- кожен наступний запис на 10 хв пізніше
        CHOOSE(@n,
               'Фініш Стайня 1',
               'Фініш Стайня 2',
               'Ріст Стайня 1',
               'Ріст Стайня 2',
               'Стартер'),
        ROUND(0.1 + RAND(CHECKSUM(NEWID())) * 0.1, 2),                         -- БІОЕНРАДИН
        ROUND(0.2 + RAND(CHECKSUM(NEWID())) * 0.2, 2),                         -- МІКРОТОКСИН
        ROUND(12.0 + RAND(CHECKSUM(NEWID())) * 1.0, 2),                        -- ПРЕМІКС
        ROUND(160 + RAND(CHECKSUM(NEWID())) * 15, 4),                          -- ПШЕНИЦЯ
        ROUND(55 + RAND(CHECKSUM(NEWID())) * 5, 5),                            -- СОЯ
        ROUND(9.5 + RAND(CHECKSUM(NEWID())) * 1.0, 6)                          -- ОЛІЯ
    );

    SET @i += 1;
END

В результаті у вас має вийти заповнена табличка з схожими даними

Підключення до бази даних через ODBC

Що таке ODBC?

ODBC (Open Database Connectivity) — це універсальний інтерфейс, який дозволяє програмам (наприклад, Excel або скриптам у WinCC RT Advanced) підключатися до різних баз даних, зокрема Microsoft SQL Server, без необхідності враховувати специфіку кожної з них. ODBC виступає посередником між програмою та СУБД і використовує DSN (Data Source Name) — ім’я конфігурації з усіма параметрами підключення.

У нашому прикладі через ODBC буде організований доступ як з Excel, так і з VBA скриптів у WinCC RT Advanced до бази даних MSSQL, у якій зберігається статистика замісів.

Як налаштувати ODBC на Windows

  • Відкрити менеджер ODBC:

    • Найшвидший спосіб — натиснути Win + R, ввести команду:

      odbcad32
      

      і натиснути Enter.

    • У Windows є дві версії ODBC менеджера:

      • 32-біт: C:\Windows\SysWOW64\odbcad32.exe

      • 64-біт: C:\Windows\System32\odbcad32.exe

      Якщо ви використовуєте 32-бітний Excel чи TIA Portal (навіть на 64-бітній ОС), створюйте підключення у відповідному менеджері.

  • Створення нового DSN:

    • Перейдіть на вкладку "System DSN" або "User DSN".

    • Натисніть "Add...".

    • Виберіть драйвер SQL Server або ODBC Driver XX for SQL Server (наприклад, "ODBC Driver 17 for SQL Server").

    • У вікні, що з’явиться:

      • Name: winccf (це буде ім’я, яке ви використовуватимете в скриптах)

      • Server: localhost\SQLEXPRESS або назва вашого MSSQL сервера

        ODBC Setup

        Щоб пришвидшити вибір сервера при створенні ODBC, ви можете просто скопіювати його назву з вікна входу в SSMS (SQL Server Management Studio). З досвіду можу сказати, що випадаючий список серверів часто довго завантажується і не завжди показує всі доступні SQL-сервери.

      • Далі оберіть тип автентифікації:

        • Windows Authentication — якщо працюєте в тій же системі.

        • SQL Server Authentication — якщо використовується логін/пароль.

      • Оберіть базу даних: FeedMillStats (або ту, яку ви створили).

    • Натисніть Finish і протестуйте підключення.

На цьому налаштування ODBC завершене. Якщо у вас усе вдалося — драйвер встановлено, а підключення з назвою winccf створено й успішно протестовано — можемо переходити до наступного етапу. 

VBA-скрипт для збереження даних у SQL з WinCC Runtime

Щоб передати фактичні значення компонентів у базу даних із середовища WinCC RT (наприклад, після завершення процесу дозування), можна скористатися наступним VBA-скриптом. Він підключається до SQL Server через попередньо налаштований ODBC-драйвер (winccf) і вставляє новий запис у таблицю BatchData.

Код скрипта:

Sub SaveStatsSQL()
    ' Оголошення змінних для підключення, запиту, імені файлу тощо
    Dim conn, rst, SQL, fileName, fso, f, line

    ' Створення об'єктів для ADO-з'єднання та результатів запиту
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")

    ' Відкриття з'єднання через ODBC-драйвер з DSN "winccf"
    conn.Open "Provider=MSDASQL;DSN=winccf"

    ' Перевірка, чи активований тригер на запис (встановлюється з PLC)
    If SmartTags("dbMix_SaveLog") Then

        ' Формування SQL-запиту на вставку нового запису в таблицю
        SQL = "INSERT INTO BatchData VALUES(GETDATE(),'" & _
            SmartTags("ActRecName") & "'," & _
            SmartTags("dbC1_Actual") & "," & _
            SmartTags("dbC2_Actual") & "," & _
            SmartTags("dbC3_Actual") & "," & _
            SmartTags("dbC4_Actual") & "," & _
            SmartTags("dbC5_Actual") & "," & _
            SmartTags("dbSunFlowerDos_Actual") & ")"

        ' (Необов’язково) Збереження SQL-запиту у текстовий лог-файл
        ' Для налагодження або архівування:
        '
        ' Set fso = CreateObject("Scripting.FileSystemObject")
        ' fileName = "c:\DATA_LOG\test.txt"
        ' If Not (fso.FileExists(fileName)) Then
        '     Set f = fso.CreateTextFile(fileName, 8)
        '     f.WriteLine SQL
        '     f.Close
        ' Else
        '     Set f = fso.OpenTextFile(fileName, 8)
        '     f.WriteLine SQL
        '     f.Close
        ' End If

        ' Виконання SQL-запиту
        Set rst = conn.Execute(SQL)

    End If

    ' Після запису скидаємо тригер назад у 0
    SmartTags("dbMix_SaveLog") = False

End Sub

Як це працює:

  1. Очікування тригера:
    У програмі ПЛК, коли всі фактичні значення дозування готові до запису, тег dbMix_SaveLog встановлюється в значення 1.

  2. Перевірка тега:
    Скрипт перевіряє значення тега SmartTags("dbMix_SaveLog"). Якщо це True, тоді виконується побудова SQL-запиту на вставку.

  3. Формування запиту:
    У таблицю BatchData вставляються такі дані:

    • Поточна дата і час (GETDATE()),

    • Назва рецепту,

    • Фактичні значення дозування (відповідні теги).

  4. Підключення до SQL:
    Скрипт використовує попередньо створене ODBC-підключення з ім’ям winccf.

  5. Виконання запиту:
    Дані передаються в базу за допомогою ADO-з'єднання.

  6. Скидання тригера:
    Після запису тег dbMix_SaveLog скидається в False, щоб уникнути повторного запису того самого набору даних.

Важливий момент: налаштування тега dbMix_SaveLog у WinCC

Щоб усе працювало коректно, у властивостях тега dbMix_SaveLog потрібно встановити параметр:

Acquisition mode: Cyclic Continuous (Циклічний, постійний)

Це необхідно для того, щоб значення тега постійно оновлювалося в скрипті й скрипт зміг «впіймати» момент, коли значення стане 1.

Окрім встановлення режиму зчитування Cyclic Continuous, необхідно також:

У подіях тега dbMix_SaveLog додати обробку події Value Change, у якій викликається процедура SaveStatsSQL.

Це забезпечить автоматичне виконання скрипта одразу після того, як у тега зміниться значення на 1, що сигналізує про готовність даних до запису.

На даному етапі скрипт готовий до використання. Можете переходити до його тестування та перевірки фактичного запису даних у базу.

Якщо ви ще не готові тестувати повноцінно з ПЛК, можна створити внутрішні теги в WinCC RT (Internal Tags), вручну задавати їм значення через візуалізацію, а як тригер використовувати кнопку, яка буде встановлювати тег dbMix_SaveLog у значення 1. Це дозволить перевірити роботу скрипта без підключення до обладнання.

Відображення даних у Excel

Для зручного аналізу та перегляду даних з бази ми реалізуємо просту форму в Excel, яка дозволяє обирати дату і переглядати відповідні записи.

Але перш ніж перейти до створення макросів та форми, необхідно активувати в Excel вкладку Розробник, яка надає доступ до VBA-редактора та інструментів для роботи з формами.

Як увімкнути вкладку "Розробник" в Excel:

  1. Відкрийте Excel.

  2. Перейдіть у ФайлПараметри.

  3. У лівому меню оберіть Налаштування стрічки.

  4. У правій частині встановіть галочку біля «Розробник» (або Developer).

  5. Натисніть ОК.

Після цього у верхній частині Excel з’явиться нова вкладка «Розробник», яка дозволить:

  • відкривати редактор Visual Basic;

  • створювати форми;

  • працювати з макросами та зовнішніми даними (зокрема через ODBC-з’єднання).

Увімкнення макросів та дозвіл на виконання коду

Щоб макроси у вашій Excel-книзі працювали, необхідно дозволити їх виконання:

  1. Після відкриття файлу зверніть увагу на жовту панель у верхній частині Excel з повідомленням «Безпека макросів».

  2. Натисніть кнопку «Увімкнути вміст» (Enable Content), щоб дозволити виконання коду.

Також в останніх версіях Windows з'явився додатковий механізм безпеки для захисту від небажаних макросів. Якщо ви завантажили файл Excel з Інтернету або отримали його поштою, то перед його відкриттям потрібно:

  1. Натиснути правою кнопкою миші на файл.

  2. Обрати «Властивості» (Properties).

  3. Внизу у вікні поставити галочку «Розблокувати» (Unblock).

  4. Натиснути «Застосувати» і «ОК».

Це дозволить Excel не блокувати виконання макросів навіть при активованому захисті. Без цього макроси можуть не запускатися, навіть якщо ви дозволите їх у самому Excel.

Контрол для вибору дати в EXCEL

Перш ніж перейти до побудови інтерфейсу для відображення даних у Excel, варто звернути увагу на один важливий момент — вибір дати. На жаль, стандартний набір елементів управління у VBA не включає зручного календаря, який дозволяє швидко вибирати дату через візуальний інтерфейс.

Щоб покращити користувацький досвід, ми будемо використовувати сторонній календарний клас, який можна легко інтегрувати в Excel-проєкт. Це проста, але функціональна реалізація календаря на основі класів VBA, яка не вимагає встановлення додаткових бібліотек або COM-компонентів.

Ось посилання на сам календар:
Calendar_Class_v2.0.0.zip

Цей календар:

  • реалізований повністю на VBA;

  • дозволяє вставляти діалог вибору дати у будь-яку форму (UserForm);

  • працює без додаткових зовнішніх залежностей;

  • зберігає стабільну роботу навіть у нових версіях Office.

Як встановити календар у свій проєкт

  1. Завантажте архів за посиланням.

  2. Відкрийте Excel-файл із увімкненим редактором VBA (натисніть Alt + F11).

  3. Імпортуйте файли .cls і .frm з архіву до свого проєкту(перед цим звісно необхідно ці файли експортувати з Calendar_Class_v2.0.0.xlsm):

    • У редакторі VBA: File -> Import File для кожного з файлів.

      якщо все правильно зробили, має вийти як на картинці вище.

  4. Тепер ви можете викликати календар з будь-якої форми або макросу за допомогою простого коду. Це значно полегшить вибір діапазону дат під час роботи з базою даних у наступних кроках.

VBA-скрипт для вибірки даних у Excel

На цьому етапі ми реалізуємо механізм отримання даних з нашої бази даних безпосередньо в Excel за допомогою VBA. Це дозволить зручно переглядати історичні значення, фільтрувати їх за датами та експортувати в зручному для користувача вигляді. Такий підхід особливо корисний для операторів чи технологів, які не мають доступу до SQL Server Management Studio, але потребують доступу до статистики.

Щоб зробити вибірку максимально гнучкою, ми використаємо форму з календарем для вибору діапазону дат та запитом до бази даних через ODBC. VBA-скрипт буде автоматично підключатися до джерела даних (DSN winccf), виконувати SQL-запит і виводити результат у вигляді таблиці на окремий лист Excel.

Як я і обіцяв на початку, ми реалізуємо дві форми статистики: детальну по кожному замісу, а також зведену — сумарну по кожному рецепту за вибраний день. Отже, відкриваємо наш підготовлений Excel-файл з імпортованими макросами і створюємо в ньому дві окремі вкладки для зручного представлення цих даних.

Далі відкриваємо редактор VBA, двічі клікаємо по вкладці, яка відповідає статистиці за день, і вставляємо туди наступний код.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim Query1

' Вимикаємо оновлення екрану для покращення продуктивності
Application.ScreenUpdating = False

' Очищаємо всі дані на аркуші
Cells.Clear

' Зберігаємо клітинку, у яку було зроблено подвійний клік, у змінну Target форми вибору дати
Set DatePickerForm.Target = Target.Cells(1, 1)

' Відкриваємо модальну форму з календарем для вибору дати
DatePickerForm.Show vbModal

' Забороняємо стандартну дію подвійного кліку (редагування клітинки)
Cancel = True

' Форматуємо обрану дату у форматі 'yyyy-MM-dd' для SQL-запиту
D = "'" & Format(DatePickerForm.Calendar.Value, "yyyy-MM-dd") & "'"

' Формуємо SQL-запит для вибірки даних із таблиці BatchData за обрану дату
Query1 = "set textsize 100 SELECT dt as 'Дата час', RecName as 'Рецепт'" & _
", C1 as 'БІОЕНРАДИН(kg)'" & _
", C2 as 'МІКРОТОКСИН(kg)'" & _
", C3 as 'ПРЕМІКС(kg)'" & _
", C4 as 'ПШЕНИЦЯ(kg)'" & _
", C5 as 'СОЯ(kg)'" & _
", Sunflower as 'ОЛІЯ(kg)'" & _
" FROM BatchData" & _
" WHERE CONVERT(DATE, DT) = " & D & " ORDER BY DT DESC"

' --- Підключення до бази даних через ODBC ---
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "Provider=MSDASQL;DSN=winccf"

' Виконуємо запит і зберігаємо результат у Recordset
Set rst = conn.Execute(Query1)

' --- Вивід заголовків полів у перший рядок ---
fldCount = rst.Fields.Count
For iCol = 1 To fldCount
    Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
Next

' --- Вивід самих даних, починаючи з другого рядка ---
Cells(2, 1).CopyFromRecordset (rst)

' --- Оформлення таблиці ---
Range("A1", Cells(1, ActiveSheet.UsedRange.Columns.Count)).Font.Bold = True

With ActiveSheet.UsedRange
    .Range("A:A").NumberFormat = "dd.mm.yyyy h:mm:ss"   ' формат дати
    .Range("B:E").NumberFormat = "0.0"                  ' формат чисел
    .HorizontalAlignment = xlCenter                     ' центрування по горизонталі
    .VerticalAlignment = xlCenter                       ' центрування по вертикалі
    .WrapText = True                                    ' перенесення тексту
    .ColumnWidth = 30                                   ' початкова ширина колонок
    .Borders.Color = vbBlack                            ' чорні рамки
    .Font.Name = "Arial"
    .Font.Size = 11
    .ShrinkToFit = True                                 ' масштабування шрифту до вмісту
    .EntireColumn.AutoFit                              ' автоширина колонок
End With

' --- Заморожуємо перший рядок як шапку таблиці ---
Rows("1:1").Select
With ActiveWindow
    .SplitColumn = 0
    .SplitRow = 1
End With
ActiveWindow.FreezePanes = True

' Увімкнення оновлення екрану
Application.ScreenUpdating = True

' Закриваємо з'єднання з базою даних
conn.Close

End Sub

Зберігаємо файл Excel (обов’язково з підтримкою макросів — формат `.xlsm`) та перевіряємо, що у нас вийшло:

1. Подвійний клік на будь-якій клітинці аркуша відкриває календар.
2. Після вибору дати — запускається скрипт, який під’єднується до бази даних і витягує записи за вибраний день.
3. Дані автоматично вставляються в таблицю  — з заголовками, форматуванням та фіксацією верхнього рядка.

Якщо все працює — вітаю! Ви щойно реалізували інтерактивну аналітичну вибірку прямо в Excel. Якщо ж виникли помилки — перевіряємо з’єднання з базою, правильність SQL-запиту, наявність макросів і доступ до ODBC-джерела winccf.

а ось код для вкладки "За день Сумарно"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim Query1

' Вимикаємо оновлення екрана, щоб уникнути мерехтіння та пришвидшити виконання
Application.ScreenUpdating = False

' Очищаємо весь вміст активного аркуша
Cells.Clear

' Призначаємо клітинку, по якій двічі клікнули, як ціль для вибору дати у формі
Set DatePickerForm.Target = Target.Cells(1, 1)

' Відкриваємо форму з календарем для вибору дати
DatePickerForm.Show vbModal

' Вимикаємо стандартну дію подвійного кліку (редагування клітинки)
Cancel = True

' Зберігаємо вибрану дату у форматі 'yyyy-MM-dd' для використання у SQL-запиті
D = "'" & Format(DatePickerForm.Calendar.Value, "yyyy-MM-dd") & "'"

' Формуємо SQL-запит:
' - Встановлюємо максимальний розмір текстових полів (на всякий випадок)
' - Обираємо назву рецепту (RecName)
' - Обчислюємо суму по кожному інгредієнту за обрану дату
' - Обчислюємо загальну масу по всіх інгредієнтах
' - Групуємо результат по назві рецепту
Query1 = "SET TEXTSIZE 100 SELECT RecName as 'Рецепт'" & _
", SUM(C1) as 'БІОЕНРАДИН(kg)'" & _
", SUM(C2) as 'МІКРОТОКСИН(kg)'" & _
", SUM(C3) as 'ПРЕМІКС(kg)'" & _
", SUM(C4) as 'ПШЕНИЦЯ(kg)'" & _
", SUM(C5) as 'СОЯ(kg)'" & _
", SUM(Sunflower) as 'ОЛІЯ(kg)'" & _
", SUM(C1)+SUM(C2)+SUM(C3)+SUM(C4)+SUM(C5)+SUM(Sunflower) as 'Total(kg)'" & _
" FROM BatchData " & _
" WHERE CONVERT(DATE, DT) = " & D & " GROUP BY RecName"

' Пояснення SQL:
' SELECT RecName as 'Рецепт'
'   => вибираємо назву рецепту
' SUM(C1) ... SUM(Sunflower)
'   => рахуємо сумарну кількість кожного інгредієнта
' Total(kg)
'   => обчислюємо загальну суму по всім інгредієнтам
' FROM BatchData
'   => вибірка з таблиці BatchData
' WHERE CONVERT(DATE, DT) = 'обрана дата'
'   => вибираємо лише ті записи, які відповідають вибраній даті
' GROUP BY RecName
'   => групуємо записи по назві рецепта (тобто кілька партій одного рецепта будуть зведені в одну строку)

' Підключаємося до бази даних через ODBC-джерело 'winccf'
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "Provider=MSDASQL;DSN=winccf"

' Виконуємо SQL-запит
Set rst = conn.Execute(Query1)

' Вставляємо заголовки стовпців у перший рядок аркуша
fldCount = rst.Fields.Count
For iCol = 1 To fldCount
    Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
Next

' Вставляємо дані з результатів запиту, починаючи з другого рядка
Cells(2, 1).CopyFromRecordset rst

' Форматуємо заголовки — робимо жирним шрифтом
Range("A1", Cells(1, ActiveSheet.UsedRange.Columns.Count)).Font.Bold = True

' Форматуємо всю таблицю
With ActiveSheet.UsedRange
    .Range("A:A").NumberFormat = "dd.mm.yyyy h:mm:ss"  ' Формат дати
    .Range("B:E").NumberFormat = "0.0"                 ' Формат чисел з десятковим
    .HorizontalAlignment = xlCenter                    ' Горизонтальне вирівнювання
    .VerticalAlignment = xlCenter                      ' Вертикальне вирівнювання
    .WrapText = True                                   ' Переносити текст
    .ColumnWidth = 30                                  ' Ширина колонок
    .Borders.Color = vbBlack                           ' Чорна рамка
    .Font.Name = "Arial"                               ' Шрифт
    .Font.Size = 11                                    ' Розмір шрифту
    .ShrinkToFit = True                                ' Підганяти вміст під розмір клітинки
    .EntireColumn.AutoFit                              ' Автоматичне підганяння ширини стовпців
End With

' Закріплюємо перший рядок при прокрутці
Rows("1:1").Select
With ActiveWindow
    .SplitColumn = 0
    .SplitRow = 1
End With
ActiveWindow.FreezePanes = True

' Увімкнення оновлення екрану після завершення всіх дій
Application.ScreenUpdating = True

' Закриваємо з'єднання з БД
conn.Close

End Sub

Цей макрос дозволяє подвійним кліком на аркуші вибрати дату через форму-календар, виконати SQL-запит до бази, який підсумовує витрати інгредієнтів по кожному рецепту за цю дату, і вивести зведену таблицю у форматованому вигляді прямо в Excel.

 

Підсумовуючи, механізм відображення даних у Excel дозволяє не лише автоматично завантажувати й структурувати інформацію з бази даних за вибраною датою, а й представляти її у зручному та наочному вигляді. Завдяки форматуванню, розмітці та фіксації заголовків користувач отримує читабельну та професійно оформлену таблицю, яка готова до подальшого аналізу, друку або звітності — без необхідності ручного втручання.

Висновок

Отже, ми пройшли повний шлях — від збирання статистики у WinCC до автоматичного вивантаження та відображення цих даних у Excel з можливістю вибору дати через зручний календар. Ви побачили, як за допомогою простих інструментів можна організувати облік та аналіз даних по кожному замісу й по рецептах загалом. Подібна інтеграція між SCADA та Excel значно спрощує роботу операторів, технологів і керівників змін, дозволяючи оперативно отримувати необхідну інформацію в зручному форматі.

Сподіваюся, ця стаття була для вас корисна. Якщо так — не соромтеся залишити свій відгук або враження в коментарях. Ваші відгуки мотивують продовжувати ділитися новими практичними рішеннями.

Коментарі

Додайте коментар...

Ім'я
E-mail (Не буде опублікований)
Ваш коментар
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Авторизація
Немаєте акаунта? Реєстрація
Забыли пароль?
E-mail
Введите e-mail Вашей учетной записи, чтобы получить пароль.
Введите корректно e-mail!
viber-chatЧат «А2М» в Viber telegram-chatЧат «А2М» в Telegram
Telegram QR
💬 Актуальні ціни
завжди під рукою