Skip to content

v16.3.0

Introduction

This is a summary of updates for the JS-50 line of scan heads and supporting software, grouped by product:

In addition to the listed changes, numerous improvements have been implemented to address stability, performance, and usability. If you have encountered a problem with one of the products in the past and are unsure if these updates address your issue, feel free to contact us.

We highly recommend updating the API and Firmware at the same time. While we take compatibility very seriously, we are not able to test all possible combinations due to the number of shipped versions.

New Features

Support for multiple ScanSync devices

The Pinchot API can now handle up to three ScanSync devices with designations Main, Aux1, and Aux2. This allows you to either have multiple scanning systems each with their own ScanSync and on the same network segment, or have one scanning system operate with input from up to three devices. This is useful for bringing in additional position information or digital inputs from the extra units.

If you only have one ScanSync device in your scanning system, no changes are necessary, the API behaves as before and you can skip the rest of this section.

Using more than one ScanSync will require changes to your application code, as the serial number of the devices need to be mapped to the role they play within a ScanSystem. Please read the following article carefully to understand what options you have.

See the API specific section below for details on the implementation.

Support for Idle Scanning

Idle Scanning is a new optional feature that allows you to slow down or stop the scanning rate in response to a stopped belt or chain. This is useful on systems that regularly pause material transport or have extended pauses, e.g., shift breaks. It reduces network load and processing requirements while improving laser longevity. It can be used to turn off the laser while the belt or chain are stopped and resume scanning instantaneously upon movement. This leads to leaner and cleaner code as it allows your application to stay in profile acquisition mode instead of manually making the calls to start and stop scanning.

If you would like to take advantage of Idle Scanning, please read the following article carefully as it explains the design and changes you need to make to your code.

See the API specific sections below for details on the implementation.

Pinchot API for .NET

New Features

Support for multiple ScanSync devices

As part of this feature, the .NET API has been extended by the following functions:

  • ScanSystem.SetScanSyncMapping(): Explicitly maps a device via serial number to a role (Main, Aux1, Aux2)
  • ScanSystem.SetDefaultScanSyncMapping(): Restores the default mapping, which is to use all discovered ScanSync devices in order of ascending serial number in the Main, Aux1, and Aux2 roles
  • ScanSystem.GetScanSyncMapping(): Returns the mapping currently in effect
  • ScanSystem.DiscoverScanSyncs(): Lists all ScanSync devices that broadcast on the same subnet as the optimizer machine. The API listens continuously on the network and keeps a current list of devices. The call will return a list of objects of type DiscoveredScanSync

Support for Idle Scanning

As part of this feature, the .NET API has been extended/changed:

  • StartScanning() now has an overload that takes a StartScanningOptions object. This class includes all the usual scanning options as well as a property that can be used to configure Idle Scanning: IdlePeriodUs
  • The existing properties ScanHeadConfiguration.MinimumEncoderTravel and ScanHeadConfiguration.IdleScanPeriodUs have been deprecated

Important: to use the new Idle Scanning feature, you must also update your scan heads to firmware v16.3.0 (see below). No ScanSync firmware update is necessary.

Support for newer .NET platforms

The Pinchot API dropped support for .NET 5.0 in favor of .NET 6.0 and .NET 8.0. The API is distributed via NuGet as before and can be upgraded in-place with the NuGet package manager. Support for .NET Standard 2.0 remains unchanged.

Other Improvements

New Properties in ScanHeadStatus

The ScanHeadStatus now contains two additional properties, State and LaserDisabled, to help with diagnostics.

  • The State property is of type ScanHeadState and can be one of Invalid, Standby, Connected, Scanning or IdleScanning

  • The LaserDisabled property is reserved for future expandability and will always be false in v16.3.0

New Properties in ScanSystem

The read only properties IdlePeriodUs and MinimumEncoderTravel have been added to ScanSystem.

New Properties in ScanWindow

The Type, Vertices, and Constraints properties have been added to ScanWindow. Creating a ScanWindow is still done through one of the factory functions but now the resulting window retains the fundamental type (Rectangular, Polygonal, Unconstrained) and can be queried.

New Properties in ScanSyncData

The IpAddress and Version properties were added to ScanSyncData objects. Requires ScanSync firmware 2.1.0 and above.

Obsoleted ScanSyncUpdateEvent.Data

The property ScanSyncUpdateEvent.Data has been obsoleted in favor of ScanSyncUpdateEvent.ScanSyncs to handle retrieving data from multiple ScanSyncs on the network.

Bug Fixes

  • Added lock to TcpSend to prevent a potential crash when multiple threads acted on a scan head
  • Added better tracking of dirty flags for ScanSystem and ScanHead

Pinchot API for C/C++

New Features

Support for multiple ScanSync devices

As part of this feature, the C/C++ API has been extended by the following functions:

  • jsScanSystemSetScanSyncEncoder(): Used to specify ScanSync role (Main, Aux1, Aux2). The function will only map ScanSync devices that are seen by both the optimizer PC and the scan heads
  • jsScanSystemGetScanSyncEncoder(): Used to query the roles assigned to the ScanSync devices
  • The types jsScanSyncDiscovered and jsScanSyncStatus were added

Support for Idle Scanning

As part of this feature, the C/C++ API has been extended/changed:

  • The jsScanSystemSetIdleScanPeriod() call is used to enable Idle Scanning
  • The jsScanSystemGetIdleScanPeriod() call is used to query the status of Idle Scanning
  • The jsScanSystemDisableIdleScanning() call disables Idle Scanning
  • The jsScanSystemIsIdleScanningEnabled() call is used to check if idle scanning is enabled for the scan system
  • The jsScanHeadSetIdleScanPeriod(), jsScanHeadGetIdleScanPeriod(), jsScanHeadSetMinimumEncoderTravel() and jsScanHeadGetMinimumEncoderTravel() have been deprecated

Important: to use the new Idle Scanning feature, you must also update your scan heads to firmware v16.3.0 (see below). No ScanSync firmware update is necessary.

Other Improvements

Scan Window Additions

  • Added a new enumerator jsScanWindowType which can be one of JS_SCAN_WINDOW_INVALID, JS_SCAN_WINDOW_UNCONSTRAINED, JS_SCAN_WINDOW_RECTANGULAR, JS_SCAN_WINDOW_POLYGONAL
  • The jsScanHeadSetWindowUnconstrained() call is used to remove a previously set scan window for a given scan head
  • The jsScanHeadSetWindowUnconstrainedCamera() and jsScanHeadSetWindowUnconstrainedLaser() calls are used to remove a previously set scan window given a camera/laser pair for camera driven and laser driven heads respectively
  • The jsScanHeadGetWindowTypeCamera() and jsScanHeadGetWindowTypeLaser() calls are used to get the window type given a camera/laser pair for camera driven and laser driven heads respectively
  • The jsScanHeadGetWindowCamera() and jsScanHeadGetWindowLaser() calls are used to get the points that define the scan window given a camera/laser pair for camera driven and laser driven heads respectively

New Properties in jsScanHeadStatus

The jsScanHeadStatus now contains two additional properties, state and is_laser_disable, to help with diagnostics.

  • The state property is of type jsScanHeadState and can be one of JS_SCAN_HEAD_STATE_IDLE, JS_SCAN_HEAD_STATE_STANDBY, JS_SCAN_HEAD_STATE_CONNECTED, JS_SCAN_HEAD_STATE_SCANNING or JS_SCAN_HEAD_STATE_SCANNING_IDLE

  • The is_laser_disable property is reserved for future expandability and will always be false in v16.3.0

General Improvements and Changes

  • Extended reworking of error handling. Use the jsGetError() function to convert an error code received by an API call to a string
  • Added semantic version checking of features. Function calls operating on incompatible scan head firmware will fail immediately
  • Improved the accuracy of the jsScanSystemIsConnected() call
  • The jsScanHeadGetDiagnosticImageCamera(), jsScanHeadGetDiagnosticImageLaser(), and jsScanHeadGetDiagnosticImage() calls have been deprecated
  • The jsScanSystemPhaseInsertLaserConfiguration(), and jsScanSystemPhaseInsertCameraConfiguration() calls have been deprecated
  • The jsScanSystemGetEncoder() call has been deprecated in favor of jsScanSystemGetScanSyncStatus()

Bug Fixes

  • Fixed race condition seen in field where underlying queues get corrupted due to ProfileQueue::Reset
  • Added locking to SendExclusionMask and SendBrightnessCorrection
  • Fixed issue where SelectWaitRead and SelectWaitWrite never timed out
  • Added checking of joinable() on ScanManager threads
  • Fixed jsScanHeadIsConnected incorrectly returning true when connection is lost
  • Fixed jsScanHeadIsConnected to reflect connection state even after connecting to a head without scanning

JS-50 Support Software

Firmware Update Tool

  • The scan head status column now displays "STANDBY" instead of "IDLE" to better reflect changes in Idle Scanning (see above), and a new status value of "SCANNING_IDLE" has been added
  • Improved UI and optional dark mode
  • Intrinsic corrections can now be toggled from within the UI. For details on Intrinsic Corrections, please see this article. This only applies to WX and WSC models

JS-50 Scan Head Firmware

This firmware is applicable to all current JS-50 models. To install, use the Firmware Update Tool found here.

New Features

  • Added support for Laser Disable
  • Added support for Idle Scanning

Bug Fixes

  • Fixed timing bug that caused errors when quickly stop/starting or switching modes (scanning/image)
  • Fixed bug that could arise when starting scanning too quickly after getting a diagnostic profile

ScanSync 2.2.0

The ScanSync firmware has been updated to version 2.2.0. To update, the Firmware Update Tool must be used. The firmware is distributed in the scansync folder of the Pinchot release zip file.

New Features

  • Added ScanSync Pro support in preparation for new hardware revisions
  • Added Laser Disable support (not supported in Pinchot 16.3.0)

Bug Fixes

  • Fixed bug that could cause firmware updates to fail due to interrupts not being disabled during write
  • Fixed bug that could cause firmware updates to fail due to data processing bug in http interface
  • Fixed bug that could cause firmware updates to fail due to flash memory initialization error