How to Remotely Control GYRFALCON S8000 and S4000 Pro via SCPI?

By Melody

How to Remotely Control GYRFALCON S8000 and S4000 Pro via SCPI

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:

ParameterValue
Baud rate115200
Data bits8
Stop bits1
ParityNone
Line endingDevice-dependent (commonly \r\n or \n)
DriverSCPIx (TestController)

TestController configuration example:

#port comFixedBaud
#baudrate 115200
#driver SCPIx

2. Core Command Categories

2.1 Measurement and Status Queries

CommandDescriptionExample Return
*IDN?Query device identityENOVA TECHNOLOGY,GYRFALCON S8000,0,3.0.38
*UPT?Query uptime3D|01:09:59
MEASure:ALL? 1,2,3,4Read all measurements for 4 channels4.183e+00,3.510e-01,...
MEASure:VOLTage? Ch1Query CH1 voltage4.189V
MEASure:CURRent? Ch1Query CH1 current0.351A
MEASure:CAPAcity? Ch1Query CH1 capacity0.031Ah
MEASure:ENERgy? Ch1Query CH1 energy0.135Wh
STATus? Ch1Query channel statusCC_Charging
STATus:LED? Ch1Query LED statusGREEN

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

CommandDescriptionExample
PROGram:TYPE Ch1,LiSet battery type to Li-ionNi / Li / LF / Li430 / Li435 / LD
PROGram:TASK Ch1,CSet task to chargeC / D / Cy / Br / Re / St
PROGram:CURRent:CHARge Ch1,1.0ASet charge current to 1 AMax 2 A
PROGram:VOLTage:TERMination Ch1,4.2VSet termination voltage to 4.2 VMax 4.85 V
PROGram:TIME:CHARge Ch1,120MinSet max charge time to 120 minMax 1000 min
PROGram:CAPAcity Ch1,5500mAhSet max capacity to 5500 mAh< 10000
PROGram:LONGname Ch1,"MyCell"Set long nameMax 16 chars

2.3 Program Control Flow

Complete program setup flow: Preprocess → Set parameters → Save → Start → Wait for completion → Release control

StepCommandDescription
1CONTrol:PROGram:PREProcess Ch1Preprocess; must return Ready to proceed
2PROGram:TYPE Ch1,Li …Set all program parameters
3CONTrol:PROGram:SAVE Ch1Save program to Flash or temporary parameters
4CONTrol:PROGram:COMPleted Ch1Exit configurator
5CONTrol:TRANsferChannelControlToPC Ch1,YesTransfer control to PC
6CONTrol:PROCess:STARt Ch1Start execution
7STATus:CONTrol:PROCess:COMPleted? Ch1Poll for completion
8CONTrol:RELEase Ch1Release control

2.4 Super Control

Super control allows real-time adjustment of key parameters during program execution, such as charge current and termination voltage:

CommandDescription
SUPEr:CONTrol:RUN Ch1Start super control
SUPEr:CONTrol:STOP Ch1Stop super control
SUPEr:PROGram:TASK Ch1,CReal-time modify task
SUPEr:PROGram:CURRent:CHARge Ch1,1.0AReal-time modify charge current
SUPEr:PROGram:VOLTage:TERMination Ch1,4.2VReal-time modify termination voltage

2.5 Global Configuration

CommandDescription
CONFig:FANS:ENABle ONFan switch
CONFig:BEEPer:KEY:ENABle ONKey beeper
CONFig:CALIbration:ENABle YESEnable calibration
CONFig:DEFAultprogram Ch1,0Set CH1 default program

2.6 Dangerous Commands Warning

⚠ Caution: The following commands write Flash, reset/reboot, or erase calibration parameters. Before executing, always confirm device state and complete backups.
CommandRisk
*RSTStandard reset, jumps to Bootloader
*FWUPD / *FWUPDRSTClears product key, writes Flash, jumps to Bootloader
PACKet:RATIoWrites calibration Flash
:SYSTem:RESEt:PROGramResets programs 0–31 to factory defaults
:SYSTem:RESEt:CALIbrationRestores 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.

ENOVA GYRFALCON S8000 & S4000 Pro · SCPI Remote Control Guide