Stress Tests
The stress testing results in assessing the performance, reliability and stability of the O3R system. These tests will be performed by subjecting the hardware components to extreme stress conditions(internal and external) under different conditions.
The external stress factors include:
Vibration
Shock
EMV
Temperature
The internal stress (as induced by the O3R system itself) includes:
VPU stressing: CPU, GPU, RAM
Head stressing: maximum load, that is maximum framerate and acquisition times for all camera heads
To monitor the system’s operational state, ifm suggests monitoring the following O3R system data steams and diagnosis outputs:
Diagnosis information
O3R internal temperatures
(O3R data availability)
Specifications
The technical specification is available from the ifm.com under respective product’s page. The following table is used for demonstration purposes only.
Test type |
Norm |
description |
---|---|---|
EMC |
EN IEC 61000-6-4 |
radiation of interference / residential, commercial and light-industrial environments |
EN IEC 61000-6-2 |
noise immunity / industrial environments |
|
Shock resistance |
DIN EN 60068-2-27 |
50 g / (11 ms) not repetitive |
DIN EN 60068-2-27 |
40 g / (6 ms) repetitive |
|
Vibration resistance |
DIN EN 60068-2-6 |
2 g / (10…150 Hz) |
DIN EN 60068-2-64 |
2.3 g RMS / (10…500 Hz) |
|
Electrical safety |
DIN EN 61010-2-201 |
electrical supply only via PELV circuits |
Test type |
Range |
description |
---|---|---|
Temperature |
[°C] -10…40 |
Ambient temperature |
1. Vibration and Shock
These tests are independent of the system’s live operation, that is can be performed in an offline state - without monitoring the live status.
The O3R systems functionality can be verified explicitly by comparing sets of functionality before and after the test runs. These sets of functionality can include:
complete boot-up of the system
availability of all connected cameras (heads) and a review of their data streams
Alternatively, the functionality can be verified implicitly by testing a complete system behavior (for example your AGV / AMR) before and after the test. The benchmarking results should stay the same within the boundary of the benchmark’s repeatability.
2. EMV Testing
These tests typically involve testing for EMV emission, EMV emission, and self-interference immunity. Depending on the norm not all parts may apply and different thresholds may be required.
During testing the operation of the device may be interrupted for short amounts of time, according to the norm, and live operation has to be resumed within its time tolerance. Please test the O3R system in its intended mounting place including all surrounding components.
The system’s operational state can be determined by the time difference between consecutive timestamps: for example O3R VPU CPU clock-based timestamps or an independent test machines clock.
The (CPU-based) data frame timestamp is generated by the IPC (VPU) clock when new data is acquired from a camera head. For test purposes, the timestamp latency and jitter should be sufficiently low (latency and jitter).
This may either be done on a recorded dataset in the post or on data retrieved in live operation.
Note
**Please compare these statistical values against typical values under undisturbed operation conditions, to ensure the system's capability to retrieve the required data at full framerate!**
3. Temperature Testing
A first set of temperature tests is typically run during a proof of concept phase on a component level, that is the O3R system and its intended (prototype) mounting setup are tested in a smaller temperature chamber. This is a good indication of whether the passive cooling capabilities of the camera and VPU mounting are sufficient for the full ambient temperature range.
Please set all camera heads to their maximum allowed framerate: for example 20 Hz
.
Load on the VPUs CPU and GPU can be introduced by running a functional ODS application instance, or by artificially introducing CPU and GPU load via tools such as stress and gpu-burn.
In a secondary step temperature tests are repeated on a fully assembled machine level, for example the complete AGV / AMR is tested in larger temperature chambers, with all active components in live operation. This may include:
The battery management system (BMS) is under full load.
Active cooling of the battery cells if applicable.
Additional heat introducing “computers,” for example: IPCs, PLCs, …
Active cooling, that is fans that distribute energy over larger passive heat sinks or perform an exchange of air from the inside to the outside of the machine
…
Additionally “heat” is introduced via the temperature chamber to mimic maximum ambient heat levels during operation. This test will determine the operability of the O3R system, based on the effectiveness of the whole cooling concept.
The external temperature ratings of the O3R system components (VPU and O3R camera heads) are rated for external temperatures up to 40°C ambient temperature. This temperature threshold should only be used as an indication value. The internal temperature of each part (VPU device and one temperature value per camera head) has to stay below their respective threshold values. If this can be assured the external temperature values are only of secondary importance, as the device can perform under these ambient temperatures.
Temperature Monitoring
The O3R shows its temperature values in live operation, as part of the read-only values of the JSON configuration string.
#############################################
# Copyright 2023-present ifm electronic, gmbh
# SPDX-License-Identifier: Apache-2.0
#############################################
from ifm3dpy import O3R
import logging
from datetime import datetime
logger = logging.getLogger(__name__)
def main():
dt_string = datetime.now().strftime("%Y_%m_%d-%H_%M_%S")
logging.basicConfig(
filename=f"temperature_test_{dt_string}.log",
level=logging.DEBUG,
format="%(asctime)s.%(msecs)03d %(levelname)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
IP = "192.168.0.69"
logger.info(f"IP: {IP}")
o3r = O3R(IP)
temperatures = o3r.get(["/device/diagnostic/temperatures"])["device"]["diagnostic"][
"temperatures"
]
logger.info(f"{temperatures}")
for e in temperatures:
# test for tuple: ('overtemperature', True)
if ("overtemperature", True) in list(e.items()):
logger.error(f"overtemperature reached: {e}")
raise RuntimeError(f"overtemperature reached: {e}")
if __name__ == "__main__":
main()
$ ifm3d dump | jq '.device.diagnostic.temperatures'