CAN-Interface
Fast alle CANopen-Master von Beckhoff bieten das sogenannte CAN-Interface als Schnittstelle an. Das CAN-Interface ist eine Layer-2-Implementierung der CAN-Schnittstelle. Das ermöglicht beliebige CAN-Telegramme zu empfangen wie auch zu senden. Hierbei spielt das verwendete überlagerte Protokoll keine Rolle, d.h. es können damit alle CAN-basierenden Protokolle verwendet werden, wobei der Protokoll-Teil dann in der SPS realisiert werden muss.
Eine detaillierte Beschreibung zum CAN-Interface finde Sie unter:
https://download.beckhoff.com/download/document/io/infrastructure-components/can-interface_en.pdf
Das CAN-Interface erlaubt beliebige CAN-Daten zu verschicken. Es kann zwischen 11 Bit Identifier (CAN 2.0A) und dem 29 Bit Identifier (CAN 2.0B) ausgewählt werden.
Message-Struktur mit 29-Bit Unterstützung
- Length (0..8)
- CobId
- Bit 0-28: 11 Bit-Identifier / 29 Bit-Identifier
- Bit 30: RTR
- Bit 31: 0: normal Message (11 Bit Identifier), 1: extended Message (29 Bit-Identifier)
- Data[8]
Daten senden: Tragen Sie in "NoOfTxMessabes die Anzahl der Daten ein, die Sie aus dem Tx Buffer senden wollen. Ist der Buffer 10 Einträge groß können Sie maximal 10 Telegramme hintereinander verschicken. Mit "Length" wir die Anzahl der Datenbytes des PDOs definiert (maximal 8 Byte). Füllen Sie die Daten und tragen die den Identifire des CAN-Message in "codId" ein. Nun inkrementieren Sie den Wert TxCounter.
Beispielcode: Senden von Messages von der SPS
if Outputs.TxCounter = Inputs.TxCounter then
for i=0 to NumberOfMessagesToSend do
Outputs.TxMessage[i] = MessageToSend[i];
End_for
Outputs.NoOfTxMessages = NumberOfMessagesToSend;
Outputs.TxCounter := Outputs.TxCounter + 1;
end_if
Beispielcode: Empfangen von Messages von der SPS
if Outputs.RxCounter <> Inputs.RxCounter then
for i := 0 to (Inputs.NoOfRxMessages-1) do
MessageReceived[i] := Inputs.RxMessage [i];
End_for
Outputs.RxCounter := Outputs.RxCounter+1;
end_if