我用
安装了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.js
,index.html
或bin/www
文件?
我尝试的东西没有用。
如何设置波特率/比特率?
或者是否有替代方案,我可以使用它来记录/发送一些消息?
我刚开始使用JavaScript / HTML5 / CSS。
答案 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
答案 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);