#include "at32f403a_407.h" #include "modbus_dio_params.h" #include "modbus_params.h" #include "digital_input.h" #include "digital_output.h" #include "settings_api.h" extern mb_param_t mb_param[]; #if defined (MDIO_88) // uint16_t mb_init_dio_params(uint16_t i) { uint16_t index = i; uint16_t addr = 0; mb_param[index].reg = 0x0100; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&di_state_bit; // Текущее состояние входов mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Счетчики импульсов. Регистры 0x0102 - 0x0111 addr = 0x0102; for (int i = 0; i < DI_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 2; mb_param[index].param = (uint8_t*)&di_cnt[i]; // Счетчик ипульсов mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr += 2; index++; } // Режим работы входов mb_param[index].reg = 0x0120; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&settings.di_mode_bits; mb_param[index].set = mb_set_din_mode; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Нормальное состояние входов mb_param[index].reg = 0x0122; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&settings.di_norm_state_bits; mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Время антидребезга addr = 0x0124; for (int i = 0; i < DI_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&settings.di_debounce[i]; mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr++; index++; } // Текущее состояние датчиков нагрузки mb_param[index].reg = 0x0130; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&di_load_state_bit; mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Слово достоверности датчиков нагрузки [1 - показания достоверны, 0 - нет] mb_param[index].reg = 0x0131; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&di_credibility_state_bit; mb_param[index].set = NULL; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Текущее состояние выходов mb_param[index].reg = 0x0200; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_state_bit; mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Режим работы выходов mb_param[index].reg = 0x0202; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_mode_bit; mb_param[index].set = mb_set_do_mode; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Состояние выходов в безопасном режиме mb_param[index].reg = 0x0203; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&settings.do_save_bits; mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; index++; // Заполнение PWM. Регистры 0x0210 - 0x0217 addr = 0x0210; for (int i = 0; i < DO_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_pwm[i]; // Счетчик ипульсов mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr++; index++; } // Заполнение PWM в безопасном режиме. Регистры 0x0220 - 0x0227 addr = 0x0220; for (int i = 0; i < DO_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_pwm_save[i]; // Счетчик ипульсов mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr++; index++; } // Период PWM. Регистры 0x0220 - 0x0227 addr = 0x0230; for (int i = 0; i < DO_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_pwm_period[i]; // Счетчик ипульсов mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr++; index++; } // Период PWM. Регистры 0x0220 - 0x0227 addr = 0x0240; for (int i = 0; i < DO_NUMBER; i++) { mb_param[index].reg = addr; mb_param[index].size = 1; mb_param[index].param = (uint8_t*)&output_pwm_period_save[i]; // Счетчик ипульсов mb_param[index].set = mb_set_do; mb_param[index].get = NULL; mb_param[index].check_handler = mb_check_dummy; addr++; index++; } return index; } // -------------------------------------------------------------------------- // // Установка параметров // -------------------------------------------------------------------------- // // mb_delay_action_t mb_set_din_mode(void) { di_set(); return MB_NO_ACTION; } // mb_delay_action_t mb_set_do(void) { do_set_common(); return MB_NO_ACTION; } // mb_delay_action_t mb_set_do_mode(void) { do_set_mode(); return MB_NO_ACTION; } #endif