Encontrei uma solução interessante que utiliza CANopen. Os dispositivos são montados em um trilho DIN, e o mestre é conectado a vários escravos por meio de conectores TBUS. Neste caso, eles devem ser organizados da seguinte forma: |M| - |S1| - |S2| - ... - |Sn|.
Ao mesmo tempo, de alguma forma, a unidade principal consegue determinar a ordem exata da conexão física dos dispositivos escravos ao barramento e exibi-la na interface do usuário. Cada dispositivo recebe automaticamente um ID lógico (diferente do ID do nó), dependendo da ordem física, que é então usado na comunicação com o servidor. Isso proporciona um efeito virtualmente "plug & play", permitindo que um dispositivo seja substituído ou adicionado sem a necessidade de configuração manual adicional.
Entendo como é possível atribuir IDs de nó automaticamente usando LSS. Mas gostaria de saber como determinar a ordem física de conexão dos dispositivos ao barramento. Alguém já passou por algo semelhante e pode me dizer como implementar isso?
Não é possível somente com o barramento CAN.
Já projetei sistemas como este e, no meu caso, resolvi o problema com sinais extras fora do barramento CAN. Basicamente, um sinal "encadeado" em todos os nós, com um transistor em série por nó. Cada nó não se reportava ao mestre via CAN antes de receber um OK no sinal externo do nó anterior, fazendo com que eles inicializassem em sequência e permitindo que o mestre sempre soubesse a ordem física.