; TestController device configuration file for Marconi 20218 and 2019 Signal Generators.
; Version 1.0
; Date 06-10-2026
; Written by Gertjan Miedema,  info at miedemageluid dot nl,  Username "Gertjan" at EEVblog.

; For use with TestController, software to control and log data: https://lygte-info.dk/project/TestControllerIntro%20UK.html
; For use with a Prologix GPIB interface, or clone. (AR488!)
;
; Tested with AR488 and official Prologix GPIB to USB adapters.
; Tested with Marconi 2018, Software Program Mod state 12



; Some info & tips:
;
; - To check current GPIB address: in local state, press SECOND FUNCT, then 2. 
;   The number in the Carrier Frequency display window is the GPIB address.
;   (If the display shows "--", the optional GPIB board is not fitted or active.)
;
;   If another GPIB address is required, this may be entered via the keyboard.
;   When the required address is displayed, press STORE key. 
;
; - The Marconi 2018 GPIB communication is not very fast.
;   To speed up communication and Menu build-up, all read values are cached in local variables.
;   Logging, Current Values tab and Readout popup is now very fast.
;
; - For all read commands, there are 2 versions:
;   xxxx?  (example: AM:DEPT? )  These are reading directly from the generator, but this takes time.
;   xxx:C? (example: AM:DEPT:C?) These commands are reading from the cached values. Much faster!
;
; - Official minimum carrier frequency is 80kHz. However, the spec says usable from 30kHz.
;   In the Setup menu, On the Utility tab, there is a choice to set minimum freq to 30kHz or 80kHz.
;
; - For most of the items in the setup menu, extra info is available in mouse-over tips.
;
; - If you have a start-up problem, and use a AR488 with a slow booting Chinese Nano clone,
;   un-remark this command:
;     ; Start up delay, only needed for AR488 with slow booting Chinese Nano clones
;     #resetDelay 3.5


; Known issues:
;
; There are also Marconi 2018A and 2019A Signal Generators.
; These next generation generators are having different GPIB commands. (a more modern system)
; So they can't be used with this device configuration file.




#metadef
#idString Marconi 2018
#name Marconi 2018
#handle Mi2018

#replaceText MaxFrequency 520M
#replaceText MaxDevFreq 5.2M



#metadef
#idString Marconi 2019
#name Marconi 2019
#handle Mi2019

#replaceText MaxFrequency 1040M
#replaceText MaxDevFreq 10.4M



#meta
#idString Marconi 2018
#name Marconi 2018
#handle Mi2018

#driver Ascii
#port GPIB



; Start up delay, only needed for AR488 with slow booting Chinese Nano clones
; #resetDelay 3.5

; The author statement is used for the listing in the About window.
#author Gertjan Miedema




#notes  Device configuration file for Marconi 20218 and 2019 Signal Generators.

- To check current GPIB address: in local state, press SECOND FUNCT, then 2. 
  The number in the Carrier Frequency display window is the GPIB address.

  If another GPIB address is required, this may be entered via the keyboard.
  When the required address is displayed, press STORE key.

- For most of the items in the setup menu, extra info is available in mouse-over tips.

- For more info, tips and known issues, look in the header of this configuration file (Marconi2018-2019.txt)


Configuration file version: 1.0






;---------  GPIB settings  -------------
; Used to change the standard LF end of line to CR or CRLF.
; For eol a string is used, to write control character escapes must be used, use: /r for CR and /r/n for CRLF
; #eol /r/n

; The #gpibReadEol defines how the device terminates its answers, the default uses eoi. 
; Specifying "#gpibReadEol 10" would expect a LF character for terminating a answer.(13 = CR, 10 = LF)
#gpibReadEol 10

; Add a small delay after each GPIB write, this can slow down the processing for old slow devices. (in ms)
; #gpibWriteDelay 10

; Minimum time before trying to read a answer from a device in ms
; #gpibWriteReadDelay 10

; ++read_tmo_ms is controlled with #readingDelay
; This specifies the timeout value, in SECONDS, that is used by the ++read command to wait for a character
; to be transmitted while reading data from the GPIB bus. The timeout value may be set between 0 and 32 seconds.
#readingDelay 2






; ============== Start original Marconi commands to SCPI/TestController commands translations  ==============

; There must be a line for each of the original device commands that will be used, converting it to a similar SCPI command


; -----  Commands to init & exit  -----


; -----  Check if a Marconi 2018 or 2019 is online-----
; The Marconi 2018/2019 does not have any *IDN? equivalent
; In the 2018/2019 answer string there is always a "0" in the 31st position
; CF  Select Carrier Frequency. Makes sure that generator is sending the default answer string
#scpiCmd ID:CHK? txrx? CF
:readmath: substring(value,30,31); 



; -----  Set amplitude units to  dBm en Vpd -----  
; Presets the generator to the units used in this definition
; SF Second function
; 6  set dBm
; 8  set Volt p.d. (= potential differential = Volts into 50R)
; ST store
; CF select Carrier (used for leaving 2nd function)
#scpiCmd SET:DBM tx SF 5 6 8 ST CF



; -----  Command to initialize and set cache variables -----  
#scpiCmd CACH:INIT none
:setvar: answerstring=0000000000000000000000000000000000000000
:setvar: freqCwCache=520000000
:setvar: powLevCache=-127
:setvar: outpStatCache="ON"
:setvar: modFreqCache=2
:setvar: fmDevCache=00000000
:setvar: fmStatCache="OF"
:setvar: fmSourCache="IN"
:setvar: fmAlcCache="A0"
:setvar: amDeptCache=00
:setvar: amStatCache="OF"
:setvar: amSourCache="IN"
:setvar: amAlcCache="A0"
:setvar: roscSourCache="IN"
:setvar: powLevOffsCache=0
:setvar: powUnitLogCache=00
:setvar: powUnitLinCache=00
;--- program variables, not read from generator ---
:setvar: powUnit="DB"
:setvar: powLevVoltCache=0.0000001
:setvar: MinFrequency=80000



; -----  Query instrument answer string and update all values in the cache -----  
; substring(string,from,to);   Returns part of a string, starting at index from, but not including index, to

#scpiCmd CACH:UPD? txrx?
:string:
:setvar: answerstring=value
:setvar: freqCwCache=(substring(answerstring,0,10))*10
:setvar: powLevCache=(substring(answerstring,20,26))/1000-133
:setvar: outpStatCache=((substring(answerstring,39,40))==0)?"OF":"ON"
:setvar: modFreqCache=substring(answerstring,30,32)
:setvar: fmDevCache=(substring(answerstring,10,18))*10
:setvar: fmStatCache=((substring(answerstring,32,33))==0)?"OF":"ON"
:setvar: fmSourCache=((substring(answerstring,33,34))==0)?"IT":"XT"
:setvar: fmAlcCache=((substring(answerstring,34,35))==0)?"A0":"A1"
:setvar: amDeptCache=substring(answerstring,18,20)
:setvar: amStatCache=((substring(answerstring,35,36))==0)?"OF":"ON"
:setvar: amSourCache=((substring(answerstring,36,37))==0)?"IT":"XT"
:setvar: amAlcCache=((substring(answerstring,37,38))==0)?"A0":"A1"
:setvar: roscSourCache=((substring(answerstring,40,41))==0)?"IT":"XT"
:setvar: powLevOffsCache=substring(answerstring,41,42)
:setvar: powUnitLogCache=substring(answerstring,26,28)
:setvar: powUnitLinCache=substring(answerstring,28,30)



; -----  Command to reset device -----  
; [CLR]    Do a GPIB "Selected Device Clear" function.
;          Resets to: Max freq, No AM of FM mod, int mod, mod osc 1kHz, Min RF level -127dB

#scpiCmd CLEAR tx [CLR]



; -----  Go local -----  
; Final commands to generator before breaking connection, used to restore local control
; [LOC]    Go to Local, Set device in local control mode, i.e. the user interface on the device is active. 

#scpiCmd LOCAL tx [LOC]



; ==========  Control  ==========


; -----  Carrier Frequency  -----
; Set and query of carrier frequency is in decaHertz

; Set Carrier Frequency
#scpiCmd FREQ:CW tx CF (formatDouble((value/1000),1,8,0,5)) KZ
:setvar: freqCwCache=inputValue


; Query Carrier Frequency
#scpiCmd FREQ:CW? txrx?
:readmath: (substring(value,0,10))*10;


; Query Carrier Frequency (from cache)
#scpiCmd FREQ:CW:C? none?
:readmath: freqCwCache



; ----- Set minimum Carrier Frequency (for use in Setup menu) -----
; 80kHz is specified minimum frequency
; But according to specs, down to 30kHz is usable with slightly degraded performance 

; Set minimum Carrier Frequency
#scpiCmd FREQ:CW:MIN none (value)
:setvar: MinFrequency=inputValue


; Query minimum Carrier Frequency
#scpiCmd FREQ:CW:MIN? none?
:readmath: MinFrequency





; -----  RF output level and unit -----


; Set RF level unit (Volts p.d. or dBm)
; DB  output in dBm
; VL  output in Volts
; p.d. = potential difference, = Voltage into 50R load

#scpiCmd POW:UNIT none?
:setvar: powUnit=inputValue


; Query RF level unit (Volts p.d. or dBm)
#scpiCmd POW:UNIT? none?
:readmath: powUnit



; Set RF output level
#scpiCmd POW:LEV #pgm#
var imp=50
var watt=0.0

if powUnit=="DB";
    deviceWrite(handle,"tx LV "+(formatDouble(value,1,3,0,2))+" DB");
    powLevCache=value;

; Calculate dBm to Volt for cached Power level in Volts
     watt=pow(10,(value-30)/10.0);
     powLevVoltCache=sqrt(watt*imp);

elseif powUnit=="VL";
    if value>=1.0;
        deviceWrite(handle,"tx LV "+(formatDouble(value,1,3,0,2))+" VL");
    elseif value<1.0 && value>=0.001;
        deviceWrite(handle,"tx LV "+(formatDouble(value*1000,1,3,0,3))+" MV");
    elseif value<0.001;
        deviceWrite(handle,"tx LV "+(formatDouble(value*1000000,1,3,0,3))+" UV");
    endif;
    powLevVoltCache=value;

; Calculate Volts to dBm for cached power level in dBm
    watt=pow(value,2)/imp;
    powLevCache=10.0*log(watt*1000);
endif;



; Query RF level
#scpiCmd POW:LEV? #pgm#
var dbm=0.0
var imp=50
var watt=0.0
var powLev=0.0

dbm=(substring(deviceRead(handle,"txrx?"),20,26))/1000-133;
if powUnit=="DB";
    powLev=dbm;  
    powLevCache=dbm;
elseif powUnit=="VL";

; Calculate dBm to Volt for Power level in Volts
    watt=pow(10,(dbm-30)/10.0);
    powLev=sqrt(watt*imp);
    powLevVoltCache=powLev;
endif;
print(powLev);



; Query RF level (from cache)
#scpiCmd POW:LEV:C? #pgm#
if powUnit=="DB";
     print(formatDouble(powLevCache,1,3,0,1));  
elseif powUnit=="VL";
    print(powLevVoltCache);
endif;




; -----  Output state ON/OFF  -----
; output off read: 0, send: LV OF
; output on  read: 1, send: LV ON

; Set Output ON/OFF
#scpiCmd OUTP:STAT tx LV (value)
:setvar: outpStatCache=inputValue


; Query Output ON/OFF
#scpiCmd OUTP:STAT? txrx?
:readmath: substring(value,39,40);
:readmath: (value==0)?"OF":"ON"


; Query Output ON/OFF (from cache)
#scpiCmd OUTP:STAT:C? none?
:readmath: outpStatCache



; -----  Reset Reverse Power Protection  ------
; RS  Reset tripped reverse power protection

; Reset reverse power protection
#scpiCmd OUTP:RESET tx RS



; -----  RF level Calibration offset  ------
; Check setting 2nd Function 6, RF level offset. Indicates if a RF level Calibration offset has been set
; 0  No RF level offset
; 1  RF level Calibration offset active

; Query if RF level offset is active
#scpiCmd POW:LEV:OFFS? txrx?
:readmath: substring(value,41,42);
:setvar: powLevOffsCache=inputValue


; Query if RF level offset is active (from cache)
#scpiCmd POW:LEV:OFFS:C? none?
:readmath: powLevOffsCache





; ==========  Modulation  ==========

; ------  AM Modulation  ------

; -----  AM modulation state OFF/ON   -----
; AM modulation off read: 0, send: AM OF
; AM modulation on  read: 1, send: AM ON

; Set AM modulation  OFF/ON
#scpiCmd AM:STAT tx AM (value)
:setvar: amStatCache=inputValue
:setvar: fmStatCache=(amStatCache=="ON")? "OF":fmStatCache

; Query AM modulation
#scpiCmd AM:STAT? txrx?
:readmath: substring(value,35,36);
:readmath: (value==0)?"OF":"ON"

; Query AM modulation  (from cache)
#scpiCmd AM:STAT:C? none?
:readmath: amStatCache


; -----  AM modulation source internal or external   -----
; AM modulation int  read: 0, send: AM IT
; AM modulation ext  read: 1, send: AM XT

; Set AM modulation int/ext
#scpiCmd AM:SOUR tx AM (value)
:setvar: amSourCache=inputValue

; Query AM modulation int/ext
#scpiCmd AM:SOUR? txrx?
:readmath: substring(value,36,37);
:readmath: (value==0)?"IT":"XT"

; Query AM modulation int/ext (from cache)
#scpiCmd AM:SOUR:C? none?
:readmath: amSourCache


; -----  AM modulation Auto Level Control   -----
; AM auto level control off  read: 0, send: AM A0
; AM auto level control on   read: 1, send: AM A1

; Set AM auto level control off/on
#scpiCmd AM:ALC tx AM (value)
:setvar: amAlcCache=inputValue

; Query AM auto level control off/on
#scpiCmd AM:ALC? txrx?
:readmath: substring(value,34,35);
:readmath: (value==0)?"A0":"A1"

; Query AM auto level control off/on (from cache)
#scpiCmd AM:ALC:C? none?
:readmath: amAlcCache


; -----  AM modulation depth   -----
; Set and query of AM modulation depth is a 2 digit integer value (percentage)

; Set AM modulation depth
#scpiCmd AM:DEPT tx AM (value) PC
:setvar: amDeptCache=inputValue

; Query AM modulation depth
#scpiCmd AM:DEPT? txrx?
:readmath: substring(value,18,20)

; Query AM modulation depth (from cache)
#scpiCmd AM:DEPT:C? none?
:readmath: amDeptCache




; ------  FM Modulation  ------


; -----  FM modulation state OFF/ON   -----
; FM modulation off read: 0, send: FM OF
; FM modulation on  read: 1, send: FM ON

; Set FM modulation  OFF/ON
#scpiCmd FM:STAT tx FM (value)
:setvar: fmStatCache=inputValue
:setvar: amStatCache=(fmStatCache=="ON")? "OF":amStatCache

; Query FM modulation
#scpiCmd FM:STAT? txrx?
:readmath: substring(value,32,33);
:readmath: (value==0)?"OF":"ON"

; Query FM modulation (from cache)
#scpiCmd FM:STAT:C? none?
:readmath: fmStatCache


; -----  FM modulation source internal or external   -----
; FM modulation int  read: 0, send: FM IT
; FM modulation ext  read: 1, send: FM XT

; Set FM modulation int/ext
#scpiCmd FM:SOUR tx FM (value)
:setvar: fmSourCache=inputValue

; Query FM modulation int/ext
#scpiCmd FM:SOUR? txrx?
:readmath: substring(value,33,34);
:readmath: (value==0)?"IT":"XT"

; Query FM modulation int/ext (from cache)
#scpiCmd FM:SOUR:C? none?
:readmath: fmSourCache


; -----  FM modulation Auto Level Control   -----
; FM auto level control off  read: 0, send: FM A0
; FM auto level control on   read: 1, send: FM A1

; Set FM auto level control off/on
#scpiCmd FM:ALC tx FM (value)
:setvar: fmAlcCache=inputValue

; Query FM auto level control off/on
#scpiCmd FM:ALC? txrx?
:readmath: substring(value,34,35);
:readmath: (value==0)?"A0":"A1"

; Query FM auto level control off/on (from cache)
#scpiCmd FM:ALC:C? none?
:readmath: fmAlcCache


; -----  FM modulation deviation  -----
; Set and query of FM deviation is in decaHertz

; Set FM modulation deviation
#scpiCmd FM:DEV #pgm#
if value<1000000.0;
   deviceWrite(handle,"tx FM "+(formatDouble((value/1000),1,3,0,2))+" KZ");
elseif value>=1000000.0;
   deviceWrite(handle,"tx FM "+(formatDouble((value/1000000),1,3,0,2))+" MZ");
endif;

; Query FM modulation deviation
#scpiCmd FM:DEV? txrx?
:readmath: (substring(value,10,18))*10;

; Query FM modulation deviation (from cache)
#scpiCmd FM:DEV:C? none?
:readmath: fmDevCache




; -----  Internal modulation generator frequency  -----
; 300Hz  read: 00, write: M0
; 400Hz  read: 01, write: M1
; 1kHz   read: 02, write: M2
; 3kHz   read: 03, write: M3
; 6kHz   read: 04, write: M4

; Set Internal modulation frequency
#scpiCmd MOD:FREQ tx M(value)
:setvar: modFreqCache=inputValue

; Query Internal modulation frequency
#scpiCmd MOD:FREQ? txrx?
:readmath: substring(value,30,32);

; Query Internal modulation frequency (from cache)
#scpiCmd MOD:FREQ:C? none?
:readmath: modFreqCache




; ==========  Other  ==========


; -----  Reference Oscillator, Internal or External 10MHz Standard  ------
; Internal Standard  read: 0, send: CF IT
; External Standard  read: 1, send: CF XT

; Set Reference Oscillator INT/EXT
#scpiCmd ROSC:SOUR tx CF (value)
:setvar: roscSourCache=inputValue

; Query Reference Oscillator INT/EXT
#scpiCmd ROSC:SOUR? txrx?
:readmath: substring(value,40,41);
:readmath: (value==0)?"IT":"XT"

; Query Reference Oscillator INT/EXT (from cache)
#scpiCmd ROSC:SOUR:C? none?
:readmath: roscSourCache



; ----- Readout of settings 2nd Function 5, RF level unit types -----
; Query RF level logarithmic unit (from cache)
; 00  dBV e.m.f.
; 01  dBmV e.m.f.
; 02  dBuV e.m.f.
; 03  dBV p.d.
; 04  dBmV p.d.
; 05  dBuV p.d.
; 06  dBm

#scpiCmd POW:UNIT:LOG:C? #pgm#
if powUnitLogCache==00
    print("dBV e.m.f.");
elseif powUnitLogCache==01
    print("dBmV e.m.f.");
elseif powUnitLogCache==02
    print("dBuV e.m.f.");
elseif powUnitLogCache==03
    print("dBV p.d.");
elseif powUnitLogCache==04
    print("dBmV p.d.");
elseif powUnitLogCache==05
    print("dBuV p.d.");
elseif powUnitLogCache==06
    print("dBm");
endif;


; Query RF level linear unit (from cache)
; 07  e.m.f.   (electro motive force, = voltage with open output)
; 08  p.d.     (potential difference, = voltage into 50R load)

#scpiCmd POW:UNIT:LIN:C? none?
:readmath: powUnitLinCache
:readmath: (value==08)?"p.d.":"e.m.f."



; ========= Only used for definition testing ============

; Set the RF level offset variable
; valid: 0 or 1
; #scpiCmd OFFSET none (value)
; :setvar: powLevOffsCache=inputValue

; Set the Query RF level logarithmic unit type variable
; valid: 00 to 06
; #scpiCmd POW:UNIT:LOG none (value)
; :setvar: powUnitLogCache=inputValue

; Set the RF level linear unit type variable
; valid: 07 or 08
; #scpiCmd POW:UNIT:LIN none (value)
; :setvar: powUnitLinCache=inputValue




; ============== End original Marconi commands to SCPI/TestController commands translations  ==============





; ----------------------- Data read out  ------------------

; A list of possible column name with unit and formatter (SI, Time, Int, D0..D6)
; code: #value name unit format {selector}

#value Freq Hz SI
#value Ampli_V V SI4 VL
#value Ampli_dB dBm D2 DB



; Prepare the meter to response to #askValues
#prepareSample CACH:UPD?

; This is a single line command
#askValues FREQ:CW:C?;POW:LEV:C?;POW:UNIT?;


; POW:UNIT?  returns the current unit.  VL for Volt or DB for dBm
#askMode POW:UNIT?

; Returns the value of POW:UNIT? out of the #askValues result
#modeFromValue getElement(value,2)



; Turn the generator output off when "Outputs off" button is pressed
#outputOff OUTP:STAT OF




; ------------------  Initial commands & Final command  -------------

; Initial commands to meter when establishing connection
#initCmd CACH:INIT;SET:DBM;[100];CLEAR;[100];CACH:UPD?;[100];


; Command to prevent connection to other devices
; One value in the long device answer string is always zero
#verifyDevice "0" ID:CHK?


; Final command to meter before breaking connection
#finalCmd CLEAR;[100];LOCAL;[500];






; ========================== START MENU'S  ================================


; ==========  Setup Menu  ==========


; ----- Outside tabs -----

#cmdSetup indicator 10MHz_Ref_Source
:read: ROSC:SOUR:C?
:string:
Internal (value)=="IT" (0,153,0)
External (value)=="XT" (0,102,255)
:tip: Indicates source of 10MHz Reference Standard.



; ----- start Main tab -----

#cmdSetup indicator Output_state Main
:read: OUTP:STAT:C?
:string:
:updatealloff:
Off (value)=="OF" (204,255,204)
On (value)=="ON" (0,153,0)


#cmdSetup buttons Output_state Main
:write: OUTP:STAT #
Off OF
On ON


#cmdSetup separator Output_state Main
2 100 Raised


#cmdSetup advNumber Frequency Main
:read: FREQ:CW:C?
:write: FREQ:CW #;[20];CACH:UPD?
:update: FM_mod_deviation
:tip: Set Carrier Frequency
Hz MinFrequency MaxFrequency


#cmdSetup separator _ Main
2 100 Raised


#cmdSetup radio Amplitude_unit Main
:read: POW:UNIT?
:string:
:write: POW:UNIT # 
:update: Amplitude
:tip: Choose Power Level Unit: dBm of Vrms into 50R
dBm DB
V VL


#cmdSetup number Amplitude_dBm Main
:read: POW:LEV:C?
:format: D1
:write: POW:LEV #
:update: Amplitude
:tip: Set RF Amplitude in dBm (with AM mod. max +7dBm)
dBm -127 13


#cmdSetup number Amplitude_V Main
:read: POW:LEV:C?
:format: SI4
:write: POW:LEV #
:update: Amplitude
:tip: <html>Set RF Amplitude in Volts rms into 50R<br>(with AM mod. max 500mV)
V 100n 1


#cmdSetup selector Amplitude Main
:read: POW:UNIT?
:string:
DB Main.Amplitude_dBm
VL Main.Amplitude_V



; ----- start AM mod tab -----


#cmdSetup radio AM_modulation AM_mod
:read: AM:STAT:C?
:string:
:write: AM:STAT # 
:update: FM_modulation
:tip: Set AM modulation Off / On
Off OF
On ON


#cmdSetup radio AM_modulation AM_mod
:read: AM:SOUR:C?
:string:
:write: AM:SOUR # 
:tip: Set AM modulation to INTernal or EXTernal source
Int IT
Ext XT


#cmdSetup radio Auto_level_control AM_mod
:read: AM:ALC:C?
:string:
:write: AM:ALC # 
:enable: AM_mod.AM_modulation=="XT"
:tip: <html>Set modulation Automatic Level Control Off / On<br>ALC will correct between 0,8Vrms and 1,2Vrms input
Off A0
On A1


; #cmdSetup separator - AM_mod
; 0 100 Empty


#cmdSetup radio Intern_mod_freq AM_mod
:read: MOD:FREQ:C?
:write: MOD:FREQ # 
:enable: AM_mod.AM_modulation=="IT"
:tip: Set the frequency of the internal modulation generator
300Hz 0
400Hz 1
1kHz 2
3kHz 3
6kHz 4


#cmdSetup numberInt Modulation_depth AM_mod
:read: AM:DEPT:C?
:write: AM:DEPT #;[20];CACH:UPD?
:update: AM_modulation FM_modulation
:tip: Set AM modulation depth (integer percentage)
% 0 99


#cmdSetup separator - AM_mod
2 100 Empty
 
#cmdSetup separator - AM_mod
2 100 Empty
center With external modulation, 1Vrms input gives calibrated modulation depth
:labelformat: plain color: (90,90,90)



; ----- start FM mod tab -----


#cmdSetup radio FM_modulation FM_mod
:read: FM:STAT:C?
:string:
:write: FM:STAT #;[20];CACH:UPD?
:update: AM_modulation FM_mod_deviation
:tip: Set FM modulation Off / On
Off OF
On ON


#cmdSetup radio FM_modulation FM_mod
:read: FM:SOUR:C?
:string:
:write: FM:SOUR # 
:tip: Set FM modulation to INTernal or EXTernal source
Int IT
Ext XT


#cmdSetup radio Auto_level_control FM_mod
:read: FM:ALC:C?
:string:
:write: FM:ALC #
:enable: FM_mod.FM_modulation=="XT" 
:tip: <html>Set modulation Automatic Level Control Off / On<br>ALC will correct between 0,8Vrms and 1,2Vrms input
Off A0
On A1


; #cmdSetup separator - FM_mod
; 0 100 Empty


#cmdSetup radio Intern_mod_freq FM_mod
:read: MOD:FREQ:C?
:write: MOD:FREQ # 
:enable: FM_mod.FM_modulation=="IT"
:tip: Set the frequency of the internal modulation generator
300Hz 0
400Hz 1
1kHz 2
3kHz 3
6kHz 4


#cmdSetup number FM_mod_deviation FM_mod
:read: FM:DEV:C?
:write: FM:DEV #;[20];CACH:UPD?
:update: FM_modulation AM_modulation
:emptyvalue: 0
:tip: <html>Set FM deviation. Min frequency is 10Hz,<br>Max frequency is 1% of carrier frequency.
Hz 10 MaxDevFreq


#cmdSetup separator - FM_mod
2 100 Empty
 
#cmdSetup separator - FM_mod
2 100 Empty
center With external modulation, 1Vrms input gives calibrated deviation
:labelformat: plain color: (90,90,90)



; ----- Start Utility tab -----


#cmdSetup radio 10MHz_Ref_source Utility
:read: ROSC:SOUR:C?
:string:
:write: ROSC:SOUR #
:update: 10MHz_Ref_Source
:tip: Select INTernal or EXTernal 10MHz Reference Standard
Int. IT
Ext. XT


#cmdSetup separator - Utility
2 100 Raised


#cmdSetup radio Minimum_Carrier_freq Utility
:read: FREQ:CW:MIN?
:string:
:write: FREQ:CW:MIN #
:update: Frequency
:tip: <html>Select minimum carrier frequency<br>80kHz is specification, but down to 30kHz is usable
30kHz_(Min) 30000
80kHz_(Spec) 80000



#cmdSetup button Reset_Reverse_Power_Protection Utility
:write: OUTP:RESET
:tip: Resets the tripped Reverse Power Protection of the RF output


#cmdSetup separator - Utility
2 100 Empty


#cmdSetup separator - Utility
2 100 Raised
center 2nd Function settings checks

#cmdSetup info nr.5__RF_level_units Utility
:read: POW:UNIT:LOG:C?
:string:
:tip: <html>Check setting 2nd Function 5, RF level units<br>Can be dBV e.m.f., dBV p.d. or dBm
_
Log:


#cmdSetup info nr.5__RF_level_units Utility
:read: POW:UNIT:LIN:C?
:string:
:tip: <html>e.m.f. = electro motive force = voltage with open output<br>p.d. = potential difference = voltage into 50R load
_
Lin:


#cmdSetup indicatornum nr.6__RF_level_offset Utility
:read: POW:LEV:OFFS:C?
No_Offset 0 (0,153,0)
:tip: <html>Check setting 2nd Function 6, RF level offset<br>Indicates if a RF level Calibration offset has been set

#cmdSetup indicatornum nr.6__RF_level_offset Utility
:read: POW:LEV:OFFS:C?
Active 1 red
:tip: <html>Check setting 2nd Function 6, RF level offset<br>Indicates if a RF level Calibration offset has been set



; ---- Menu End ----

