2

我安装了socketcan

    npm install socketcan

在我的 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。

4

3 回答 3

4

您可以使用 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

于 2016-10-13T15:21:27.163 回答
2

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

您必须使用 ip 设置波特率,例如: ip link set can0 type can bitrate 1000000 triple-sampling on

我发现此站点对使界面正常工作很有帮助,您需要编辑 /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,这显然没问题。

祝大家好运

于 2015-12-17T20:29:40.027 回答
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);
于 2017-02-09T12:22:44.780 回答