2014-02-12 5 views
1

Я новичок в node.js, я пытаюсь определить прошедшее время между событием включения и выключения коммутатора (используя BeagleBone Black), скрипт работает, несколько с .getTime(), однако из того, что я читал, это не особенно точно. Поэтому я сделал некоторые исследования и попытался использовать console.time, однако из того, что я прочитал, нет способа экспортировать значение времени в переменную в этом конкретном приложении.Точный учет времени в node.js

Я пытаюсь написать сценарий, который открывает время открытия и закрытия клапанов для двигателя, поэтому точность имеет первостепенное значение. Единственный вход - геркон, который запускается проходящим магнитом, прикрепленным к вращающемуся маховику.

Более кратко, есть ли способ своевременно включать/выключать события в node.js?

var b = require('bonescript'); 

b.pinMode('P8_19', b.INPUT); 
b.pinMode('P8_17', b.OUTPUT); 
b.pinMode('USR3', b.OUTPUT); 

b.attachInterrupt('P8_19', true, b.CHANGE, interruptCallback); 

var cycle = 0; 
//var t = 0; 
var start, end; 


function interruptCallback() { 
    if (b.digitalRead('P8_19') == 1) 
    { 
    console.log('Magnetic field present!'); 
    cycle=cycle+1; 
    console.log ('cycle: ' + cycle); 
    } 

    else 
    { 
    //console.time('t'); 
    start = (new Date()).getTime(); 
    } 
    //console.timeEnd('t'); 
    //console.log(t); 
    end = (new Date()).getTime(); 
    console.log('elapsed time: ' + (end - start)); 
} 

Это полный код, который я использую в настоящее время. Примечание. Я также показал, как я пытался использовать console.time.

Благодарим за помощь!

+0

какой точностью вы хотели бы достичь? – vkurchatkin

ответ

3

Для максимально точного измерения времени используйте process.hrtime(). Из документации:

Возвращает текущий высокого разрешения в реальном времени в [секундах, наносекунд] кортеж массива. Это относительно произвольного времени в прошлом . Это не связано со временем суток и поэтому не подвергает дрейфу часов. Основное использование - измерение производительности между интервалами .

Функция возвращает массив из двух элементов, содержащий количество секунд и количество наносекунд. Передача одного объекта времени в другой возвращает разницу между двумя объектами.

В вашем случае:

function interruptCallback() { 
    if (b.digitalRead('P8_19') == 1) { 
    cycle = cycle + 1; 
    } else { 
    start = process.hrtime(); 
    } 
    end = process.hrtime(start); 
    console.log('elapsed time: ' end[0] + ' seconds and ' + end[1] + 'nanoseonds.'); 
}; 
+0

Работает безупречно! Спасибо! – NAPALM

 Смежные вопросы

  • Нет связанных вопросов^_^