diff --git a/APP_Framework/Applications/general_functions/circular_area/circular_area_app.c b/APP_Framework/Applications/general_functions/circular_area/circular_area_app.c index 25e81c39c..9ac93bc65 100644 --- a/APP_Framework/Applications/general_functions/circular_area/circular_area_app.c +++ b/APP_Framework/Applications/general_functions/circular_area/circular_area_app.c @@ -48,7 +48,7 @@ int CircularAreaAppIsEmpty(CircularAreaAppType circular_area) CA_PARAM_CHECK(circular_area); if((circular_area->readidx == circular_area->writeidx) && (!circular_area->b_status)) { - printf("the circular area is empty\n"); + //printf("the circular area is empty\n"); return 1; } else { return 0; @@ -164,7 +164,7 @@ int CircularAreaAppRead(CircularAreaAppType circular_area, uint8_t *output_buffe return -1; } - uint32_t read_length = (data_length > CircularAreaAppGetDataLength(circular_area)) ? CircularAreaAppGetDataLength(circular_area) : data_length; + int read_length = (data_length > CircularAreaAppGetDataLength(circular_area)) ? CircularAreaAppGetDataLength(circular_area) : data_length; // if (data_length > CircularAreaAppGetDataLength(circular_area)) { // return -1; // } diff --git a/APP_Framework/Framework/control/ipc_protocol/include/modbus_tcp.h b/APP_Framework/Framework/control/ipc_protocol/include/modbus_tcp.h index 4eb8210b8..3d1532ace 100755 --- a/APP_Framework/Framework/control/ipc_protocol/include/modbus_tcp.h +++ b/APP_Framework/Framework/control/ipc_protocol/include/modbus_tcp.h @@ -27,7 +27,7 @@ extern "C" { #endif -#define MODBUS_TCP_UNIT_ID 0x00 +#define MODBUS_TCP_UNIT_ID 0x01 #define MODBUS_TCP_READ_CMD_LENGTH 0x0C #define MODBUS_TCP_WRITE_SINGLE_CMD_LENGTH 0x0C diff --git a/APP_Framework/Framework/control/ipc_protocol/modbus_tcp/modbus_tcp.c b/APP_Framework/Framework/control/ipc_protocol/modbus_tcp/modbus_tcp.c index 45734f2ca..b9788a893 100755 --- a/APP_Framework/Framework/control/ipc_protocol/modbus_tcp/modbus_tcp.c +++ b/APP_Framework/Framework/control/ipc_protocol/modbus_tcp/modbus_tcp.c @@ -35,6 +35,7 @@ static uint8_t recv_buff[1024] = {0}; */ static int ModbusTcpTransformRecvBuffToData(ModbusTcpReadItem *p_read_item, uint8_t *recv_buff) { + uint8_t head_length = 9; uint8_t *data_buffer; ModbusTcpDataInfo *p_modbus_tcp_data_info = &(p_read_item->data_info); uint16_t quantity = p_read_item->quantity; @@ -45,7 +46,16 @@ static int ModbusTcpTransformRecvBuffToData(ModbusTcpReadItem *p_read_item, uint printf("Receive data is "); uint8_t bytes_count = recv_buff[8]; - data_buffer = recv_buff + 9;//remove head data + + if ((WRITE_SINGLE_COIL == function_code) || (WRITE_SINGLE_REGISTER == function_code) || + (WRITE_MULTIPLE_COIL == function_code) || (WRITE_MULTIPLE_REGISTER == function_code)) { + head_length = 10; + if (p_modbus_tcp_data_info->base_data_info.command_ready) { + p_modbus_tcp_data_info->base_data_info.command_ready = 0; + } + } + + data_buffer = recv_buff + head_length;//remove head data if (READ_COIL_STATUS == function_code || READ_INPUT_STATUS == function_code) { for (int i = 0;i < bytes_count;i ++) { @@ -190,27 +200,28 @@ static int ModbusTcpInitialDataInfo(ModbusTcpReadItem *p_read_item, uint16_t ind break; } - command_index = 0; - p_base_data_info->p_command[command_index++] = index >> 8; - p_base_data_info->p_command[command_index++] = index; - p_base_data_info->p_command[command_index++] = 0x00; - p_base_data_info->p_command[command_index++] = 0x00; - p_base_data_info->p_command[command_index++] = 0x00; + memset(p_base_data_info->p_command, 0, p_base_data_info->command_length); - if (function_code < 5) { - p_base_data_info->p_command[command_index++] = 0x06; + p_base_data_info->p_command[0] = index >> 8; + p_base_data_info->p_command[1] = index; + p_base_data_info->p_command[2] = 0x00; + p_base_data_info->p_command[3] = 0x00; + p_base_data_info->p_command[4] = 0x00; + + if (function_code < WRITE_MULTIPLE_COIL) { + p_base_data_info->p_command[5] = 0x06; } else { - p_base_data_info->p_command[command_index++] = 0x09; + p_base_data_info->p_command[5] = 0x09; } - p_base_data_info->p_command[command_index++] = MODBUS_TCP_UNIT_ID; - p_base_data_info->p_command[command_index++] = function_code; - p_base_data_info->p_command[command_index++] = start_address >> 8; - p_base_data_info->p_command[command_index++] = start_address; + p_base_data_info->p_command[6] = MODBUS_TCP_UNIT_ID; + p_base_data_info->p_command[7] = function_code; + p_base_data_info->p_command[8] = start_address >> 8; + p_base_data_info->p_command[9] = start_address; - if (function_code != WRITE_SINGLE_COIL || function_code != WRITE_SINGLE_REGISTER) { - p_base_data_info->p_command[command_index++] = quantity >> 8; - p_base_data_info->p_command[command_index++] = quantity; + if ((function_code != WRITE_SINGLE_COIL) && (function_code != WRITE_SINGLE_REGISTER)) { + p_base_data_info->p_command[10] = quantity >> 8; + p_base_data_info->p_command[11] = quantity; } return 0; } @@ -237,7 +248,7 @@ static int ModbusTcpForamatWriteData(ModbusTcpReadItem *p_read_item) write_data_length = CircularAreaAppRead(g_write_data, write_data_buffer, p_base_data_info->data_size); if (p_base_data_info->data_size != write_data_length) { - printf("%s get write data %d [should be %d]failed!", __func__, write_data_length, p_base_data_info->data_size); + //printf("%s get write data %d [should be %d]failed!\n", __func__, write_data_length, p_base_data_info->data_size); return 0; } @@ -246,6 +257,7 @@ static int ModbusTcpForamatWriteData(ModbusTcpReadItem *p_read_item) case WRITE_SINGLE_COIL: case WRITE_SINGLE_REGISTER: command_index = 10; + break; case WRITE_MULTIPLE_COIL: case WRITE_MULTIPLE_REGISTER: command_index = 13; @@ -256,9 +268,11 @@ static int ModbusTcpForamatWriteData(ModbusTcpReadItem *p_read_item) } for (i = 0; i < write_data_length; i ++) { - p_base_data_info->p_command[command_index++] = write_data_buffer[i]; + p_base_data_info->p_command[command_index + i] = write_data_buffer[i]; } + p_base_data_info->command_ready = 1; + return write_data_length; } diff --git a/APP_Framework/Framework/control/shared/control_def.c b/APP_Framework/Framework/control/shared/control_def.c index 33783456b..306b1b5f4 100644 --- a/APP_Framework/Framework/control/shared/control_def.c +++ b/APP_Framework/Framework/control/shared/control_def.c @@ -202,7 +202,7 @@ static void ControlBasicSocketConfig(struct ControlRecipe *p_recipe, cJSON *p_re */ void ControlPrintfList(char name[5], uint8_t *number_list, uint16_t length) { - printf("\n******************%5s****************\n", name); + printf("\n******************%s****************\n", name); for (int32_t i = 0;i < length;i ++) { printf("0x%x ", number_list[i]); }