2015-11-10 93 views
2

Socketcan + Express.js + Node.js的接收/发送

npm install socketcan 

link安装socketcan不会对我的树莓派2 B.任何错误,我可以使用Pican适配器candump/cansend CAN-BUS消息在终端上。所以这很好。 但我不明白如何使用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。

回答

2

有几件事情: 这些命令希望生活在一个.js文件

您必须设置与IP波特率,是这样的: IP链路集CAN0类型可以

比特率百万三重采样

我发现这个网站非常有帮助,以获得接口工作,你需要编辑/ etc /网络/接口文件,把它坚持 http://www.embeddedhobbyist.com/2015/09/linux-can-development/

我来到这个页面首先被证明是非常棘手,我做了这个accou nt只是为了回到这里并解释: TankController消息不在Motor总线中,请检查samples/can_definition_sample.kcd以了解我的意思。 https://github.com/sebi2k1/node-can

另外,当我用require('socketcan')测试socketcan时,它会一直返回undefined,这显然是好的。

祝你好运伙计

+0

请把重要的信息放在你的答案。链接可能有一天会过时。 – jogo

+0

我想我做出了正确的决定,关于链接和包含什么。 我直接回答了直接提问。我相信AnnaBanana和我一样从同一个教程开始工作,然后我指给她帮助我完成它的地方。盗取嵌入式游戏机内容 –

+0

的内容是不公平的。只看到了answear。我得到它运行。不完全是我想要的,但它现在起作用。一个问题是我不知道我需要socket.io,另一个问题是Node和socketcan的版本不兼容。我会在考试结束后的几周内发布我的答案。这么长时间有乐趣,并感谢您的帮助。 – AnnaBanana

3

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

命令行:

ip link set can0 type can bitrate 100000 up 

为了让设置坚持,你可以在/ etc /网络/接口文件配置界面。

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设置可以从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);