Hielscher Ultrasonics
Մենք ուրախ կլինենք քննարկել ձեր գործընթացը:
Զանգահարեք մեզ՝ +49 3328 437-420
Փոստ մեզ՝ [email protected]

Hielscher Sonicator XML տվյալների իրական ժամանակի Excel գրանցող

Hielscher սոնիկատորների համար նախատեսված այս իրական ժամանակի Excel գրանցողը թեթև VBA-ի վրա հիմնված լուծում է, որը թույլ է տալիս օգտատերերին պատկերացնել ուղիղ սոնիկացման տվյալները XML ձևաչափով հոսքային եղանակով: Այն ավտոմատ կերպով միանում է սոնիկատորին իր տեղական IP-ի միջոցով, կարդում է ուղիղ գործընթացի տվյալները, գրանցում դրանք Excel աղյուսակում և թարմացնում դինամիկ գրաֆիկը: Սա թույլ է տալիս օգտատերերին վերահսկել հիմնական պարամետրերը, ինչպիսիք են հզորությունը, ամպլիտուդը, էներգիան և ջերմաստիճանը, իրական ժամանակում՝ անմիջապես Excel-ի ներսում:

Ինչպես է այն աշխատում

Կատարման ժամանակ սկրիպտը հուշում է օգտատիրոջը մուտքագրել իրենց sonicator xml տվյալների XML աղբյուրի հասցեն (օրինակ՝ http://192.168.233.233/mdata.xml): Այնուհետև այն ստեղծում է կառուցվածքային վերնագրի տող և սկսում է տվյալներ ստանալ ամեն վայրկյան: Յուրաքանչյուր նոր տվյալ ավելացվում է աղյուսակին, և ցրման գծերի գրաֆիկը ցուցադրում է հզորության, ամպլիտուդի և էներգիայի միտումները ժամանակի ընթացքում: Սենսորային սխալի ցանկացած արժեք (օրինակ՝ եթե սենսոր միացված չէ) ավտոմատ կերպով զտվում է:

Հրահանգներ Windows օգտատերերի համար

Բացեք Visual Basic Editor-ը Excel-ում, տեղադրեք նոր մոդուլ և տեղադրեք ամբողջական սկրիպտը: InitLogger մակրոն գործարկելուց հետո գրանցողը կմեկնարկի ավտոմատ կերպով: Համոզվեք, որ մակրոները միացված են, և որ Excel-ն ունի ձեր ցանցին մուտք գործելու թույլտվություն:

Հրահանգներ macOS օգտատերերի համար

Բացեք Visual Basic Editor-ը Excel-ում: Տեղադրեք նոր մոդուլ և տեղադրեք ամբողջական սկրիպտը: Պարզապես գործարկեք նույն մակրոն, և տվյալները կբեռնվեն տրամադրված IP հասցեի միջոցով: MacOS օգտատերերը պետք է թույլ տան Excel-ին գործարկել AppleScript-ը և, եթե պահանջվի, կարող է անհրաժեշտ լինել ցանցային մուտքի թույլտվություն տրամադրել համակարգի կարգավորումներում:

Excel VBA կոդ՝ sonicator XML տվյալները Excel աղյուսակի մեջ բեռնելու համար։

Գործարկեք Excel VBA կոդը՝ sonicator-ի 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


Մենք ուրախ կլինենք քննարկել ձեր գործընթացը: