-
Couldn't load subscription status.
- Fork 10
Home
Welcome to the wiki for JISA!
JISA is a library written in Java, intended to be used as a means of creating
experimental control systems for common laboratory instrumentation. Whilst it is
written in Java, it can be used in any language that can run on or use the JVM
(which is just about anything). For example:
| Language | How |
|---|---|
| Java | Java.isJava() == true |
| Kotlin | Designed to compile to java byte-code (thus fully inter-operable with Java) |
| Python | By running on the Jython interpreter (which is written in Java) or by using JPype / PyJISA |
| Ruby | By running on the jRuby interpreter (which is written in Java) |
| MATLAB | MATLAB is written in Java |
| C++ | Can be compiled to java byte-code by use of gcc-bridge |
JISA provides a suite of pre-made GUI elements that you can piece together to
create simple GUIs to control your experiment. They are easy to use for simple
tasks but also allow you to do more complex things with them, offering a scale
of simplicity and complexity to suit both your needs and ability.
Connecting to instruments is easy with JISA. All you need to know is:
- The name of the driver class for your instrument
- How your instrument is connected
For example, if we have a Keithley 2400 connected via GPIB (board 0, address
12), then the driver class is K2400 and the address is GPIBAddress(0,12).
Thus, in Kotlin, we would write:
val smu = K2400(GPIBAddress(0,12))Now, the variable smu is an object that represents our connection to the
Keithley 2400, letting us do things like:
smu.setVoltage(5.0) // Set to source 5 V
smu.setIntegrationTime(0.2) // Set integration time to 0.2 s
smu.setCurrentLimit(30e-3) // Limit current to 30 mA
smu.useAutoRanges() // Use auto-ranging for voltage and current
smu.turnOn() // Enable outputIf we were to use a different SMU, the code remains the same. All that changes is which driver class we use. For example if we use a Keithley 236 instead:
val smu = K236(GPIBAddress(0,12))
smu.setVoltage(5.0) // Set to source 5 V
smu.setIntegrationTime(0.2) // Set integration time to 0.2 s
smu.setCurrentLimit(30e-3) // Limit current to 30 mA
smu.useAutoRanges() // Use auto-ranging for voltage and current
smu.turnOn() // Enable outputThis is why the instrument control is called "standardised": the way you use the same "type" of instrument is the same regardless of make and/or model (despite what actually has to happen "under the hood" being completely different).
Storing and using experimental data is a must for any experimental control
system. To this end, JISA provides the ResultList and ResultTable classes.
For example:
val VOLTAGE = Column.ofDoubles("Voltage", "V")
val CURRENT = Column.ofDoubles("Current", "A")
val results = ResultList(VOLTAGE, CURRENT)will define a "table of results" with two columns: "Voltage [V]" and "Current [A]", like so:
| Voltage [V] | Current [A] |
|---|---|
| ............ | ............ |
| ............ | ............ |
| ............ | ............ |
We can then add data to it, one row at a time, like so:
results.mapRow(
VOLTAGE to voltageValue,
CURRENT to currentValue
)For example, if we were to sweep voltage on an SMU:
val smu = K2400(GPIBAddress(0,12))
val VOLTAGE = Column.ofDoubles("Voltage", "V")
val CURRENT = Column.ofDoubles("Current", "A")
val results = ResultList(VOLTAGE, CURRENT)
smu.turnOn()
for (v in 0..60) {
smu.setVoltage(v)
results.mapRow(
VOLTAGE to smu.getVoltage(),
CURRENT to smu.getCurrent()
)
}
smu.turnOff()
results.output("data.csv");Then as we can see, this can be easily output as a CSV file by use of
results.output(...).
- Getting Started
- Object Orientation
- Choosing a Language
- Using JISA in Java
- Using JISA in Python
- Using JISA in Kotlin
- Exceptions
- Functions as Objects
- Instrument Basics
- SMUs
- Thermometers (and old TCs)
- PID and Temperature Controllers
- Lock-Ins
- Cameras
- Power Supplies
- Pre-Amplifiers
- Writing New Drivers