Время несовместимо для передачи сообщения CAN - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь написать программу на C ++, которая выполняет некоторую обработку видео с использованием OpenCV, а затем использует информацию из видео для отправки сообщения на шину CAN с использованием PCAN-basic.Когда код для шины CAN выполняется сам по себе, синхронизация сообщений довольно хорошая, то есть система, с которой я разговариваю, не жалуется.Однако, когда вводится часть программы OpenCV, время цикла периодически увеличивается до неприемлемого значения, что вызывает проблемы.

Я использую chrono :: high_resolution_clock, чтобы сравнить время начала и время сейчас.Если это сравнение> 10 мс, тогда я отправляю сообщение CAN и перезагружаю часы.

Я попробовал следующее:

Обновлен OpenCV до последней версии (в надежде, что он будет работать быстрее /высвободить ресурсы)

Установить приоритет потока, в котором находится функция сообщения CAN, чтобы иметь более высокий приоритет.Установите 0, что, я полагаю, является наивысшим приоритетом.

Понизил сравнение, чтобы отправить сообщение на 8 мс, это было задумано как обходной путь, а не как исправление.

//Every 10ms send a CAN signal
chrono::duration<double, milli>xyTimeDifference = timeNow - xyTimer;
xyTimerCompare = xyTimeDifference.count();

if (xyTimerCompare > 10)
     {
        if (xyTimerCompare > 16)
        {
            cout << "xyTimerComapare went over by: " << xyTimerCompare << endl;
        }
        result = CAN_Write(PCAN_USBBUS1, &joystickXY);
        //Reset the timer
        xyTimer = chrono::high_resolution_clock::now();
        if (result != PCAN_ERROR_OK)
        {
            break;
        }
    }

Есть ли лучший способ получить надежный сигнал с точностью до +/- 1 мс?

...