|
@@ -28,25 +28,20 @@ uint16_t ai_mode; // режим измерения аналоговых кан
|
|
|
|
|
|
uint16_t ai_alarm; // слово аварий входов
|
|
|
|
|
|
-#if 1
|
|
|
-ANALOG_IN_t channel_name[NUMBER_ADC_CH] = {AN_INP_1, AN_INP_2, AN_INP_3,
|
|
|
- AN_INP_4, AN_INP_5, AN_INP_6,
|
|
|
- V_ISO_CL, V_ISO,
|
|
|
- AN_INP_7, AN_INP_8, AN_INP_9,
|
|
|
- AN_INP_10, AN_INP_11, AN_INP_12,
|
|
|
- CRNT_LIM_U_BFR_R, CRNT_LIM_U_ABFR_R};
|
|
|
-#endif
|
|
|
+uint16_t ai_gain[AI_COMMON_NUMBER]; // массив коэффициентов усиленя (modbus)
|
|
|
|
|
|
#if 0
|
|
|
ANALOG_IN_t channel_name[NUMBER_ADC_CH] = {AN_INP_1, AN_INP_2, AN_INP_3,
|
|
|
AN_INP_4, AN_INP_5, AN_INP_6,
|
|
|
+ V_ISO_CL, V_ISO,
|
|
|
AN_INP_7, AN_INP_8, AN_INP_9,
|
|
|
AN_INP_10, AN_INP_11, AN_INP_12,
|
|
|
- V_ISO_CL, V_ISO,
|
|
|
CRNT_LIM_U_BFR_R, CRNT_LIM_U_ABFR_R};
|
|
|
#endif
|
|
|
|
|
|
-uint16_t adc_raw_data[NUMBER_ADC_CH];
|
|
|
+
|
|
|
+uint16_t adc_raw_data[AI_ALL_NUMBER];
|
|
|
+
|
|
|
|
|
|
led_t ai_alarm_led[12] = {IO_1_R, IO_2_R, IO_3_R, IO_4_R,
|
|
|
IO_5_R, IO_6_R, IO_7_R, IO_8_R,
|
|
@@ -78,12 +73,33 @@ void ai_init(void)
|
|
|
|
|
|
// Внешинй ADC
|
|
|
ai_adc_init();
|
|
|
+
|
|
|
+ // Modbus параметры
|
|
|
+ ai_init_modbus_params();
|
|
|
}
|
|
|
|
|
|
//
|
|
|
+void ai_init_modbus_params(void)
|
|
|
+{
|
|
|
+ for (uint8_t i = 0; i < AI_COMMON_NUMBER/2; i++)
|
|
|
+ {
|
|
|
+ ai_gain[i] = settings.ai[i].gain_factor;
|
|
|
+ ai_gain[i + 6] = settings.ai[i + 8].gain_factor;
|
|
|
+ }
|
|
|
+
|
|
|
+#if 0
|
|
|
+ // для теста
|
|
|
+ for (uint8_t i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
+ {
|
|
|
+ ai_gain[i] = i + 10;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+// Управление LED для 12-и основных входов
|
|
|
void ai_led_update(void)
|
|
|
{
|
|
|
- for (int i = 0; i < AI_NUMBER; i++)
|
|
|
+ for (int i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
{
|
|
|
if (settings.ai[i].state) {
|
|
|
leds[ai_input_led[i]].state = LED_ON;
|
|
@@ -106,7 +122,7 @@ void ai_set_meas_mode(void)
|
|
|
ai_set_mode_word((MEAS_CHAN_MODE_t)0, i);
|
|
|
}
|
|
|
#endif
|
|
|
- for (int i = 0; i < AI_NUMBER; i++)
|
|
|
+ for (int i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
{
|
|
|
if (settings.ai[i].mode)
|
|
|
ai_set_mode_word((MEAS_CHAN_MODE_t)1, i);
|
|
@@ -190,23 +206,14 @@ bool ai_adc_init(void)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-// Оцифровка всех каналов (входы + дополнительные каналы)
|
|
|
+// Оцифровка всех 16-и каналов (входы + дополнительные каналы)
|
|
|
void ai_processing(void)
|
|
|
{
|
|
|
-#if 0
|
|
|
+ // все 16 каналов
|
|
|
for (uint8_t i = 0; i < 8; i++)
|
|
|
{
|
|
|
- adc_get_two_channles(channel_name[i], channel_name[i + 8]);
|
|
|
+ adc_meas_two_channels(settings.ai[i], settings.ai[i + 8], i);
|
|
|
}
|
|
|
-#endif
|
|
|
-
|
|
|
- for (uint8_t i = 0; i < 6; i++)
|
|
|
- {
|
|
|
- adc_get_two_channles(channel_name[i], channel_name[i + 8]);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
#if 0
|
|
|
printf("end\r\n");
|
|
@@ -216,49 +223,56 @@ void ai_processing(void)
|
|
|
}
|
|
|
|
|
|
//
|
|
|
-void adc_get_two_channles(ANALOG_IN_t one, ANALOG_IN_t two)
|
|
|
+void adc_meas_two_channels(ai_t one, ai_t two, uint8_t data_index)
|
|
|
{
|
|
|
- //if (settings.ai[one]) )
|
|
|
- printf("One: %u, two: %u\r\n", one, two);
|
|
|
-
|
|
|
-#if 0
|
|
|
- ai_connect_channel(one);
|
|
|
- vTaskDelay(1);
|
|
|
- MS5192T_SetChannel(MS5192T_CH_AIN1P_AIN1M);
|
|
|
- adc_raw_data[one] = MS5192T_SingleConversion();
|
|
|
-
|
|
|
- ai_connect_channel(two);
|
|
|
- vTaskDelay(1);
|
|
|
- MS5192T_SetChannel(MS5192T_CH_AIN2P_AIN2M);
|
|
|
- adc_raw_data[two] = MS5192T_SingleConversion();
|
|
|
-#endif
|
|
|
+ // 1 - ый канал
|
|
|
+ if (one.state == 0) {
|
|
|
+ DBG printf("[one] channel name: %u off, data_index: %u\r\n", one.name, data_index);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ DBG printf("[one] channel name: %u on, data_index: %u\r\n", one.name, data_index);
|
|
|
+
|
|
|
+ ai_connect_channel(one.name);
|
|
|
+ vTaskDelay(1);
|
|
|
+ MS5192T_SetChannel(MS5192T_CH_AIN1P_AIN1M);
|
|
|
+ adc_raw_data[data_index] = MS5192T_SingleConversion();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2 - ой канал
|
|
|
+ if (two.state == 0) {
|
|
|
+ DBG printf("[two] channel name: %u off, data_index: %u\r\n", two.name, data_index + 8);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ DBG printf("[two] channel name: %u on, data_index: %u\r\n", two.name, data_index + 8);
|
|
|
+
|
|
|
+ ai_connect_channel(two.name);
|
|
|
+ vTaskDelay(1);
|
|
|
+ MS5192T_SetChannel(MS5192T_CH_AIN2P_AIN2M);
|
|
|
+ adc_raw_data[data_index + 8] = MS5192T_SingleConversion();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-// Дополнительные каналы (V_ISO_CL, V_ISO, CRNT_LIM_U_BFR_R, CRNT_LIM_U_ABFR_R)
|
|
|
-void adc_get_add_channels(void)
|
|
|
-{}
|
|
|
-
|
|
|
//
|
|
|
void adc_print_data(void)
|
|
|
{
|
|
|
printf("\033[2J"); // Очистить
|
|
|
printf("\033[H"); // Переместить курсор в левый верхний угол
|
|
|
- printf("AN_INP_1: 0x%X, %f\r\n", adc_raw_data[AN_INP_1], (double) adc_raw_data[AN_INP_1]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_2: 0x%X, %f\r\n", adc_raw_data[AN_INP_2], (double) adc_raw_data[AN_INP_2]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_3: 0x%X, %f\r\n", adc_raw_data[AN_INP_3], (double) adc_raw_data[AN_INP_3]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_4: 0x%X, %f\r\n", adc_raw_data[AN_INP_4], (double) adc_raw_data[AN_INP_4]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_5: 0x%X, %f\r\n", adc_raw_data[AN_INP_5], (double) adc_raw_data[AN_INP_5]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_6: 0x%X, %f\r\n", adc_raw_data[AN_INP_6], (double) adc_raw_data[AN_INP_6]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_7: 0x%X, %f\r\n", adc_raw_data[AN_INP_7], (double) adc_raw_data[AN_INP_7]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_8: 0x%X, %f\r\n", adc_raw_data[AN_INP_8], (double) adc_raw_data[AN_INP_8]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_9: 0x%X, %f\r\n", adc_raw_data[AN_INP_9], (double) adc_raw_data[AN_INP_9]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_10: 0x%X, %f\r\n", adc_raw_data[AN_INP_10], (double) adc_raw_data[AN_INP_10]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_11: 0x%X, %f\r\n", adc_raw_data[AN_INP_11], (double) adc_raw_data[AN_INP_11]*0.00001785305/0.0961538);
|
|
|
- printf("AN_INP_12: 0x%X, %f\r\n", adc_raw_data[AN_INP_12], (double) adc_raw_data[AN_INP_12]*0.00001785305/0.0961538);
|
|
|
- printf("V_ISO_CL: 0x%X, %f\r\n", adc_raw_data[V_ISO_CL], (double) adc_raw_data[V_ISO_CL]*0.00001785305/0.0961538);
|
|
|
- printf("V_ISO: 0x%X, %f\r\n", adc_raw_data[V_ISO], (double) adc_raw_data[V_ISO]*0.00001785305/0.0961538);
|
|
|
- printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_raw_data[CRNT_LIM_U_BFR_R], (double) adc_raw_data[CRNT_LIM_U_BFR_R]*0.00001785305/0.0961538);
|
|
|
- printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n", adc_raw_data[CRNT_LIM_U_ABFR_R], (double) adc_raw_data[CRNT_LIM_U_ABFR_R]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_1: 0x%X, %f\r\n", adc_raw_data[0], (double) adc_raw_data[0]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_2: 0x%X, %f\r\n", adc_raw_data[1], (double) adc_raw_data[1]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_3: 0x%X, %f\r\n", adc_raw_data[2], (double) adc_raw_data[2]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_4: 0x%X, %f\r\n", adc_raw_data[3], (double) adc_raw_data[3]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_5: 0x%X, %f\r\n", adc_raw_data[4], (double) adc_raw_data[4]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_6: 0x%X, %f\r\n", adc_raw_data[5], (double) adc_raw_data[5]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_7: 0x%X, %f\r\n", adc_raw_data[6], (double) adc_raw_data[6]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_8: 0x%X, %f\r\n", adc_raw_data[7], (double) adc_raw_data[7]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_9: 0x%X, %f\r\n", adc_raw_data[8], (double) adc_raw_data[8]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_10: 0x%X, %f\r\n", adc_raw_data[9], (double) adc_raw_data[9]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_11: 0x%X, %f\r\n", adc_raw_data[10],(double) adc_raw_data[10]*0.00001785305/0.0961538);
|
|
|
+ printf("AN_INP_12: 0x%X, %f\r\n", adc_raw_data[11],(double) adc_raw_data[11]*0.00001785305/0.0961538);
|
|
|
+ printf("V_ISO_CL: 0x%X, %f\r\n", adc_raw_data[12], (double) adc_raw_data[12]*0.00001785305/0.0961538);
|
|
|
+ printf("V_ISO: 0x%X, %f\r\n", adc_raw_data[13], (double) adc_raw_data[13]*0.00001785305/0.0961538);
|
|
|
+ printf("CRNT_LIM_U_BFR_R: 0x%X, %f\r\n", adc_raw_data[14], (double) adc_raw_data[14]*0.00001785305/0.0961538);
|
|
|
+ printf("CRNT_LIM_U_ABFR_R: 0x%X, %f\r\n", adc_raw_data[15], (double) adc_raw_data[15]*0.00001785305/0.0961538);
|
|
|
}
|
|
|
|
|
|
//
|
|
@@ -329,7 +343,7 @@ void ai_connect_channel(uint8_t channel)
|
|
|
//
|
|
|
void ai_set(void)
|
|
|
{
|
|
|
- for (int i = 0; i < AI_NUMBER; i++)
|
|
|
+ for (int i = 0; i < AI_COMMON_NUMBER; i++)
|
|
|
{
|
|
|
if (((settings.ai_state_bits >> i) & 1) != settings.ai[i].state)
|
|
|
{
|
|
@@ -410,18 +424,8 @@ void ai_ext_sens_power(uint16_t state)
|
|
|
// Управления LED
|
|
|
void ai_leds_processing(void)
|
|
|
{
|
|
|
- //uint16_t foo = 0x800;
|
|
|
-#if 0
|
|
|
- // Управление индикацией вкл/выкл входов
|
|
|
- for (uint8_t i = 0; i < AI_NUMBER; i++) {
|
|
|
- if (settings.ai_state_bits & (1 << i)) {
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
// Управление индикацией аварий (12 красных LED) (слово ai_alarm)
|
|
|
- for (uint8_t i = 0; i < AI_NUMBER; i++) {
|
|
|
+ for (uint8_t i = 0; i < AI_COMMON_NUMBER; i++) {
|
|
|
if (ai_alarm & (1 << i)) {
|
|
|
leds[ai_alarm_led[i]].state = LED_ON;
|
|
|
}
|