JoeScan

Encoder and Time Synchronized Scanning Parameters

These parameters are used to configure scanning synchronized to an encoder signal. There are also parameters to configure multiple scanners to alternate scanning, avoiding the problem of one scanner seeing another scanner's laser.

StaggeredScanning

Value Range:true or false
Default Value:true
Location:inside a ScannerConfig block

Staggered scanning allows scanners to avoid seeing each other's lasers by sequentially triggering scans.

# This is a lineal sharp with two zones, each comprising three scanners surrounding the log.

# Zones are used for visualizing data from groups of scanners in JSDiag.  
# Zones don't affect scanner functionality.
Zone FirstZone  0, 1, 2  # In JSDiag, you see data from the first ring
Zone FirstZone  3, 4, 5  # In JSDiag, you see data from the second ring

# Encoder pulses occur on 0.00448765893792 inch intervals as the chain moves
# 24 inches of travel caused 5348 encoder pulses in JSDiag: 24" / 5348 = 0.00448765893792"
EncoderPulseInterval 0.00448765893792

# The scanners will take scans every two inches
EncoderScanInterval 2.0

# We use three trigger phases, scanners 0 and 3, then scanners 1 and 4, then scanners 2 and 5
NumberOfPhases 3

# Top scanner
TriggerPhase 0 : 0, 3

# Bottom right scanner
TriggerPhase 1 : 1, 4

# Bottom left scanner
TriggerPhase 2 : 2, 5

# A ScannerConfig block is used to configure multiple scanners at once.
# In this case, scanners 0 through 3 are all configured using the same parameters.
ScannerConfig Scanners 0, 1, 2, 3, 4, 5, 6
{
	# 0.1 milliseconds is a general minimum 
	MinLaserOn      0.1

	# This is the longest period of time the laser and camera will stay on.
	MaxLaserOn      2.0

	# The laser is downstream compared to the camera
	LaserUpstream false

	CalibrationFixtureNames ThreeCircles

	# Data will only be returned if it is within this scan window.
	# This allows you to exclude data points from machinery, walls, etc.
	# It also makes autoexposure better because only data within the window is used to adjust the exposure.
	WindowTop     10.0
	WindowBottom  -1.0
	WindowLeft   -15.0
	WindowRight   15.0
}

# This is a 3-4-5 triangle composed of 4 inch diameter circles.
# The asymmetry is important to keep from getting confused.
CalibFixture ThreeCircles
{
	#              Radius   X    Y
	CircleFeature  2.0    0.0  0.0
	CircleFeature  2.0    8.0  0.0
	CircleFeature  2.0    0.0  6.0
}

TimeStaggeredScanning

Value Format:Takes no parameters
Default Value:none
Location:outside a ScannerConfig block

Time staggered scanning allows scanners to avoid seeing each other's lasers by time-delaying scans after the appropriate distance has passed. A scanner in any given phase uses the largest MaxLaserOn value in the preceding phases to determine how long it should wait.

# This is a carriage system using 10 X2 scanners.  
# There are 2 scanners located under the operator cabin and 8 hung on a frame from the ceiling.
# The two under the carriage are closer to the carriage than the ones on the frame.

# Zones are used for visualizing data from groups of scanners in JSDiag.
# Zones don't affect scanner functionality.
#
# Multi-laser scanners use a "Scanner.Laser" notation to describe the scanner, then the laser.
# "0.1" Means scanner 0, laser 1.
Zone AllScanners 0.0, 0.1, 1.0, 1.1, 2.0, 2.1, 3.0, 3.1, 4.0, 4.1, 5.0, 5.1, 6.0, 6.1, 7.0, 7.1, 8.0, 8.1, 9.0, 9.1 
Zone Scanner0 0.0, 0.1
Zone Scanner1 1.0, 1.1
Zone Scanner2 2.0, 2.1
Zone Scanner3 3.0, 3.1
Zone Scanner4 4.0, 4.1
Zone Scanner5 5.0, 5.1
Zone Scanner6 6.0, 6.1
Zone Scanner7 7.0, 7.1
Zone Scanner8 8.0, 8.1
Zone Scanner9 9.0, 9.1

# Each encoder pulses occur on 0.00448765893792 inch intervals as the carriage moves
# 24 inches of travel caused 5348 encoder pulses in JSDiag: 24" / 5348 = 0.00448765893792"
EncoderPulseInterval 0.00448765893792

# The scanners will take scans ever 2.0 inches
EncoderScanInterval 2.0

# You need to scan every third laser to keep scanners from seeing a different scanner's laser
NumberOfPhases 3

# Every third laser, starting with the first
TriggerPhase 0 : 0.0, 1.1, 3.0, 4.1, 6.0, 7.1, 9.0

# Every third laser, starting with the second
TriggerPhase 1 : 0.1, 2.0, 3.1, 5.0, 6.1, 8.0, 9.1

Every third laser, starting with the third
TriggerPhase 2 : 1.0, 2.1, 4.0, 5.1, 7.0, 8.1

# This means they all "trigger" on the same location, but space their exposures out by time instead of location
# A phase lasts as long as the longest MaxLaserOn value of the scanners in that phase.
# In this example, each phase contains lasers with a MaxLaserOn of 2.0 milliseconds, so an entire scan will
# take 2.0 ms for the first phase, 2.0 ms for the second, and 2.0 ms for the third.
TimeStaggeredScanning


# A ScannerConfig block is used to configure multiple scanners at once.
# In this case, the two scanners under the cabin are closer to the cant, 
# and therefore have a lower MaxLaserOn value.
ScannerConfig ScannersUnderOperator 0, 1
{
	# 0.1 milliseconds is a general minimum 
	MinLaserOn      0.10

	# Since the scanners under the operator are closer to the cant, they have a lower exposure time
	MaxLaserOn      1.0

	CalibrationFixtureNames FiveBySevenCant

	# The lasers are upstream compared to the camera
	LaserUpstream true

	WindowTop    36.0
	WindowBottom -1.0
	WindowLeft   -1.0
	WindowRight  48.0
}

# The remaining scanners are all the same distance from the cant,
# so they all have a higher MaxLaserOn value.
ScannerConfig ScannersOnCeiling 2, 3, 4, 5, 6, 7, 8, 9
{
	# 0.1 milliseconds is a general minimum 
	MinLaserOn      0.10

	# The other eight scanners are hung from the ceiling and further from the cant so have a higher exposure time
	# Since this is the largest MaxLaserOn in the system, including the scanners below the cabin, this is how 
	# long a phase lasts for during TimeStaggeredScanning.
	MaxLaserOn      2.0

	CalibrationFixtureNames FiveBySevenCant

	# The lasers are upstream compared to the camera
	LaserUpstream true

	# Data will only be returned if it is within this scan window.
	# This allows you to exclude data points from machinery, walls, etc.
	# It also makes autoexposure better because only data within the window is used to adjust the exposure.
	WindowTop    36.0
	WindowBottom -1.0
	WindowLeft   -1.0
	WindowRight  48.0
}

# This is a common cant size located with the knees pulled all the way in
CalibFixture FiveBySevenCant
{
	# Lower X, Left Y, Width, Height
	SquareFeature 0 0 5 7
}

JS20 X Series only.

TimedScanInterval

Value Range:0.0 to 167.7
Default Value:0.01
Units:seconds
Location:outside a ScannerConfig block

This sets the frequency the scanner will trigger while in timed sync mode. The encoder value will be returned in the scans, but the scans won't be triggered by the encoder. Care must be taken to avoid a scanner seeing another scanner's laser during exposure.

EncoderPulseInterval

Value Range:0.0 to 6500.0
Default Value:1.0
Units:Any distance units
Location:outside a ScannerConfig block

This is the distance per encoder pulse, or how far the object moves per quadrature phase. The JS-20 counts every phase of the quadrature signal, so this will be one quarter of the encoder pulse distance used in systems that only count on the rising edge of one channel. The units are user-defined, and need only match what is used for the other encoder parameters.

EncoderScanInterval

Value Range:0.0 to 6500.0
Default Value:1
Units:Any distance units
Location:outside a ScannerConfig block

This sets the distance interval for triggering scans. Every time the belt/chain/screw drive moves this distance, a new scan will be triggered.

NumberOfPhases

Value Range:1 to 100
Default Value:2
Location:outside a ScannerConfig block

Determines the number of phases each scan interval will be divided into. Typically, this will be the number of scanners in a particular zone. Each phase must be longer than MaxLaserOn or the scans may overlap and one scanner may see another's laser. The number of phases must be less than the number of encoder pulses per scan interval.

TriggerPhase

Value Format:phase_number @ <phase delay in ms> : comma-separated list of Cable ID's.
Value Range:phase delay between 0.0 and 2000.0
Default Value:phase delay will default to a safe value based on MaxLaserOn times
Location:outside a ScannerConfig block
Firmware Req: Optional @phase_delay only supported in 1945 and later

Determines which phase a scanner will scan in. It is important that each scanner be in a different phase from any other scanners whose lasers it could potentially see. That way their lasers won't be on at the same time and they won't analyze the wrong laser line. This example causes the scanners with cable ID's 0 and 2 to trigger on phase 0, and the scanners with cable ID's 1 and 3 to trigger on phase 1.

TriggerPhase 0 : 0, 2
TriggerPhase 1 : 1, 3

Another example this time with the phase delays set at 0.0 ms and 5.0 ms. These delays will only be used in time staggered scanning mode.

TriggerPhase 0 @0.0 : 0, 2
TriggerPhase 1 @5.0 : 1, 3

StartScanTriggerOnHigh

Value Format:Takes no parameters
Default Value:None
Location:outside or inside a ScannerConfig block

At the global level, this parameter means that all scanners will start synchronized scanning when the StartScan signal is high voltage. If this appears in a ScannerConfig block, all the scanners with that cable ID will start synchronized scanning when the StartScan signal is high voltage. If this parameter doesn't appear, then the scanners will start synchronized scanning when the StartScan signal is low voltage. This parameter is only valid for scanner firmware version 561 and later.

UntriggeredSyncScanning

Value Format:Takes no parameters
Default Value:None
Location:outside a ScannerConfig block
Firmware Req:1840 and later

This global parameter means that the scanners do not need a Start Scan signal in order to initiate synchronized scanning. This is useful for scanners that have the Switchcraft 8-pin connector and do not have a Start Scan signal as part of the system.

PulseMaster

Value Format:CableId Period in ms
Default Value:None
Location:outside a ScannerConfig block
Firmware Req:1945 and later

This global parameter sets one scanner to be a be a timing master and send periodic pulses out on it's Start Scan differential pair. The following example line would set scanner 0 to send out pulses every 10ms (100Hz).

PulseMaster 0 10.0