Can I start different background tasks depending on if-statement?

Hello.

 

I have a system which can operate in two different systems: automatic and manual mode.

My goal is to start different background tasks depending on the chosen mode. I can chose the mode with radio buttons and set a global variable (SamplingMethodG) to 1 for automatic or 2 for manual mode. And then with a button I want to start my system. In the function for this button I use an if-statement to check which mode is selected and start the appertaining mode. 

My problem is the the background task for the automatic is working. All functions belonging to that task are executed constantly. But if I choose the manual mode it is only executed once.

Do you have an idea why?
 

Here is the relevant code:

 

Function RelayInitialize(ctrlName) : ButtonControl
    String ctrlName 
    Variable defaultRM,instr,status
    String resourceName = "ASRL8::INSTR"
    
    //opens resource manager
    
    viOpenDefaultRM(defaultRM)  
    status = viOpenDefaultRM(defaultRM)
    if (status < 0)
        ReportVISAError("viOpenDefaultRM", instr, status)
    endif
    
    //opens session with instrument
    viOpen(defaultRM, resourceName, 0, 0, instr)
    
    status = viOpen(defaultRM, resourceName, 0, 0, instr)
    if (status < 0)
        viClose(defaultRM)
        ReportVISAError("viOpen", instr, status)
        print  "Could not open Relay"
        //return 0
    endif
    
    //setting attributes for relaycard
    status =visetattribute(instr,VI_ATTR_TMO_VALUE,50)                          //Timeout
    status =visetattribute(instr,VI_ATTR_ASRL_BAUD,9600)                            //Baudrate
    status =visetattribute(instr,VI_ATTR_ASRL_DATA_BITS,8)                      //Data Bits
    status =visetattribute(instr,VI_ATTR_ASRL_PARITY,VI_ASRL_PAR_NONE)          //Parity
    status =visetattribute(instr,VI_ATTR_ASRL_STOP_BITS,VI_ASRL_STOP_ONE)       //Stop Bit
    status =visetattribute(instr,VI_ATTR_ASRL_FLOW_CNTRL,VI_ASRL_FLOW_NONE) //Flow control for Data Transfer
    
    variable/G root:SamplerGlobals:Relaycard = instr
    Printf "Relay=%d\r", instr
 
    
    //Check which sampling method and start corresponding background task to control relays 
    NVAR SamplingMethodG=root:SamplerGlobals:SamplingMethodG
    
    
    if (SamplingMethodG==1)     //automatic sampling
        CtrlNamedBackground automatic,period=60,proc=AutomaticSampling,start
    elseif (SamplingMethodG==2) //manual sampling
        ctrlNamedBackground manual,period=60,proc=ManualSampling,start
    endif
End
 
 
//Running through all samplers and initialize functions checkcondition and checkformula
function ManualSampling(s)
    STRUCT WMBackgroundStruct &s
    variable sampler
    
// to check if function is executed once or more
    print "bla"
        
End
 
 
 
 
 
//Activates functions to check conditions, formula and if the system should sample and time couting
function AutomaticSampling(s)
    STRUCT WMBackgroundStruct &s
    
//to check if function is executed once or more
    print "blabla"
    variable sampler,condition
    NVAR ParticleSizeG=root:SamplerGlobals:ParticleSizeG
 
    if (ParticleSizeG==1)       //PM1: sampler 1-4
        for(sampler=1;sampler<5;sampler+=1)
            for(condition=1;condition<5;condition+=1)
                Checkcondition(sampler,condition)
                Checkformula(sampler,condition)
                CheckSampling(sampler)              
                Timecount(sampler)
            endfor
        endfor
            
    
    elseif (ParticleSizeG==2)   //PM1+PM10: sampler 1-2
        for(sampler=1;sampler<3;sampler+=1)
            for(condition=1;condition<5;condition+=1)
                checkcondition(sampler,condition)
                Checkformula(sampler,condition)     
                CheckSampling(sampler)
                Timecount(sampler)
            endfor
        endfor
    endif
    
    return 0
End

 

Thank you in advance.

I also tried to do a simple version of what I have so far, but now none of the background tasks is working constantly.

 

#pragma rtGlobals=3     // Use modern global access method and strict wave acce
 
 
Window Panel0() : Panel
    PauseUpdate; Silent 1       // building window...
    NewPanel /W=(150,50,353,212)
    Variable/G gRadioVal= 1
    CheckBox check0,pos={52,25},size={78,15},title="Radio 1",value= 1,mode=1,proc=MyCheckProc
    CheckBox check1,pos={52,45},size={78,15},title="Radio 2",value= 0,mode=1,proc=MyCheckProc
    
    Button RelayStart_panel,pos={52,85},size={75,40},proc=RelayInitialize,title="Communication Start"
 
EndMacro
 
Function MyCheckProc(name,value)
    String name
    Variable value
    
    NVAR gRadioVal= root:gRadioVal
    
    strswitch (name)
        case "check0":
            gRadioVal= 1
            break
        case "check1":
            gRadioVal= 2
            break
        
    endswitch
    CheckBox check0,value= gRadioVal==1
    CheckBox check1,value= gRadioVal==2
    
End
 
 
Function RelayInitialize(ctrlName) : ButtonControl
    String ctrlName 
 
    NVAR gRadioVal= root:gRadioVal
    
    
    if (gRadioVal==1)       //automatic sampling
        CtrlNamedBackground automatic,period=60,proc=AutomaticSampling,start
    elseif (gRadioVal==2)   //manual sampling
        ctrlNamedBackground manual,period=60,proc=ManualSampling,start
    endif
End
 
 
function AutomaticSampling(s)
    STRUCT WMBackgroundStruct &s
    
    print "automatic"
End
 
function ManualSampling(s)
    STRUCT WMBackgroundStruct &s    
    
    print "manual"
End