Socketcan寄存器侦听器不被调用

我在RaspberryPi上使用Meteor和'socketcan'npm包。 为了定义我的CANnetworking,我使用了一个皮艇文件'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的指示。

现在的问题是,当select的CAN消息到达时,监听器的onChange不被调用。

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

  • 通过过滤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 ); 

有人帮忙? 谢谢!

当前状态:

我收到一些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信号准备好没有任何反应。 我没有得到callback。

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

如果我和两个不同的onchangeListener一起调用它,它不工作! 我已经查过了,如果我发了一些错误的信息,但是我都是正确的。 在doc之后, sebi2k1 / node-can能够处理多路复用消息!

也许这可以帮助不使用混合消息的人。 我一直试图在混合的。

Interesting Posts