Hielscher Ultrasonics
Ще се радваме да обсъдим вашия процес.
Обадете ни се: +49 3328 437-420
Изпратете ни поща: info@hielscher.com

Програма за запис на данни в реално време Excel за Hielscher Sonicator XML данни

Този логер в реално време в Excel за сонатори Hielscher е леко решение, базирано на VBA, което позволява на потребителите да визуализират данни за сониране в реално време, предавани в XML формат. То автоматично се свързва със соникатор чрез неговия локален IP адрес, изчита данни за процеса в реално време, записва ги в таблица на Excel и актуализира динамична диаграма. Това позволява на потребителите да наблюдават ключови параметри като мощност, амплитуда, енергия и температура в реално време - директно в Excel.

Как работи

При изпълнение на скрипта потребителят се подканва да въведе XML адреса на източника на своите xml данни за соникатор (напр. http://192.168.233.233/mdata.xml). След това той създава структуриран заглавен ред и започва да извлича данни на всяка секунда. Всяка нова точка от данни се добавя към таблицата, а диаграма с разпръснати линии показва тенденциите на мощността, амплитудата и енергията във времето. Всички стойности на грешка на сензора (напр. ако не е свързан сензор) се филтрират автоматично.

Инструкции за потребители на Windows

Отворете редактора Visual Basic в Excel, вмъкнете нов модул и поставете пълния скрипт. След като стартирате макроса InitLogger, регистраторът ще се стартира автоматично. Уверете се, че макросите са разрешени и че Excel има разрешение за достъп до вашата мрежа.

Инструкции за потребители на macOS

Отворете редактора Visual Basic в Excel. Вмъкнете нов модул и поставете целия скрипт. Просто стартирайте същия макрос и данните ще бъдат изтеглени чрез предоставения IP адрес. Потребителите на MacOS трябва да разрешат на Excel да изпълнява AppleScript и може да се наложи да предоставят достъп до мрежата в системните предпочитания, ако бъдат подканени.

Код VBA за Excel за зареждане на XML данни от соникатор в електронна таблица на Excel.

Изпълнете кода VBA на Excel за зареждане на XML данни от соникатора в електронна таблица.

Актуализации, отказ от отговорност и лиценз

В зависимост от типа на устройството и от версията на доставения софтуер низът от данни xml може да се различава. Той може да съдържа различен брой стойности и в различен ред или формат. Следователно може да се наложи да коригирате съответно скрипта по-долу. Няма задължения за техническа поддръжка, отстраняване на грешки или бъдещи актуализации. Този инструмент се предоставя без каквито и да било гаранции или обезпечения. Това изрично изключва подразбиращи се гаранции като продаваемост или годност за определена цел. Hielscher Ultrasonics не носи отговорност за каквито и да било щети, включително преки, косвени или последващи щети, произтичащи от използването на софтуера. Това е само пример. Той може да се използва свободно само за нетърговски и изследователски цели. Преразпространението е разрешено с посочване на подходящо авторство. Препродажбата с търговска цел или включването в собствени системи е строго забранено без предварително писмено съгласие.

Реализация на Excel за зареждане на данни от соникатора в Excel.

Sonicator XML данни в електронна таблица на Excel

Искане за информация




Обърнете внимание на нашите Политика за поверителност.





Това видео ще ви покаже как да записвате XML данни от соникатора в Microsoft Excel.

Как да записвате данните от соникатора на живо директно в електронна таблица на Excel


' ==============================================================================
' Realtime Excel Logger for Hielscher Sonicator XML Data
'
' Description:
' This VBA module fetches XML data from a Hielscher sonicator over the network
' (typically from a local IP like http://192.168.233.233/mdata.xml), parses it,
' logs real-time data into Excel, and visualizes selected parameters (Power, Amplitude,
' and Energy) using a live updating scatter-line chart.
'
' Disclaimer & License:
' This script is provided "as is" without any warranty. It is free for non-commercial
' use, and redistribution is permitted only with attribution. Resale or inclusion in
' commercial software is strictly prohibited without explicit permission.
' (c) Hielscher Ultrasonics GmbH (Germany), 2025. All rights reserved. https://www.hielscher.com
' Last Update: June 17th, 2025, for sonicator software version 25.0.1
' ==============================================================================

' === Realtime Excel Logger Module ===
Dim nextRow As Long                     ' Row index for logging the next data point
Dim chartObject As chartObject          ' Reference to the live chart object
Dim isRunning As Boolean                ' Controls whether logging continues

' === MAIN ENTRY POINT ===
Sub InitLogger()
    Dim ws As Worksheet
    Set ws = Sheet1                     ' Use the first worksheet

    ws.Cells.Clear                      ' Clear all existing content on the sheet

    ' Request and store the XML source IP address
    ws.Cells(1, 1).Value = "XML Source"
    ws.Cells(1, 2).Value = InputBox("Enter device IP address", "XML Source", "http://192.168.233.233/mdata.xml")

    ' Create header row starting at row 2
    ws.Cells(2, 1).Resize(1, 14).Value = Array( _
        "Timestamp", "Status", "Total Power (W)", "Net Power (W)", "Amplitude (%)", _
        "Energy (Ws)", "ADC", "Frequency (Hz)", "Temperature (°C)", "Time (s)", _
        "ControlBits", "LimitType", "SetPower (%)", "Cycle (%)")

    nextRow = 3                         ' Start logging at row 3
    isRunning = True                    ' Enable logging loop
    Application.OnTime Now + TimeSerial(0, 0, 1), "LoggerTick" ' Schedule first data fetch
End Sub

' === PERIODIC TIMER CALLBACK ===
Sub LoggerTick()
    If Not isRunning Then Exit Sub
    FetchOnce
    Application.OnTime Now + TimeSerial(0, 0, 1), "LoggerTick" ' Schedule next fetch
End Sub

' === FETCH AND LOG DATA ===
Sub FetchOnce()
    Dim ipAddress As String, rawData As String
    Dim dataFields() As String, mStart As Long, mEnd As Long
    Dim ws As Worksheet: Set ws = Sheet1

    ipAddress = Trim(ws.Cells(1, 2).Value)   ' Get IP from input cell
    If ipAddress = "" Then Exit Sub          ' Exit if IP is missing

    rawData = GetMDataXML(ipAddress)         ' Fetch the raw XML from device
    If rawData = "" Then Exit Sub            ' Exit if fetch failed

    ' Extract only the content inside  ... 
    mStart = InStr(rawData, "")
    mEnd = InStr(rawData, "")
    If mStart = 0 Or mEnd = 0 Then Exit Sub  ' Exit if tag not found

    rawData = Mid(rawData, mStart + 7, mEnd - mStart - 7)
    dataFields = Split(rawData, ";")        ' Parse by semicolon delimiter
    If UBound(dataFields) < 12 Then Exit Sub ' Ensure all fields are present

    ' Determine next available row
    nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1

    ' Write parsed values into worksheet
    With ws
        .Cells(nextRow, 1).Value = Format(Now, "yyyy-mm-dd HH:nn:ss")           ' Timestamp (rounded to seconds)
        .Cells(nextRow, 2).Value = Val(dataFields(0))                            ' Status
        .Cells(nextRow, 3).Value = Val(dataFields(1)) / 10                       ' Total Power (W)
        .Cells(nextRow, 4).Value = Val(dataFields(2)) / 10                       ' Net Power (W)
        .Cells(nextRow, 5).Value = Val(dataFields(3)) / 10                       ' Amplitude (%)
        .Cells(nextRow, 6).Value = Val(dataFields(4))                            ' Energy (Ws)
        .Cells(nextRow, 7).Value = Val(dataFields(5)) / 10                       ' ADC
        .Cells(nextRow, 8).Value = Val(dataFields(6))                            ' Frequency (Hz)
        .Cells(nextRow, 9).Value = IIf(Val(dataFields(7)) = 2550, "", Val(dataFields(7)) / 10) ' Temperature (°C), blank if 255
        .Cells(nextRow, 10).Value = Val(dataFields(8)) / 10                      ' Time (s)
        .Cells(nextRow, 11).Value = Val(dataFields(9))                           ' ControlBits
        .Cells(nextRow, 12).Value = IIf(Val(dataFields(10)) = 0, "", Val(dataFields(10)))     ' LimitType, blank if 0
        .Cells(nextRow, 13).Value = Val(dataFields(11)) / 20                     ' SetPower (%)
        .Cells(nextRow, 14).Value = Val(dataFields(12)) / 10                     ' Cycle (%).Value = Val(dataFields(12)) / 10     ' Cycle (%)
    End With

    UpdateChart
End Sub

' === CREATE / UPDATE SCATTER-LINE CHART ===
Sub UpdateChart()
    Dim ws As Worksheet: Set ws = Sheet1
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    If lastRow < 4 Then Exit Sub

    ' Format timestamp column to display yyyy-mm-dd HH:mm:ss
    ws.Columns(1).NumberFormat = "yyyy-mm-dd hh:mm:ss"

    ' Create chart if not already initialized
    If chartObject Is Nothing Then
        Set chartObject = ws.ChartObjects.Add(Left:=ws.Cells(2, 16).Left, Top:=ws.Cells(2, 16).Top, Width:=500, Height:=300)
        chartObject.Name = "LiveChart"
    End If

    ' Configure the scatter line chart with latest data
    With chartObject.Chart
        .ChartType = xlXYScatterLines
        Do While .SeriesCollection.Count > 0: .SeriesCollection(1).Delete: Loop

        ' Plot Total Power
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "Power (W)"
        .SeriesCollection(1).XValues = ws.Range("A3:A" & lastRow)
        .SeriesCollection(1).Values = ws.Range("C3:C" & lastRow)

        ' Plot Amplitude
        .SeriesCollection.NewSeries
        .SeriesCollection(2).Name = "Amplitude (%)"
        .SeriesCollection(2).XValues = ws.Range("A3:A" & lastRow)
        .SeriesCollection(2).Values = ws.Range("E3:E" & lastRow)

        ' Plot Energy
        .SeriesCollection.NewSeries
        .SeriesCollection(3).Name = "Energy (Ws)"
        .SeriesCollection(3).XValues = ws.Range("A3:A" & lastRow)
        .SeriesCollection(3).Values = ws.Range("F3:F" & lastRow)

        .HasTitle = True
        .ChartTitle.Text = "Hielscher Sonicator: Live Chart"
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.Text = "Time"
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.Text = "Value"

        ' Format the X-axis to show MM:SS
        .Axes(xlCategory).TickLabels.NumberFormat = "mm:ss"
    End With
End Sub

' === FETCH XML VIA PLATFORM-SPECIFIC METHOD ===
Function GetMDataXML(ip As String) As String
    Dim os As String: os = Application.OperatingSystem

    ' macOS: use AppleScript shell call to curl
    If InStr(1, os, "Mac", vbTextCompare) > 0 Then
        Dim script As String
        script = "do shell script " & Chr(34) & "curl -s " & ip & Chr(34)
        On Error Resume Next
        GetMDataXML = MacScript(script)
        If Err.Number <> 0 Then GetMDataXML = ""

    ' Windows: use MSXML2.XMLHTTP request
    Else
        Dim http As Object
        Set http = CreateObject("MSXML2.XMLHTTP")
        On Error Resume Next
        http.Open "GET", ip, False
        http.Send
        If Err.Number = 0 And http.Status = 200 Then
            GetMDataXML = http.responseText
        Else
            GetMDataXML = ""
        End If
    End If
End Function


Ще се радваме да обсъдим вашия процес.

Нека се свържем.