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 aStartScanningOptionsobject. 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.MinimumEncoderTravelandScanHeadConfiguration.IdleScanPeriodUshave 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
Stateproperty is of typeScanHeadStateand can be one ofInvalid,Standby,Connected,ScanningorIdleScanning -
The
LaserDisabledproperty is reserved for future expandability and will always befalsein 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
TcpSendto prevent a potential crash when multiple threads acted on a scan head - Added better tracking of dirty flags for
ScanSystemandScanHead
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
jsScanSyncDiscoveredandjsScanSyncStatuswere 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
jsScanWindowTypewhich 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
stateproperty is of typejsScanHeadStateand can be one ofJS_SCAN_HEAD_STATE_IDLE,JS_SCAN_HEAD_STATE_STANDBY,JS_SCAN_HEAD_STATE_CONNECTED,JS_SCAN_HEAD_STATE_SCANNINGorJS_SCAN_HEAD_STATE_SCANNING_IDLE -
The
is_laser_disableproperty is reserved for future expandability and will always befalsein 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
SendExclusionMaskandSendBrightnessCorrection - Fixed issue where
SelectWaitReadandSelectWaitWritenever timed out - Added checking of
joinable()onScanManagerthreads - Fixed
jsScanHeadIsConnectedincorrectly returningtruewhen connection is lost - Fixed
jsScanHeadIsConnectedto 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