CAN Telegramm versenden von B&R X20 auf Acopos

Thinkoka

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Ich brauche eure hilfe.

Ich will von meiner Steuerung X20 CP1584 über das CAN Modul X20 IF1072 ein Telegramm auf einen Acopos senden.
kann mir da jemand einen Tipp geben wie ich das machen muss?

CAN ID = 0x19e
DLC = 2
byte (0) = 0X04
byte (1) = 0x80

Habe da was probiert aber meine Steuerung schmiert ständig ab und geht in den Service Mode da, so sagt die Steuerung, eine Cycluszeit verletzung vorliegt.

CANbtreg_1.enable = 1;
CANbtreg_1.us_ident = 0x19e;
CANbtreg_1.treg0 = 0x10;
CANbtreg_1.treg1 = 0x80;
CANbtreg(&CANbtreg_1);



 
Welches AS verwendest du.
Dieser Code sollte eigentlich keine Zycluszeitverletzung mache. Das passiert irgend wo anders.

us_ident ist nicht die CAN ID. Sonder die ID welche du vom CAN Open bekommst.
Hier der Beispielcode in der Hilfe.
Code:
#include<bur/plc.h>#include <bur/plctypes.h>#include <can_lib.h>
_LOCAL CANopen_typ CANopen_01;_LOCAL CANbtreg_typ CANbtreg_01;_INIT void init(){
    CANopen_01.enable = 1;              /*enable the function CANopen*/
    CANopen_01.baud_rate = 25;          /*set baud_rate 250KBit/s*/
    CANopen_01.cob_anz = 5;             /*set maximum communication objects*/
    CANopen_01.device = (UDINT) &"SL0.IF4";     /*description of the interface*/
 CANopen_01.info = 0;                /* define CAN info */
  CANopen(&CANopen_01);               /*call CANopen*/
  CANbtreg_01.enable = 1;             /*enable the function CANbtreg*/
    CANbtreg_01.us_ident = CANopen_01.us_ident; /*set us_ident with the value from CANopen*/
    CANbtreg_01.treg0 = 0xFF;           /*set bit timing register 0*/
    CANbtreg_01.treg1 = 0xFF;           /*set bit timing register 1*/
    CANbtreg (&CANbtreg_01);            /*call CANbtreg*/}
 
CANopen_01.device = (UDINT) &"SL0.IF4"; /*description of the interface*/

was muss hier stehen? Die Adresse des Moduls auf der Steuerung?
z.B. (UDINT) & "SS1.IF1"
 
Unter pysical view sieht du die Schnittstellenbezichung (Position) SS1.IF1 schaut sinnvoll aus.

Wenn du die CAN IF Karte auch einfügst, hast du dann Datenpunkte auf welche zugreifen kannst. Sind die nötigen nicht vorhanden. Schreibst du mit CAN Write auf die Adressse.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich es so mache schmiert mir die Steuerung nicht mehr ab,aber ich habe am Acopos kein gültiges CAN signal.

CANopen_2.enable = 1;
CANopen_2.baud_rate = 50;
CANopen_2.cob_anz = 5;
CANopen_2.error_adr = 0;
CANopen_2.device = (UDINT) & "X20IF1072.SS1.IF1";
CANopen_2.info = 0;
CANopen(&CANopen_2);
CANbtreg_1.enable = 1;
CANbtreg_1.us_ident = CANopen_2.us_ident;
CANbtreg_1.treg0 = 0x04;
CANbtreg_1.treg1 = 0x00;
CANbtreg(&CANbtreg_1);


Muss ich noch irgend wo etwas einstellen?
Am Modul?
CANopen konfigurieren?
 
Wenn du das AC110 einfügst musst du hier auch die eingestellt Nodenumber in Pysical View einstellen.
Um auf den Canbus etwas zu senden würde eben das CANwr verwenden. CANbtreg benötigtst du für was ?
 
Stimmt ich habe das falsche genommen ich muss mit CANwrite arbeiten.
aber wie muss ich hier miene Daten für die byte setzen?
CANwrite_01.enable = 1;
CANwrite_01.us_ident = CANopen_2.us_ident;
CANwrite_01.can_id = 0x19e;
CANwrite_01.data_adr = (UDINT) & (data[1]) & (data[3]);
CANwrite_01.data_lng = 2;
CANwrite(&CANwrite_01);

geht das so mit data[1] & data[2] für das bxte0 und das byte 1?
 
Hallo nochmal

Ich habe noch einmal eine Frage bezüglich CANBUS, vielleicht kann mir jemand weiterhelfen.
Den angefügten Code habe ich aus der AS-Hilfe, ich habe in mit meinen Angaben ergänzt.
Jetzt muss ich byte (0) und byte(1) setzten, wie kann ich das machen?

Geht das so wie ich es gemacht habe?

{
CANopen_2.enable = 1;
CANopen_2.baud_rate = 50;
CANopen_2.cob_anz = 5;
CANopen_2.error_adr = 0;
CANopen_2.device = (UDINT) & "SS1.IF1";
CANopen_2.info = 0;
CANopen(&CANopen_2);
if (CANopen_2.status != 0)
error_var = 1;

data[0] = 0x00;
data[1] = 0x04;
data[2] = 0x10;
data[3] = 0x80;
}
{

CANwrite_01.enable = 1;
CANwrite_01.us_ident = CANopen_2.us_ident;
CANwrite_01.can_id = 0x19e;
CANwrite_01.data_lng = 2;
CANwrite(&CANwrite_01);

if (CANwrite_01.status != 0)
error_var = 2;
else
error_var = 3;

if (blStartWithVac)
{
CANwrite_01.data_adr = (UDINT) & (data[1]);
CANwrite_01.data_adr = (UDINT) & (data[3]);
}
}
 
Zurück
Oben