The Remote Server app allows one to write their own scripts or macros for custom EPMA application development. Scripts can be written for any OLE (Active-X) container such as Excel, MatLab, LabView, etc. See here for more information:
http://smf.probesoftware.com/index.php?topic=88.msg315#msg315
I have recently added several new functions to enable custom imaging app development as listed here:
Public Property Get RemoteInterfaceType() As Integer
Public Property Get RemoteImageInterfaceType() As Integer
Public Property Get RemoteJEOLEOSInterfaceType() As Long
Public Property Get RemoteImageInterfaceImageIxIy() As Single
Public Sub RemoteImageGetBeamMode(beammode As Integer)
Public Sub RemoteImageSetBeamMode(beammode As Integer)
Public Sub RemoteImageBeamDeflection2(xoffset As Single, yoffset As Single)
Public Sub RemoteImageGetImageShift(ix As Single, iy As Single)
Public Sub RemoteImageSetImageShift(ix As Single, iy As Single)
Public Sub RemoteSetReflectedLight(lightonoff As Integer, lightintensity As Integer)
Public Sub RemoteSetTransmittedLight(lightonoff As Integer, lightintensity As Integer)
See the Remote Server documentation for more details.
As an aid to developing your own custom imaging applications using the Probe for EPMA Remote Server interface, I have attached below a zip file with a very simple but powerful example of a Remote Server imaging application (remember to login to see attachments). This application and the Remote interface are of course free to all PFE customers. Please let us know if you have any questions on using this for your own custom applications.
To demonstrate how simple it is to develop a custom imaging application for your EPMA instrument, see the "get image" routine code inserted below which was written in VB6. The complete VB6 project is in the attached zip file.
Sub TestRemoteImageGet()
' Get analog signal image
ierror = False
On Error GoTo TestRemoteImageGetError
' Send the image channel
Remote.RemoteImageSetImageMode ImageChannel%
Dim done% ' returned, true (-1) if image complete
Dim ntype As Integer ' passed (1 = analog signal, 2 = x-ray)
Dim sxmin As Single, symin As Single ' returned (stage coordinates of corners)
Dim sxmax As Single, symax As Single ' returned (stage ccordinates of corners)
Dim zmin As Long, zmax As Long ' returned (intensity min/max)
ReDim iarray(1 To ImageIx%, 1 To ImageIy%) As Byte ' returned (0-255 normalized intensity data)
ReDim darray(1 To ImageIx%, 1 To ImageIy%) As Long ' returned (raw intensity data)
' Set beam mode to analog or digital spot (comment out other line)
'Remote.RemoteImageSetBeamMode 1 ' set to analog scan mode for SX100 mapping or SX100 video or Bruker or Thermo imaging
Remote.RemoteImageSetBeamMode 2 ' set to digital spot mode for JEOL 8200/8900/8500
' Remove faraday cup
Remote.RemoteFaraday 2
' Start the acquisition
Remote.RemoteImageStart
' Call image get in a loop until complete
Do Until done
Remote.RemoteImageGet done%, ntype%, ImageChannel%, AnalogAverages%, ImageIx%, ImageIy%, sxmin!, symin!, sxmax!, symax!, iarray(), darray&(), zmin&, zmax&
Sleep 100
DoEvents
If ierror Then Exit Do
Loop
' Convert long values to byte array
ReDim barray(1 To ImageIx%, 1 To ImageIy%) As Byte
Screen.MousePointer = vbHourglass
Call BMPConvertLongArrayToByteArray(ImageIx%, ImageIy%, darray&(), barray())
Screen.MousePointer = vbDefault
If ierror Then Exit Sub
' Display intensity data
Call TestRemoteImagingConvertImage(ImageIx%, ImageIy%, barray(), FormMAIN)
If ierror Then Exit Sub
msg$ = "Sxmin=" & Format$(sxmin!) & ", Sxmax=" & Format$(sxmax!) & vbCrLf
msg$ = msg$ & "Symin=" & Format$(symin!) & ", Symax=" & Format$(symax!)
FormMAIN.TextLog.Text = msg$
' Insert faraday cup
Remote.RemoteFaraday 1
' Set beam mode to analog scan mode
'Remote.RemoteImageSetBeamMode 1 ' set to analog scan mode for SX100 mapping or SX100 video or Bruker or Thermo imaging
Exit Sub
' Errors
TestRemoteImageGetError:
MsgBox Error$, vbOKOnly + vbCritical, "TestRemoteImageGet"
ierror = True
Exit Sub
End Sub
Note that your custom code can be developed in any application development environment which supports the active-X interface. This also includes Excel, Matlab, LabView and many other environments that support OLE containers.
Hi John-
So these commands would work regardless of the ImageInterfaceType-- e.g., no EDS, JEOL EDS, Thermo EDS, Bruker EDS?
e.g.,
[Image]
ImageInterfacePresent=1
ImageInterfaceType=7 ;JEOL video
or
ImageInterfacePresent=1
ImageInterfaceType=4
in the probewin.ini file
Quote from: Dan R on August 26, 2024, 12:35:58 PM
Hi John-
So these commands would work regardless of the ImageInterfaceType-- e.g., no EDS, JEOL EDS, Thermo EDS, Bruker EDS?
e.g.,
[Image]
ImageInterfacePresent=1
ImageInterfaceType=7 ;JEOL video
or
ImageInterfacePresent=1
ImageInterfaceType=4
in the probewin.ini file
Almost.
ImageInterfaceType=4 will work on any JEOL instrument with (or without) any EDS interface because it calls the JEOL WDS mapping interface directly. The minimum pixel dwell time for the WDS scan generator is 100 microsec, so a large images takes a minute or so.
ImageInterfaceType=7 only works with the JEOL 8230/8530 EDS but it can acquire down to a 1 microsec pixel dwell time so it's a little faster.
This looks very interesting, if anyone creates a macro version, I'd be very interested
I added the imaging code to one of the preexisting xls and
Remote.RemoteImageSetImageMode
gives the compile error: method or data member not found, which I guess means I don't know what I'm doing ;D
Here is a test app for using these Remote Imaging functions that was developed for Dan Rusuitto at GE. I just tested it now, and it does work in simulation mode.
(https://smf.probesoftware.com/gallery/1_09_01_25_7_56_02.png)
See attached ZIP below.
I've found a compiler, and this is very helpful to work with. Thanks for providing
Hi John and team,
I'm using the remote image interface on a JEOL 8530 with the JEOL ImageInterfaceType=7 (we are now able to collect faster JEOL images using the EDS interface) for two things:
1. automate image collection after driving from one location to another.
2. performing automated spot analyses after acquiring an image.
Automated image collection works fine, and I can collect series of images and save them.
However, during the automated spot analyses, image acquisition works fine on the first image (followed by point analyses) -- but then it seems to fail on subsequent images (see attached examples on two points on a metal standard: test and test2). The second (and subsequent) image appears to just be a copy of the first image with a bunch of lost pixels that must relate to where the beam has been scanning.
I can recover the system if I go into the JEOL PC-SEM software and click out of "EDS Analysis" mode and go back to "Observation" -- it asks if I want to leave spot mode -- but this defeats the purpose of automation. I see the same issue in your software *sometimes*, including the RemoteTestImage executable. Any thoughts on how I can reset the beam to get back to the right condition in between image collection + spot analyses -- you must have to do this during simultaneous WDS + EDS measurement?
After collecting the image and performing spot analyses, we do use RemoteImageSetBeamMode to set the beam mode back to 1, but this doesn't appear to fix the issue (see code snippets below).
Thanks,
Dan
Code snippets (in tcl) below for starting a point and stopping a point analysis:
proc jeol::startSpectrumAcq {xoffset yoffset counttime maxcounts} {
variable handle
variable nFixedSpecs
variable nTunableSpecs
variable countDone
# Digital spot mode
set mode 2
puts "RemoteImageSetBeamMode mode=$mode"
$handle RemoteImageSetBeamMode mode
puts "mode set"
...
proc jeol::finishSpectrumAcq {} {
variable handle
try {
try {
# Stop the counters
puts "RemoteStopAllCounters"
$handle RemoteStopAllCounters
} finally {
# Return the beam to zero deflection
set xoff 0.0
set yoff 0.0
puts "RemoteImageBeamDeflection2 xoff=$xoff yoff=$yoff"
$handle RemoteImageBeamDeflection2 xoff yoff
}
} finally {
# Reset the beam to 'scan' mode
set mode 1
puts "RemoteImageSetBeamMode mode=$mode"
$handle RemoteImageSetBeamMode mode
}
}
Quote from: Dan R on March 04, 2025, 02:33:52 PMHi John and team,
I'm using the remote image interface on a JEOL 8530 with the JEOL ImageInterfaceType=7 (we are now able to collect faster JEOL images using the EDS interface) for two things:
1. automate image collection after driving from one location to another.
2. performing automated spot analyses after acquiring an image.
Automated image collection works fine, and I can collect series of images and save them.
However, during the automated spot analyses, image acquisition works fine on the first image (followed by point analyses) -- but then it seems to fail on subsequent images (see attached examples on two points on a metal standard: test and test2). The second (and subsequent) image appears to just be a copy of the first image with a bunch of lost pixels that must relate to where the beam has been scanning.
This is a known issue with the JEOL 8230/8530 EDS video imaging interface.
What happens and how to fix it, is explained here:
https://smf.probesoftware.com/index.php?topic=40.msg10743#msg10743
So basically you need to unfreeze the imaging system, then and wait long enough so that the partial video image is finished and then start the video frame acquisition. That way you obtain a full video image at your specified frame rate.
Thanks John, so I should set the JEOL scan to slower and then use a delay -- any tips for how long your default scan delay is? Is it configured in the probewin.ini?
Is there a sample snippet of code you could share for that delay button? is it just a timer?
Quote from: Dan R on March 04, 2025, 04:50:55 PMThanks John, so I should set the JEOL scan to slower and then use a delay -- any tips for how long your default scan delay is? Is it configured in the probewin.ini?
It's going to depend on the image size and frame rate so I would do some testing in Probe for EPMA and see what sort of delay is necessary for your imaging requirements.
Yes, you can set the default value in the probewin.ini file
[image]
JEOLUnfreezeDelay=2
in seconds. We tried to get JEOL to fix this partial video frame issue for the 8230/8530, but they said they were already working on the new MEC EDS interface for the iSP100/iHP200F instruments and didn't want to spend time on an old interface...
Please note that I edited the instructions above. The unfreeze delay is applied after the unfreeze command, but *before* the image acquisition is started.
But the problem now is, that the unfreeze command in Probe for EPMA is applied outside of the image acquisition procedures. This is because the unfreeze command is utilized in several other places in PFE, for example when starting integrated EDS acquisitions using the JEOL MEC interface.
Because it turns out that JEOL needs to have the stage positions updated when adding points to the EDS acquisition "reservation list". And the EDS "reservation list" stage positions can only be updated when the video imaging is "unfrozen".
Yeah, it's crazy, but that's the way it is. So because because this "unfreeze" command is not implemented in the Remote Automation interface, we will have to add that. Give us a few days to look into this.
Thanks John, I appreciate the help. The new instrument we are redeveloping our software for will be an iHP200F -- I assume PFE and Remote will still work on this even with the new version of PC-SEM software? Our issue is that we originally bypassed all this trouble by using a Thermo NSS scan generator, however Thermo will no longer sell these for 3rd party equipment (i.e., non-Thermo SEMs).
The new iHP200F instrument uses a completely different (JEOL) EDS and video imaging interface. We've implemented the EDS calls, but not the video imaging yet, but we hope to implement the MEC video imaging at some point.
Right now people who have an iSP100/iHP200F instrument and want to do analog signal imaging in Probe for EPMA (or Remote), must use the JEOL mapping interface, which is as you, know a bit slow as the minimum dwell time is 0.1 millisec (100 microsec) per pixel for the mapping call.
Yes, the Thermo EDS imaging was a great solution and is no longer available for EPMA instruments, but if I were you I'd buy a Bruker EDS with your new instrument. Then you get a great EDS detector and imaging system.
For one thing, we've already interfaced Probe for EPMA to the Bruker imaging system. Second, you will have the ability to specify a frame time independently of the of the image size. With the JEOL 8230/8530 and iSP100/iHP200F video imaging systems, the frame times are determined by the image size as seen here:
' 64x48 : 100 us
' 128x96 : 100 us
' 256x192 : 80 us
' 512x384 : 60 us
' 1024x768 : 33 us
' 2048x1536 : 33 us
' 4096x3072 : 33 us
So for a 64 x 48 or 128 x 96 video image, the pixel dwell time is the same as the WDS beam scan mapping call, but for larger images the dwell time drops to 1/3 the time of the mapping call which is limited to 100 us per pixel.
So bottom line, we haven't implemented the new MEC video imaging calls yet, but hope to at some point in time. Or you could buy a Bruker EDS and be able to specify the pixel dwell time and image size independently! And it's already supported.
In the Remote automation interface, we added a call to "unfreeze" command for the video imaging on JEOL 8230/8530 instruments. We also added the call to the TestRemoteImaging test application:
(https://smf.probesoftware.com/gallery/1_06_03_25_12_39_09.png)
The source code for this project is attached below. This command is to be used when acquiring images using the ImageInterfaceType=7 (JEOL video) in the Probewin.ini file (for 8230/8530). This new command:
Remote.RemoteImageUnfreeze
is used to avoid acquiring a partial image frame from the JEOL video imaging. The idea is to unfreeze the imaging system using this command. This call will then wait for 2 seconds by default, so the next frame completes, but one can define a longer delay in the Probewin.ini file for larger image sizes. Alternatively one can simply add an additional timer delay in your macro or script, before acquiring a video image.
We will hopefully be adding the JEOL MEC video imaging for the iSP100/iHP200F instruments using the Microscope External Control (MEC) interface later this year.
We also updated the Remote user documentation and the Help file. Please download the latest Remote automation software from the Probe Software Resources pages to obtain the latest Remote automation interface installer:
https://www.probesoftware.com/resources/
from the Remote COM Download button.
Thanks John, so when we are collecting an image, our system is actually in 'analog scan' mode, so to modify your original VBA code above, we would need to:
Sub TestRemoteImageGet()
' Get analog signal image
ierror = False
On Error GoTo TestRemoteImageGetError
' Send the image channel
Remote.RemoteImageSetImageMode ImageChannel%
Dim done% ' returned, true (-1) if image complete
Dim ntype As Integer ' passed (1 = analog signal, 2 = x-ray)
Dim sxmin As Single, symin As Single ' returned (stage coordinates of corners)
Dim sxmax As Single, symax As Single ' returned (stage ccordinates of corners)
Dim zmin As Long, zmax As Long ' returned (intensity min/max)
ReDim iarray(1 To ImageIx%, 1 To ImageIy%) As Byte ' returned (0-255 normalized intensity data)
ReDim darray(1 To ImageIx%, 1 To ImageIy%) As Long ' returned (raw intensity data)
' Set beam mode to analog or digital spot (comment out other line)
'Remote.RemoteImageSetBeamMode 1 ' set to analog scan mode for SX100 mapping or SX100 video or Bruker or Thermo imaging
' Remove faraday cup
Remote.RemoteFaraday 2
' CALL UNFREEZE
' SET DELAY AND WAIT
' Start the acquisition
Remote.RemoteImageStart
' Call image get in a loop until complete
Do Until done
Remote.RemoteImageGet done%, ntype%, ImageChannel%, AnalogAverages%, ImageIx%, ImageIy%, sxmin!, symin!, sxmax!, symax!, iarray(), darray&(), zmin&, zmax&
Sleep 100
DoEvents
If ierror Then Exit Do
Loop
' Convert long values to byte array
ReDim barray(1 To ImageIx%, 1 To ImageIy%) As Byte
Screen.MousePointer = vbHourglass
Call BMPConvertLongArrayToByteArray(ImageIx%, ImageIy%, darray&(), barray())
Screen.MousePointer = vbDefault
If ierror Then Exit Sub
' Display intensity data
Call TestRemoteImagingConvertImage(ImageIx%, ImageIy%, barray(), FormMAIN)
If ierror Then Exit Sub
msg$ = "Sxmin=" & Format$(sxmin!) & ", Sxmax=" & Format$(sxmax!) & vbCrLf
msg$ = msg$ & "Symin=" & Format$(symin!) & ", Symax=" & Format$(symax!)
FormMAIN.TextLog.Text = msg$
' Insert faraday cup
Remote.RemoteFaraday 1
' Set beam mode to analog scan mode
'Remote.RemoteImageSetBeamMode 1 ' set to analog scan mode for SX100 mapping or SX100 video or Bruker or Thermo imaging
Exit Sub
' Errors
TestRemoteImageGetError:
MsgBox Error$, vbOKOnly + vbCritical, "TestRemoteImageGet"
ierror = True
Exit Sub
End Sub
Once the image is acquired, we would set to deflect the beam and perform spot analyses:
Remote.RemoteImageSetBeamMode 2 ' set to digital spot mode for JEOL 8200/8900/8500
and then we would start again in another location...
Quote from: Dan R on March 06, 2025, 01:41:12 PMThanks John, so when we are collecting an image, our system is actually in 'analog scan' mode, so to modify your original VBA code above, we would need to:
' Remove faraday cup
Remote.RemoteFaraday 2
' CALL UNFREEZE
' SET DELAY AND WAIT
' Start the acquisition
Remote.RemoteImageStart
Once the image is acquired, we would set to deflect the beam and perform spot analyses:
Remote.RemoteImageSetBeamMode 2 ' set to digital spot mode for JEOL 8200/8900/8500
and then we would start again in another location...
That should be fine, though I checked our code and see that we:
1. Set the beam conditions
2. Call Unfreeze
3. Remove Faraday
4. Acquire image
Thanks so much John! The testRemoteImage.exe works great now so long as I:
1. Unblank Beam
2. Call Unfreeze
3. Wait ~5 sec
4. Collect image
No more weird partial scans!
-Dan
Quote from: Dan R on March 07, 2025, 10:55:49 AMThanks so much John! The testRemoteImage.exe works great now so long as I:
1. Unblank Beam
2. Call Unfreeze
3. Wait ~5 sec
4. Collect image
No more weird partial scans!
-Dan
That's great to hear. We also modified the TestRemoteImaging application code to show this "unfreeze" function call (see updated code in TestRemoteImaging.zip attached below):
' Set beam mode to analog or digital spot (comment out other line)
'Remote.RemoteImageSetBeamMode 1 ' set to analog scan mode for SX100 mapping, SX100 video, JEOL EDS video, Bruker or Thermo imaging
Remote.RemoteImageSetBeamMode 2 ' set to digital spot mode for JEOL 8200/8900/8500
' Remove faraday cup
Remote.RemoteFaraday 2
' Unfreeze JEOL 8230/8530 and iSP100/iHP200F video imaging if necessary (add additional delay if necessary)
If JEOLEOSInterfaceType& = 3 Then
Remote.RemoteImageUnfreeze
End If
' Start the acquisition
Remote.RemoteImageStart
Note in the TestRemoteImaging code above, there are two calls to Remote.RemoteImageSetBeamMode, but one of them is commented out.
This is because depending on the scan generator system, you will select either analog scan mode, or digital spot mode. See attached ZIP file for the complete code for this test app.
By the way, there is one caveat I should mention. I was looking at the imaging code we use and noticed that the "unfreeze" call is made *before* the cup is removed and I was trying to understand why. Then I noticed a comment in our code, that in order to change the analog signal channel on these JEOL 8230/8530 instruments using EDS video imaging, say from SE to BSE, one must perform analog signal channel selection *after* unfreezing the JEOL video system.
So, in our code we set the beam conditions (Kev, etc.), unfreeze, then set the signal channel, then all the other scan modes, etc. Here's the code we use:
' Dimension byte array
If ImageIx% = 0 Or ImageIy% = 0 Then GoTo DigitizeImageStartZeroSize
' Get current positions
Call RealTimeGetAllPositions(Int(1)) ' update motors only
If ierror Then Exit Sub
' Starting acquisition, set conditions (if running automation)
If AcquisitionOnAutomate Then
Screen.MousePointer = vbHourglass
Call IOStatusAuto(vbNullString)
If imageconditionset = False Then
If DefaultColumnConditionMethod = 0 Then
Call IOStatusImage("Setting imaging kilovolts...")
Else
Call IOStatusImage("Setting imaging column condition...")
End If
DoEvents
' If using automated imaging, set conditions (store EDS variable and reset so EDS/Light condition is not changed)
itemp% = EDSThinWindowPresent
EDSThinWindowPresent = False
Screen.MousePointer = vbHourglass
If Not DigitizeImageSkipBeamModes Then ' set true in procedure DigitizeImageAutomate
Call RealTimeSetConditions(DefaultTakeOff!, DefaultKiloVolts!, DefaultBeamCurrent!, DefaultBeamSize!, DefaultColumnConditionMethod%, DefaultColumnConditionString$)
End If
Screen.MousePointer = vbDefault
EDSThinWindowPresent = itemp%
If ierror Then Exit Sub
imageconditionset = True
End If
End If
' If JEOL 8230/8530 or iSP100/iHP200F always unfreeze before image acquisition (regardless of imaging interface type)
Call RealTimeUnfreeze ' need to do this *before* setting image channel (RealTimeImageSetImageMode)
If ierror Then Exit Sub
' Make sure displayed mag is loaded
DefaultMagnificationImaging! = (FormIMAGE.TextMagnification.Text) ' added 03-23-2016 in case UseDoNotSetConditionsFlag or DigitizeImageSkipBeamModes is set (Seward)
' If not skipping set beam mode or using automated imaging, set beam modes (see AutomateAcquireImageSetConditions for using digitized conditions)
If Not DigitizeImageSkipBeamModes Or (AcquisitionOnAutomate And Not UsePositionSampleMagKeVForAutomatedImaging) Then
' Set image mode (analog signal source)
Call RealTimeImageSetImageMode(ImageChannelNumber%) ' need to "unfreeze" JEOL 8230/8530 instrument first for video acquisition!!!
If ierror Then Exit Sub
' Set beam mode for analog signal imaging (need to set analog signal source *before* setting beam mode for JEOL, see RealTimeImageSetImageMode call above)
Call RealTimeImageSetBeamModeImaging
If ierror Then Exit Sub
' Set the mag to currently displayed (or position sample) magnification
Call IOStatusImage("Setting imaging magnification to " & Str$(DefaultMagnificationImaging!) & "...")
If DebugMode Then Call IOWriteLog("DigitizeImageStart: setting imaging magnification to " & Str$(DefaultMagnificationImaging!) & "...")
DoEvents
Call RealTimeSetMagnification(DefaultMagnificationImaging!)
If ierror Then Exit Sub
If DebugMode Then Call IOWriteLog("DigitizeImageStart: waiting " & Format$(AutomatedImageAcquisitionMagChangeMilliSecDelay&) & " msec after setting magnification...")
Call Sleep(AutomatedImageAcquisitionMagChangeMilliSecDelay&)
' Get the current beam size
Call RealTimeGetBeamSize(tbeamsize!)
If ierror Then Exit Sub
' Make sure beam is focussed (if using automated image acquisition or the beamsize is *not* zero)
If AcquisitionOnAutomate Or tbeamsize! <> 0# Then
Call IOStatusAuto("Setting zero beam size before image acquisition...")
Call RealTimeSetBeamSize(CSng(0#)) ' force beam size to zero
If ierror Then Exit Sub
End If
' Use current imaging magnification if not setting beam conditions or not using automated image acquisition
Else
DefaultMagnification! = DefaultMagnificationImaging! ' need to set global for beam deflection calibration in RealTimeImageBeamDeflection()
End If
' Send scan rotation if present (get scan rotation based on current keV and mag)
If ScanRotationPresent Then
tfov! = RealTimeGetBeamScanCalibration!(XMotor%, DefaultKiloVolts!, DefaultMagnification!, DefaultScanRotation!)
If ierror Then Exit Sub
Call IOStatusImage("Setting scan rotation to " & Str$(DefaultScanRotation!) & "...")
DoEvents
Call RealTimeSetColumnParameters(Int(7), tCondenserCoarse&, tCondenserFine&, tObjectiveCoarse#, tObjectiveFine#, tAstigmation1&, tAstigmation2&, DefaultScanRotation!, tmagnification!)
If ierror Then Exit Sub
End If
' Remove faraday
Call RealTimeGetFaradayState ' check faraday state
If ierror Then Exit Sub
If Not BeamOnFlag Then
Call RealTimeFaraday(Int(2))
If ierror Then Exit Sub
End If
' Clear Acquire beam deflection
Call AcquireUpdateSampleProgressUnLoad
If ierror Then Exit Sub
' Deal with optical lamp modes if automated image acquisition
If AcquisitionOnAutomate Then
If MiscIsInstrumentStage("CAMECA") Or (MiscIsInstrumentStage("JEOL") And JeolEOSInterfaceType& <> 2) Then ' this sequence causes corruption of TCP/IP stack on JEOL 8900
Call IOStatusImage("Setting optical modes for automated electron imaging...")
If TransmittedLightPresent Then
If DebugMode Then Call IOStatusImage("Checking for light mode (reflected vs. transmitted)...")
Call RealTimeGetLightMode(mode%) ' check if in transmitted light mode
If ierror Then Exit Sub
If mode% = 1 Then
If DebugMode Then Call IOStatusImage("Setting light mode to reflected...")
Call RealTimeSetLightMode(Int(0)) ' set to reflected light if in transmitted light
If ierror Then Exit Sub
End If
End If
If DebugMode Then Call IOStatusImage("Checking if reflected light is on...")
Call RealTimeGetReflectedLightMode(mode%) ' check if reflected light is on
If ierror Then Exit Sub
If mode% = 1 Then ' if reflected light is on, turn off
If DebugMode Then Call IOStatusImage("Turning reflected light is off...")
Call RealTimeSetReflectedLightMode(Int(0))
If ierror Then Exit Sub
If DebugMode Then Call IOStatusImage("Waiting for reflected light off...")
Call MiscDelay6(FormMAIN.StatusBarAuto, "reflected light off...", CDbl(1#), Now) ' wait 1 second for light fully off (without DoEvents)
If ierror Then Exit Sub
End If
End If
End If
Call IOStatusAuto("Starting image acquisition...")
Call IOStatusImage("Starting image acquisition...")
' Start image acquisition
Call RealTimeImageStart
If ierror Then Exit Sub
Quote from: John Donovan on March 05, 2025, 07:09:36 AMThe new iHP200F instrument uses a completely different (JEOL) EDS and video imaging interface. We've implemented the EDS calls, but not the video imaging yet, but we hope to implement the MEC video imaging at some point.
Right now people who have an iSP100/iHP200F instrument and want to do analog signal imaging in Probe for EPMA (or Remote), must use the JEOL mapping interface, which is as you, know a bit slow as the minimum dwell time is 0.1 millisec (100 microsec) per pixel for the mapping call.
Yes, the Thermo EDS imaging was a great solution and is no longer available for EPMA instruments, but if I were you I'd buy a Bruker EDS with your new instrument. Then you get a great EDS detector and imaging system.
For one thing, we've already interfaced Probe for EPMA to the Bruker imaging system. Second, you will have the ability to specify a frame time independently of the of the image size. With the JEOL 8230/8530 and iSP100/iHP200F video imaging systems, the frame times are determined by the image size as seen here:
' 64x48 : 100 us
' 128x96 : 100 us
' 256x192 : 80 us
' 512x384 : 60 us
' 1024x768 : 33 us
' 2048x1536 : 33 us
' 4096x3072 : 33 us
So for a 64 x 48 or 128 x 96 video image, the pixel dwell time is the same as the WDS beam scan mapping call, but for larger images the dwell time drops to 1/3 the time of the mapping call which is limited to 100 us per pixel.
So bottom line, we haven't implemented the new MEC video imaging calls yet, but hope to at some point in time. Or you could buy a Bruker EDS and be able to specify the pixel dwell time and image size independently! And it's already supported.
Hi John, is there any update or estimate on whether the new MEC imaging calls would be available for the iHP200F?
Thanks!
-Dan
Sorry, we have not got around to that yet.
One problem is that we've asked JEOL Japan to implement an option for specifying the video frame dwell time on the new MEC interface but they have not responded to that request.
In the older 8230/8530 video interface they tried to add a frame time option as we requested, but that modified function did not work properly, and when we described the problem they said that the 8230/8530 video interface was no longer being developed and to wait for the new iSP100/IHP200F MEC interface. But when they released that interface, it (again) had no option for the frame time.
Since then we've been requesting that they implement a hardware connection with the Bruker EDS detector for integrated WDS and EDS spectrum imaging and we haven't wanted to distract them from this new project.
If I were you I'd buy a Bruker EDS detector.
Thanks John, I will consider it but for now it looks like we will limp along with the mapping image acquisition mode. Please let me know when you have implemented at least the base functionality we have now for the 8530F using the new interface.
-Dan