Difference between revisions of "External tools: Rosette computation"

Jump to navigation Jump to search
no edit summary
Line 1: Line 1:
{{Addon
| name        = Rosette Computation
| version    = 1.000b
| compatibility = NVGate V12 and above
| author      = OROS
| category    = Signal Processing
}}
= Rosette Computation — External Tool =
The '''Rosette Computation''' tool is a standalone NVGate add-on that transforms raw strain gauge rosette signals into principal stress and principal stress angle time histories. It reads a time-domain measurement directly from the NVGate Player, performs the Mohr's circle computation sample by sample, and writes a new measurement back into the same NVGate project — ready to be analysed, displayed or exported like any other signal.
[[File:RosetteAddon_screenshot.png|thumb|right|400px|Rosette Computation add-on — main window]]
----
== Principle ==
A '''strain gauge rosette''' is a set of three strain gauges bonded close together on a surface and oriented at fixed angular offsets from each other. Because a single gauge only measures the normal strain in one direction, at least three gauges at known angles are needed to fully characterise the two-dimensional strain state at that point.
Once the three principal strains (ε₁, ε₂) and their orientation θ are known, the principal stresses (σ₁, σ₂) are derived using the plane-stress constitutive relations for a linear isotropic material.
The tool implements this calculation '''sample by sample''' over the full length of the signal, producing two additional time channels:
{| class="wikitable" style="width:70%"
|-
! Output channel !! Physical quantity !! Unit
|-
| '''Principal Stress Magnitude''' || Maximum principal stress σ₁ || Pa
|-
| '''Principal Stress Angle''' || Orientation of σ₁ w.r.t. gauge A || rad
|}
----
== Supported Rosette Configurations ==
Three standard rosette layouts are supported:
{| class="wikitable" style="width:90%"
|-
! Configuration !! Gauge angles !! Typical use
|-
| '''Rectangular / 45°''' || 0° — 45° — 90° || General-purpose; most common in industry
|-
| '''Delta / 60°''' || 0° — 60° — 120° || Equiangular rosette; more isotropic sensitivity
|-
| '''0° / 120° / 240°''' || 0° — 120° — 240° || Alternative delta layout; same calculation as 60°
|}
=== Mathematical formulas ===
==== Rectangular rosette (0° / 45° / 90°) ====
With εA, εB, εC being the strains measured by gauges A, B, C respectively:
:<math>\text{Center} = \frac{\varepsilon_A + \varepsilon_C}{2}</math>
:<math>\text{Radius} = \frac{1}{\sqrt{2}} \sqrt{(\varepsilon_A - \varepsilon_B)^2 + (\varepsilon_B - \varepsilon_C)^2}</math>
:<math>\varepsilon_{max} = \text{Center} + \text{Radius} \qquad \varepsilon_{min} = \text{Center} - \text{Radius}</math>
:<math>\sigma_1 = \frac{E}{1-\nu^2} \left( \varepsilon_{max} + \nu\,\varepsilon_{min} \right)</math>
:<math>\theta = \frac{1}{2} \arctan2\!\left(2\varepsilon_B - \varepsilon_A - \varepsilon_C,\ \varepsilon_A - \varepsilon_C\right)</math>
==== Delta rosette (0° / 60° / 120° and 0° / 120° / 240°) ====
:<math>\text{Center} = \frac{\varepsilon_A + \varepsilon_B + \varepsilon_C}{3}</math>
:<math>\text{Radius} = \frac{\sqrt{2}}{3} \sqrt{(\varepsilon_A - \varepsilon_B)^2 + (\varepsilon_B - \varepsilon_C)^2 + (\varepsilon_A - \varepsilon_C)^2}</math>
:<math>\varepsilon_{max} = \text{Center} + \text{Radius} \qquad \varepsilon_{min} = \text{Center} - \text{Radius}</math>
:<math>\sigma_1 = \frac{E}{1-\nu^2} \left( \varepsilon_{max} + \nu\,\varepsilon_{min} \right)</math>
:<math>\theta = \frac{1}{2} \arctan2\!\left(\sqrt{3}\,(\varepsilon_B - \varepsilon_C),\ 2\varepsilon_A - \varepsilon_B - \varepsilon_C\right)</math>
'''Note:''' The atan2 function is used instead of atan to correctly handle all quadrants, including the case εA = εC (zero denominator).
----
== Requirements ==
{| class="wikitable"
|-
! Item !! Requirement
|-
| NVGate version || V12 or higher (V17+ recommended for OSFF format)
|-
| Signal format || OSFF measurement directory (NVGate V17+) or legacy .oxf
|-
| Signal type || Time-domain (static or dynamic channels)
|-
| Number of input channels || Exactly 3 strain gauge channels (any sampling rate)
|-
| Operating system || Windows 7 / 10 / 11 (32-bit Python runtime bundled)
|-
| NVGate running || Yes — the tool connects to NVGate via NVDrive to read the active player path and refresh the Project Manager
|}
----
== Installation ==
=== Method 1: Copy the .exe to the NVGate Links folder (recommended) ===
# Download '''RosetteAddon.exe''' (see [[#Downloads|Downloads]] below).
# Copy the entire '''RosetteAddon/''' folder to the NVGate external tools directory:
#: <code>C:\OROS\NVGate data\Links\</code>
# The tool will appear automatically in NVGate's '''Tools''' tab at next startup.
=== Method 2: Run the .exe directly ===
Double-click '''RosetteAddon.exe''' from any location. NVGate must be open and a signal must be loaded in the Player.
'''Note:''' The executable is self-contained — no Python installation or additional libraries are required on the target PC.
----
== Usage ==
=== Step-by-step ===
# '''Open NVGate''' and load the measurement containing the rosette strain gauge channels in the '''Player'''.
# '''Launch RosetteAddon.exe''' (from the Tools tab or directly).
# In the '''Signal Channels''' card, select which NVGate input corresponds to each gauge:
#* '''ε A''' → gauge oriented at 0°
#* '''ε B''' → gauge oriented at 45° (or 60°)
#* '''ε C''' → gauge oriented at 90° (or 120°)
# In the '''Material Properties''' card, enter the material constants:
#* '''Young's modulus E''' — in Pa (e.g. <code>210000000000</code> for steel, <code>70000000000</code> for aluminium)
#* '''Poisson's ratio ν''' — dimensionless (e.g. <code>0.3</code> for steel, <code>0.33</code> for aluminium)
# Select the '''Rosette Type''' matching your sensor geometry.
# Click '''COMPUTE'''.
# The tool reads the signal, computes the rosette, and writes a new measurement named '''<original_name>_rosette''' in the same NVGate project.
# NVGate's Project Manager is refreshed automatically — the new measurement appears immediately.
=== Status bar ===
The status bar at the bottom of the window reports progress in real time:
{| class="wikitable"
|-
! Colour !! Message !! Meaning
|-
| style="color:#e8a500" | '''Amber''' || ''Computing...'' / ''Step 1/3...'' || Computation in progress
|-
| style="color:#2ecc71" | '''Green''' || ''Done — <name>'' || Computation completed successfully
|-
| style="color:#e74c3c" | '''Red''' || ''Error — ...'' || An error occurred (see details below)
|-
| style="color:#8a95a8" | '''Grey''' || ''Ready'' || Idle, waiting for user input
|}
----
== Output measurement ==
The output measurement is written in the same NVGate project directory as the input, with the suffix '''_rosette''' appended to the original measurement name.
Example:
<pre>
C:\OROS\NVGate data\Projects\MyProject\
  ├── Measurement1\              ← original (3 strain gauge channels)
  └── Measurement1_rosette\      ← created by the tool (5 channels)
</pre>
The output measurement contains all the original channels '''plus''' the two computed channels:
{| class="wikitable" style="width:95%"
|-
! Channel name !! Content !! Unit !! Physical quantity
|-
| (original channels) || Raw strain data, unchanged || µε || Strain
|-
| <code>Principal Stress Magnitude - A_B_C</code> || σ₁ time history || Pa || Pressure
|-
| <code>Principal Stress Angle - A_B_C</code> || θ time history (orientation of σ₁) || rad || Plane Angle
|}
The sampling rate, duration, and all device metadata are preserved from the input channels.
If the output measurement already exists (from a previous computation), it is automatically deleted and recreated. If it cannot be deleted (e.g., currently open in NVGate), a timestamped name is used instead.
----
== Typical material properties ==
{| class="wikitable" style="width:80%"
|-
! Material !! Young's modulus E (Pa) !! Poisson's ratio ν
|-
| Steel (structural) || 210 × 10⁹ || 0.30
|-
| Stainless steel || 193 × 10⁹ || 0.28
|-
| Aluminium alloy || 70 × 10⁹ || 0.33
|-
| Titanium alloy || 110 × 10⁹ || 0.34
|-
| Cast iron || 160 × 10⁹ || 0.26
|-
| Copper || 120 × 10⁹ || 0.34
|}
----
== Troubleshooting ==
{| class="wikitable" style="width:100%"
|-
! Symptom !! Likely cause !! Solution
|-
| ''Error — no signal loaded in NVGate player'' || NVGate Player is empty or paused at the beginning || Load and play a signal in NVGate before launching the computation
|-
| ''Error — duplicate channel selection'' || The same channel is selected for two or more gauges || Select a distinct channel for each of ε A, ε B, ε C
|-
| ''Error — Young modulus is not a valid number'' || Non-numeric text in the E field || Enter a numeric value, e.g. <code>210e9</code> or <code>210000000000</code>
|-
| Channel dropdown is empty || NVGate is not open, or measurement has no channels || Ensure NVGate is running with a measurement loaded in the Player
|-
| Output measurement not visible in NVGate || NVGate Project Manager not refreshed || Click '''Refresh PM''' in NVGate, or close and reopen the project
|-
| Stress values seem too high || Wrong unit for E (GPa entered instead of Pa) || Enter E in '''Pascals''': 210 GPa = <code>210000000000</code> Pa
|-
| Angle output is always near zero || Gauges A and C have nearly identical strain || This is physically correct — it means the principal axis is nearly aligned with gauge A
|}
----
== Validation ==
The computation has been analytically verified against known closed-form test cases:
* '''Uniaxial traction along gauge A''': εA = ε₀, εB = −ν·ε₀/... (45° gauge), εC = −ν·ε₀ → σ₁ = E·ε₀, θ = 0 ✓
* '''Pure shear''': symmetric strain state → σ₁ = −σ₂, θ = ±45° ✓
* '''Hydrostatic''': εA = εB = εC → σ₁ = σ₂ = E·ε/(1−ν), θ = undefined (isotropic) ✓
* '''Real signal''' (steel structure, 12 800 Hz, 5 s): relative precision < 1.5 × 10⁻⁷ (float64 round-off only) ✓
----
== Downloads ==
{| class="wikitable"
|-
! File !! Description
|-
| [[Media:RosetteAddon.zip|RosetteAddon.zip]] || Standalone executable + all dependencies. Unzip and copy to <code>C:\OROS\NVGate data\Links\</code>
|-
| [[Media:RosetteAddon_demo_signal.zip|RosetteAddon_demo_signal.zip]] || Demo NVGate measurement with 3 rosette channels (rectangular, steel)
|}
----
== Version history ==
{| class="wikitable"
|-
! Version !! Date !! Changes
|-
| 1.000b || 2025-04 || Initial public release. Supports rectangular (45°) and delta (60°/120°) rosettes. Compatible with NVGate V17 OSFF measurement format. Dark UI theme.
|-
| — || 2024-11 || Internal prototype (oxf format, NVGate V12–V16)
|}
----
== See also ==
* [[NVGate Player]]
* [[External tools overview]]
* [[Strain gauge measurement with NVGate]]
* [[NVDrive — external tool communication protocol]]
[[Category:External Tools]]
[[Category:Signal Processing]]
[[Category:Structural Analysis]]
[[category:WikiOros]]
[[category:WikiOros]]
Compute 2D main stress/strain values from rosette measurements
Compute 2D main stress/strain values from rosette measurements

Navigation menu