Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Общетехнические вопросы

Общетехнические вопросы Общие вопросы аналоговой и цифровой электроники.

Ответ
 
Опции темы Опции просмотра
Старый 14.07.2017, 13:11   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,418
Вес репутации: 4322/119
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Синхронизация времени WinXP-Device

Здравствуйте, товарищи!

Написал простенькую программку на C# (виртуальный COM-порт USB-UART на FT232RL+MAX3089, затем RS485, протокол ModbusRTU, функции 0x03 и 0x10, нажимаю на кнопку и пишу фиксированное дату и время 14.07.17 11:47:32.000, затем сразу же читаю и вижу, что точнее чем 0,22 секунды никак не синхронизировать, пробовал на скоростях 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, причем на скорости 1200 ошибка не более 0,4 секунды, затем уменьшается и уже где-то с 57600 и выше она около 0,2 секунды, т.е. где-то в винде теряется время.

Задержка между запросом и ответом самого прибора примерно 0,015 секунды. Вот запросы (запись и чтение) с метками времени. Метки времени из винды. Сейчас время винды не синхронизировано с фиксированным временем, которое записывается в прибор [14.07.17 11:47:32.000], пока это не важно, была идея - брать в винде время сразу после перехода через секунду и отправлять, чтобы миллисекунды были почти нулевые.
Цитата:
<2017.07.14 12:49:10.809>
01 10 01 65 00 06 0C 00 0E 00 07 00 11 00 0B 00 2F 00 20 36 35
<2017.07.14 12:49:10.825>
01 10 01 65 00 06 51 E8

<2017.07.14 12:49:11.200>
01 03 01 5E 00 07 64 26
<2017.07.14 12:49:11.215>
01 03 0E 00 0E 00 07 00 11 00 0B 00 2F 00 20 00 D9 8C E9
В окне программы вижу
Цитата:
[14.07.17 11:47:32.000] // Компьютер
[14.07.17 11:47:32.217] // Прибор
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 14.07.2017, 14:01   #2
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,418
Вес репутации: 4322/119
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Синхронизация времени WinXP-Device

Цитата:
Сообщение от Pridnya Посмотреть сообщение
она около 0,2 секунды, т.е. где-то в винде теряется время.
Совсем забыл, что в моем рукописном классе Modbus.cs ведется отчет о запросах и ответах с метками времени, причем ведется не очень правильно, внутри методов Modbus.WriteBlock() - пишем время в прибор и Modbus.ReadBlock() - читаем время из прибора, в конце кода есть строка, сохраняющая отчет на диск, поэтому чтение из прибора не начинается раньше сохранения отчета на жесткий диск, в файл Modbus.txt. Вести отчет нужно, но сохранять его в файл на жесткий диск не нужно после каждой операции записи или чтения, в моем случае нужно сохранять как минимум после второго ответа.

Report.txt
Цитата:
Port COM4 opened !!!
BaudRate 460800
W[0]=[12:49:10.809] 01 03 01 5E 00 07 64 26
R[0]=[12:49:10.825] 01 03 0E 00 0E 00 07 00 11 00 0B 00 2F 00 20 00 D9 8C E9
Reading successfully completed!!!
public bool ReadBlock(byte CodeOfFunction, ushort StartAddr, int BlockSize, UInt16 [] tData)
{
...
Report.WriteLine("Port " + _serialPort.PortName + " opened !!!");
...
Report.Save(); // Сохраняем отчет на диск в файл Modbus.txt.
...
}
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 14.07.2017 в 14:08.
Pridnya вне форума   Ответить с цитированием
Старый 14.07.2017, 14:34   #3
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,418
Вес репутации: 4322/119
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Синхронизация времени WinXP-Device

Закомментировал сохранение отчета на жесткий диск - задержка не уменьшилась, те же 0,2 секунды. Может, кто аналогичные опыты проводил с использованием других программ? Или есть какая программа, которая позволяет отправить запрос на запись, получить ответ и следом отправить запрос на чтение и ответ?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 14.07.2017, 16:29   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,418
Вес репутации: 4322/119
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Синхронизация времени WinXP-Device

Нашел в чем дело, оба метода
public bool ReadBlock()
public bool WriteBlock()
перед отправкой запросов открывали COM-порт, а после получения ответа закрывали его, вот это лишнее действие "закрыть порт/открыть порт" и кушало почти 0,2 секунды. Из скриншота видно, что в первом запросе/ответе разница около 100 миллисекунд (ушло на открывание COM-порта), а во всех следующих 12-25 миллисекунд. Т.е. все хорошо, если COM-порт всегда открыт, то синхронизироваться можно достаточно точно.
Миниатюры
Разница в миллисекундах.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация времени по входу импульсами 1PPS Pridnya Общетехнические вопросы 31 08.08.2017 21:53
Синхронизация времени в проводных сетях Pridnya Общетехнические вопросы 34 19.11.2015 12:34
usb с нуля gromovi Вопросы начинающих 61 09.03.2012 23:56
pic16f877 и i2c(внешняя eeprom) asset Продукция MICROCHIP 9 20.01.2010 12:27
Помогите плизз с PIC16LF628A dbosh Продукция MICROCHIP 49 11.10.2008 01:03


Часовой пояс GMT +3, время: 09:03.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot