2015-11-10 97 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);