Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/hal/user_comps/mb2hal/mb2hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,15 +224,15 @@ void *link_loop_and_logic(void *thrd_link_num)
}

if (ret != retOK && modbus_get_socket(this_mb_link->modbus) < 0) { //link failure
(**this_mb_tx->num_errors)++;
hal_set_ui32(*this_mb_tx->num_errors, hal_get_ui32(*this_mb_tx->num_errors) + 1);
ERR(this_mb_tx->cfg_debug, "mb_tx_num[%d] mb_links[%d] thread[%d] fd[%d] link failure, going to close link",
this_mb_tx_num, this_mb_tx->mb_link_num, this_mb_link_num, modbus_get_socket(this_mb_link->modbus));
modbus_close(this_mb_link->modbus);
}
else if (ret != retOK) { //transaction failure but link OK
(**this_mb_tx->num_errors)++;
hal_set_ui32(*this_mb_tx->num_errors, hal_get_ui32(*this_mb_tx->num_errors) + 1);
ERR(this_mb_tx->cfg_debug, "mb_tx_num[%d] mb_links[%d] thread[%d] fd[%d] transaction failure, num_errors[%u]",
this_mb_tx_num, this_mb_tx->mb_link_num, this_mb_link_num, modbus_get_socket(this_mb_link->modbus), **this_mb_tx->num_errors);
this_mb_tx_num, this_mb_tx->mb_link_num, this_mb_link_num, modbus_get_socket(this_mb_link->modbus), hal_get_ui32(*this_mb_tx->num_errors));
// Clear any unread data. Otherwise the link might get out of sync
modbus_flush(this_mb_link->modbus);
}
Expand All @@ -241,7 +241,7 @@ void *link_loop_and_logic(void *thrd_link_num)
this_mb_tx_num, this_mb_tx->mb_link_num, this_mb_link_num, modbus_get_socket(this_mb_link->modbus),
1.0/(get_time()-this_mb_tx->last_time_ok));
this_mb_tx->last_time_ok = get_time();
(**this_mb_tx->num_errors) = 0;
hal_set_ui32(*this_mb_tx->num_errors, 0);
}

//set the next (waiting) time for update rate
Expand Down Expand Up @@ -348,7 +348,7 @@ retCode get_tx_connection(const int this_mb_tx_num, int *ret_connected)
ret = modbus_connect(this_mb_link->modbus);
if (ret != 0 || modbus_get_socket(this_mb_link->modbus) < 0) {
modbus_set_socket(this_mb_link->modbus, -1); //some times ret was < 0 and fd > 0
(**this_mb_tx->num_errors)++;
hal_set_ui32(*this_mb_tx->num_errors, hal_get_ui32(*this_mb_tx->num_errors) + 1);
ERR(this_mb_tx->cfg_debug, "mb_tx_num[%d] mb_links[%d] cannot connect to link, ret[%d] fd[%d]",
this_mb_tx_num, this_mb_tx->mb_link_num, ret, modbus_get_socket(this_mb_link->modbus));
return retOK; //not connected
Expand Down
14 changes: 7 additions & 7 deletions src/hal/user_comps/mb2hal/mb2hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,13 @@ typedef struct {
double last_time_ok; //last OK tx time
//HAL related params
char hal_tx_name[HAL_NAME_LEN + 1];
hal_float_t **float_value;
hal_s32_t **int_value;
//hal_float_t *scale; //not yet implemented
//hal_float_t *offset; //not yet implemented
hal_bit_t **bit;
hal_bit_t **bit_inv;
hal_u32_t **num_errors; //num of acummulated errors (0=last tx OK)
hal_real_t *float_value;
hal_sint_t *int_value;
//hal_real_t *scale; //not yet implemented
//hal_real_t *offset; //not yet implemented
hal_bool_t *bit;
hal_bool_t *bit_inv;
hal_uint_t *num_errors; //num of acummulated errors (0=last tx OK)
} mb_tx_t;

//Modbus link structure (mb_link_t)
Expand Down
94 changes: 40 additions & 54 deletions src/hal/user_comps/mb2hal/mb2hal_hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,18 @@ retCode create_each_mb_tx_hal_pins(mb_tx_t *mb_tx)
}

//num_errors hal pin
mb_tx->num_errors = hal_malloc(sizeof(hal_u32_t *));
mb_tx->num_errors = hal_malloc(sizeof(*mb_tx->num_errors));
if (mb_tx->num_errors == NULL) {
ERR(gbl.init_dbg, "[%d] [%s] NULL hal_malloc num_errors",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name);
return retERR;
}
memset(mb_tx->num_errors, 0, sizeof(hal_u32_t *));
memset(mb_tx->num_errors, 0, sizeof(*mb_tx->num_errors));
ret = snprintf(hal_pin_name, HAL_NAME_LEN, "%s.%s.num_errors", gbl.hal_mod_name, mb_tx->hal_tx_name);
if (ret >= HAL_NAME_LEN || ret < 0 || 0 != hal_pin_u32_newf(HAL_OUT, mb_tx->num_errors, gbl.hal_mod_id, "%s", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_u32_newf failed", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
if (ret >= HAL_NAME_LEN || ret < 0 || 0 != (ret = hal_pin_new_ui32(gbl.hal_mod_id, HAL_OUT, mb_tx->num_errors, 0, "%s", hal_pin_name))) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_ui32 failed (ret=%d)", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name, ret);
return retERR;
}
**(mb_tx->num_errors) = 0;
DBG(gbl.init_dbg, "mb_tx_num [%d] pin_name [%s]", mb_tx->mb_tx_num, hal_pin_name);

switch (mb_tx->mb_tx_fnct) {
Expand All @@ -50,37 +49,37 @@ retCode create_each_mb_tx_hal_pins(mb_tx_t *mb_tx)
case mbtx_02_READ_DISCRETE_INPUTS:
case mbtx_05_WRITE_SINGLE_COIL:
case mbtx_15_WRITE_MULTIPLE_COILS:
mb_tx->bit = hal_malloc(sizeof(hal_bit_t *) * mb_tx->mb_tx_nelem);
mb_tx->bit_inv = hal_malloc(sizeof(hal_bit_t *) * mb_tx->mb_tx_nelem);
mb_tx->bit = hal_malloc(sizeof(*mb_tx->bit) * mb_tx->mb_tx_nelem);
mb_tx->bit_inv = hal_malloc(sizeof(*mb_tx->bit_inv) * mb_tx->mb_tx_nelem);

if (mb_tx->bit == NULL || mb_tx->bit_inv == NULL) {
ERR(gbl.init_dbg, "[%d] [%s] NULL hal_malloc [%d] elements",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, mb_tx->mb_tx_nelem);
return retERR;
}
memset(mb_tx->bit, 0, sizeof(hal_bit_t *) * mb_tx->mb_tx_nelem);
memset(mb_tx->bit_inv, 0, sizeof(hal_bit_t *) * mb_tx->mb_tx_nelem);
memset(mb_tx->bit, 0, sizeof(*mb_tx->bit) * mb_tx->mb_tx_nelem);
memset(mb_tx->bit_inv, 0, sizeof(*mb_tx->bit_inv) * mb_tx->mb_tx_nelem);
break;

case mbtx_03_READ_HOLDING_REGISTERS:
case mbtx_04_READ_INPUT_REGISTERS:
case mbtx_06_WRITE_SINGLE_REGISTER:
case mbtx_16_WRITE_MULTIPLE_REGISTERS:
mb_tx->float_value= hal_malloc(sizeof(hal_float_t *) * mb_tx->mb_tx_nelem);
mb_tx->int_value = hal_malloc(sizeof(hal_s32_t *) * mb_tx->mb_tx_nelem);
//mb_tx->scale = hal_malloc(sizeof(hal_float_t) * mb_tx->mb_tx_nelem);
//mb_tx->offset = hal_malloc(sizeof(hal_float_t) * mb_tx->mb_tx_nelem);
mb_tx->float_value= hal_malloc(sizeof(*mb_tx->float_value) * mb_tx->mb_tx_nelem);
mb_tx->int_value = hal_malloc(sizeof(*mb_tx->int_value) * mb_tx->mb_tx_nelem);
//mb_tx->scale = hal_malloc(sizeof(*mb_tx->scale ) * mb_tx->mb_tx_nelem);
//mb_tx->offset = hal_malloc(sizeof(*mb_tx->offset) * mb_tx->mb_tx_nelem);
//if (mb_tx->float_value == NULL || mb_tx->int_value == NULL
// || mb_tx->scale == NULL || mb_tx->offset == NULL) {
if (mb_tx->float_value == NULL || mb_tx->int_value == NULL) {
ERR(gbl.init_dbg, "[%d] [%s] NULL hal_malloc [%d] elements",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, mb_tx->mb_tx_nelem);
return retERR;
}
memset(mb_tx->float_value, 0, sizeof(hal_float_t *) * mb_tx->mb_tx_nelem);
memset(mb_tx->int_value, 0, sizeof(hal_s32_t *) * mb_tx->mb_tx_nelem);
//memset((void *) mb_tx->scale, 0, sizeof(hal_float_t) * mb_tx->mb_tx_nelem);
//memset((void *) mb_tx->offset, 0, sizeof(hal_float_t) * mb_tx->mb_tx_nelem);
memset(mb_tx->float_value, 0, sizeof(*mb_tx->float_value) * mb_tx->mb_tx_nelem);
memset(mb_tx->int_value, 0, sizeof(*mb_tx->int_value) * mb_tx->mb_tx_nelem);
//memset(mb_tx->scale, 0, sizeof(*mb_tx->scale ) * mb_tx->mb_tx_nelem);
//memset(mb_tx->offset, 0, sizeof(*mb_tx->offset) * mb_tx->mb_tx_nelem);
break;

default:
Expand All @@ -102,115 +101,102 @@ retCode create_each_mb_tx_hal_pins(mb_tx_t *mb_tx)
case mbtx_05_WRITE_SINGLE_COIL:
case mbtx_15_WRITE_MULTIPLE_COILS:
if(gbl.version < 1001){
if (0 != hal_pin_bit_newf(HAL_IN, mb_tx->bit + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_bool(gbl.hal_mod_id, HAL_IN, mb_tx->bit + pin_counter, 0,
"%s", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_bit_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_bool failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
} else {
if (0 != hal_pin_bit_newf(HAL_IN, mb_tx->bit + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_bool(gbl.hal_mod_id, HAL_IN, mb_tx->bit + pin_counter, 0,
"%s.bit", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_bit_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_bool failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
}
*mb_tx->bit[pin_counter] = 0;
break;
case mbtx_01_READ_COILS:
case mbtx_02_READ_DISCRETE_INPUTS:
if (gbl.version < 1001) {
if (0 != hal_pin_bit_newf(HAL_OUT, mb_tx->bit + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_bool(gbl.hal_mod_id, HAL_OUT, mb_tx->bit + pin_counter, 0,
"%s", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_bit_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_bool failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
*mb_tx->bit[pin_counter] = 0;
} else {
if (0 != hal_pin_bit_newf(HAL_OUT, mb_tx->bit + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_bool(gbl.hal_mod_id, HAL_OUT, mb_tx->bit + pin_counter, 0,
"%s.bit", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_bit_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_bool failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
if (0 != hal_pin_bit_newf(HAL_OUT, mb_tx->bit_inv + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_bool(gbl.hal_mod_id, HAL_OUT, mb_tx->bit_inv + pin_counter, 1,
"%s.bit-inv", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_bit_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_bool failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
*mb_tx->bit[pin_counter] = 0;
*mb_tx->bit_inv[pin_counter] = 1;
}
break;
case mbtx_04_READ_INPUT_REGISTERS:
case mbtx_03_READ_HOLDING_REGISTERS:
if (0 != hal_pin_float_newf(HAL_OUT, mb_tx->float_value + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_real(gbl.hal_mod_id, HAL_OUT, mb_tx->float_value + pin_counter, 0.0,
"%s.float", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_float_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_real failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
if (0 != hal_pin_s32_newf(HAL_OUT, mb_tx->int_value + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_si32(gbl.hal_mod_id, HAL_OUT, mb_tx->int_value + pin_counter, 0,
"%s.int", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_s32_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_si32 failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
//if (0 != hal_param_float_newf(HAL_RW, mb_tx->scale + pin_counter, gbl.hal_mod_id,
//if (0 != hal_param_new_real(gbl.hal_mod_id, HAL_RW, mb_tx->scale + pin_counter, 1.0,
// "%s.scale", hal_pin_name)) {
// ERR(gbl.init_dbg, "[%d] [%s] [%s]", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
// return retERR;
//}
//if (0 != hal_param_float_newf(HAL_RW, mb_tx->offset + pin_counter, gbl.hal_mod_id,
//if (0 != hal_param_new_real(gbl.hal_mod_id, HAL_RW, mb_tx->offset + pin_counter, 0.0
// "%s.offset", hal_pin_name)) {
// ERR(gbl.init_dbg, "[%d] [%s] [%s]", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
// return retERR;
//}
*mb_tx->float_value[pin_counter] = 0;
*mb_tx->int_value[pin_counter] = 0;
//mb_tx->scale[pin_counter] = 1;
//mb_tx->offset[pin_counter] = 0;
break;
case mbtx_06_WRITE_SINGLE_REGISTER:
case mbtx_16_WRITE_MULTIPLE_REGISTERS:
if (gbl.version < 1001) {
if (0 != hal_pin_float_newf(HAL_IN, mb_tx->float_value + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_real(gbl.hal_mod_id, HAL_IN, mb_tx->float_value + pin_counter, 0.0,
"%s", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_float_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_real failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
*mb_tx->float_value[pin_counter] = 0;
} else {
if (0 != hal_pin_float_newf(HAL_IN, mb_tx->float_value + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_real(gbl.hal_mod_id, HAL_IN, mb_tx->float_value + pin_counter, 0.0,
"%s.float", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_float_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_real failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
if (0 != hal_pin_s32_newf(HAL_IN, mb_tx->int_value + pin_counter, gbl.hal_mod_id,
if (0 != hal_pin_new_si32(gbl.hal_mod_id, HAL_IN, mb_tx->int_value + pin_counter, 0,
"%s.int", hal_pin_name)) {
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_s32_newf failed",
ERR(gbl.init_dbg, "[%d] [%s] [%s] hal_pin_new_si32 failed",
mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
return retERR;
}
//if (0 != hal_param_float_newf(HAL_RW, mb_tx->scale + pin_counter, gbl.hal_mod_id,
//if (0 != hal_param_new_real(gbl.hal_mod_id, HAL_RW, mb_tx->scale + pin_counter, 1.0
// "%s.scale", hal_pin_name)) {
// ERR(gbl.init_dbg, "[%d] [%s] [%s]", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name, hal_pin_name);
// return retERR;
//}
//if (0 != hal_param_float_newf(HAL_RW, mb_tx->offset + pin_counter, gbl.hal_mod_id,
//if (0 != hal_param_new_real(gbl.hal_mod_id, HAL_RW, mb_tx->offset + pin_counter, 0.0
// "%s.offset", hal_pin_name)) {
// ERR(gbl.init_dbg, "[%d] [%s]", mb_tx->mb_tx_fnct, mb_tx->mb_tx_fnct_name);
// return retERR;
//}
*mb_tx->float_value[pin_counter] = 0;
*mb_tx->int_value[pin_counter] = 0;
//mb_tx->scale[pin_counter] = 1;
//mb_tx->offset[pin_counter] = 0;
}
break;
default:
Expand Down
Loading
Loading