1、delete useless code in s7.c;2、fix hc32f4a0 compile error when using libs7.a。

This commit is contained in:
Liu_Weichao 2023-04-26 11:20:31 +08:00
parent 4f72b78b96
commit e231a29f5a
3 changed files with 118 additions and 62 deletions

View File

@ -20,28 +20,6 @@
#include <s7.h> #include <s7.h>
sem_t union_plc_data_updata_sem;
pthread_mutex_t union_plc_data_read_mutex;
static BasicSocketPlc plc_socket = {0};
void KPrintf(const char *fmt, ...);
#define BASIC_PLC_PRINTF KPrintf
/**
* @description: Printf Hex Number List
* @param name - number list name
* @param number_list - number list pointer
* @param length - numner list length
* @return
*/
void PrintHexNumberList(char name[4], uint8_t* number_list, uint16_t length)
{
BASIC_PLC_PRINTF("\n******************%4s****************\n", name);
for (int32_t i = 0;i < length;i++) {
BASIC_PLC_PRINTF("%03x ", number_list[i]);
}
BASIC_PLC_PRINTF("\n**************************************\n");
}
/** /**
* @description: S7 Receive Plc Data Task * @description: S7 Receive Plc Data Task
* @param parameter - parameter pointer * @param parameter - parameter pointer
@ -70,11 +48,7 @@ int S7Open(struct ControlProtocol *control_protocol)
* @return success : 0 error * @return success : 0 error
*/ */
int S7Close(struct ControlProtocol *control_protocol) int S7Close(struct ControlProtocol *control_protocol)
{ {
#ifdef CONTROL_USING_SOCKET
ControlDisconnectSocket(&plc_socket);
#endif
ControlProtocolCloseDef(); ControlProtocolCloseDef();
return 0; return 0;
@ -112,12 +86,9 @@ static struct ControlDone s7_protocol_done =
void PushDataIntoStack(uint8_t *datastack,uint8_t* args,uint16_t length) void PushDataIntoStack(uint8_t *datastack,uint8_t* args,uint16_t length)
{ {
static int index = 8; static int index = 8;
for(int i =0; i<length;i++) for(int i =0; i < length; i ++) {
{
datastack[index] = args[i]; datastack[index] = args[i];
//printf("DEBUG:%d%4X\n",__LINE__,datapush[8+index]);
index++; index++;
//printf("DEBUG:%d %d %d\n",__LINE__,index, length);
if(index >= control_protocol->recipe->protocol_data.data_length){ if(index >= control_protocol->recipe->protocol_data.data_length){
index = 8; index = 8;
} }
@ -131,50 +102,46 @@ void PushDataIntoStack(uint8_t *datastack,uint8_t* args,uint16_t length)
*/ */
int8_t ReadPlcDataByRecipe(struct ControlRecipe *p_recipe) int8_t ReadPlcDataByRecipe(struct ControlRecipe *p_recipe)
{ {
uint16_t data_length = 0; uint16_t data_length = control_protocol->recipe->protocol_data.data_length;
uint8_t *s7_data; uint8_t *s7_data = control_protocol->recipe->protocol_data.data;
data_length = control_protocol->recipe->protocol_data.data_length;
s7_data = control_protocol->recipe->protocol_data.data;
struct CircularAreaApp *circular_area = (struct CircularAreaApp *)control_protocol->args; struct CircularAreaApp *circular_area = (struct CircularAreaApp *)control_protocol->args;
BasicSocketPlc base_socket_plc = {0};
S7Object s7_plc = {0}; S7Object s7_plc = {0};
char plc_ip_string[15] = {0}; char plc_ip_string[15] = {0};
s7_plc = Cli_Create(); s7_plc = Cli_Create();
sprintf(plc_ip_string, "%u.%u.%u.%u", sprintf(plc_ip_string, "%u.%u.%u.%u",
p_recipe->socket_config.plc_ip[0], p_recipe->socket_config.plc_ip[0],
p_recipe->socket_config.plc_ip[1], p_recipe->socket_config.plc_ip[1],
p_recipe->socket_config.plc_ip[2], p_recipe->socket_config.plc_ip[2],
p_recipe->socket_config.plc_ip[3]); p_recipe->socket_config.plc_ip[3]);
int16_t read_item_count = p_recipe->read_item_count; int16_t read_item_count = p_recipe->read_item_count;
uint8_t* p_read_item = (uint8_t*)(p_recipe->read_item); uint8_t *p_read_item = (uint8_t *)(p_recipe->read_item);
while (1) { while (1) {
int8_t error = 0; int8_t error = 0;
while (!error) { while (!error) {
uint16_t i = 0; uint16_t i = 0;
for (i; i < read_item_count; i++) { for (i = 0; i < read_item_count; i ++) {
int is_connected = 0; int is_connected = 0;
Cli_GetConnected(s7_plc, &is_connected); Cli_GetConnected(s7_plc, &is_connected);
while (!is_connected) { while (!is_connected) {
if (Cli_ConnectTo(s7_plc, plc_ip_string, 0, 1) != 0) { if (Cli_ConnectTo(s7_plc, plc_ip_string, 0, 1) != 0) {
MdelayKTask(1000); PrivTaskDelay(1000);
} else { } else {
break; break;
}
} }
}
TS7DataItem data_info = ((S7ReadItem*)p_read_item + i)->data_info; TS7DataItem data_info = ((S7ReadItem*)p_read_item + i)->data_info;
Cli_ReadMultiVars(s7_plc, &data_info, 1); Cli_ReadMultiVars(s7_plc, &data_info, 1);
uint16_t Size = GetValueTypeMemorySize(((S7ReadItem*)p_read_item + i)->value_type); uint16_t Size = GetValueTypeMemorySize(((S7ReadItem*)p_read_item + i)->value_type);
PrintHexNumberList("s7 recv", data_info.pdata,Size); ControlPrintfList("S7 RECV", data_info.pdata,Size);
PushDataIntoStack(s7_data,data_info.pdata,Size); PushDataIntoStack(s7_data,data_info.pdata,Size);
MdelayKTask(100); PrivTaskDelay(100);
} }
/*read all variable item data, put them into circular_area*/ /*read all variable item data, put them into circular_area*/
if (i == read_item_count) { if (i == read_item_count) {
printf("%s get %d item %d length\n", __func__, i, data_length); printf("%s get %d item %d length\n", __func__, i, data_length);
// for(int j = 0; j < data_length; j++)
// {
// printf("DEBUG:%X %d\n",s7_data[j],__LINE__);
// }
CircularAreaAppWrite(circular_area, s7_data, data_length, 0); CircularAreaAppWrite(circular_area, s7_data, data_length, 0);
} }
} }
@ -241,14 +208,14 @@ static uint8_t InitialS7ReadItem(S7ReadItem* p_read_item, cJSON* read_item_json,
int S7ProtocolFormatCmd(struct ControlRecipe *p_recipe, ProtocolFormatInfo *protocol_format_info) int S7ProtocolFormatCmd(struct ControlRecipe *p_recipe, ProtocolFormatInfo *protocol_format_info)
{ {
int ret = 0; int ret = 0;
uint8_t* S7_plc_read_data = malloc(p_recipe->protocol_data.data_length); uint8_t *S7_plc_read_data = PrivMalloc(p_recipe->protocol_data.data_length);
uint16_t S7_plc_read_data_index = 8; uint16_t S7_plc_read_data_index = 8;
cJSON *read_single_item_json = protocol_format_info->read_single_item_json; cJSON *read_single_item_json = protocol_format_info->read_single_item_json;
int i = protocol_format_info->read_item_index; int i = protocol_format_info->read_item_index;
if (i == 0) if (0 == i)
p_recipe->read_item = malloc(sizeof(S7ReadItem) * p_recipe->read_item_count); p_recipe->read_item = PrivMalloc(sizeof(S7ReadItem) * p_recipe->read_item_count);
S7_plc_read_data_index += InitialS7ReadItem((S7ReadItem*)(p_recipe->read_item) + i, S7_plc_read_data_index += InitialS7ReadItem((S7ReadItem *)(p_recipe->read_item) + i,
read_single_item_json,S7_plc_read_data + S7_plc_read_data_index); read_single_item_json, S7_plc_read_data + S7_plc_read_data_index);
if (S7_plc_read_data_index == 8) { if (S7_plc_read_data_index == 8) {
ret = -1; ret = -1;
printf("%s read %d item failed!\n", __func__, i); printf("%s read %d item failed!\n", __func__, i);
@ -270,5 +237,6 @@ int S7ProtocolInit(struct ControlRecipe *p_recipe)
memset(p_recipe->read_item, 0, sizeof(S7ReadItem)); memset(p_recipe->read_item, 0, sizeof(S7ReadItem));
p_recipe->ControlProtocolFormatCmd = S7ProtocolFormatCmd; p_recipe->ControlProtocolFormatCmd = S7ProtocolFormatCmd;
p_recipe->done = &s7_protocol_done; p_recipe->done = &s7_protocol_done;
return 0; return 0;
} }

View File

@ -0,0 +1,88 @@
{
"device_id": 1,
"device_name": "demo",
"communication_type": 0,
"socket_config": {
"plc_ip": "192.168.250.2",
"local_ip": "192.168.250.233",
"gateway": "192.168.250.252",
"netmask": "255.255.255.0",
"port": 102
},
"protocol_type": 1,
"read_period": 100,
"read_item_list": [
{
"value_name": "浮点数",
"value_type": 9,
"area": "DB",
"wordlen": "Real",
"db_number": 18,
"start": 18,
"amount": 1
},
{
"value_name": "整型1",
"value_type": 3,
"area": "M",
"wordlen": "WORD",
"db_number": 1,
"start": 100,
"amount": 1
},
{
"value_name": "整型2",
"value_type": 3,
"area": "M",
"wordlen": "WORD",
"db_number": 1,
"start": 102,
"amount": 1
},
{
"value_name": "布尔1",
"value_type": 1,
"area": "Q",
"wordlen": "Bit",
"db_number": 1,
"start": 1,
"amount": 1
},
{
"value_name": "布尔2",
"value_type": 1,
"area": "Q",
"wordlen": "Bit",
"db_number": 1,
"start": 2,
"amount": 1
},
{
"value_name": "布尔3",
"value_type": 1,
"area": "Q",
"wordlen": "Bit",
"db_number": 1,
"start": 3,
"amount": 1
},
{
"value_name": "布尔4",
"value_type": 1,
"area": "Q",
"wordlen": "Bit",
"db_number": 1,
"start": 4,
"amount": 1
},
{
"value_name": "整型3",
"value_type": 3,
"area": "DB",
"wordlen": "Word",
"db_number": 18,
"start": 2,
"amount": 1
}
]
}

View File

@ -1,11 +1,11 @@
export CROSS_COMPILE ?=/usr/bin/arm-none-eabi- export CROSS_COMPILE ?=/usr/bin/arm-none-eabi-
export CFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -fgnu89-inline -Wa,-mimplicit-it=thumb -Werror export CFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -fgnu89-inline -Wa,-mimplicit-it=thumb -Werror
export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2 export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2
export LFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi_hc32f4a0.map,-cref,-u,Reset_Handler -T $(BSP_ROOT)/link.lds export LFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi_hc32f4a0.map,-cref,-u,Reset_Handler -T $(BSP_ROOT)/link.lds
export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -Werror export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -Werror
export APPLFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi_app.map,-cref,-u, -T $(BSP_ROOT)/link_userspace.lds export APPLFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi_app.map,-cref,-u, -T $(BSP_ROOT)/link_userspace.lds
export DEFINES := -DHAVE_CCONFIG_H -DHC32F4A0 -DUSE_DDL_DRIVER -DHAVE_SIGINFO export DEFINES := -DHAVE_CCONFIG_H -DHC32F4A0 -DUSE_DDL_DRIVER -DHAVE_SIGINFO