Синхронизация часов между сервером автопроизводителя и клиентом

avatar
KISHORE AVISINENI
9 августа 2021 в 04:11
21
0
0

У меня есть серверное клиентское приложение по протоколу tcp/ip, где и сервер, и клиент работают с разной скоростью. Я использую Carmaker в качестве сервера и некоторый модуль C в качестве клиента для получения данных от него. Мой клиент запускается каждые 20 мс [в соответствии с проектом], а Carmaker запускает свою внутреннюю функцию каждую 1 мс, и, если нам нужно, доступен случай паузы.

Мне нужно, чтобы сервер и клиент были синхронизированы, где, когда клиент обрабатывает шаг 20 мс, Carmaker завершит его 20 шагами по 1 мс. т. е. я хочу приостановить работу автопроизводителя, пока клиент не завершит процесс.

Я отправляю часы клиента на сервер и реализую следующий код внутри сервера.

case SCState_Simulate:
if ((rv=App_TestRun_Calc(DeltaT)) != 0)
    SimCore_State_Set (SCState_End);

    //if((SimCore.CycleNo - start_cycle_)>runto_cycle_){
        //Log("IfLessthanSimulate: %d\n", SimCore.CycleNo);
    //}
    //Log("StartSimulate: %d\n", SimCore.CycleNo);
    Log("Simulate Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );

    SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;


  case SCState_Pause:
// wait for continue
    //Log("Pause: %d\n", SimCore.CycleNo);
    Log("Pause Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );
    SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;

А на стороне клиента я получаю время сервера и жду carmaker_time_ms<client_time_ms, а затем отправляю клиентское время на сервер производителя автомобилей.

Не могли бы вы помочь в изменении и сказать мне, как сделать сервер и клиент синхронными.

Источник

Ответы (0)