From a71345e3d56f12d08ce93c3baad889e2f13f5348 Mon Sep 17 00:00:00 2001 From: Antonluca Paruolo Date: Fri, 11 Jan 2019 16:58:29 +0100 Subject: [PATCH] If the first slave has DC enabled and enouth PDOs to needs more than [EC_MAXLRWDATA - EC_FIRSTDCDATAGRA] bytes in the process image, the first segmentsize will be zero instead and this cause the wrongly reading for the wkc from then incoming messages --- soem/ethercatconfig.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/soem/ethercatconfig.c b/soem/ethercatconfig.c index e2b93cd..57105ea 100644 --- a/soem/ethercatconfig.c +++ b/soem/ethercatconfig.c @@ -1171,7 +1171,7 @@ int ecx_config_map_group(ecx_contextt *context, void *pIOmap, uint8 group) oLogAddr = LogAddr; if ((segmentsize + diff) > (EC_MAXLRWDATA - EC_FIRSTDCDATAGRAM)) { - context->grouplist[group].IOsegment[currentsegment] = segmentsize; + context->grouplist[group].IOsegment[currentsegment] = segmentsize > 0 ? segmentsize:EC_FIRSTDCDATAGRAM; if (currentsegment < (EC_MAXIOSEGMENTS - 1)) { currentsegment++; @@ -1230,7 +1230,7 @@ int ecx_config_map_group(ecx_contextt *context, void *pIOmap, uint8 group) oLogAddr = LogAddr; if ((segmentsize + diff) > (EC_MAXLRWDATA - EC_FIRSTDCDATAGRAM)) { - context->grouplist[group].IOsegment[currentsegment] = segmentsize; + context->grouplist[group].IOsegment[currentsegment] = segmentsize > 0 ? segmentsize:EC_FIRSTDCDATAGRAM; if (currentsegment < (EC_MAXIOSEGMENTS - 1)) { currentsegment++; @@ -1363,7 +1363,7 @@ int ecx_config_overlap_map_group(ecx_contextt *context, void *pIOmap, uint8 grou if ((segmentsize + diff) > (EC_MAXLRWDATA - EC_FIRSTDCDATAGRAM)) { - context->grouplist[group].IOsegment[currentsegment] = segmentsize; + context->grouplist[group].IOsegment[currentsegment] = segmentsize > 0 ? segmentsize:EC_FIRSTDCDATAGRAM; if (currentsegment < (EC_MAXIOSEGMENTS - 1)) { currentsegment++;