Exemplo n.º 1
0
void initialize() {
	counter_a = 0;
	counter_b = 0;

	configure_ports();
	configure_timers();

	init_step_motor();
	init_servodrive();
	init_proxi_switch();
	init_delays();

	sei();

	while(INIT_TIME--) {
		buzzer(440, 100);
		delay_s(1);
	}
}
Exemplo n.º 2
0
app_t configure(const config_t conf, app_t app){

    app_t a = app;
    a->conf = conf;
    hardware_t hw = get_hardware(HW_TYPE);
    hw->status = hw->configure(conf);
        
    int di = get_sequence_entry(CONFIG_DI, conf)->size / BYTESIZE + 1; 
    int dq = get_sequence_entry(CONFIG_DQ, conf)->size / BYTESIZE + 1;
    int ai = get_sequence_entry(CONFIG_AI, conf)->size;
    int aq = get_sequence_entry(CONFIG_AQ, conf)->size;
    int nt = get_sequence_entry(CONFIG_TIMER, conf)->size;
    int ns = get_sequence_entry(CONFIG_PULSE, conf)->size;
    int nm = get_sequence_entry(CONFIG_MREG, conf)->size;
    int nr = get_sequence_entry(CONFIG_MVAR, conf)->size;
    int step = get_numeric_entry(CONFIG_STEP, conf);
    
    plc_t p = new_plc(di, dq, ai, aq, nt, ns, nm, nr, step, hw);

    p->status = 0;
    p->update = TRUE;
    
    p = configure_di(conf, p);
    p = configure_dq(conf, p);
    p = configure_ai(conf, p);
    p = configure_aq(conf, p);
    p = configure_counters(conf, p);
    p = configure_reals(conf, p);
    p = configure_timers(conf, p);
    p = configure_pulses(conf, p);
    
    if(a->plc != NULL){
        clear_plc(a->plc);
    }
    a->plc = p;
        
    return a;
}
Exemplo n.º 3
0
app_t apply_command(const config_t com, 
                    app_t a){
    char * confstr = "config.yml";
    char * cvalue = NULL;
    char * val = NULL;
    sequence_t seq = NULL;
    int s = CONFIG_PROGRAM;
    int v = -1;
    plc_t p = NULL;
    if(a != NULL){
        switch(get_numeric_entry(CLI_COM, com)){
            case COM_START:
        
                a->plc = plc_start(a->plc);
                break;
            
            case COM_STOP:
        
                a->plc = plc_stop(a->plc);
                break;
        
            case COM_LOAD:
            
                a->plc = plc_stop(a->plc);
                a->conf = init_config();
                cvalue = get_string_entry(CLI_ARG, com);
                if( cvalue == NULL ||
                    cvalue[0] == 0){
                    cvalue = confstr;
                }
                if ((load_config_yml(cvalue, a->conf))->err < PLC_OK) {
                    plc_log("Invalid configuration file %s\n", cvalue);
                } else {
                    a = configure(a->conf, a);
                }    
                break;
            
            case COM_SAVE:
        
                a->plc = plc_stop(a->plc);
                cvalue = get_string_entry(CLI_ARG, com);
                if( cvalue == NULL ||
                    cvalue[0] == 0){
                    cvalue = confstr;
                }
                if ((save_config_yml(cvalue, a->conf)) < PLC_OK) {
                    plc_log("Invalid configuration file %s\n", cvalue);
                }
                break;    
        
            case COM_FORCE:         
            
                for(s = CONFIG_PROGRAM; s < N_CONFIG_VARIABLES; s++){
                    seq = get_sequence_entry(s, com); 
                    for(v = 0; seq && v < seq->size; v++){
                    //filter sequences who have a param "FORCE"
                        val = get_param_val("FORCE", seq->vars[v].params);
                        if(val){  //apply force   
                            p = force(a->plc, Lookup[s], v, val);
                            if(p){
                                a->plc = p;
                            }
                        }
                    } 
                }
                if(p == NULL){
                    plc_log("Invalid force command\n");
                }
                break;
            
            case COM_UNFORCE:
            
                for(s = CONFIG_PROGRAM; s < N_CONFIG_VARIABLES; s++){
                    seq = get_sequence_entry(s, com); 
                    for(v = 0; seq && v < seq->size; v++){
                //filter sequences who have a param "FORCE"
                        val = get_param_val("FORCE", seq->vars[v].params);
                        if(val){  //apply force   
                            p = unforce(a->plc, Lookup[s], v);
                            if(p){
                                a->plc = p;
                            }
                        }
                    } 
                }
                if(p == NULL){
                    plc_log("Invalid force command\n");
                }
                break;
             case COM_EDIT:
                //TODO: filter sequences who have an updated variable                    
                a->plc = configure_di(com, a->plc);
                a->plc = configure_dq(com, a->plc);
                a->plc = configure_ai(com, a->plc);
                a->plc = configure_aq(com, a->plc);
                a->plc = configure_counters(com, a->plc);
                a->plc = configure_reals(com, a->plc);
                a->plc = configure_timers(com, a->plc);
                a->plc = configure_pulses(com, a->plc);
                a->conf = copy_sequences(com, a->conf);
                break;
            default: break;
        }
    }
    return a;
}