ENOVA · SCPI Remote Control
How to Remotely Control GYRFALCON S8000 & S4000 Pro via SCPI
A practical walkthrough of communication setup, core commands, typical workflows, and complete scripts for four-channel automated battery testing.
Introduction
The ENOVA GYRFALCON S8000 and S4000 Pro four-channel smart chargers are not only operable via the front panel, but also provide a complete SCPI (Standard Commands for Programmable Instruments) command interface. With SCPI, you can seamlessly integrate the charger into TestController, LabVIEW, Python, C#, and other host software to achieve:
- Four-channel independent control — manage charging/discharging tests on 4 channels simultaneously.
- Automated test workflows — batch configure 32 programs and execute cyclic tests in sequence.
- Real-time data acquisition — periodically read voltage, current, capacity, and energy.
- Remote monitoring and alerts — obtain device information via status queries and LED states.
This article walks you through SCPI remote control of GYRFALCON, from communication setup and core commands to typical workflows and complete scripts.
1. Communication Setup
The host communicates with GYRFALCON via USB-to-serial (CH340C). Parameters:
| Parameter | Value |
|---|---|
| Baud rate | 115200 |
| Data bits | 8 |
| Stop bits | 1 |
| Parity | None |
| Line ending | Device-dependent (commonly \r\n or \n) |
| Driver | SCPIx (TestController) |
TestController configuration example:
#port comFixedBaud
#baudrate 115200
#driver SCPIx
2. Core Command Categories
2.1 Measurement and Status Queries
| Command | Description | Example Return |
|---|---|---|
*IDN? | Query device identity | ENOVA TECHNOLOGY,GYRFALCON S8000,0,3.0.38 |
*UPT? | Query uptime | 3D|01:09:59 |
MEASure:ALL? 1,2,3,4 | Read all measurements for 4 channels | 4.183e+00,3.510e-01,... |
MEASure:VOLTage? Ch1 | Query CH1 voltage | 4.189V |
MEASure:CURRent? Ch1 | Query CH1 current | 0.351A |
MEASure:CAPAcity? Ch1 | Query CH1 capacity | 0.031Ah |
MEASure:ENERgy? Ch1 | Query CH1 energy | 0.135Wh |
STATus? Ch1 | Query channel status | CC_Charging |
STATus:LED? Ch1 | Query LED status | GREEN |
MEASure:ALL? return format breakdown (4 values per channel):
MEASure:ALL? 1,2,3,4
Return: 4.183e+00, 3.510e-01, 2.048e-02, 8.540e-02, 4.202e+00, ...
↑ ↑ ↑ ↑ ↑
CH1 volt CH1 curr CH1 cap CH1 energy CH2 volt ...
2.2 Program Parameter Settings
| Command | Description | Example |
|---|---|---|
PROGram:TYPE Ch1,Li | Set battery type to Li-ion | Ni / Li / LF / Li430 / Li435 / LD |
PROGram:TASK Ch1,C | Set task to charge | C / D / Cy / Br / Re / St |
PROGram:CURRent:CHARge Ch1,1.0A | Set charge current to 1 A | Max 2 A |
PROGram:VOLTage:TERMination Ch1,4.2V | Set termination voltage to 4.2 V | Max 4.85 V |
PROGram:TIME:CHARge Ch1,120Min | Set max charge time to 120 min | Max 1000 min |
PROGram:CAPAcity Ch1,5500mAh | Set max capacity to 5500 mAh | < 10000 |
PROGram:LONGname Ch1,"MyCell" | Set long name | Max 16 chars |
2.3 Program Control Flow
Complete program setup flow: Preprocess → Set parameters → Save → Start → Wait for completion → Release control
| Step | Command | Description |
|---|---|---|
| 1 | CONTrol:PROGram:PREProcess Ch1 | Preprocess; must return Ready to proceed |
| 2 | PROGram:TYPE Ch1,Li … | Set all program parameters |
| 3 | CONTrol:PROGram:SAVE Ch1 | Save program to Flash or temporary parameters |
| 4 | CONTrol:PROGram:COMPleted Ch1 | Exit configurator |
| 5 | CONTrol:TRANsferChannelControlToPC Ch1,Yes | Transfer control to PC |
| 6 | CONTrol:PROCess:STARt Ch1 | Start execution |
| 7 | STATus:CONTrol:PROCess:COMPleted? Ch1 | Poll for completion |
| 8 | CONTrol:RELEase Ch1 | Release control |
2.4 Super Control
Super control allows real-time adjustment of key parameters during program execution, such as charge current and termination voltage:
| Command | Description |
|---|---|
SUPEr:CONTrol:RUN Ch1 | Start super control |
SUPEr:CONTrol:STOP Ch1 | Stop super control |
SUPEr:PROGram:TASK Ch1,C | Real-time modify task |
SUPEr:PROGram:CURRent:CHARge Ch1,1.0A | Real-time modify charge current |
SUPEr:PROGram:VOLTage:TERMination Ch1,4.2V | Real-time modify termination voltage |
2.5 Global Configuration
| Command | Description |
|---|---|
CONFig:FANS:ENABle ON | Fan switch |
CONFig:BEEPer:KEY:ENABle ON | Key beeper |
CONFig:CALIbration:ENABle YES | Enable calibration |
CONFig:DEFAultprogram Ch1,0 | Set CH1 default program |
2.6 Dangerous Commands Warning
| Command | Risk |
|---|---|
*RST | Standard reset, jumps to Bootloader |
*FWUPD / *FWUPDRST | Clears product key, writes Flash, jumps to Bootloader |
PACKet:RATIo | Writes calibration Flash |
:SYSTem:RESEt:PROGram | Resets programs 0–31 to factory defaults |
:SYSTem:RESEt:CALIbration | Restores calibration parameters from backup |
3. TestController Integration Example
TestController is an open-source host testing software that maps SCPI commands to UI controls via configuration files. Key configuration snippets:
#askValues MEASure:ALL? 1,2,3,4
#askValuesReadFormat ffffffffffffffff
#readingDelay 5
#interfaceType Charger Charger:2 Charger:3 Charger:4
#interface readVoltage 0 4 8 12
#interface readCurrent 1 5 9 13
#interface readCapacity 2 6 10 14
#interface readEnergy 3 7 11 15
Program parameter setting example:
#scpiCmd ChargeCurrent tx PROGram:CURRent:CHARge (selectedChannel),(value)A
#scpiCmd ChargeCurrent? txrx? PROGram:CURRent:CHARge? (selectedChannel)
:readmath: (value/1000.0)
Super control button example:
#cmdSetup button Start_Process CH1_Super_Controller
:write:SUPEr:CONTrol:RUN Ch1;[200];
:tip:The button start the program.
4. Complete Script Sources
4.1 Control Script Template
Use case: Execute multiple Process steps in sequence, such as “discharge → rest → charge → rest → discharge”.
#scriptMenu Gyrfalcon_S4000Pro_Control_Script_Template_20261002124904
#logcmds 0
=var device=getDevice("Charger")
(device):
=var channel="Ch1";
=var runNow="Yes";
=var restingTime=10;
=var command_TRANsferChannelControlToPCQ= "CONTrol:TRANsferChannelControlToPC? "+channel
=var command_ProcessCompletedQ= "STATus:CONTrol:PROCess:COMPleted? "+channel
;;Start
CONTrol:TRANsferChannelControlToPC (channel),(runNow);[200];
#if (deviceRead(device,command_TRANsferChannelControlToPCQ) == "Transferred")
;;************************************Process 1***********************************************
;;The content generated by the "Configuration File for Control Scripts"
;;can be directly copied. Please refer to the format specified in the reference
;;documentation.
;;- - - - - - - - - - - - For example - - - - - - - - - - - -
;;PROGram:TYPE (channel),Li;[50];
;;PROGram:TASK (channel),D;[50];
;;PROGram:CURRent:DISCharge (channel),1.0A;[50];
;;PROGram:TIME:CUT (channel),600min;[50];
;;PROGram:CURRent:DISCharge:REDUce (channel),0.4A;[50];
;;PROGram:VOLTage:CUT (channel),3.3V;[50];
;;CONTrol:PROCess:STARt (channel);[50];
;;- - - - - - - - - - - - Example end - - - - - - - - - - - -
;;*********************************************************************************************
#while (deviceRead(device,command_ProcessCompletedQ) != "Completed")
=sleep(5000)
#endwhile
CONTrol:RESTing (channel),(restingTime)min;[50];
;;************************************Process 2***********************************************
;;*********************************************************************************************
#while (deviceRead(device,command_ProcessCompletedQ) != "Completed")
=sleep(5000)
#endwhile
CONTrol:RESTing (channel),(restingTime)min;[50];
;;************************************Process 3***********************************************
;;*********************************************************************************************
#while (deviceRead(device,command_ProcessCompletedQ) != "Completed")
=sleep(5000)
#endwhile
CONTrol:RELEase (channel);[50];
#endif
;;Finished
4.2 Configuration Copy Script Template
Use case: Batch write configurations for programs 0–31. Program 0 is discharge, programs 1, 2, and 4–31 are charge, and program 3 is NiMH discharge.
#scriptMenu Gyrfalcon_S4000Pro_Configuration_Copy_Script_20261002124620
#logcmds 0
=var device=getDevice("Charger")
(device):
=var channel = "None"
=var command_PreprocessBeforeSettingProgramQ = "CONTrol:PROGram:PREProcess? " + channel
=popupShowProgressAsync("Configuring GYRFALCON S4000Pro programs",32);
;;Start
CONTrol:PROGram:PREProcess (channel);[200];
#if (deviceRead(device,command_PreprocessBeforeSettingProgramQ) == "Ready")
;;***************************************************************************
;;Details of program 0
;;Battery Type: LiionStd
;;Task: Discharge
;;Discharge Current: 0.95A
;;Max Discharge Time: 600min
;;Discharge Reduce Current: 0.1A
;;Discharge Cut Voltage: 2.8V
;;Program Long Name: DILI↓0.95A┕2.80V
;;Program Short Name: DILI↓0.95A
;;Configuration Script of Program 0
=popupShowProgressSetPosition(0);
PROGram:SERIalno (channel),0;[50];
PROGram:TYPE (channel),Li;[50];
PROGram:TASK (channel),D;[50];
PROGram:CURRent:DISCharge (channel),0.95A;[50];
PROGram:TIME:CUT (channel),600min;[50];
PROGram:CURRent:DISCharge:REDUce (channel),0.1A;[50];
PROGram:VOLTage:CUT (channel),2.8V;[50];
program:LongName (replaceCharsR("DILI↓0.95A┕2.80V","\x7f\u2191\u2193\u29bb\u23b2\u2195\u22A5\u2126\u250d\u2515"));[50];
program:ShortName (replaceCharsR("DILI↓0.95A","\x7f\u2191\u2193\u29bb\u23b2\u2195\u22A5\u2126\u250d\u2515"));[50];
CONTrol:PROGram:SAVE (channel);[50];
;;***************************************************************************
;;Details of program 1
;;Battery Type: LiionStd
;;Task: Charge
;;Max Capacity: 5500mAh
;;Precharge Current: 0.1A
;;Max Precharge Time: 180min
;;Precharge To Fast Charge Voltage: 3.0V
;;Charge Current: 1.0A
;;Max Charge Time: 600min
;;End Charge Current: 0.1A
;;End Charge Voltage: 4.2V
;;Restart Voltage: 0.0V
;;Program Long Name: CHLI↑1.00A┍4.20V
;;Program Short Name: CHLI↑1.00A
;;Configuration Script of Program 1
=popupShowProgressSetPosition(1);
PROGram:SERIalno (channel),1;[50];
PROGram:TYPE (channel),Li;[50];
PROGram:TASK (channel),C;[50];
PROGram:CAPAcity (channel),5500mAh;[50];
PROGram:CURRent:PRECharge (channel),0.1A;[50];
PROGram:TIME:PRECharge (channel),180min;[50];
PROGram:VOLTage:PREChargetofastcharge (channel),3.0V;[50];
PROGram:CURRent:CHARge (channel),1.0A;[50];
PROGram:TIME:CHARge (channel),600min;[50];
PROGram:CURRent:TERMination (channel),0.1A;[50];
PROGram:VOLTage:TERMination (channel),4.2V;[50];
PROGram:VOLTage:RESTart (channel),0.0V;[50];
program:LongName (replaceCharsR("CHLI↑1.00A┍4.20V","\x7f\u2191\u2193\u29bb\u23b2\u2195\u22A5\u2126\u250d\u2515"));[50];
program:ShortName (replaceCharsR("CHLI↑1.00A","\x7f\u2191\u2193\u29bb\u23b2\u2195\u22A5\u2126\u250d\u2515"));[50];
CONTrol:PROGram:SAVE (channel);[50];
;; Additional programs (2, 3, ... up to 31) can be added similarly
;;***************************************************************************
CONTrol:PROGram:COMPleted (channel);[50];
=popupShowProgressSetPosition(100);
#endif
;;Finished
4.3 Calibration Parameter Download Script
Use case: Write calibration parameters to CH1–CH4.
#scriptMenu Gyrfalcon_S4000Pro_calibration_parameter_download_Script_20261002124528
#logcmds 0
=var device=getDevice("Charger")
(device):
=var channel = "None"
=var command_PreprocessBeforeSettingProgramQ = "CONTrol:PROGram:PREProcess? " + channel
=popupShowProgressAsync("Download GYRFALCON S4000Pro calibration parameter",4);
;;Start
CONTrol:PROGram:PREProcess (channel);[200];
#if (deviceRead(device,command_PreprocessBeforeSettingProgramQ) == "Ready")
;;****************Calibration Parameter Download Script******************
=popupShowProgressSetPosition(1);
PACKet:RATIo #31611.5465085506,0.9604977369,0.3318018615,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.3124411106,-0.0238245726,1,28;[200];
=popupShowProgressSetPosition(2);
PACKet:RATIo #31611.5465085506,0.9604977369,0.3318018615,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.3124411106,-0.0238245726,2,27;[200];
=popupShowProgressSetPosition(3);
PACKet:RATIo #31611.5465085506,0.9604977369,0.3318018615,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.3124411106,-0.0238245726,3,26;[200];
=popupShowProgressSetPosition(4);
PACKet:RATIo #31611.5465085506,0.9604977369,0.3318018615,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.2911419868,0.0024977922,1.0000000000,3.3124411106,-0.0238245726,4,25;[200];
;;***********************************END****************************************
CONTrol:PROGram:COMPleted (channel);[50];
=popupShowProgressSetPosition(100);
#endif
;;Finished
5. FAQ
Q1: Why are the measurement values always 0?
Check whether the channel is in ACCESSED_Flag state. Without access,
most measurement commands return 0. Query the current channel state with STATus?.
Q2: Why does saving a program fail?
CONTrol:PROGram:SAVE requires that CONTrol:PROGram:PREProcess
has been executed and returned Ready. If not preprocessed or preprocessing
failed, it returns SCPI_ERROR_EXECUTION_ERROR (-200).
Q3: Why does querying current return 1000 instead of 1.0?
The device stores values internally in mA and returns mA values. The host must convert
using value/1000.0 to display in A. This is expected behavior.
Q4: Can None / Ignore channels be used for measurements?
No. None / Ignore return channel_no = 0, and
measurement commands will reject them with SCPI_ERROR_ILLEGAL_PARAMETER_VALUE (-224).
Q5: Why doesn’t SUPEr:PROGram:VOLTage:RESTart exist?
This command is not defined. Super control only supports the four voltage commands
TERMination, TARGet, PREChargetofastcharge, and
CUT. To set restart voltage, use PROGram:VOLTage:RESTart.
6. Conclusion
The GYRFALCON S8000 and S4000 Pro provide a complete SCPI command set covering:
- Four-channel independent measurement and status queries
- Batch configuration of 32 programs
- Complete program control flow
- Super control with real-time parameter adjustment
- Global configuration and calibration
Whether for production-line automated testing, R&D debugging, or advanced DIY users, SCPI enables rapid remote control. With the TestController configuration file, it’s ready to use out of the box.
Technical Support: visit the ENOVA official website or contact the support team.
Downloads
Latest firmware is available on the official ENOVA website.