Details
-
Type: Change
-
Status: Closed
-
Priority: Minor
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: V3.8.5.0
-
Component/s: None
-
Labels:None
-
Account:SPC EthernetIp Core (SPCETHERNET)
Description
Description:
In an OEM device, three assemblies (110, 111, 112) are defined which all address the IO-Link port data (32 bytes max), but with different I/O data lengths. Each of the assemblies is assigned to another connection. Depending on the configured connection, only the configured number of bytes shall be used. The device supports variable process data lengths which can be set at runtime e.g. via web interface or during connection establishment (config assembly). When the IO size is reduced, the exceeding/unused IO bytes shall be set to zero.
The assemblies 110, 111 und 112 are all linked to the same DPM area, as they all can transfer e.g. IO-Link port 1-8 data. The IO-Link data is linked as assembly members with the assembly instance.
Example:
- Assembly 110 consists of 4 members each pointing to the start of IOL1, IOL2, IOL3 and IOL4.
All members have a length of 32 bytes.
- Assembly 111 consists of 4 members each pointing to the start of IOL1, IOL2, IOL3 and IOL4.
All members have a length of 4 bytes.
- Assembly 112 consists of 4 members each pointing to the start of IOL1, IOL2, IOL3 and IOL4.
All members have different lengths (0-32 bytes). They are configurable through the webserver or config assembly
The above assembly instances will not be used simultaneously in multiple parallel connections.
This means that only one assembly instance is actively involved in a connection at any one time.
Current EtherNet/IP Core behavior:
The EtherNet/IP Core operates cyclically and updates the assembly instances and their members. The stack provides a flag HOLD_LAST_STATE:
- EtherNet/IP stack behavior for HOLD_LAST_STATE == 0 (not set):
- If an assembly is not involved in an active cyclic connection, all members are set to zero (cyclically, not only once).
- EtherNet/IP stack behavior for HOLD_LAST_STATE == 1 (set):
- If an assembly is not involved in an active cyclic connection, all members remain unchanged.
Consequence:
- If for one of the three assemblies 110, 111, or 112 the flag HOLD_LAST_STATE is not set, the IOL data is always set to zero since the members of that assembly will be written to 0 cyclically. This also influences the other assemblies member data as all point to the same IOLX start address.
- If for all assembly instances the flag is set, the IOL data remains intact, but this has the side affect that IOL bytes that are not being written by the currently active assembly instance remain !=0 when there was a connection running before that used more IOL data.
Example:- Connection with Assembly 110 is established and writes 32 bytes (!=0) for each IOL port.
- Connection with Assembly 110 is closed. All written bytes (4x32bytes) remain untouched (!=0)
- Another connection to assembly 111 is established which writes only the first 4 bytes of each IOL port.
Therefore, bytes 5 to 32 of this new connection are not written, but they still show values !=0.
The present issue requests a solution that
- does not set the IOL data of the active connection to zero
- sets excess bytes of an earlier connection to zero
Acceptance criteria:
- The flag HOLD_LAST_STATE of one assembly does not have side-effects on another assembly, assuming that the assembly instances are not active at the same time.
- If the connection changes or the process data size is reduced, the excess bytes are set to zero (see also PSNPXEISV3-101)
Attachments
Issue Links
- mentioned in
-
Page Loading...