rs-485
rs-485
Друзья! Подскажите как передавать-получать данные с часов реального времени в частности DS3231 и работать с ними по Modbus. Заранее благодарен!!!
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
rs-485
sillver
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
Я хочу быть добрее, но люди сами нарываются.
rs-485
вопрос- а как получить обратно из этой переменной часы и минуты? С часами понятно, разделить на 60, а как вычислить минуты?nalnik писал(а): 16 июл 2018, 18:50sillver
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
rs-485
Ну так вроде -- остаток надо умножить на 60.
Пример: время 12ч34м получаем 754
754 делим на 60 = 12,56666666666667 ========= 12 часов
остаток 0,56666666666667 умножаем на 60 ==== 34 минуты
А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
Пример: время 12ч34м получаем 754
754 делим на 60 = 12,56666666666667 ========= 12 часов
остаток 0,56666666666667 умножаем на 60 ==== 34 минуты
А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
Я хочу быть добрее, но люди сами нарываются.
rs-485
понял, спасибо.nalnik писал(а): 17 июл 2018, 12:44 Ну так вроде -- остаток надо умножить на 60.
Пример: время 12ч34м получаем 754
754 делим на 60 = 12,56666666666667 ========= 12 часов
остаток 0,56666666666667 умножаем на 60 ==== 34 минуты
А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
rs-485
poavel72
Вот посмотрите, готовые блоки с примером
https://flprog.ru/downloads/usersblocks ... y-sekundy/
Вот посмотрите, готовые блоки с примером
https://flprog.ru/downloads/usersblocks ... y-sekundy/
Я хочу быть добрее, но люди сами нарываются.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
rs-485
poavel72 писал(а): 17 июл 2018, 11:19вопрос- а как получить обратно из этой переменной часы и минуты?
переменные типа integer
754 делим на 60, 754 / 60 = 12 часов
остаток от деления 754 % 60 = 34 минуты , modulo, ждём от автора родного блока, а не пользовательских.
Давно ждёмс...

Отправлено спустя 13 минут 33 секунды:
Я бы код распаковки изменил на
Код: Выделить всё
if (en)
{
D = Sec / 86400; // целое количество дней
H = (Sec % 86400) / 3600; // целое количество часов
M = (Sec % 3600) / 60; // целое количество минут
S = Sec % 60; // целое количество секунд
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
rs-485
Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу
!

- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
rs-485
ничего не понял.sillver писал(а): 17 июл 2018, 17:58Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу !
на мастере ставите 3231, упаковываете что нужно из данных времени, думаю, часы минуты более чем(можно и секунды с точностью два) в один регистр( данные типа uint) отправляете слэйвам, они распаковывают, далее по вашему алгоритму.
Можно запустить "часы" (сделать) на millis(), с периодической синхронизацией от мастера, иногда более чем достаточно...
Что не понятно, напишите, подумаем вместе...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 305
- Зарегистрирован: 18 сен 2015, 14:00
- Откуда: Саратов
- Имя: Сергей
- Поблагодарили: 1 раз
rs-485
Единичка нужна для передачи по протоколу, числа начинающегося с 0 не бывает поэтому что-бы не было искажений при передаче стоит 1, можно ставить 2 и 3, тогда появится возможность одним int передавать по очереди 3 разных значения из 4 значных чисел. Единичка в начале в этом проекте при настройке "блок получения подстроки" убирается сама.
S
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
rs-485
[ref]KSP[/ref], Честно, не знаю, зачем так грузить мк операциями со строками?
Думаю, что если не считать возможности написания блоков для сдвига влево/вправо при упаковке/распаковке, такой вариант самый экономичный...
И на передачу этим-же регистром других данных, потом их парсинг, дополнительных запросов, процессорного времени уйдёт больше, чем на несколько дополнительных регистров в одном запросе. Моё мнение.
Думаю, что если не считать возможности написания блоков для сдвига влево/вправо при упаковке/распаковке, такой вариант самый экономичный...
И на передачу этим-же регистром других данных, потом их парсинг, дополнительных запросов, процессорного времени уйдёт больше, чем на несколько дополнительных регистров в одном запросе. Моё мнение.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 305
- Зарегистрирован: 18 сен 2015, 14:00
- Откуда: Саратов
- Имя: Сергей
- Поблагодарили: 1 раз
rs-485
[ref=#ff8000]Sancho[/ref], не все знают, что такое БИТ , ИЛИ, НЕ, и.т.д согласен строки МК обрабатывать сложнее. Но можно и так и так решать тому кто задал вопрос о передаче времени.
S
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
rs-485
[ref]sillver[/ref],
Тогда сделайте себе блочки, чтобы каждый раз не собирать в проекте.
Вот пример максимально лёгкий и быстрый. Я так думаю.
Отправлено спустя 2 минуты 5 секунд:
Таким методом, чуть расширенным, пользуюсь при записи времени события в EEPROM 24C32(...1M).
Тогда сделайте себе блочки, чтобы каждый раз не собирать в проекте.
Вот пример максимально лёгкий и быстрый. Я так думаю.
Код: Выделить всё
data_01 = sec / 2 << 11 | hour <<5 | min; // упаковка
sec = (data_01 >> 11)*2; // распаковка, секунды с точностью 2
hour = data_01 >> 5 & 63;
min = data_01 & 31;
Таким методом, чуть расширенным, пользуюсь при записи времени события в EEPROM 24C32(...1M).
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя