System designHow-to

Save camera settings across power cycles with a user set

Save camera settings across power cycles: write a user set with UserSetSave, set UserSetDefault to UserSet1, verify after a reboot.

LumaSpec Vision9 min read Share on LinkedIn

On this page 10 sections
  1. 01The decision: one bank, one default
  2. 02Where the settings can live
  3. 03The save sequence, step by step
  4. 04The same save from your own code
  5. 05Worked example: an 8,000 µs exposure at 30 fps on a 12 MP USB3 camera
  6. 06Why the settings came back anyway
  7. 07Smart cameras and vision controllers
  8. 08Checks before you ship
  9. 09Where to go next
  10. 10Questions

An industrial camera that forgets its configuration is a quiet kind of failure: exposure, gain, pixel format, region of interest and trigger all look right during set-up, then a power cut returns the camera to factory settings and the station grabs dark, oversized or untriggered images. The values live in volatile working memory until you write them into the camera's non-volatile user set storage and name that bank as the power-up default. This guide walks the four GenICam features involved, the save sequence from your own code, a worked readback example with the arithmetic, and the failure modes that send settings back to factory. It applies to any GenICam-compliant GigE Vision, USB3 Vision or CoaXPress camera.

The decision: one bank, one default

Settings survive a power cycle when two things are true: the current values were written into a user set bank with the save command, and the default selector names that bank so the camera loads it at every boot. Everything else, from live edits in a viewer to values your software pushes after connecting, sits in volatile memory and disappears when power is removed.

Some manufacturers call these banks memory channels; the GenICam standard calls them user sets, and every compliant camera exposes the same four features in the UserSetControl group:

  • UserSetSelector — the enumeration picking the bank: Default, UserSet1, UserSet2 and further banks where fitted.
  • UserSetLoad — the command copying a stored bank into working memory.
  • UserSetSave — the command writing current working settings into the selected bank.
  • UserSetDefault — the enumeration naming the bank loaded automatically at power-up.

The Default bank holds the factory configuration and is read-only on nearly every camera, so your work belongs in UserSet1. The sequence below applies to any GenICam-compliant camera in the area scan cameras range, for example this 6 MP GigE model:

Area scan camerasHikrobot MV-CT0MG0060/R/NN/NN 6 MP Area Scan Camera, 3rd Gen., GigE, Mono, BASEMV-CT0MG0060/R/NN/NN
Sensor format
1/1.8"
Lens mount
C-mount
Interface
GigE
Resolution
6-10 MP
$909.00View partBuild a system with it

Where the settings can live

Four places can hold a configuration, and only two of them survive a camera power cycle without help from a host:

Where the settings live Survives camera power-off Works without the host PC Best for
User set bank with UserSetDefault set Yes Yes A camera that must boot ready
The manufacturer's tool, saving to camera Yes Yes The same save, clicked instead of coded
A configuration file your software loads Only while the software runs No Many cameras, one master copy
A smart camera inspection job Yes Yes Inspection on the device itself

The first two rows are the same mechanism: a viewer's save-to-camera button issues UserSetSave and sets UserSetDefault behind the dialog. If you configure from a viewer rather than from code, saving camera parameters as a user set that loads on startup walks that flow end to end.

The save sequence, step by step

  1. Configure the camera live: exposure, gain, pixel format, region of interest and binning, trigger source and activation, acquisition mode, and white balance on a colour camera.
  2. Stop acquisition. Most cameras refuse the save command while frames are being captured, and the refusal is easy to miss in a viewer that reports success without checking.
  3. Set UserSetSelector to UserSet1.
  4. Execute UserSetSave. The bank now holds a snapshot of every setting exactly as it stands.
  5. Set UserSetDefault to UserSet1. The camera loads that bank at the next power-up.
  6. Remove power from the camera completely, mains or Power over Ethernet, and reapply it.
  7. Reconnect and read the critical values back. They must match the snapshot.

The same save from your own code

The feature access follows the pattern of setting camera exposure time through a GenICam API in Python; only the feature names change.

# Illustrative Python-style code. The feature names are GenICam standard
# names; the variable names and the connect call are yours.
exposure_us: int = 8000    # working exposure, microseconds
bank: str = "UserSet1"     # bank to write

cam = connect_first_camera()   # your API's discovery and open call

cam.AcquisitionStop()          # required before saving on most cameras
cam.UserSetSelector = bank     # pick the bank (string enumeration)
cam.UserSetSave()              # write current settings into the bank
cam.UserSetDefault = bank      # the camera loads this bank at power-up

The test that proves the save, run after a full power cycle and reconnect:

assert cam.UserSetDefault == "UserSet1"
assert abs(cam.ExposureTime - exposure_us) <= 1.0  # µs, one increment in this example

Reading ExposureTime back also catches quantisation: cameras store the value rounded to their exposure increment, so compare against one increment rather than the exact number you typed.

Worked example: an 8,000 µs exposure at 30 fps on a 12 MP USB3 camera

The camera for this example:

Area scan cameras12 MP USB3 area scan camera, IMX226, 1/1.7" rolling shutter, 30 fps, 4000 × 3000 resolution (LS-CMR-0166)LS-CMR-0166
Sensor format
1/1.7"
Interface
USB3
Resolution
12 MP
Shutter
Rolling
$560.00View partBuild a system with it

Inputs: an exposure time of 8,000 µs chosen for the station's lighting, the camera's rated 30 fps frame rate, and a full-resolution 4000 × 3000 image. The rule: the saved exposure must fit inside the frame period with room left for readout, or the frame rate drops the moment the bank boots.

frame period = 1 / frame rate = 1 / 30 fps = 0.0333 s = 33,333 µs exposure share = 8,000 µs / 33,333 µs = 0.24 = 24 % readout margin = 33,333 µs - 8,000 µs = 25,333 µs = 76 % of the period

The exposure occupies 24 % of every frame period, so readout keeps 76 % and the camera holds 30 fps straight from the bank. Saving follows the sequence in the previous section; the pass test is a cold boot with power removed, then a readback: ExposureTime must read 8,000 µs and UserSetDefault must read UserSet1. A readback showing the factory value instead means UserSetDefault was never changed, which is cause 2 below.

Why the settings came back anyway

Ordered by how often each one is the cause:

  1. Nobody saved. Viewer edits sit in the camera's working memory; power-off discards them unless a save command wrote them to a bank.
  2. The bank saved, the default did not. UserSetDefault still pointed at Default, so the camera boots factory values even though UserSet1 holds your work.
  3. The save was refused mid-acquisition and the tool reported success anyway. Stop acquisition, repeat the save, and read the command result.
  4. Host software overwrites the bank at connect, through an SDK auto-restore or your own initialisation code. Transport settings are the classic case, and keeping camera bitrate settings after a power cycle covers the identical trap on the link side.
  5. Two programs share one camera and one overwrote UserSet1. Give each station its own bank and write the bank name on the station sheet.
  6. You looked for network settings in the bank. A GigE Vision camera stores its persistent IP outside the user sets, through the interface control channel. Packet size belongs to the host session, so set it at start-up as setting the GigE packet size before acquisition shows.

Auto exposure can mask all six: the camera re-finds brightness whatever the bank says, so the fault only shows up as timing drift. Camera image brightness drifts over time explains why every auto mode belongs off before you judge a saved bank. The pattern is wider than cameras, too: drive parameter save failures after a power cycle follow the same diagnosis, values held in volatile memory with no write to non-volatile storage.

Smart cameras and vision controllers

On a smart cameras device the persistence unit is the inspection job: exposure, region of interest, tools and outputs all travel inside it, so saving the job to the device is that platform's equivalent of a user set. The MV-SC5060XM-08M-WBN, a 6 MP model with an 8 mm lens on an M12 mount, keeps its configuration the moment its job is saved to the device. A vision controllers station adds a second layer: your application boots with the controller and loads its own profile, while each attached camera still carries its bank so the cameras behave identically no matter which host connects.

Typical hardware on both layers:

Smart cameras & vision sensorsHikrobot MV-SC5060XM-08M-WBN SC5000X series Smart Camera, 6 MP, Mono, 8 mm focal length, M12-mountMV-SC5060XM-08M-WBN
Interface
GigE
Resolution
6-10 MP
$1,629.00View part
Vision controllersHikrobot MV-VC3301H-128G66 I3-8100, 8GB+128G SSD, No PoE, PCIe expansion supported, Incl. VM6200Pro licenseMV-VC3301H-128G66
LAN ports
5+ LAN ports
USB 3 ports
3-4 USB 3 ports
$2,419.00View part

The MV-VC3301H-128G66 pairs 8 GB of memory with 4 built-in light channels, so its boot profile covers lights as well as cameras. Keep the light values in the controller profile and the imaging values in the camera bank, and each layer restores itself.

Checks before you ship

  • Read the UserSetSelector enumeration at runtime and note which banks your camera actually offers.
  • Save with acquisition stopped, and read the command result rather than assuming it.
  • Test with power removed, and only after taking the station out of production.
  • Read the critical values back after the cold boot and compare them with the snapshot.
  • Turn auto exposure and auto gain off before judging the readback.
  • Write the bank name on the station sheet so the next programmer does not overwrite it.

Where to go next

Run the save and the cold-boot readback on your own camera first; it takes minutes and settles the question for every camera of that model. For a new station, start from the camera finder and carry the choice through lens, light and controller below. If a camera refuses the save or the readback never matches, bring the model number and the readback values to the contact page and we will work through them with you.

Build the whole station

The configurator matches a camera, lens, light, light controller and cables to each other, step by step, and lists only parts that fit what you already picked.

Start with the camera

Questions

Can I overwrite the Default user set with my own settings?

Usually not. On nearly every industrial camera the Default bank holds read-only factory settings, and the save command against Default fails or is unavailable. Save to UserSet1 and point UserSetDefault at it instead, which gives the same boot behaviour while keeping a factory fallback. Executing UserSetLoad on Default is also the fastest way back to factory settings before a reconfiguration.

Are persistent IP and other network settings stored in a user set?

No. A GigE Vision camera keeps its IP configuration in a separate non-volatile area managed through the interface control channel, outside the user set banks. Saving UserSet1 does not touch the address, and changing the address does not disturb your saved imaging settings. Packet-size tuning belongs in the host start-up sequence because it depends on the network the camera is attached to.

How many user set banks does a camera have?

Read the UserSetSelector enumeration at runtime; it lists exactly the banks your camera offers. Most industrial cameras ship with Default plus UserSet1, and many add UserSet2 and UserSet3, which is enough to give an alternate product family or a second station its own bank. Writing the bank name on the station documentation stops two programs from overwriting each other.

Do I have to stop acquisition before saving?

On most cameras, yes: the save command is refused while the camera is acquiring, and a viewer that does not check the command result can hide the failure. Stop acquisition, save, then restart. The bank stores a snapshot of the current working settings, so anything you change after the save is not in it. Save last, after every other setting is final.

What does UserSetDefault actually change?

It selects which bank the camera loads into working memory at each power-up; it loads nothing immediately. To load a bank right now, set UserSetSelector to it and execute UserSetLoad. Set UserSetDefault last, once the bank you want is saved, because the camera reads this selector only at boot.

Will a smart camera keep its inspection settings the same way?

The mechanism differs. A smart camera persists its configuration inside the inspection job, so saving the job to the device is that platform's equivalent of a user set. Exposure, region of interest, tools and outputs all travel with the job, and loading it at start-up restores everything the way a bank does on a PC-connected camera.