2015-11-10 3 views
2

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

npm install socketcan 

link без каких-либо ошибок на моем 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.

ответ

2

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

Вы должны установить скорость передачи данных с IP, что-то вроде: Типа IP набора ссылки can0 может битрейт 1000000 тройной выборки на

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

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

Кроме того, когда я тестировал socketcan с требованием («socketcan»), он продолжает возвращаться не определенно, что, очевидно, хорошо.

Удачи люди

+0

Пожалуйста, поставьте необходимую информацию в своем ответе. Ссылка может быть устаревшей когда-нибудь. – jogo

+0

Думаю, я принял правильное решение относительно того, что нужно связывать и что включать. Я прямо ответил на прямые вопросы.Я считаю, что Анна Банана работала из того же учебника, что и я, поэтому я указал ей на места, которые помогли мне пройти через это. Было бы несправедливо украсть контент у embeddedhobbyist –

+0

Просто увидел ответ. Я запустил его. Не совсем так, как я хотел, но это работает сейчас. Одна из проблем заключалась в том, что я не знал, что мне нужен socket.io, а другой, что версия Node и socketcan несовместима друг с другом. Я отправлю свой ответ в следующие недели после экзаменов. так что долго получайте удовольствие и спасибо за помощь. – AnnaBanana

3

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

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

ip link set can0 type can bitrate 100000 up 

Для того, чтобы настройки сохраняются вы можете настроить интерфейс в сети и т.д./файл// интерфейсы.

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

1

Вы также можете использовать 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);