Socketcan + Express.js + Node.js获取/发送Can-Bus消息

时间:2015-11-10 16:25:35

标签: node.js express can-bus socketcan

我用

安装了socketcan
    npm install socketcan

link我的Raspberry Pi 2 B没有任何错误。我可以在终端上使用带有candump / cansend的Pican适配器。所以这很好。 但我不明白如何使用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.jsindex.htmlbin/www文件? 我尝试的东西没有用。 如何设置波特率/比特率? 或者是否有替代方案,我可以使用它来记录/发送一些消息?

我刚开始使用JavaScript / HTML5 / CSS。

3 个答案:

答案 0 :(得分:3)

您可以使用ip命令设置can0并设置比特率。

从命令行

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

答案 1 :(得分:2)

一些事情: 这些命令希望存在于.js文件中

您必须使用ip设置波特率,例如: ip link 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

另外,当我使用require(' socketcan')测试socketcan时,它会一直返回undefined,这显然没问题。

祝你好运的人们

答案 2 :(得分:1)

您还可以使用child_process从Node.js设置CAN接口:

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);