PDA

Просмотр полной версии : Преобразование минут в часы+минуты.



SANdry
06.12.2022, 13:51
Доброго времени суток уважаемые форумчане!
Не могу разобраться с каверзным вопросом:
Из ПР в режиме слейв поступает множество переменных в ед.изм. "минуты", мне необходимо преобразовать их в панели в вид "hh;mm" может натолкнет кто на мысль как это сделать (пример математики или макросом), то же самое в обратном порядке (в обратном порядке я так понимаю формула будет выглядеть следующим образом: hh*60+mm, а вот прямой порядок не совсем ясно как извлечь остаток из HH при формуле вида: mm\60=hh остаток*60=mm?
И не будет ли конфликтовать оба преобразования друг с другом в режиме чтение\запись в одну и туже переменную?

petera
06.12.2022, 14:04
Доброго времени суток уважаемые форумчане!
Не могу разобраться с каверзным вопросом:
Из ПР в режиме слейв поступает множество переменных в ед.изм. "минуты", мне необходимо преобразовать их в панели в вид "hh;mm" может натолкнет кто на мысль как это сделать (пример математики или макросом), то же самое в обратном порядке (в обратном порядке я так понимаю формула будет выглядеть следующим образом: hh*60+mm, а вот прямой порядок не совсем ясно как извлечь остаток из HH при формуле вида: mm\60=hh остаток*60=mm?
И не будет ли конфликтовать оба преобразования друг с другом в режиме чтение\запись в одну и туже переменную?

А зачем в одну и туже переменную?
Почему не в разные?

mm\60=hh остаток*60=mm
с помощью ф.области
64332

здесь
время в ПР (mm) - рег.512

в панели hh- PSW256 mm- PSW257

ф. область (непрерывная)
PSW256 = 4x512 / 60 // часы, остаток(минуты) отброшены
PSW257 = PSW256 * 60 //только часы
PSW257 = 4x512 - PSW257 //остаток о деления - (минуты)

SANdry
06.12.2022, 14:59
А зачем в одну и туже переменную?
Почему не в разные?
Спасибо огромное, за алгоритм!

Часть уставок времени инициализируется при запуске/(сбое питания) при запуске ПР, а уставок и данных времени много, соответственно придется "творить магию" в СП, либо заворачивать большое количество переменных в ПР, а затем разворачивать их в СП, но как это сделать, я еще не научился =)

kondor3000
06.12.2022, 15:06
Спасибо огромное, за алгоритм!

Часть уставок времени инициализируется при запуске/(сбое питания) при запуске ПР, а уставок и данных времени много, соответственно придется "творить магию" в СП, либо заворачивать большое количество переменных в ПР, а затем разворачивать их в СП, но как это сделать, я еще не научился =)

Много это сколько?

SANdry
06.12.2022, 15:16
Много это сколько?

32 сетевых переменных это только время в минутах (часть из которых уставки) + еще столько же статусных.

SANdry
06.12.2022, 16:10
А зачем в одну и туже переменную?
Почему не в разные?

mm\60=hh остаток*60=mm
с помощью ф.области
64332

здесь
время в ПР (mm) - рег.512

в панели hh- PSW256 mm- PSW257

ф. область (непрерывная)
PSW256 = 4x512 / 60 // часы, остаток(минуты) отброшены
PSW257 = PSW256 * 60 //только часы
PSW257 = 4x512 - PSW257 //остаток о деления - (минуты)

Такое представление упаковки ведь будет не правильно? Нужно ли вводить промежуточную переменную?

Dimensy
06.12.2022, 16:14
32 сетевых переменных это только время в минутах (часть из которых уставки) + еще столько же статусных.

Сейчас всего 59 регистров. 38 регистров содержат время. Из них 12 регистров чтение/запись - надо распаковывать/запаковывать, 12 чтение - только распаковывать, 12 запись - запаковывать и 2 запись - ничего не делать. 2 битовые маски, одна из которых занимает 2 регистра и склеивается в ПР. 18 регистров содержат статусы. Статусные регистры можно запаковать по форме А + Б*10 + С*100, тогда их станет 6.

petera
06.12.2022, 18:28
Такое представление упаковки ведь будет не правильно? Нужно ли вводить промежуточную переменную?

У меня (распаковка) все правильно
Что делаете Вы я не знаю.
Вы что хотите и упаковать в той же ф. области?
Работать не будет. Для упаковки нужна отдельная ф.область с действием от бита уведомления, который взводится в ц. вводах

petera
06.12.2022, 19:23
32 сетевых переменных это только время в минутах (часть из которых уставки) + еще столько же статусных.

Конечно, способ распаковки с ф.областями работать будет, но при большом количестве исходных переменных потребует много накладных расходов - куча ф.областей, куча промежуточных регистров PSW

по этому специализированный дисплей ЧЧ:ММ Вам поможет
https://owen.ru/forum/attachment.php?attachmentid=64347&d=1670343460
Копируйте в свой проект и пользуйтесь

SANdry
06.12.2022, 20:39
Конечно, способ распаковки с ф.областями работать будет, но при большом количестве исходных переменных потребует много накладных расходов - куча ф.областей, куча промежуточных регистров PSW

по этому специализированный дисплей ЧЧ:ММ Вам поможет
https://owen.ru/forum/attachment.php?attachmentid=64347&d=1670343460
Копируйте в свой проект и пользуйтесь
Да, действительно, данный дисплей поможет с переменными на вывод информационных данных времени! Но не решит основную проблему.
Чтобы внести ясность, как уточнил уважаемый Dimensy: есть несколько переменных, которые представлены в минутах, которые нужно только распаковать (превратить в фомат HH:MM) - с этим прекрасно справляется представленный вами специализируемый дисплей, а есть переменные времени назовем их корректировочные (представленные в формате "MMM") которые нужно "распаковать" (привести к формату HH:MM) при необходимости изменить, и запаковать обратно (привести к формату "MMM"), так же есть просто уставки времени которые нужно просто запаковать из представления "HH:MM" в "MMM", есть ли для такой задачи "специализированные дисплеи"?
Я предположу что этот специализированный дисплей был создан в модифицированной версии конфигуратора?

petera
06.12.2022, 21:11
....
Я предположу что этот специализированный дисплей был создан в модифицированной версии конфигуратора?
Ну если только самую малость, а так обычный конфгуратор версии d3d https://www.youtube.com/watch?v=KlQXaKUtDxs
Можно было даже в конфигураторе СП200 сделать и так же бы работало в СП3хх

petera
06.12.2022, 21:58
Да, действительно, данный дисплей поможет с переменными на вывод информационных данных времени! Но не решит основную проблему.
Чтобы внести ясность, как уточнил уважаемый Dimensy: есть несколько переменных, которые представлены в минутах, которые нужно только распаковать (превратить в фомат HH:MM) - с этим прекрасно справляется представленный вами специализируемый дисплей, а есть переменные времени назовем их корректировочные (представленные в формате "MMM") которые нужно "распаковать" (привести к формату HH:MM) при необходимости изменить, и запаковать обратно (привести к формату "MMM"), так же есть просто уставки времени которые нужно просто запаковать из представления "HH:MM" в "MMM", есть ли для такой задачи "специализированные дисплеи"?
Я предположу что этот специализированный дисплей был создан в модифицированной версии конфигуратора?

Мне трудно въехать в тонкости Ваших трудов https://owen.ru/forum/showthread.php?t=36918&p=395367&viewfull=1#post395367
64353
где там "корректировочные (представленные в формате "MMM")", а где "просто уставки времени которые нужно просто запаковать из представления "HH:MM" в "MMM""

только думаю разницы между корректировочными и просто уставками, по способу хранения и отображения на экране панели делать не надо.
Оба типа ведь в слейве ПРки представлены?
Значит оба типа должны хранится в виде МММ(в ПРке), а отображаться в панели в виде НН:ММ.
Вводить можно стандартными средствами как пару, НН и ММ. При завершении ввода упаковывать.
Если правильно расположить переменные времени в слейве, то можно будет задействовать индексную адресацию и обойтись ОДНОЙ ф.областью для упаковки.


Сейчас всего 59 регистров. 38 регистров содержат время. Из них 12 регистров чтение/запись - надо распаковывать/запаковывать, 12 чтение - только распаковывать, 12 запись - запаковывать и 2 запись - ничего не делать. 2 битовые маски, одна из которых занимает 2 регистра и склеивается в ПР. 18 регистров содержат статусы. Статусные регистры можно запаковать по форме А + Б*10 + С*100, тогда их станет 6.
Вот только я насчитал всего 30 сетевых переменных
64354 64355

Dimensy
06.12.2022, 22:52
Вот только я насчитал всего 30 сетевых переменных

В примере представлены только две камеры, а всего их будет шесть

petera
07.12.2022, 01:04
Мне трудно въехать в тонкости Ваших трудов https://owen.ru/forum/showthread.php?t=36918&p=395367&viewfull=1#post395367
64353
где там "корректировочные (представленные в формате "MMM")", а где "просто уставки времени которые нужно просто запаковать из представления "HH:MM" в "MMM""

только думаю разницы между корректировочными и просто уставками, по способу хранения и отображения на экране панели делать не надо.
Оба типа ведь в слейве ПРки представлены?
Значит оба типа должны хранится в виде МММ(в ПРке), а отображаться в панели в виде НН:ММ.
Вводить можно стандартными средствами как пару, НН и ММ. При завершении ввода упаковывать.
Если правильно расположить переменные времени в слейве, то можно будет задействовать индексную адресацию и обойтись ОДНОЙ ф.областью для упаковки.


Вот как я вижу реализацию своих утверждений
64359


https://youtu.be/B4tQe0SQqdw

SANdry
07.12.2022, 16:22
Вот как я вижу реализацию своих утверждений
64359


https://youtu.be/B4tQe0SQqdw

Ваш вариант я рассматриваю только для отдельных видов уставок. К сожалению для временных придется использовать совокупность вашего подхода с моим интерфейсом ↓ он должен выглядеть примерно так: