loader
Foto

CAN kommunikáció implementálása két ECU között

Elkészült korábban a fizikai tesztkörnyezet, illetve felkészítettük az Arduino IDE környezetet is arra, hogy a CAN protokoll gyakorlati szinten is megismerhető legyen. Most két CAN-ECU kommunikációját valósítjuk meg Arduino Uno és CAN Shield segítségével.

A beágyazott rendszereknél a CAN protokoll implementálására több lehetőség is van, a korábbi cikkünkben az MCP 2515 céláramkör mellett tettük le a voksot.
Az "Arduino MCP2515 CAN interface library" github oldalán elérhető az a "zip" file, amelynek a letöltésével és telepítésével az Arduino IDE fejlesztőkörnyezet "kibővül", lehetőségünk nyílik arra, hogy írjunk/olvassunk a CAN buszon (1. ábra).

kep
1. ábra   Példák a telepítés után
 

Ahhoz, hogy az Arduino Uno elérhető legyen a fejlesztőkörnyezet számára, be kell állítani a panel típusát, illetve meg kell adni a portszámot is.

kep
2. ábra   Az "Arduino Uno" panel kiválasztása
 

A fejlesztés során a "COM4" port került kiválasztásra.

kep
3. ábra   A port kiválasztása
 

Az adott Arduino Uno felprogramozásakor a panel tápfeszültségellátását meg kell szüntetni, hiszen a programozás során az Arduino panel az USB kábelen megkapja a működéséhez szükséges feszültséget.
A CAN forgalom monitorozásra kerül, az eredmények az Arduino IDE keretkörnyezetben lévő Serial Monitoron kerülnek megjelenítésre. A korábban bemutatott fizikai környezetet a 4. ábra szerint kell módosítani.
Azaz, a programozáskor az adott panel nem kap tápfeszültséget, a négy CAN-ECU helyett csak kettő üzemel, és a két működő CAN-ECU (Arduino Uno és CAN Shield) közül az egyik az USB kábelen kap tápfeszültséget, hiszen ezen a panelen nézzük a forgalmat az USB-n keresztül.

kep
4. ábra   Fizikai környezet a két CAN-ECU számára
 

A következő két "C" kód segítségével kerül megvalósításra a CAN kommunikáció. Találni fogunk a két programban makrókat, függvényeket, amelyeket nem mi írtunk, ezek az "mcp2515.h" file-ban találhatók meg.
Ezeknek a makróknak, illetve függvényeknek a leírása az "mcp2515" céláramkör github oldalán megtalálhatók az "Initialization" menüpont alatt.

Például, ahhoz, hogy adatokat tudjunk küldeni a CAN buszon, szükséges ismerni a CAN frame felépítését, és az "mcp 2515" függvényeit. A CAN frame elkészítéséhez a github-on megtalálható az a struktúra (can_frame), amelynek alkalmazásával a frame könnyen összeállítható.

 

Adatok küldése
 

#include <SPI.h>
#include <mcp2515.h>
#define pin 10

int rndNumber;
struct can_frame WE;

MCP2515 mcp2515(pin);

void setup()
{
  SPI.begin();
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}

void loop()
{
  rndNumber = random(1, 100);
  WE.can_id = 0x12;
  WE.can_dlc = 8;
  WE.data[0] = rndNumber;
  WE.data[1] = 0x12;
  WE.data[2] = 0x34;
  WE.data[3] = 0x56;
  WE.data[4] = 0x78;
  WE.data[5] = 0x65;
  WE.data[6] = 0x43;
  WE.data[7] = 0x21;
  mcp2515.sendMessage(&WE);
  delay(2000);
}

Ezt a kódot fordítsuk le és töltsük le az egyik Arduino Uno panelre.

Fontos, hogy a programozás megkezdése előtt a tápkábelt húzzuk ki a panelből, hiszen a programozás az USB porton keresztük történik, amelyen keresztül a tápellátás is biztosított.

 

Adatok fogadása
 

#include <SPI.h>
#include <mcp2515.h>
#define pin 10

int rcvNumber;
struct can_frame WE;

MCP2515 mcp2515(pin);

void setup()
{
  Serial.begin(9600);
  Serial.println("CAN BUS - WebElektronika");
  SPI.begin();
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}

void loop()
{
  if(mcp2515.readMessage(&WE) == MCP2515::ERROR_OK)
  {
    rcvNumber = WE.data[0];
    Serial.print("Az átküldött véletlenszám: ");
    Serial.println(rcvNumber);
    Serial.print(WE.data[1]);
    Serial.println("");
  }
}

 

A két Ardunio Uno felprogramozása után (programozás során a tápcsatlakozót vegyük le) indítsuk el az Arduino IDE keretkörnyezetében található "Soros monitor"-t, amely az "Eszközök/Soros monitor" alatt található meg (Ctr + Shift + M). A mérési eredmények az 5. ábrán láthatók.
Tehát az egyik Arduino Uno panel egy tápegységről/adapterről kapja a működéséhez szükséges tápfeszültséget, a másik Arduino Uno pedig USB kábelről, és erről az Arduino Uno-ról történik a CAN forgalom monitorozása is.

kep
5. ábra   Eredmények
 

A Soros Monitoron látható a forgalom.

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .

Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .