Socketcan+ Express.js +Node.js получать / отправлять сообщения Can-Bus

Я установил сокет с

    npm install socketcan

Ссылка без ошибок на моем Raspberry Pi 2 B. Я могу использовать адаптер Pican с Candump/ Cansend на терминале. Так что это прекрасно работает. Но я не понимаю, как использовать Socketcan. Я хочу использовать can0.

Это помощь от Socketcan:

    var can = require('socketcan');

    var channel = can.createRawChannel("vcan0", true);

   // Log any message 
  channel.addListener("onMessage", function(msg) { console.log(msg); } );

   // Reply any message 
   channel.addListener("onMessage", channel.send, channel);

   channel.start();

Работа с сообщением и сигналами:

var can = require('socketcan');
var fs = require('fs');

// Parse database 
var network =  can.parseNetworkDescription("samples/can_definition_sample.kcd");
var channel = can.createRawChannel("vcan0");
var db      = new can.DatabaseService(channel, network.buses["Motor"]);

channel.start();

// Register a listener to get any value changes 
db.messages["CruiseControlStatus"].signals["SpeedKm"].onChange(function(s) {
console.log("SpeedKm " + s.value);
});

// Update tank temperature           
db.messages["TankController"].signals["TankTemperature"].update(80);

// Trigger sending this message 
db.send("TankController");

Но в каком файле я помещаю эти команды, app.js, index.html или же bin/www файл? Вещи, которые я пробовал, не работали. И как я могу установить скорость передачи / битрейт? Или есть альтернатива, которую я мог бы использовать для входа / отправки некоторых сообщений?

Я только начал с JavaScript / HTML5 / CSS.

3 ответа

Вы можете настроить can0 и установить скорость передачи данных с помощью команды ip.

из командной строки:

ip link set can0 type can bitrate 100000 up

Чтобы сохранить настройки, вы можете настроить свой интерфейс в файле /etc/network/interfaces.

allow-hotplug can0
iface can0 inet manual
    pre-up /sbin/ip link set $IFACE type can txqlen 512 bitrate 100000 sample-point 0.75
    up /sbin/ifconfig $IFACE up
    down /sbin/ifconfig $IFACE down

Полная документация находится здесь: http://elinux.org/Bringing_CAN_interface_up

Несколько вещей: эти команды хотят жить в файле.js

Вы должны установить скорость передачи с помощью ip, что-то вроде: ip link set set can0 type может битрейт 1000000 с тройной выборкой включен

Я нашел этот сайт очень полезным, чтобы заставить интерфейс работать, вам нужно отредактировать файл / etc / networks / interfaces, чтобы он сохранялся http://www.embeddedhobbyist.com/2015/09/linux-can-development/

То, что сначала привело меня на эту страницу, оказалось настолько сложным, что я создал эту учетную запись, чтобы просто вернуться сюда и объяснить: сообщение TankController отсутствует в шине Motor, изучите samples / can_definition_sample.kcd, чтобы понять, что я имею в виду. https://github.com/sebi2k1/node-can

Кроме того, когда я тестировал socketcan с помощью require('socketcan'), он продолжает возвращать undefined, что, по-видимому, нормально.

Удачи ребята

Вы также можете использовать child_process для настройки интерфейса CAN из Node.js:

const exec = require('child_process').execSync;

// ...

function initializeCAN(device, bitrate) {
    let result;

    // Turn off CAN bus if it is alive
    exec('sudo ip link set ' + device + ' down type can');

    // Turn on CAN bus
    result = exec('sudo ip link set ' + device + ' up type can bitrate ' + bitrate);
    if (result.toString()) {
        throw Error('CAN bus can\'t be initialized');
    }
}

// ...

initializeCAN('can0', 12500);
Другие вопросы по тегам