rs-485

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

rs-485

Сообщение sillver »

Друзья! Подскажите как передавать-получать данные с часов реального времени в частности DS3231 и работать с ними по Modbus. Заранее благодарен!!!
Аватара пользователя
nalnik
Подполковник
Сообщения: 1320
Зарегистрирован: 14 май 2016, 17:12
Откуда: Кисловодск
Имя: Александр

rs-485

Сообщение nalnik »

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

rs-485

Сообщение poavel72 »

nalnik писал(а): 16 июл 2018, 18:50sillver
Недели 3-4 назад про "время в сети" помоему Sancho кому то подсказывал
Вот это может поможет; часы умножить на 60 и прибавить минуты и это отправлять по RS-485
viewtopic.php?f=10&t=268&p=49333#p49333
вопрос- а как получить обратно из этой переменной часы и минуты? С часами понятно, разделить на 60, а как вычислить минуты?
Аватара пользователя
nalnik
Подполковник
Сообщения: 1320
Зарегистрирован: 14 май 2016, 17:12
Откуда: Кисловодск
Имя: Александр

rs-485

Сообщение nalnik »

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

А лучше конечно попросить Sancho сделать пользовательский блок - он сможет!
Я хочу быть добрее, но люди сами нарываются.
poavel72
Рядовой
Сообщения: 53
Зарегистрирован: 25 ноя 2015, 10:21

rs-485

Сообщение poavel72 »

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

Сообщение nalnik »

poavel72
Вот посмотрите, готовые блоки с примером
https://flprog.ru/downloads/usersblocks ... y-sekundy/
Я хочу быть добрее, но люди сами нарываются.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

rs-485

Сообщение Sancho »

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

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

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

if (en)
{
D =  Sec / 86400;			// целое количество дней 		
H = (Sec % 86400) / 3600;   // целое количество часов
M = (Sec % 3600) / 60;		// целое количество минут
S = Sec % 60;				// целое количество секунд 
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27 апр 2017, 12:04
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

Сообщение sillver »

Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу :shok: !
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

rs-485

Сообщение Sancho »

sillver писал(а): 17 июл 2018, 17:58Спасибо за ответы! Но это не совсем так. Мне нужно пользоваться этими данными в сети, не ставить-же на каждую по РТэСу !
ничего не понял.
на мастере ставите 3231, упаковываете что нужно из данных времени, думаю, часы минуты более чем(можно и секунды с точностью два) в один регистр( данные типа uint) отправляете слэйвам, они распаковывают, далее по вашему алгоритму.
Можно запустить "часы" (сделать) на millis(), с периодической синхронизацией от мастера, иногда более чем достаточно...
Что не понятно, напишите, подумаем вместе...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27 апр 2017, 12:04
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

Сообщение sillver »

Спасибо попробую.
KSP
Лейтенант
Сообщения: 305
Зарегистрирован: 18 сен 2015, 14:00
Откуда: Саратов
Имя: Сергей
Поблагодарили: 1 раз

rs-485

Сообщение KSP »

Я по сети передаю примерно вот так , посмотрите может поможет:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
S
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27 апр 2017, 12:04
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

Сообщение sillver »

спасибо! пожалуйста поясни как это работает и как избавиться от единички.
KSP
Лейтенант
Сообщения: 305
Зарегистрирован: 18 сен 2015, 14:00
Откуда: Саратов
Имя: Сергей
Поблагодарили: 1 раз

rs-485

Сообщение KSP »

Единичка нужна для передачи по протоколу, числа начинающегося с 0 не бывает поэтому что-бы не было искажений при передаче стоит 1, можно ставить 2 и 3, тогда появится возможность одним int передавать по очереди 3 разных значения из 4 значных чисел. Единичка в начале в этом проекте при настройке "блок получения подстроки" убирается сама.
S
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

rs-485

Сообщение Sancho »

[ref]KSP[/ref], Честно, не знаю, зачем так грузить мк операциями со строками?
Думаю, что если не считать возможности написания блоков для сдвига влево/вправо при упаковке/распаковке, такой вариант самый экономичный...
И на передачу этим-же регистром других данных, потом их парсинг, дополнительных запросов, процессорного времени уйдёт больше, чем на несколько дополнительных регистров в одном запросе. Моё мнение.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
KSP
Лейтенант
Сообщения: 305
Зарегистрирован: 18 сен 2015, 14:00
Откуда: Саратов
Имя: Сергей
Поблагодарили: 1 раз

rs-485

Сообщение KSP »

[ref=#ff8000]Sancho[/ref], не все знают, что такое БИТ , ИЛИ, НЕ, и.т.д согласен строки МК обрабатывать сложнее. Но можно и так и так решать тому кто задал вопрос о передаче времени.
S
sillver
Сержант
Сообщения: 194
Зарегистрирован: 27 апр 2017, 12:04
Откуда: УКРАИНА
Имя: Вячеслав

rs-485

Сообщение sillver »

KSP Ну не опускайте меня ниже плинтуса!!!
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

rs-485

Сообщение Sancho »

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

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

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
Лейтенант
Сообщения: 305
Зарегистрирован: 18 сен 2015, 14:00
Откуда: Саратов
Имя: Сергей
Поблагодарили: 1 раз

rs-485

Сообщение KSP »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя