9,371
edits
| 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 | ||