2016-06-26 4 views
2

Ich benutze Meteor mit 'socketcan' npm-Paket auf einem RaspberryPi. Um mein CAN-Netzwerk zu definieren, verwende ich eine Kajak-Datei 'canDefinition.kcd'. Dies ist, was meine Startup-JavaScript-Datei in den Server-Ordnern wie folgt aussieht:Socketcan registrieren Listener heißt nicht

// 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); 
 
});

ich die Anweisungen von sebi2k1/node-can gefolgt.

Das Problem ist jetzt, dass der Listener 'onChange' nicht aufgerufen wird, wenn die ausgewählte CAN-Nachricht ankommt.

Was ist schon arbeiten/was ich bereits geprüft:

  • eine bestimmte CAN-Nachricht empfangen, indem die ID-Filterung (siehe Code unten)
  • Aufrufen/Lesen der canDefiniton.kcd Datenbank

// 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);

Jemand hilft? Vielen Dank!

Antwort

0

Aktueller Stand:

Ich erhalte einige CAN-Nachrichten, aber nicht alle. Es sieht so aus, als wäre meine kcd-Datei in einem etwas falschen Format. Jetzt habe ich es funktioniert, aber nur teilweise.

<?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> 

Wenn ich nur eine gemuxte Nachricht, z. ID 0x128 Signal bereit als nichts passiert. Ich bekomme keinen Rückruf.

Wenn ich nur eine "normale" Nachricht, z. ID 0x219 Signal hw_start es funktioniert gut und ich erhalte den richtigen Wert.

Wenn ich beide zusammen mit zwei verschiedenen onchangeListener aufrufen, funktioniert es nicht! Ich habe bereits überprüft, ob ich falsche Nachrichten gesendet habe, aber ich habe sie alle richtig gelesen. Nach dem doc ist sebi2k1/node-can in der Lage, gemuxte Nachrichten zu verarbeiten!

Vielleicht kann dies jemandem helfen, der keine Muxed-Nachrichten verwendet. Ich probiere weiter die Muxed an.