Desktop application for planning, simulating, controlling, and evaluating the right beam line in IBL at UW-Madison NEEP
| Device | Interface | Driver |
|---|---|---|
| Galil DMC-4103 motion controller | TCP/IP (port 23) | Built-in ASCII socket protocol |
| LabJack T7 analog input | USB or Ethernet | labjack-ljm Python package + LJM system library |
| LabJack CB37 terminal board | DB37 ribbon to T7 | Passive breakout — no driver |
| 4 x EEL5000.20.100 HV amplifier | BNC monitors -> CB37 | Read as analog voltages |
| 2 x Rigol DG1022Z function generator | USB (VISA) | pyvisa + NI-VISA Runtime backend |
| INFICON VGC083 vacuum gauge | RS-232 (USB-serial adapter) | pyserial + adapter driver |
| Agilent XGS-600 vacuum gauge | RS-232 (USB-serial adapter) | pyserial + adapter driver |
| Tektronix TDS 2012 oscilloscope | RS-232 (USB-serial adapter) | pyserial + adapter driver |
| USB camera | USB (UVC) | Built-in Windows UVC driver |
There is one T7. MainWindow owns a single connection and a single poll thread
that reads all 12 channels in one round trip at 10 Hz. Tabs subscribe and filter.
| AIN | Where | Signal | Conversion |
|---|---|---|---|
| AIN0-AIN3 | T7 body terminals | NEC log amps, slits X+/X-/Y+/Y- | log-amp curve -> A |
| AIN4, AIN5 | CB37 | spare | - |
| AIN6 / AIN7 | CB37 | Amp Y- current / voltage monitor | 1 V = 10 mA / 1 V = 1 kV |
| AIN8 / AIN9 | CB37 | Amp Y+ current / voltage monitor | " |
| AIN10 / AIN11 | CB37 | Amp X- current / voltage monitor | " |
| AIN12 / AIN13 | CB37 | Amp X+ current / voltage monitor | " |
Wiring notes. CB37 AIN0-AIN3 are electrically duplicated with the T7's own screw terminals - the log amps use the body terminals, so nothing may be landed on CB37 AIN0-AIN3. Land the eight amplifier BNC shields on AGND (DB37 pin 30), not GND: GND carries load current and will offset the ADC reference. All twelve channels run at +/-10 V single-ended. This is required, not merely convenient - the EEL5000 current monitor reaches +/-10 V during its rated 100 mA / 4 ms transient.
Sampling caveat. At 10 Hz these monitors report a time-average of a kHz-rate deflection waveform, not its peak. The HV Amplifiers tab is a DC-bias / drift / fault monitor, not a waveform capture.
Devices are optional - the Analysis tab and all simulation functions work without any hardware connected.
The app depends on several system-level libraries that PyInstaller cannot bundle. On a fresh control PC any of them may be missing, so the app includes a driver preflight check that detects and reports missing dependencies at startup.
When RBL launches, rbl/driver.py runs a preflight check on each system-level
dependency. If anything is missing, a yellow warning bar appears below the tab bar
listing every issue and guiding the operator to the required software.
| Dependency | What it serves | How the check works |
|---|---|---|
LabJack LJM (LabJackM.dll) |
T7 analog input (log amps, HV amp monitors) | Imports labjack.ljm and reads the library version — proves the DLL is present AND responding |
| VISA Backend (Keysight IO Libraries Suite) | Rigol DG1022Z function generators, Keithley 6482 picoammeter | Creates a pyvisa.ResourceManager() — fails if no VISA backend is installed system-wide |
| USB-serial adapter driver | VGC083 / XGS-600 vacuum gauges, TDS 2012 oscilloscope | Checks that pyserial can enumerate COM ports. Since a missing adapter driver only shows up when the adapter is plugged in (no COM port appears), this is a softer check |
| Dependency | Why it's fine |
|---|---|
| Galil DMC-4103 | Pure TCP sockets — no driver beyond Windows networking |
| USB camera | Standard UVC driver — built into Windows |
Install these system-wide on the control PC:
| Dependency | Where to obtain |
|---|---|
| LabJack LJM | LabJack LJM installer |
| VISA Backend | Keysight IO Libraries Suite |
| USB-serial (FTDI) | FTDI VCP drivers |
| USB-serial (Prolific) | Prolific PL2303 driver |
| USB-serial (CH340) | WCH CH340 driver |
Note: Bundling third-party installers was retired after antivirus heuristics flagged
installer executables embedded beside or inside the application bundle (see
docs/ANTIVIRUS_FALSE_POSITIVE.md). System drivers are installed once directly on
the host PC.
cd C:\Users\IGLeg\PycharmProjects\RBL
.venv\Scripts\activate
pyinstaller rbl.spec --clean
Or just run build.bat, which cleans, builds, and copies dist/ to D:\.
MIT - see LICENSE file.
If you have any questions, comments, or concerns email me - ilegault@wisc.edu