How to update the firmware
Warning
The firmware update should only be performed when connected to the VPU via the ETH0 interface and using a static IP address. It is recommended to use the default static IP address 192.168.0.69
.
Download the firmware
The firmware image is available on the ifm.com website. Navigate to the site and follow the steps below:
Create an account (if you do not already have one) and log in.
Use the search bar to find the article number (OVP80x or OVP81x). This is also valid if you have pre-release sample units, for example M04239.
Navigate to the article page an click on the “Downloads” tab.
Select the firmware from the list. It will start downloading the file.
Starting firmware is version < 1.0.0
When updating to a firmware version 1.0.0 or above, starting with a firmware version below 1.0.0, please refer to the migration guide.
Starting firmware is version >= 1.0.0
(Optional) Save the current configuration
Depending on the starting and target firmware versions, the configuration might not be fully preserved after an update. To make sure you do not lose your configuration, we recommend saving it locally before performing the update.
You can for example do so using the command line interface:
ifm3d dump > config_save.json
With the ifmVisionAssistant
Download the ifmVisionAssistant from https://www.ifm.com/us/en/product/OVP800?tab=documents.
Note
Updating the firmware from 0.16.xx to 1.0.xx is currently not possible with the ifmVisionAssistant.
In the instructions below, we expect that the user extracted the downloaded ZIP containing the firmware file.
Open the Vision Assistant and connect to the OVP8xx,
Navigate to the
VPU Settings
window and clickUpdate
under theFirmware Update
section. The version beside theUpdate
button refers to the current version running on VPU.Select the file and the update process will start.
Once the update is complete, the device will reboot.
With the ifm3d API or the web interface
Reboot to recovery
When the starting firmware is version 1.0.0 and above, a reboot to recovery state is necessary to perform an update.
$ ifm3d reboot --recovery
#include <ifm3d/device/o3r.h>
#include <ifm3d/swupdater/swupdater.h>
...
auto o3r = std::make_shared<ifm3d::O3R>();
auto sw = std::make_shared<ifm3d::SWUpdater>(o3r);
sw->RebootToRecovery();
if (sw->WaitForRecovery()) {
std::cout << "System in recovery mode" << std::endl;
}
...
from ifm3dpy.swupdater import SWUpdater
from ifm3dpy.device import O3R
o3r = O3R()
sw = SWUpdater(o3r)
sw.reboot_to_recovery()
if sw.wait_for_recovery():
print("System in recovery mode)
Note
If you happen to be stuck in recovery mode, the device will not be “ping-able.” To reboot to productive, you have two options:
You can update the system again. If the update is successful, the system will reboot to productive, or,
You can use the ifm3d API to reboot to productive without updating. With the command line interface, you can use
ifm3d swupdate -r
. In Python you can use thereboot_to_productive
function and in C++ theRebootToProductive
function.
With the web interface
Once the device is in recovery mode (see section above), you can open the web interface:
Open http://192.168.0.69:8080/ in web browser. The
SWUpdate
web interface is shown.Drag and drop the
*.swu
firmware file into thesoftware update
-window. The upload procedure starts.
The system will automatically reboot in productive mode. The web interface will not be available anymore (it is only available in recovery mode).
With ifm3d
Once the device is in recovery mode, you can use ifm3d to update the firmware.
In the instructions below, replace <path/to/firmware_image.swu>
with the path to the firmware file you downloaded from ifm.com.
The code below is continued from the “reboot to recovery” section.
$ ifm3d swupdate --file=<path/to/firmware_image.swu>
if (sw->FlashFirmware("<path/to/firmware_image.swu>")){
sw->WaitForProductive();
std::cout << "System ready!" << std::endl;
}
if sw.flash_firmware('<path/to/firmware_image.swu>'):
sw.wait_for_productive()
print("System ready!")
Note
The code snippets above do not show how to handle exceptions when they occur in the update process. Please refer to the API documentation for details on the potential exceptions thrown by each function.
Double check the firmware version after the update:
$ ifm3d dump | jq .device.swVersion.firmware
ifm3d::json config = dev->Get({"/device/swVersion/firmware"});
o3r.get(["/device/swVersion/firmware"])
The full example script
We provide a full Python script to help you update the firmware using the API. You can find this script in the ifm3d-examples
repository.