v16.3.0
Introduction¶
This is a summary of updates for the JS-50 line of scan heads and supporting software, grouped by product:
- New Features
- Pinchot API for .NET
- Pinchot API for C/C++
- JS-50 Support Software
- JS-50 Scan Head Firmware
- ScanSync 2.2.0
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 rolesScanSystem.GetScanSyncMapping()
: Returns the mapping currently in effectScanSystem.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 typeDiscoveredScanSync
Support for Idle Scanning¶
As part of this feature, the .NET API has been extended/changed:
StartScanning()
now has an overload that takes aStartScanningOptions
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
andScanHeadConfiguration.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 typeScanHeadState
and can be one ofInvalid
,Standby
,Connected
,Scanning
orIdleScanning
-
The
LaserDisabled
property is reserved for future expandability and will always befalse
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
andScanHead
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 headsjsScanSystemGetScanSyncEncoder()
: Used to query the roles assigned to the ScanSync devices- The types
jsScanSyncDiscovered
andjsScanSyncStatus
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()
andjsScanHeadGetMinimumEncoderTravel()
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 ofJS_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()
andjsScanHeadSetWindowUnconstrainedLaser()
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()
andjsScanHeadGetWindowTypeLaser()
calls are used to get the window type given a camera/laser pair for camera driven and laser driven heads respectively - The
jsScanHeadGetWindowCamera()
andjsScanHeadGetWindowLaser()
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 typejsScanHeadState
and can be one ofJS_SCAN_HEAD_STATE_IDLE
,JS_SCAN_HEAD_STATE_STANDBY
,JS_SCAN_HEAD_STATE_CONNECTED
,JS_SCAN_HEAD_STATE_SCANNING
orJS_SCAN_HEAD_STATE_SCANNING_IDLE
-
The
is_laser_disable
property is reserved for future expandability and will always befalse
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()
, andjsScanHeadGetDiagnosticImage()
calls have been deprecated - The
jsScanSystemPhaseInsertLaserConfiguration()
, andjsScanSystemPhaseInsertCameraConfiguration()
calls have been deprecated - The
jsScanSystemGetEncoder()
call has been deprecated in favor ofjsScanSystemGetScanSyncStatus()
Bug Fixes¶
- Fixed race condition seen in field where underlying queues get corrupted due to
ProfileQueue::Reset
- Added locking to
SendExclusionMask
andSendBrightnessCorrection
- Fixed issue where
SelectWaitRead
andSelectWaitWrite
never timed out - Added checking of
joinable()
onScanManager
threads - Fixed
jsScanHeadIsConnected
incorrectly returningtrue
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