Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > ТСД > Motorola (Symbol)

Как восстановить время в WinCE 6.0 после холодного старта в ТСД MC9190 и МС3190?

14.07.2020 17:13


27.05.2020 09:30
KventinT
 
Всем привет!

У меня не правильно восстанавливается время после холодного старта на терминалах MC9190 и МС3190 с WindowsCE 6.0.

В папку Application скопировал *.reg файл со следующим содержимым:
Код:
[HKEY_LOCAL_MACHINE\Services\TIMESVC]
"UserProcGroup"=dword:00000002
"Flags"=dword:00000010
"multicastperiod"=dword:001b7740
"Dll"="timesvc.dll"
"Order"=dword:00000099
"Keep"=dword:00000001
"Prefix"="NTP"
"Index"=dword:00000000
"server"="10.47.15.255"
"AutoUpdate"=dword:00000001
"ServerRole"=dword:00000001
"refresh"=dword:000927C0
"recoveryrefresh"=dword:00057E40
"threshold"=dword:05265c00
"trustlocalclock"=dword:00000000
[HKEY_LOCAL_MACHINE\Time]
"TimeZoneInformation"=hex:\
      10,FF,FF,FF,41,00,72,00,61,00,62,00,69,00,61,00,6E,00,20,00,53,00,74,00,61,\
      00,6E,00,64,00,61,00,72,00,64,00,20,00,54,00,69,00,6D,00,65,00,00,00,6D,00,\
      65,00,00,00,00,00,00,00,6D,00,65,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,41,00,72,00,61,00,62,00,69,00,61,00,\
      6E,00,20,00,44,00,61,00,79,00,6C,00,69,00,67,00,68,00,74,00,20,00,54,00,69,\
      00,6D,00,65,00,00,00,6D,00,65,00,00,00,00,00,00,00,6D,00,65,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,C4,FF,FF,FF
"TZID"=dword:00000640
После холодного старта:
1) Часовой пояс переключатся на правильный (в моём случае GMT +04:00);
2) Дата ставиться тоже верная
3) Время отображается не правильно, отстаёт на 9 часов (если у меня время 10:00 АМ, то терминал показывает время 01:00 АМ)

Если после холодного старта выполнить тёплый старт время начинает отображаться верно.
На терминалах MC92N0 c WinCE 7.0 время отображаться верно после холодного старта.
Что нужно сделать чтобы на WinCE 6.0 после холодного старта правильно отображалось время.
27.05.2020 10:43
pavel_k
 
Тоже бился над этой задачей. Решения так и не нашёл. Вопрос актуальный.
11.06.2020 09:33
KJ13rus
 
Если поможет, я использую время от сервера SQL.

Запрашиваю "select GETDATE()"

На WindowsCE код:

[DllImport("coredll.dll", SetLastError = true)]
static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime);

public struct SYSTEMTIME
{
public short year;
public short month;
public short dayOfWeek;
public short day;
public short hour;
public short minute;
public short second;
public short milliseconds;
}

public static void SetSystemDateTime(DateTime dt)
{
SYSTEMTIME systime;
systime.year = (short)dt.Year;
systime.month = (short)dt.Month;
systime.day = (short)dt.Day;

systime.hour = (short)dt.Hour;
systime.minute = (short)dt.Minute;
systime.second = (short)dt.Second;
systime.milliseconds = (short)dt.Millisecond;
systime.dayOfWeek = (short)dt.DayOfWeek;

SetLocalTime(ref systime);
}


private void ПолучаемВремяSQL()
{
SqlConnection sqlConnection1 = new SqlConnection(connStr);
SqlDataReader reader = null;
try
{
sqlConnection1.Open();

SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
reader = default(SqlDataReader);
cmd.CommandText = "select GETDATE()";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
reader = cmd.ExecuteReader();
DateTime sql_date;

while (reader.Read())
{
sql_date = reader.GetDateTime(0);
DateTime localDateTime = sql_date;
DateTime newDT = new DateTime(localDateTime.Year, localDateTime.Month, localDateTime.Day, localDateTime.Hour, localDateTime.Minute, localDateTime.Second, localDateTime.Millisecond);
SetSystemDateTime(newDT);
}
}
catch (Exception ex)
{
}
finally
{

try
{
reader.Close();
}
catch (Exception ex) { }

try
{
sqlConnection1.Close();
}
catch (Exception ex) { }
}
}
11.06.2020 10:19
OlegON
 
К сожалению, запрос времени обязательно должен учитывать время его выполнения. Например, на каком-нибудь убитом Wi-Fi в конце зала такой запрос может дать и полминуты разницы.
Мелочь, конечно :) Неужели туда никак NTP-клиент поставить нельзя?
11.06.2020 10:28
KJ13rus
 
Если есть потребность в настолько точном времени, тогда к сети WiFi и её покрытию надо уделить больше внимание, т.к. полминуты это перебор, 100-300ms с самым плохим покрытием. К коду выше можно добавить (точнее отнять) время задержки пинга до SQL и при применении настроек времени это будет аналогично функции NTP. А ставить ещё ПО на аппарат, у которого с памятью и так ограничения, тот же NTP клиент будет отжирать 4-5 Мб памяти.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.