Files
dist_tester/src/RNT.c

838 lines
24 KiB
C

/*
* RNT.c
*
* Created on: 14-11-2018
* Author: Krzysztof Jakubczyk
*/
#include "tdefs.h"
#include "misc.h"
#include "RNT.h"
#include "analog_in.h"
/*#include "helper.h"
#include "ZDistL.h"
*/
#include <math.h>
int rnt_initlog(void *arguments, void *logic)
{
struct rnt_args *args = (struct rnt_args *)arguments;
struct rnt_logic *log = (struct rnt_logic *)logic;
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl_))
return -1;
if(set_bit_ptr_struct(args->io.man_in,&log->man_))
return -1;
if(set_bit_ptr_struct(args->io.auto_in,&log->auto_))
return -1;
if(set_float_ptr(args->io.orta_U1_float_in,&log->orta_U1_))
return -1;
if(set_float_ptr(args->io.ortb_U1_float_in,&log->ortb_U1_))
return -1;
if(set_float_ptr(args->io.kwampl_U1_float_in,&log->kwampl_U1_))
return -1;
if(set_bit_ptr_struct(args->io.kon_U1_in,&log->kon_U1_))
return -1;
if(set_float_ptr(args->io.orta_I1_float_in,&log->orta_I1_))
return -1;
if(set_float_ptr(args->io.ortb_I1_float_in,&log->ortb_I1_))
return -1;
if(set_float_ptr(args->io.kwampl_I1_float_in,&log->kwampl_I1_))
return -1;
if(set_float_ptr(args->io.orta_U2_float_in,&log->orta_U2_))
return -1;
if(set_float_ptr(args->io.ortb_U2_float_in,&log->ortb_U2_))
return -1;
if(set_float_ptr(args->io.kwampl_U2_float_in,&log->kwampl_U2_))
return -1;
if(set_bit_ptr_struct(args->io.kon_U2_in,&log->kon_U2_))
return -1;
if(set_float_ptr(args->io.orta_I2_float_in,&log->orta_I2_))
return -1;
if(set_float_ptr(args->io.ortb_I2_float_in,&log->ortb_I2_))
return -1;
if(set_float_ptr(args->io.kwampl_I2_float_in,&log->kwampl_I2_))
return -1;
if(set_float_ptr(args->io.nr_zacz_in,&log->nr_zacz_))
return -1;
if(set_bit_ptr_struct(args->io.zo_zacz_in,&log->zo_zacz_))
return -1;
if(set_bit_ptr_struct(args->io.kon_u_nr_zacz_in,&log->kon_u_nr_zacz_))
return -1;
if(set_bit_ptr_struct(args->io.bieg_in,&log->bieg_))
return -1;
if(set_bit_ptr_struct(args->io.gora_in,&log->gora_))
return -1;
if(set_bit_ptr_struct(args->io.dol_in,&log->dol_))
return -1;
if(set_bit_ptr_struct(args->io.aktU1z_in,&log->aktU1z_))
return -1;
if(set_bit_ptr_struct(args->io.aktU2z_in,&log->aktU2z_))
return -1;
if(set_bit_ptr_struct(args->io.aktU3z_in,&log->aktU3z_))
return -1;
if(set_bit_ptr_struct(args->io.aktU4z_in,&log->aktU4z_))
return -1;
if(set_bit_ptr_struct(args->io.bl_gora_in,&log->bl_gora_))
return -1;
if(set_bit_ptr_struct(args->io.bl_dol_in,&log->bl_dol_))
return -1;
if(set_bit_ptr_struct(args->io.test_in,&log->test_))
return -1;
if(set_bit_ptr_struct(args->io.kas_in,&log->kas_))
return -1;
if(set_bit_ptr_struct(args->io.gora_out,&log->gora_out_))
return -1;
if(set_bit_ptr_struct(args->io.dol_out,&log->dol_out_))
return -1;
if(set_bit_ptr_struct(args->io.e_bieg_out,&log->e_bieg_out_))
return -1;
if(set_bit_ptr_struct(args->io.e_poz_out,&log->e_poz_out_))
return -1;
if(set_bit_ptr_struct(args->io.pob_G_out,&log->pob_G))
return -1;
if(set_bit_ptr_struct(args->io.pob_D_out,&log->pob_D))
return -1;
if(set_bit_ptr_struct(args->io.blok_out,&log->blok_out_))
return -1;
if(set_bit_ptr_struct(args->io.blok_trw_out,&log->blok_trw_out_))
return -1;
if(set_bit_ptr_struct(args->io.ster_poz_in,&log->ster_poz_))
return -1;
if(set_float_ptr(args->io.zad_zacz_in,&log->nr_zacz_zad))
return -1;
if(set_bit_ptr_struct(args->io.blok_trw_in,&log->blok_trw_))
return -1;
if(set_bit_ptr_struct(args->io.blad_trybu_out,&log->blad_trybu_out_))
return -1;
if(set_float_ptr(args->io.Uodn_float_out,&log->U_odn))
return -1;
if(set_float_ptr(args->io.tg_out,&log->tg_out))
return -1;
if(set_float_ptr(args->io.td_out,&log->td_out))
return -1;
if(set_pointer_in_ptr(args->io.I1_params_ptr_in,(u32 *)&log->I_params[0]))
return -1;
if(set_pointer_in_ptr(args->io.I2_params_ptr_in,(u32 *)&log->I_params[1]))
return -1;
if(set_pointer_in_ptr(args->io.U1_params_ptr_in,(u32 *)&log->U_params[0]))
return -1;
if(set_pointer_in_ptr(args->io.U2_params_ptr_in,(u32 *)&log->U_params[1]))
return -1;
////
//status_rej = oczekiwanie;
log->nast_.tryb = args->params.tryb;
log->nast_.t1 = ((args->params.t1) * 1000); //czas dzialania t1
log->nast_.t2 = ((args->params.t2) * 1000); //czas dzialania t2
log->nast_.dUzr = args->params.dUz; //napicie nieczuoci
log->nast_.dUzp = log->nast_.dUzr * args->params.kp; //napicie nieczuoci
log->nast_.Uz1 = args->params.Uz1 ; //napicie zadane nr 1
log->nast_.Uz2 = args->params.Uz2 ; //napicie zadane nr 2
log->nast_.Uz3 = args->params.Uz3 ; //napicie zadane nr 3
log->nast_.Uz4 = args->params.Uz4 ; //napicie zadane nr 4
log->nast_.t_ster_zacz = ((args->params.t_ster_zacz) * 1000); //czas sterowania przecznikiem zaczepw
log->nast_.t_poz_zacz = ((args->params.t_poz_zacz) * 1000); //czas odpowiedzi pozycji przecznika zaczepw
log->nast_.t_imp_ster = ((args->params.t_imp_ster) * 1000);// czas impulsu gra/d
log->nast_.on = ((args->params.akt & 0x0001)!=0) ? 1:0;
log->nast_.kon_biegu = ((args->params.akt & 0x0002)!=0) ? 1:0;
log->nast_.kon_poz_ster = ((args->params.akt & 0x0004)!=0) ? 1:0;
log->nast_.akt_kon_U1 = ((args->params.akt & 0x0008)!=0) ? 1:0;
log->nast_.akt_kon_U2 = ((args->params.akt & 0x0010)!=0) ? 1:0;
log->nast_.akt_kon_Uzacz = ((args->params.akt & 0x0020)!=0) ? 1:0;
log->nast_.akt_blok_biegu = ((args->params.akt & 0x0040)!=0) ? 1:0;
log->nast_.akt_blok_pozycja = ((args->params.akt & 0x0080)!=0) ? 1:0;
log->nast_.akt_mfazowe = ((args->params.akt & 0x0100)!=0) ? 1:0;
log->nast_.akt_komp1 = ((args->params.akt_komp1 & 0x0001)!=0) ? 1:0;
log->nast_.akt_komp2 = ((args->params.akt_komp2 & 0x0001)!=0) ? 1:0;
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
log->dw.blokada_trw = 0;
log->dw.timer_blokad_pod_nap1 = 0;
log->dw.timer_blokad_pod_nap2 = 0;
log->mul[0]=(log->I_params[0]->znam_pierw / log->U_params[0]->znam_pierw);
log->mul[1]=(log->I_params[1]->znam_pierw / log->U_params[1]->znam_pierw);
log->nast_.R1 = args->params.R1 * log->mul[0];
log->nast_.X1 = - (args->params.X1 * log->mul[0]);
log->nast_.R2 = args->params.R2 * log->mul[1];
log->nast_.X2 = - (args->params.X2 * log->mul[1]);
return 0;
}
void rnt(void *arguments, void *logic)
{
//struct rnt_args *args = (struct rnt_args *)arguments;
struct rnt_logic *log = (struct rnt_logic *)logic;
float local_orta_U1_ ,local_ortb_U1_,local_orta_U2_ ,local_ortb_U2_, local_kwa_U_, local_Uz;
float local_U_;
//u8 wk,wk2,l_nrl;
u8 blok; //blokada
//check_struct(&log->stan_bl_) - sprawdzenie blokady
//check_and_set_struct(log->dw.,&log->gora_out_);
//set_struct(&log->gora_out_);
//log->dw.go
if(log->nast_.on) // jesli zabezpieczenie aktywne
{
log->w.kwampl_U1_ = *log->kwampl_U1_;
log->w.kwampl_U2_ = *log->kwampl_U2_;
log->w.kwampl_I1_ = *log->kwampl_I1_;
log->w.kwampl_I2_ = *log->kwampl_I2_;
if (log->nast_.akt_mfazowe)
{
log->w.orta_U1_ = *log->ortb_U1_;
log->w.orta_U2_ = *log->ortb_U2_;
log->w.ortb_U1_ = -*log->orta_U1_;
log->w.ortb_U2_ = -*log->orta_U2_;
log->w.orta_I1_ = *log->orta_I1_ * 1.73f;
log->w.orta_I2_ = *log->orta_I2_ * 1.73f;
log->w.ortb_I1_ = *log->ortb_I1_ * 1.73f;
log->w.ortb_I2_ = *log->ortb_I2_ * 1.73f;
}
else
{
log->w.orta_U1_ = *log->orta_U1_;
log->w.orta_U2_ = *log->orta_U2_;
log->w.ortb_U1_ = *log->ortb_U1_;
log->w.ortb_U2_ = *log->ortb_U2_;
log->w.orta_I1_ = *log->orta_I1_;
log->w.orta_I2_ = *log->orta_I2_;
log->w.ortb_I1_ = *log->ortb_I1_;
log->w.ortb_I2_ = *log->ortb_I2_;
}
log->w.nr_zacz_ = *log->nr_zacz_;
log->w.nr_zacz_zad = *log->nr_zacz_zad;
//sprawdzenie czy mona sterowa w dol
log->dw.blokada_ster_dol = (check_struct(&log->bl_dol_))!=0 ? 1:0;
//sprawdzenie czy mona sterowa w gore
log->dw.blokada_ster_gora = (check_struct(&log->bl_gora_))!=0 ? 1:0;
if (check_struct(&log->kas_))
{
//kasowanie
clear_struct(&log->e_bieg_out_);
clear_struct(&log->e_poz_out_);
}
if (check_struct(&log->kas_))
{
if (!check_struct(&log->blok_trw_))
{
log->dw.blokada_trw = 0;
}
}
if (check_struct(&log->blok_trw_))
{
log->dw.blokada_trw = 1;
}
check_and_set_struct(log->dw.blokada_trw, &log->blok_trw_out_);
if (check_struct(&log->man_) && (!check_struct(&log->ster_poz_)) && (!check_struct(&log->auto_)))
{
//tryb rczny
clear_struct(&log->blad_trybu_out_);
blok = check_struct(&log->stan_bl_);
check_and_set_struct( blok, &log->blok_out_);
//sprawdzenie blokady trwalej
blok |= check_struct(&log->blok_trw_out_);
clear_struct(&log->pob_G);
clear_struct(&log->pob_D);
*log->U_odn = 0;
*log->tg_out = 0;
*log->td_out = 0;
}
else
if (!check_struct(&log->man_)&&(!check_struct(&log->ster_poz_))&&(check_struct(&log->auto_)))
{
//tryb automatyczny
clear_struct(&log->blad_trybu_out_);
//sprawdzanie kompensacji linii 1
if (log->nast_.akt_komp1)
{
local_orta_U1_ = log->w.orta_U1_ - ((log->w.orta_I1_ * log->nast_.R1 - log->w.ortb_I1_ * log->nast_.X1));
local_ortb_U1_ = log->w.ortb_U1_ - ((log->w.orta_I1_ * log->nast_.X1 + log->w.ortb_I1_ * log->nast_.R1));
}
else
{
local_orta_U1_ = log->w.orta_U1_;
local_ortb_U1_ = log->w.ortb_U1_;
}
//sprawdzanie kompensacji linii 2
if (log->nast_.akt_komp2)
{
local_orta_U2_ = log->w.orta_U2_ - ((log->w.orta_I2_ * log->nast_.R2 - log->w.ortb_I2_ * log->nast_.X2));
local_ortb_U2_ = log->w.ortb_U2_ - ((log->w.orta_I2_ * log->nast_.X2 + log->w.ortb_I2_ * log->nast_.R2));
}
else
{
local_orta_U2_ = log->w.orta_U2_;
local_ortb_U2_ = log->w.ortb_U2_;
}
blok = check_struct(&log->stan_bl_);
//sprawdzenie blokady trwalej
blok |= check_struct(&log->blok_trw_out_);
switch(log->nast_.tryb) ///< nastawa trybu dziaania 0-U1 1-U2 2-redniaU1/U2 3-maxU1/U2
{
case U1:
//U1
local_kwa_U_= (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
log->dw.timer_blokad_pod_nap1 = 0;
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
break;
case U2:
//U2
local_kwa_U_= (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
log->dw.timer_blokad_pod_nap2 = 0;
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
break;
case sredniaU1U2:
//redniaU1/U2
local_kwa_U_ = (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
local_kwa_U_ += (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
local_kwa_U_ *= 0.5f;
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
log->dw.timer_blokad_pod_nap1 = 0;
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
log->dw.timer_blokad_pod_nap2 = 0;
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
break;
case maxU1U2:
//max U1/U2
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
log->dw.timer_blokad_pod_nap1 = 0;
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
log->dw.timer_blokad_pod_nap2 = 0;
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
if ((log->w.kwampl_U1_)>(log->w.kwampl_U2_))
{
local_kwa_U_= (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
}
else
{
local_kwa_U_= (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
}
break;
default:
break;
}
//
blok |= (check_struct(&log->kon_u_nr_zacz_) && log->nast_.akt_kon_Uzacz);
check_and_set_struct( blok, &log->blok_out_);
//w local_kwa_U_ - kwadrat napicia odniesienia
local_kwa_U_ *= 0.5f;
local_U_ = sqrtf (local_kwa_U_);
*log->U_odn = local_kwa_U_;
//Wybr napicia Uz - napicie zadane
if (check_struct(&log->aktU1z_))
local_Uz = log->nast_.Uz1;
else
if (check_struct(&log->aktU2z_))
local_Uz = log->nast_.Uz2;
else
if (check_struct(&log->aktU3z_))
local_Uz = log->nast_.Uz3;
else
if (check_struct(&log->aktU4z_))
local_Uz = log->nast_.Uz4;
else
local_Uz = log->nast_.Uz1;
//porownanie war pobudzenia
//local_Uz - local_kwa_U_ ;
sprawdz_P(&log->dw.pob_D,
((local_Uz - local_U_ ) < (- log->nast_.dUzr)),
((local_Uz - local_U_ ) > (- log->nast_.dUzp)),
&log->dw.lp_D,
100,100
);
sprawdz_P(&log->dw.pob_G,
((local_Uz - local_U_ ) > log->nast_.dUzr),
((local_Uz - local_U_ ) < log->nast_.dUzp),
&log->dw.lp_G,
100,100
);
check_and_set_struct((log->dw.pob_G > 0)&&(!blok)&&(!log->dw.blokada_ster_gora),&log->pob_G);
check_and_set_struct((log->dw.pob_D > 0)&&(!blok)&&(!log->dw.blokada_ster_dol),&log->pob_D);
}
else
if (!check_struct(&log->man_)&&(check_struct(&log->ster_poz_))&&(!check_struct(&log->auto_)))
{
//tryb nr zaczepu
clear_struct(&log->blad_trybu_out_);
//jesli zadany jest nr zaczepu
blok = check_struct(&log->stan_bl_);
blok |= (check_struct(&log->kon_u_nr_zacz_) && log->nast_.akt_kon_Uzacz);
check_and_set_struct( blok, &log->blok_out_);
//sprawdzenie blokady trwalej
blok |= check_struct(&log->blok_trw_out_);
//(check_struct(&log->ster_poz_)) == 1
if (((log->w.nr_zacz_zad) < (log->w.nr_zacz_)) && (!log->dw.blokada_ster_dol) && (!blok))
{
log->dw.pob_D = 1;
log->dw.pob_G = 0;
}
else
if (((log->w.nr_zacz_zad) > (log->w.nr_zacz_)) && (!log->dw.blokada_ster_gora) && (!blok))
{
log->dw.pob_D = 0;
log->dw.pob_G = 1;
}
else
{
log->dw.pob_D = 0;
log->dw.pob_G = 0;
}
check_and_set_struct((log->dw.pob_G > 0)&&(!blok)&&(!log->dw.blokada_ster_gora) ,&log->pob_G);
check_and_set_struct((log->dw.pob_D > 0)&&(!blok)&&(!log->dw.blokada_ster_dol) ,&log->pob_D);
}
else
{
//blad wyboru rodzaju pracy
clear_struct(&log->pob_D);
clear_struct(&log->pob_G);
set_struct( &log->blok_out_);
set_struct(&log->blad_trybu_out_);
}
//
switch (log->_stan_man)
{
case CZEKANIE_NA_STEROWANIE_MANUAL:
if (!check_struct(&log->man_))
{
//sprawdzenie czy nie przeczy na AUTO
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
log->licz_t1G = log->licz_t2G = 0;
log->licz_t1D = log->licz_t2D = 0;
}
else
{
if(check_struct(&log->gora_) && (!check_struct(&log->dol_)) && (!log->dw.blokada_ster_gora) && (!blok))
{
*log->tg_out = 0;
*log->td_out = 0;
log->licznik_ster_gora+=LOOP_CYCLE_MS;
if (log->licznik_ster_gora > T_STER_RECZNEGO)
{
log->_stan_man = STEROWANIE_W_GORE;
log->licznik_ster_gora =0;
}
log->licznik_ster_dol =0;
}
else
//log->dw.pob_G;
if(check_struct(&log->dol_) && (!check_struct(&log->gora_)) && (!log->dw.blokada_ster_dol) && (!blok))
{
log->licznik_ster_dol+=LOOP_CYCLE_MS;
if (log->licznik_ster_dol > T_STER_RECZNEGO)
{
log->_stan_man = STEROWANIE_W_DOL;
log->licznik_ster_dol =0;
}
log->licznik_ster_gora =0;
}
else
{
log->licznik_ster_dol = 0;
log->licznik_ster_gora = 0;
clear_struct(&log->gora_out_);
clear_struct(&log->dol_out_);
}
}
break;
case CZEKANIE_NA_STEROWANIE_NR_POZYCJI:
if (!check_struct(&log->ster_poz_))
{
//sprawdzenie czy nie przeczy na AUTO
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
log->licz_t1G = log->licz_t2G = 0;
log->licz_t1D = log->licz_t2D = 0;
}
else
{
if(log->dw.pob_G && (!log->dw.pob_D) && (!log->dw.blokada_ster_gora) && (!blok))
{
//(check_struct(&log->ster_poz_)) == 1
//gora nr pozycji
if (log->licz_t2G < log->nast_.t2)
{
log->licz_t2G += LOOP_CYCLE_MS;
}
else
{
log->_stan_man = STEROWANIE_W_GORE;
log->licz_t2G = 0;
}
*log->tg_out = (float)(log->nast_.t2 - log->licz_t2G) * 0.001f;
*log->td_out = 0;
}
else
if((log->dw.pob_D) && (!log->dw.pob_G) && (!log->dw.blokada_ster_dol) && (!blok))
{
//dol nr pozycji
if (log->licz_t2D < log->nast_.t2)
{
log->licz_t2D += LOOP_CYCLE_MS;
}
else
{
log->_stan_man = STEROWANIE_W_DOL;
log->licz_t2D = 0;
}
*log->td_out = (float)(log->nast_.t2 - log->licz_t2D) * 0.001f;
*log->tg_out = 0;
}
}
break;
case CZEKANIE_NA_STEROWANIE_AUTO:
if (check_struct(&log->man_))
{
//sprawdzenie czy nie przeczy na MANUAL
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
}
else
if (check_struct(&log->ster_poz_))
{
//sprawdzenie czy nie przeczy na NR_POZ
log->_stan_man = CZEKANIE_NA_STEROWANIE_NR_POZYCJI;
}
else
if (log->dw.pob_G && (!log->dw.pob_D) && (!log->dw.blokada_ster_gora)&& (!blok))
{
//gora auto
if (log->licz_t1G < log->nast_.t1)
{
log->licz_t1G += LOOP_CYCLE_MS * ((local_Uz - local_U_ ) / log->nast_.dUzr);
}
else
if (log->licz_t2G < log->nast_.t2)
{
log->licz_t2G += LOOP_CYCLE_MS;
}
else
{
log->_stan_man = STEROWANIE_W_GORE;
log->licz_t1G = log->licz_t2G = 0;
}
*log->tg_out = (float)((log->nast_.t1 + log->nast_.t2 - log->licz_t1G - log->licz_t2G) * 0.001f);
*log->td_out = 0;
}
else
if(log->dw.pob_D && (!log->dw.pob_G) && (!log->dw.blokada_ster_dol)&& (!blok))
{
//dol auto
if (log->licz_t1D < log->nast_.t1)
{
log->licz_t1D += LOOP_CYCLE_MS *((local_Uz - local_U_ ) / -log->nast_.dUzr);
}
else
if (log->licz_t2D < log->nast_.t2)
{
log->licz_t2D += LOOP_CYCLE_MS;
}
else
{
log->_stan_man = STEROWANIE_W_DOL;
log->licz_t1D = log->licz_t2D = 0;
}
*log->td_out = (log->nast_.t1 + log->nast_.t2 - log->licz_t1D - log->licz_t2D) * 0.001f;
*log->tg_out = 0;
}
else
{
*log->td_out = 0;
*log->tg_out = 0;
log->licz_t1G = log->licz_t2G = 0;
log->licz_t1D = log->licz_t2D = 0;
clear_struct(&log->gora_out_);
clear_struct(&log->dol_out_);
}
break;
//gora
case STEROWANIE_W_GORE:
*log->td_out = 0;
*log->tg_out = 0;
set_struct(&log->gora_out_);
log->_stan_man = IMPULS_W_GORE;
log->licznik_ster_biegu = 0;
log->licznik_ster_gora = 0;
log->nr_zaczepu_przed_ster = log->w.nr_zacz_;
clear_struct(&log->e_bieg_out_);
clear_struct(&log->e_poz_out_);
log->dw.byl_bieg = 0;
break;
case IMPULS_W_GORE:
log->licznik_ster_gora+=LOOP_CYCLE_MS;
if ((log->licznik_ster_gora > log->nast_.t_imp_ster))
{
log->licznik_ster_gora = 0;
log->licznik_poz_gora = 0;
log->_stan_man = SPRAWDZENIE_ODP_PRZE_ZACZEPOW_GORA;
clear_struct(&log->gora_out_);
if ((log->nast_.kon_biegu) && (!(log->dw.byl_bieg & 0x1 >0) ))
set_struct(&log->e_bieg_out_);
}
else
{
if ((log->nast_.kon_biegu) && (check_struct(&log->bieg_)))
{
log->dw.byl_bieg |=1;
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz)))
{
set_struct(&log->e_bieg_out_);
}
}
}
break;
case SPRAWDZENIE_ODP_PRZE_ZACZEPOW_GORA:
//sprawdzenie odpowiedzi przecznika zaczepw tj. czas max, zmiana nr +1, itp
//trzeba si zastanowic jak kontrolowa sygna BIEG_PRZE_ZACZ??
if ((((log->nast_.kon_biegu)&&((!check_struct(&log->bieg_))&&(log->dw.byl_bieg & 0x01))||(check_struct(&log->e_bieg_out_))||(!(log->nast_.kon_biegu)))) && (!check_struct(&log->zo_zacz_)))
{
log->_stan_man = KONIEC_STEROWANIA;
if ((log->nast_.kon_poz_ster)&&(log->w.nr_zacz_ <= log->nr_zaczepu_przed_ster))
{
set_struct(&log->e_poz_out_);
}
}
else
{
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz))&&(check_struct(&log->bieg_))&&(log->nast_.kon_biegu))
{
log->_stan_man = KONIEC_STEROWANIA;
set_struct(&log->e_bieg_out_);
}
}
break;
//dol
case STEROWANIE_W_DOL:
*log->td_out = 0;
*log->tg_out = 0;
set_struct(&log->dol_out_);
log->_stan_man = IMPULS_W_DOL;
log->licznik_ster_dol = 0;
log->licznik_ster_biegu = 0;
log->nr_zaczepu_przed_ster = log->w.nr_zacz_;
clear_struct(&log->e_bieg_out_);
clear_struct(&log->e_poz_out_);
log->dw.byl_bieg =0;
break;
case IMPULS_W_DOL:
{
log->licznik_ster_dol+=LOOP_CYCLE_MS;
if ((log->licznik_ster_dol > log->nast_.t_imp_ster))
{
log->licznik_ster_gora = 0;
log->licznik_poz_gora = 0;
log->_stan_man = SPRAWDZENIE_ODP_PRZE_ZACZEPOW_DOL;
clear_struct(&log->dol_out_);
if ((log->nast_.kon_biegu) && (!(log->dw.byl_bieg & 0x1 > 0)))
set_struct(&log->e_bieg_out_);
}
else
{
if ((log->nast_.kon_biegu) && (check_struct(&log->bieg_)))
{
log->dw.byl_bieg |=1;
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz)))
{
set_struct(&log->e_bieg_out_);
}
}
}
}
break;
case SPRAWDZENIE_ODP_PRZE_ZACZEPOW_DOL:
//sprawdzenie odpowiedzi przecznika zaczepw tj. czas max, zmiana nr +1, itp
if ((((log->nast_.kon_biegu)&&((!check_struct(&log->bieg_))&&(log->dw.byl_bieg & 0x01))||(check_struct(&log->e_bieg_out_))||(!(log->nast_.kon_biegu)))) && (!check_struct(&log->zo_zacz_)))
//if ((log->nast_.kon_biegu)&&(!check_struct(&log->bieg_))||(!(log->nast_.kon_biegu)))
{
log->_stan_man = KONIEC_STEROWANIA;
if ((log->nast_.kon_poz_ster)&&(log->w.nr_zacz_ >= log->nr_zaczepu_przed_ster))
{
set_struct(&log->e_poz_out_);
}
}
else
{
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz))&&(check_struct(&log->bieg_))&&(log->nast_.kon_biegu))
{
log->_stan_man = KONIEC_STEROWANIA;
set_struct(&log->e_bieg_out_);
}
}
break;
case KONIEC_STEROWANIA:
if (check_struct(&log->man_))
{
//sprawdzenie czy nie przeczy na MANUAL
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
}
else
if (check_struct(&log->ster_poz_))
{
//sprawdzenie czy nie przeczy na NR_POZ
log->_stan_man = CZEKANIE_NA_STEROWANIE_NR_POZYCJI;
}
else
{
//sprawdzenie czy nie przeczy na AUTO
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
log->licz_t1G = log->licz_t2G = 0;
log->licz_t1D = log->licz_t2D = 0;
}
break;
default:
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
break;
}
}
else
{
clear_struct(&log->gora_out_);
clear_struct(&log->dol_out_);
clear_struct(&log->e_bieg_out_);
clear_struct(&log->e_poz_out_);
clear_struct(&log->pob_G);
clear_struct(&log->pob_D);
*log->U_odn = 0;
}
}
void rnt_100hz(void *arguments, void *logic)
{
struct rnt_logic *log = (struct rnt_logic *)logic;
// int t;
if(log->nast_.on) // jesli zabezpieczenie aktywne
{
}
}
void rnt_20hz(void *arguments, void *logic)
{
//struct rnt_logic *log = (struct rnt_logic *)logic;
}