Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redundant network interface support #98

Open
jamwaffles opened this issue Aug 14, 2023 · 4 comments
Open

Redundant network interface support #98

jamwaffles opened this issue Aug 14, 2023 · 4 comments
Labels
feature New feature or request

Comments

@jamwaffles
Copy link
Collaborator

EtherCAT supports redundant interfaces where a second NIC is attached to the other end of the network. EtherCrab should support this feature.

@jamwaffles jamwaffles added the feature New feature or request label Aug 14, 2023
@keenanjohnson
Copy link

I agree! I think it is probably non-trivial to implement, but this would be a killer feature that would attract many to this project I think.

There is a good description of this feature from a closed-source implementation here: https://www.acontis.com/en/ethercat-master-options-feature-packs.html

@keenanjohnson
Copy link

Cable Redundancy
Cable redundancy is designed to compensate for the failure of a communication cable section in the EtherCAT system. A ring topology, which normally is operated in both directions, is therefore used. Both branches can nevertheless still be reached if the ring is interrupted at some point.

image

Description
A second network port is used for ring closure at the EtherCAT master control system. Both cyclic and acyclic frames are sent simultaneously through both ports, and are transported through the system.

In the absence of any fault, all the EtherCAT slaves are reached in the forward direction (so called processing direction) from the primary port. This means that they are processed, since the EtherCAT Slave Controller (ESC) is only passed through in the forward sense.
When there is no fault, all the EtherCAT slaves are reached from the secondary port in the reverse direction - the data in the "redundancy" frame is therefore not changed.

In each case, the EtherCAT frames arrive, possibly modified, at the other port, and are checked by the EtherCAT master. In case of a cable break, both frames are processed - each one on the respective side of the failure. Therefore both frames contain a part of the input data. The master has to combine the data of both frames, and gets one frame with all the input data. The working counters from both frames are added to check for its validity. It is unimportant whether an EtherCAT slave is reached from the primary or redundancy port. The EtherCAT master has to consider that a frame on one side is lost and the other frame returns. To find the matching frame it is useful to mark the frames with an identification or use appropriate mechanism.

The cable redundancy is single-error tolerant, i.e. communication with the slaves can continue if the cable is interrupted in one place. When the communication is restored the original communication direction is restored. If the communication is interrupted in more than one place, all connections have to be restored before another fault may occur.

Functionality
In case of cable break all types of EtherCAT communications (process data and mailbox protocols) are be supported without any restrictions.
Handling of the following use cases:

Normal operation
Stay operational in case of cable break between two slaves
Stay operational in case of cable break between primary port and first slave
Stay operational in case of cable break between secondary port and last slave
Stay operational in case of cable fixed
Start/Stop (State change) in case of cable break
Adjustment of Auto Increment address in case of cable break
Frame loss in case of cable break (partner frame was not received)

@keenanjohnson
Copy link

Are there useful bite sized chunks that community contributors like me could start biting off to make this happen?

@jamwaffles
Copy link
Collaborator Author

Off the top of my head, not really I'm afraid. I haven't thought about what's involved for EtherCrab to support this, but I can imagine some decently sized refactors being required that can't be broken down that easily.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants