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