rs-485

время

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

#1

Сообщение sillver » 16.07.2018{, 18:31}

Друзья! Подскажите как передавать-получать данные с часов реального времени в частности DS3231 и работать с ними по Modbus. Заранее благодарен!!!

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

rs-485

#2

Сообщение nalnik » 16.07.2018{, 18:50}

sillver
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
Я хочу быть добрее, но люди сами нарываются.

poavel72
Рядовой
Сообщения: 53
Зарегистрирован: 25.11.2015{, 10:21}
Репутация: 5

rs-485

#3

Сообщение poavel72 » 17.07.2018{, 11:19}

nalnik писал(а):
16.07.2018{, 18:50}
sillver
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
вопрос- а как получить обратно из этой переменной часы и минуты? С часами понятно, разделить на 60, а как вычислить минуты?

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

rs-485

#4

Сообщение nalnik » 17.07.2018{, 12:44}

Ну так вроде -- остаток надо умножить на 60.
Пример: время 12ч34м получаем 754
754 делим на 60 = 12,56666666666667 ========= 12 часов
остаток 0,56666666666667 умножаем на 60 ==== 34 минуты

А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
Я хочу быть добрее, но люди сами нарываются.

poavel72
Рядовой
Сообщения: 53
Зарегистрирован: 25.11.2015{, 10:21}
Репутация: 5

rs-485

#5

Сообщение poavel72 » 17.07.2018{, 13:07}

nalnik писал(а):
17.07.2018{, 12:44}
Ну так вроде -- остаток надо умножить на 60.
Пример: время 12ч34м получаем 754
754 делим на 60 = 12,56666666666667 ========= 12 часов
остаток 0,56666666666667 умножаем на 60 ==== 34 минуты

А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
понял, спасибо.

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

rs-485

#6

Сообщение nalnik » 17.07.2018{, 13:29}

poavel72
Вот посмотрите, готовые блоки с примером
https://flprog.ru/downloads/usersblocks ... y-sekundy/
Я хочу быть добрее, но люди сами нарываются.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

rs-485

#7

Сообщение Sancho » 17.07.2018{, 14:26}

poavel72 писал(а):
17.07.2018{, 11:19}
вопрос- а как получить обратно из этой переменной часы и минуты?
nalnik писал(а):
17.07.2018{, 12:44}
Пример: время 12ч34м получаем 754
переменные типа integer
754 делим на 60, 754 / 60 = 12 часов
остаток от деления 754 % 60 = 34 минуты , modulo, ждём от автора родного блока, а не пользовательских.
Давно ждёмс... :)

Отправлено спустя 13 минут 33 секунды:
nalnik писал(а):
17.07.2018{, 13:29}
Вот посмотрите, готовые блоки с примером
Я бы код распаковки изменил на

Код: Выделить всё

if (en)
{
D =  Sec / 86400;			// целое количество дней 		
H = (Sec % 86400) / 3600;   // целое количество часов
M = (Sec % 3600) / 60;		// целое количество минут
S = Sec % 60;				// целое количество секунд 
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

#8

Сообщение sillver » 17.07.2018{, 17:58}

Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу :shok: !

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

rs-485

#9

Сообщение Sancho » 17.07.2018{, 18:43}

sillver писал(а):
17.07.2018{, 17:58}
Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу !
ничего не понял.
на мастере ставите 3231, упаковываете что нужно из данных времени, думаю, часы минуты более чем(можно и секунды с точностью два) в один регистр( данные типа uint) отправляете слэйвам, они распаковывают, далее по вашему алгоритму.
Можно запустить "часы" (сделать) на millis(), с периодической синхронизацией от мастера, иногда более чем достаточно...
Что не понятно, напишите, подумаем вместе...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

#10

Сообщение sillver » 17.07.2018{, 23:10}

Спасибо попробую.

KSP
Лейтенант
Сообщения: 304
Зарегистрирован: 18.09.2015{, 14:00}
Репутация: 28
Откуда: Саратов
Имя: Сергей

rs-485

#11

Сообщение KSP » 18.07.2018{, 08:39}

Я по сети передаю примерно вот так , посмотрите может поможет:
Вложения
Прием времени.flp
(87.32 КБ) 72 скачивания
Передача времени.flp
(175.2 КБ) 74 скачивания
S

sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

#12

Сообщение sillver » 18.07.2018{, 21:25}

спасибо! пожалуйста поясни как это работает и как избавиться от единички.

KSP
Лейтенант
Сообщения: 304
Зарегистрирован: 18.09.2015{, 14:00}
Репутация: 28
Откуда: Саратов
Имя: Сергей

rs-485

#13

Сообщение KSP » 19.07.2018{, 08:19}

Единичка нужна для передачи по протоколу, числа начинающегося с 0 не бывает поэтому что-бы не было искажений при передаче стоит 1, можно ставить 2 и 3, тогда появится возможность одним int передавать по очереди 3 разных значения из 4 значных чисел. Единичка в начале в этом проекте при настройке "блок получения подстроки" убирается сама.
S

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

rs-485

#14

Сообщение Sancho » 19.07.2018{, 09:01}

KSP, Честно, не знаю, зачем так грузить мк операциями со строками?
Думаю, что если не считать возможности написания блоков для сдвига влево/вправо при упаковке/распаковке, такой вариант самый экономичный...
И на передачу этим-же регистром других данных, потом их парсинг, дополнительных запросов, процессорного времени уйдёт больше, чем на несколько дополнительных регистров в одном запросе. Моё мнение.
Вложения
Передача времени_v2.flp
(208.86 КБ) 66 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

KSP
Лейтенант
Сообщения: 304
Зарегистрирован: 18.09.2015{, 14:00}
Репутация: 28
Откуда: Саратов
Имя: Сергей

rs-485

#15

Сообщение KSP » 19.07.2018{, 09:53}

Sancho, не все знают, что такое БИТ , ИЛИ, НЕ, и.т.д согласен строки МК обрабатывать сложнее. Но можно и так и так решать тому кто задал вопрос о передаче времени.
S

sillver
Сержант
Сообщения: 194
Зарегистрирован: 27.04.2017{, 12:04}
Репутация: 3
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

#16

Сообщение sillver » 19.07.2018{, 11:06}

KSP Ну не опускайте меня ниже плинтуса!!!

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

rs-485

#17

Сообщение Sancho » 19.07.2018{, 11:25}

sillver,
Тогда сделайте себе блочки, чтобы каждый раз не собирать в проекте.
Вот пример максимально лёгкий и быстрый. Я так думаю.

Код: Выделить всё

data_01 = sec / 2 << 11 | hour <<5 | min; // упаковка 
sec = (data_01 >> 11)*2; // распаковка, секунды с точностью 2
hour = data_01 >> 5  & 63;
min = data_01 & 31;
Отправлено спустя 2 минуты 5 секунд:
Таким методом, чуть расширенным, пользуюсь при записи времени события в EEPROM 24C32(...1M).
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

KSP
Лейтенант
Сообщения: 304
Зарегистрирован: 18.09.2015{, 14:00}
Репутация: 28
Откуда: Саратов
Имя: Сергей

rs-485

#18

Сообщение KSP » 19.07.2018{, 11:53}

sillver, кроме Вас тему еще разные пользователи будут читать. Я же написал " не все ", а не конкретно Вас.
S

Ответить

Вернуться в «Спросить у знатоков»