2

我在 RaspberryPi 上使用 Meteor 和 'socketcan' npm 包。为了定义我的 CAN 网络,我使用了一个皮划艇文件“canDefinition.kcd”。这是我在服务器文件夹中的启动 javascript 文件的样子:

// This code is running OUTSIDE of Meteor.startup loop

"use strict";
var can = Meteor.npmRequire('socketcan');
var fs = Meteor.npmRequire('fs');

// Parse database
var network = can.parseNetworkDescription("/home/MyMeteorProject/public/canDefinition.kcd");
var channel = can.createRawChannel("can0");
var db      = new can.DatabaseService(channel, network.buses["Private"]);

channel.start();


db.messages["x192_speed"].signals["motor"].onChange(function(s) {
    var newValue = s.value[1] * 256 + s.value[0];
    console.log("onChange successful" + newValue);
});

我按照sebi2k1/node-can的说明进行操作。

现在的问题是,当所选的可以消息到达时,侦听器“ on Change”未调用。

什么已经在工作/我已经检查过:

  • 通过过滤 id 接收特定的 CAN 消息(见下面的代码)
  • 访问/读取 canDefiniton.kcd 数据库

// This code is running in Meteor.startup loop

var old_value = 0;
    //CAN bus test:
    var boundFunction = Meteor.bindEnvironment(function (msg) {
        if (msg.id == 0x192)
        {
            console.log(msg.data);
            var Value = msg.data[0];
            mCollection.update({Name: 'motor'}, {$set: {Value: Value}});


        }
        old_value = Value;
    });
    // Log any message
    channel.addListener("onMessage", boundFunction );

有人帮忙吗?谢谢!

4

1 回答 1

0

当前状态:

我收到一些 CAN 消息,但不是全部。看起来我的 kcd 文件格式有点错误。现在我让它工作了,但只是部分工作。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NetworkDefinition xmlns="http://kayak.2codeornot2code.org/1.0">
    <Document name="CANDatabase.dbc" date="Mon Jul 13 08:46:25 UTC 2016">Converted with CANBabel (https://github.com/julietkilo/CANBabel)</Document>
    <Node id="Vector__XXX" name="Vector__XXX"/>
    <Bus name="Machine">
        <Message id="0x219" name="x219_Diagnose_Interface" length="8">
            <Signal name="hw_start" offset="32"/>
            <Signal name="hw_Valid" offset="35"/>
            <Signal name="hw_Stickcheck" offset="36"/>
            <Signal name="hw_TT_On" offset="33"/>
        </Message>
        <Message id="0x128" name="x128_hw_Istwerte" length="8">
            <Multiplex length="4" name="x195_hw_Currentvalue_Mux" offset="0">
                <MuxGroup count="1">
                    <Signal name="Wire_Stick1" offset="6"/>
                    <Signal name="ready" offset="21"/>
                    <Signal length="16" name="Current" offset="48">
                        <Value slope="0.1" unit="A" max="6553.5"/>
                    </Signal>
                    <Signal name="E01" offset="17"/>
                    <Signal length="16" name="Tension" offset="32">
                        <Value slope="0.1" unit="V" max="6553.5"/>
                    </Signal>
                    <Signal name="E03" offset="19"/>
                    <Signal name="PU_ready" offset="8"/>
                    <Signal name="E04" offset="18"/>
                    <Signal name="Current_running" offset="5"/>
                    <Signal name="E25" offset="16"/>
                </MuxGroup>
                <MuxGroup count="4">
                    <Signal name="Wire_Stick4" offset="6"/>
                    <Signal name="PU_ready4" offset="8"/>
                    <Signal name="Current_running4" offset="5"/>
                    <Signal length="16" name="Current_Power" offset="32">
                        <Value unit="W" max="65535.0"/>
                    </Signal>
                </MuxGroup>
            </Multiplex>
        </Message>

如果我只调用一条混合消息,例如 id 0x128信号准备就绪,那么什么也不会发生。我没有回电。

如果我只调用“正常”消息,例如 id 0x219信号hw_start它工作正常,我收到正确的值。

如果我将两者与两个不同的 onchangeListener 一起调用,则它不起作用!我已经检查过,如果我发送了一些错误的信息,但我他们都是正确的。在文档之后,sebi2k1/node-can能够处理多路消息!

也许这可以帮助不使用混合消息的人。我继续尝试混合的。

于 2016-07-19T07:19:51.337 回答