CAN Klemme EL6751 - CAN Interface

BauerJnr

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich bin neu hier und hätte gleich mal eine Frage.
Ich beschäftige mich zurzeit im Rahmen meiner Bachelorarbeit mit der Klemme EL6751 sowohl als Master als auch als Slave Ausführung.
Ich habe 2 CX1020 mit der EL6751-0010 (Slave) und eine CX2020 mit der EL6751 (Master) ausgestattet. Programmiert wird mit TwinCAT v2.11.
Die Kommunikation der 3 Teilnehmer über das CANOpen Node habe ich bereits hinbekommen. Für meine Untersuchungen benötige ich allerdings das CAN Interface.
Und hier tritt das Problem auf: Ich verstehe nicht so recht, wie ich Daten empfangen bzw. senden kann. Habe mir diesen Programm-Code von Beckhoff kopiert, aber bisher ohne Erfolg:
Senden:
Code:
[FONT=CourierNewPSMT][SIZE=1][FONT=CourierNewPSMT][SIZE=1]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
[/SIZE][/FONT][/SIZE][/FONT]
Empfangen:
Code:
[FONT=CourierNewPSMT][SIZE=1][FONT=CourierNewPSMT][SIZE=1]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
[/SIZE][/FONT][/SIZE][/FONT]

Meine Slaves senden dauerhaft Daten, also müsste ich diese Daten doch in: CAN Interface --> Eingänge --> RxQueue --> RxMessages --> RxMessages --> rxData empfangen können?

Ich hoffe, es ist einigermaßen verständlich was ich meine.
Hat vielleicht jemand schon über das CAN Interface kommuniziert und hat evtl. ein Beispielprogramm hierfür?

Gruß
 
Das CANInterface kannst du nur auf der Master-Klemme anwenden.
Vom Prinzip:
Es gibt ein Status bzw. ein Control-Struktur.
Wenn du Daten verschicken willst legst du die Daten in das EA-Interface zur EL6751 und sagst über die Control-Struktur dass dort Daten hinterlegt sind (als wie viele Telegramme du von n (konfigurierbaren) maximalen Telegrammen gefüllt sind).
In der Status-Struktur siehst du dann dass die Telegramme von der Klemme abgeholt wurden und somit verschickt wurden.

Gleiches Spiel auch beim lesen nur dass du mit dem Ctrl-Anteil sagen musst das du die Information abgeholt hast (und die Klemme die EA-Daten mit neuen Werten befüllen kann die CAN-seitig eingetroffen sind).

Ach ja: Die EA-Struktur ist inhaltlich unterschiedlich je nachdem ob du 11 oder 29 bit identifier benutzt. Soweit ich mich aus dem Gedächnis erinnere muss man bei der 11-Bit variante die Länge in den Daten in eine Variable im EA-Interface zusammen mit der Cob-ID schieben was nicht wirklich offensichtlich ist auf dem ersten Blick.

Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort.

Das CAN Interface will ich auch nur auf dem Master nutzen. Die beiden Slaves senden weiterhin die Daten wie vorher. Diese müsste ich doch mit dem CAN Interface auch empfangen können?! Die müssten dann doch unter: Box 2 --> Eingänge --> RxQueue --> RxMessages --> RxMessages --> rxData zu sehen sein?!
Die Struktur RxQueue habe ich mir im PLC Control erstellt und im System Manager dann halt verknüpft.

Konfiguration.jpg

Habe ich dabei einen Fehler gemacht? Oder etwas vergessen?
 
Versuche es bitte mal wenn du den Beispiel-Code für die Empfangsroutine anpasst:

Code:
[FONT=courier new][/FONT][SIZE=2][FONT=courier new]if Outputs.RxCounter <> Inputs.RxCounter then

for I := 0 to (Inputs.NoOfRxMessages-1) do

MessageReceived[i] := Inputs.RxMessage [i];

End_for

Outputs.RxCounter := [B]Inputs.RxCounter[/B];

end_if[/FONT][/SIZE]

Ich gehe davon aus, dass die entsprechenden Ausgänge an der Box 2 auch verlinkt sind.

MfG
 
Also ich habe jetzt herausgefunden was falsch war. Ich habe bei den beiden Slaves je das CANOpen Node benutzt und bei dem Master das CAN Interface. Das funktioniert wohl so aber nicht.
Stand jetzt: 2 x CX1020 und eine CX2020 und alle 3 Steuerungen haben je eine Masterklemme und verwenden das CAN Interface.
Meine Ausgänge werden auch gesetzt. Das kann man ja im System Manager sehen unter: TxQueue --> TxMessages --> TxMessages --> rxData --> rxData --> online.
Ich empfange aber immer noch keine Signale unter RxQueue --> RxMessages --> RxMessages --> rxData --> rxData --> online.
Wo kann das Problem liegen?
Die Steuerungen sind nur über den CAN-Bus miteinander verbunden. Die Baudraten sind gleich und die Master-Node-IDs unterschiedlich.
Muss ich sonst noch irgendwas machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin BauerJnr,

ich habe schon mal ein Beispielprojekt in Codesys gefunden. Es hat ja auch für Twincat funkioniert. Leider finde ich dieses Beispiel nicht mehr online. Könnte jemand vielleicht hierzu nochmals laden.

Ich weiß nicht, wie du deine Struktur mit RxQueue und TxQueue deklariert und verlinkt hast. Ich kann noch errinern, dass ich für beide Richtungen mit den Strukturen im Program verlinken musste. Nach dem die RxQueue(CanIn) ausgelesen wurde, muss der RxCounter (CanOut) hochgezählt werden.

VG Phuong Tran
 
Zurück
Oben