Exemplo n.º 1
0
def vsl_test(avsl, tauarg, hveq, zdi, itf, owntent, g, p, resvar):
    resvar.trtlim = min(tauarg, p.tvpetbl[itf.lev])
    if(owntent[6] == False):
        if(g.zdown >= -avsl):
            resvar.vvmd = itf.rz + (-avsl-zdi)*resvar.trtlim
        else:
            if(itf.wptr.status == CONT):
                resvar.t1 = max(p.backdelay, p.tv1 - (g.tcur - itf.tcmd))
            else:
                resvar.t1 = p.tv1
            resvar.vo, resvar.vdproj = project_vertical_given_zdgoal(resvar.trtlim, g.zown, g.zdown, -avsl, resvar.t1, p.vaccel, resvar)
            resvar.vvmd = (resvar.vo - itf.zint) - zdi*resvar.trtlim
    else:
        if(g.zdown <= avsl):
            resvar.vvmd = itf.rz + (avsl - zdi)*resvar.trtlim
        else:
            if(itf.wptr.status == CONT):
                resvar.t1 = max(p.backdelay, p.tv1 - (g.tcur - itf.tcmd))
            else:
                resvar.t1 = p.tv1
            resvar.vo, resvar.vdproj = project_vertical_given_zdgoal(resvar.trtlim, g.zown, g.zdown, avsl, resvar.t1, p.vaccel, resvar)
            resvar.vvmd = (resvar.vo - itf.zint) - zdi*resvar.trtlim
    resvar.inthr = check_projection(resvar.vvmd, g.alim - hveq, owntent)
    if(resvar.inthr == True):
        vslok = False
    else:
        vslok = True
    return vslok
Exemplo n.º 2
0
def select_sense(itf, tf, g, p, detvar, resvar):
    if(itf.eqp == TCAS and (tf.pothrar[0] in (1,2)) and (g.idown > itf.idint or not (((tf.pothrar[0] == 1
        and itf.rz <= -p.crossthr) or (tf.pothrar[0] == 2 and itf.rz >= p.crossthr))) or (g.idown < itf.idint
        and ((g.tcur - tf.t_intent) > p.tiethr or (g.tcur - g.ramode_on) <= p.tiethr)))):
        form_complement(tf, resvar)
    else:
        if(m.fabs(itf.badfok) < 1e-10):
            resvar.zmpclm, resvar.zmpdes = model_maneuvers(itf, g, p, detvar, resvar)
            if(resvar.zmpclm > resvar.zmpdes):
                resvar.owntent[6] = False
                itf.sech = resvar.zmpdes
            elif(g.climbinhib == True and itf.rz >= -p.crossthr and (resvar.zmpclm + p.nozcross) > resvar.zmpdes):
                resvar.owntent[6] = False
                itf.sech = resvar.zmpdes
            else:
                resvar.owntent[6] = True
                itf.sech = resvar.zmpclm
            resvar.z, resvar.zd = project_vertical_given_zdgoal(p.tv1 + m.fabs(g.zdown/p.vaccel), g.zown, g.zdown, 0, p.tv1, p.vaccel, resvar)
            resvar.zi, resvar.zdi = project_vertical_given_zdgoal(p.tv1 + m.fabs(g.zdown/p.vaccel), itf.zint, itf.zdint, itf.zdint, p.tv1, p.vaccel, resvar)
            if(itf.rz >= p.crossthr and (g.zdown >= 0 or resvar.z >= (resvar.zi + p.crossthr))):
                if((resvar.owntent[6] == True) and (resvar.zmpclm >= g.alim)):
                    resvar.owntent[6] = False
                    itf.sech = resvar.zmpdes
            if(itf.rz <= -p.crossthr and (g.zdown <= 0 or resvar.z <= (resvar.zi - p.crossthr))):
                if((resvar.owntent[6] == False) and (resvar.zmpdes >= g.alim)):
                    resvar.owntent[6] = True
                    itf.sech = resvar.zmpclm
        elif(m.fabs(itf.badfok-1) < 1e-10):
            resvar.owntent[6] = False
        else:
            resvar.owntent[6] = True
Exemplo n.º 3
0
def cross_through_check(itf, g, p, resvar):
    if((resvar.owntent[6] == False and itf.rz <= -p.crossthr) or (resvar.owntent[6] == True and itf.rz >= p.crossthr)):
        itf.reverse = True
        reversal_modeling(itf, g, p, resvar)
    else:
        if(m.fabs(g.zdown) > p.olev and (g.zdmodel*g.zdown) < 0 and itf.eqp != TCAS):
            resvar.z, resvar.zd = project_vertical_given_zdgoal(m.fabs(g.zdown/p.vaccel), g.zown, g.zdown, 0, 0, p.vaccel, resvar)
            resvar.zi, resvar.zdi = project_vertical_given_zdgoal(m.fabs(g.zdown/p.vaccel), itf.zint, itf.zdint, itf.zdint, 0, p.vaccel, resvar)
            if((resvar.owntent[6] == False and (resvar.z - resvar.zi) <= 0) or (resvar.owntent[6] == True and (resvar.z - resvar.zi) >= 0)):
                itf.reverse = True
                reversal_modeling(itf, g, p, resvar)
    if(itf.eqp != TCAS and ((resvar.owntent[6] == False and itf.rz >= p.crossthr) or (resvar.owntent[6] == True
        and itf.rz <= -p.crossthr)) and m.fabs(itf.rz) <= p.maxaltdiff and (g.zdown*itf.zdint) > 0 and m.fabs(g.zdown) > p.ilev
        and (g.zdmodel*g.zdown) > 0 and resvar.owntent[4] == False and resvar.owntent[5] == False and m.fabs(itf.zdint) > p.ilev and itf.ifirm >= p.minfirm):
        resvar.z = g.zown + g.zdown*min(p.tvpetbl[itf.lev], itf.trtru)
        resvar.zi = itf.zint + itf.zdint*min(p.tvpetbl[itf.lev], itf.trtru)
        if((resvar.owntent[6] == False and (resvar.z - resvar.zi) < p.crossthr) or (resvar.owntent[6] == True and (resvar.z - resvar.zi) > -p.crossthr)):
            itf.reverse = True
            reversal_modeling(itf, g, p, resvar)
Exemplo n.º 4
0
def increase_modeling(itf, g, p, resvar):
    if(resvar.sense == False):
        if(g.clstrong == 0):
            resvar.zdgoal = min(g.zdown, p.maxdrate)
        else:
            resvar.zdgoal = max(min(g.zdown, p.maxdrate), p.climbgoal[g.clstrong])
    else:
        if(g.destrong == 0):
            resvar.zdgoal = max(g.zdown, p.mindrate)
        else:
            resvar.zdgoal = min(max(g.zdown, p.mindrate), p.desgoal[g.destrong])
    resvar.vproj, resvar.vdproj = project_vertical_given_zdgoal(max(resvar.delay, p.quikreac), resvar.z, resvar.zd, resvar.zdgoal, resvar.delay, p.vaccel, resvar)
    resvar.zi, resvar.zdi = project_vertical_given_zdgoal(max(resvar.delay, p.quikreac), itf.zint, itf.zdint, itf.zdint, resvar.delay, p.vaccel, resvar)
    if(resvar.sense == False):
        resvar.zdgoal = max(min(g.zdown, p.maxdrate), p.inc_clmrate)
    else:
        resvar.zdgoal = min(max(g.zdown, p.mindrate), p.inc_desrate)
    resvar.tauhold = itf.taur
    resvar.truhold = itf.trtru
    itf.taur = max((itf.taur - max(resvar.delay, p.quikreac)), 0)
    itf.trtru = max((itf.trtru - max(resvar.delay, p.quikreac)), 0)
    resvar.increase_sep = model_sep(0, resvar.zdgoal, resvar.vproj, resvar.vdproj, p.raccel, resvar.sense, resvar.zi, itf.zdint, itf, g, p, resvar)
    itf.taur = resvar.tauhold
    itf.trtru = resvar.truhold
Exemplo n.º 5
0
def reversal_modeling(itf, g, p, resvar):
    resvar.nominal_sep = 0
    resvar.z = g.zown
    resvar.zd = g.zdown
    resvar.delay = 0
    if(g.own_follow == False):
        resvar.nominal_sep = model_sep(resvar.delay, resvar.zd, resvar.z, resvar.zd, p.vaccel, resvar.owntent[6], itf.zint, itf.zdint, itf, g, p, resvar)
        if(resvar.owntent[6] == True):
            resvar.new_sense = False
        else:
            resvar.new_sense = True
        if(resvar.nominal_sep > 1.2*p.crossthr):
            itf.reverse = False
    else:
        if(resvar.owntent[4] == False and resvar.owntent[5] == False):
            resvar.delay = max(p.tv1 - (g.tcur - g.tposra), 0)
            if(resvar.owntent[6] == False):
                resvar.zdgoal = max(min(g.zdown, p.maxdrate), p.clmrt)
            else:
                resvar.zdgoal = min(max(g.zdown, p.mindrate), p.desrt)
            resvar.zproj, resvar.zdproj = project_vertical_given_zdgoal(g.tcur - g.tposra, g.ztv, g.zdtv, resvar.zdgoal, p.tv1, p.vaccel, resvar)
            if(((resvar.owntent[6] == False and resvar.zproj > g.zown and (g.zdown >= (g.zdtv - p.model_zd)))
                or (resvar.owntent[6] == True and resvar.zproj < g.zown and (g.zdown <= (g.zdtv + p.model_zd)))) and (g.tcur -g.tposra) < p.model_t):
                resvar.z = resvar.zproj
                resvar.zd = resvar.zdproj
            resvar.nominal_sep = model_sep(resvar.delay, resvar.zdgoal, resvar.z, resvar.zd, p.vaccel, resvar.owntent[6], itf.zint, itf.zdint, itf, g, p, resvar)
        if(resvar.owntent[6] == True):
            resvar.new_sense = False
        else:
            resvar.new_sense = True
        resvar.delay = max(p.tv1 - (g.tcur - g.tlastnewra), p.quikreac)
        if(resvar.new_sense == False):
            resvar.zdgoal = max(p.clmrt, min(g.zdown, p.maxdrate))
        else:
            if(g.nodescent == True):
                resvar.zdgoal = 0
            else:
                resvar.zdgoal = min(p.desrt, max(g.zdown, p.mindrate))
        if(g.rev_consdrd == False):
            if((itf.int_cross == True) or (m.fabs(itf.zdint) < 1e-10 and itf.rz > 0) or (itf.zdint*g.zdmodel < 0)):
                resvar.mzdint = itf.zdoutr
            else:
                resvar.mzdint = itf.zdinr
        else:
            resvar.mzdint = itf.zdint
        resvar.zmp = model_sep(resvar.delay, resvar.zdgoal, resvar.z, resvar.zd, p.raccel, resvar.new_sense, itf.zint, resvar.mzdint, itf, g, p, resvar)
        if(resvar.zmp <= 0 or resvar.nominal_sep >= g.alim):
            itf.reverse = False
Exemplo n.º 6
0
def increase_proj_check(sense, accel, itf, g, p, resvar):
    resvar.cur_sense = sense
    resvar.delay = max(p.tv1 - (g.tcur - g.tposra), 0)
    if(g.clstrong < 8 and g.destrong < 8):
        resvar.delay = max(p.tv1 - (g.tcur - g.tlastnewra), p.quikreac)
    if((g.clstrong > 0 and sense == True) or (g.destrong > 0 and sense == False)):
        if(sense == True):
            resvar.cur_sense = False
        else:
            resvar.cur_sense = True
        resvar.delay = max(p.tv1 - (g.tcur - g.tlastnewra), p.quikreac)
    if(resvar.cur_sense == False):
        resvar.zdgoal = max(min(g.zdown, p.maxdrate), p.clmrt)
    else:
        resvar.zdgoal = min(max(g.zdown, p.mindrate), p.desrt)
    if(g.clstrong == 8 or g.destrong == 8):
        resvar.zproj, resvar.zdproj = project_vertical_given_zdgoal(g.tcur - g.tposra, g.ztv, g.zdtv, resvar.zdgoal, p.tv1, accel, resvar)
        if(((resvar.cur_sense == False and resvar.zproj > g.zown and (g.zdown >= g.zdtv - p.model_zd))
        or (resvar.cur_sense == True and resvar.zproj < g.zown and (g.zdown <= (g.zdtv + p.model_zd)))) and (g.tcur - g.tposra) < p.model_t):
            resvar.z = resvar.zproj
            resvar.zd = resvar.zdproj
        else:
            resvar.z = g.zown
            resvar.zd = g.zdown
    else:
        resvar.z = g.zown
        resvar.zd = g.zdown
    if(sense == False):
        resvar.zdgoal = max(min(g.zdown, p.maxdrate), p.clmrt)
    else:
        if(g.nodescent == True):
            resvar.zdgoal = 0
        else:
            resvar.zdgoal = min(max(g.zdown, p.mindrate), p.desrt)
    nominal_sep = model_sep(resvar.delay, resvar.zdgoal, resvar.z, resvar.zd, accel, sense, itf.zint, itf.zdint, itf, g, p, resvar)
    increase_modeling(itf, g, p, resvar)
    return nominal_sep, resvar.increase_sep