CODESYS CAN-Kommuniktaion herstellen

FelMa

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

hätte ein paar Fragen bezüglich einer CAN-Kommunikation zwischen SPS und einem Funkteil (das erhält die Infos per CANBus und schickt dann per Funk wieder etwas weiter).
Zum Senden benutze ich den Funktionsbaustein CIA405.SDO_WRITE aus der CAA CiA405-Bibliothek.

1. Für was sind die Eingänge INDEX und SUBINDEX gedacht?
2. Ich habe noch Verständnisprobleme mit dem DATA-Eingang: Das Ding ist ja ein POINTER TO BYTE und zeigt somit auf die Adresse des zugewiesenen BYTES. Wenn ich diesen jetzt auf ein ARRAY OF BYTE zeigen lasse, wie funktioniert es, dass er alle Daten überträgt und nicht nur das erste Byte des Arrays?

Es scheint auch, dass sich der CAN-Teilnehmer nicht richtig verbindet, habe zumindest im Gerätebaum immer dieses rote Warndreieck vor dem Teilnehmer. Was kann das für Gründe haben?

Hier noch ein paar Screenshots:
Gerätebaum.pngCAN-Teilnehmer.pngCANOpenManager.png

Kann mir irgendwer weiterhelfen? Braucht ihr mehr Infos oder Screenshots oder Ähnliches?

Viele Grüße,
Matthias
 
CAN im Codesys

Hallo Matthias,

mit Index und Subindex sprichst du die SDOs, also die Parameter, die dich interessieren, an. Sind quasi die Adresse der Parameter. Welchen Index und Subindex du verwenden musst für welchen Parameter steht in der Doku. Hier steht auch drin wie groß der Parameter ist, also die Anzahl der Bytes. Und auf die Adresse, wo deine DATA liegt, läßt du einen Pointer zeigen. Der SDO Baustein nimmt sich dann ab dieser Adresse genau die Anzahl Bytes, die du im zuvor parametriert hast. Hier mal ein Beispiel:

Geschwindigkeit: WORD := 1000;
Data: ARRAY [1..4] OF BYTE;
ptData: POINTER TO ARRAY [1..4] OF BYTE;

ptData := ADR(Geschwindigkeit);
Data[1] := ptData^[1];
Data[2] := ptData^[2];
Data[3] := 16#00;
Data[4] := 16#00;
SDO_WRITE4(DEVICE:=Device , INDEX:=16#6081 , SUBINDEX:=0 ,
ENABLE:=TRUE , DATA:=Data , DATALENGTH:=4 );


Und wenn du ein rotes Dreieck im Gerätebaum hast, stimmt sowieso irgendwas nicht. Arbeitest du mit SoMachine? Log dich mal auf der Steuerung ein, doppelklicke dann auf den CAN-Teilnehmer mit dem roten Dreieck und schau dann unter INFO nach, da steht meist was genaueres.

Gruß SPS-Fuzzi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank!
War schonmal ne große Hilfe fürs Verständnis!
Im Moment sagt der CAN-Teilnehmer im Status "polling for Object 0x1000...".
Das heißt wohl, dass er nach der korrekten NodeID des Teilnehmers sucht. Laut Doku sollte diese aber übereinstimmen.
Da geh ich jetzt wohl mal auf Fehlersuche und versuche mein Funkteil evtl neu zu parametrieren...
 
Aber eine Frage hätte ich dann doch noch zu den SDO´s:

Wenn ich per SDO einfach nur ein paar Daten schicken will, dafür aber keinen passenden Parameter (also auch keinen Index/Subindex) muss ich mir dann einen neuen Parameter mit passenden Index/Subindex anlegen, oder kann ich die einfach auf "0" stehen lassen?

Vielen Dank schonmal!

Viele Grüße,
Matthias
 
Einfach nur Daten schicken: Das sind PDO's!

Schau mal, ob Du eine Reiterkarte für die PDO hast.
 
Zurück
Oben