Задача №37, Занимательные задачи 2014 |
Здравствуйте, гость ( Вход | Регистрация )
Задача №37, Занимательные задачи 2014 |
23.03.2014 - 15:01
Сообщение
#1
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Задача на излюбленную тему...
Такого-то месяца, такого-то числа, в такой-то час необходимо включить выход ПЛК (уставка времени на включение), и после такого-то месяца, такого-то числа, такого-то часа выключить указанный выход (уставка времени на выключение). Уставки времени могут задаваться произвольно и изменяться с верхнего уровня, располагаться как в пределах одного года - например, включить 12 июня в 3 часа дня, выключить 12 декабря в 1 ночи, так и с переходом на следующий - например, включить 12 декабря в 1 час ночи, выключить 12 июня в 3 часа дня. Цель - изящное решение поставленной задачи кодом с минимальным количеством шагов. Для ориентира, количество шагов в решении, включая команду END, не должно превышать 3 десятков. Дерзайте... Сообщение отредактировал inntele - 23.03.2014 - 15:13 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
24.03.2014 - 09:26
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Задачу разбить на две составляющие:
1) Установка текущего времени, синхронизация. 2) Отработка условия включения\отключения. Реализация ... Задать счётчик секунд (в двойном слове более 136 лет) от базовой даты. Инкрементировать значение каждую секунду. Условие включения\отключения сведётся к сравнению с двойным словом. Все остальные функции (начальная инициализация, расчет значения включения\отключения) возложить на систему верхнего уровня. |
|
|
24.03.2014 - 10:04
Сообщение
#3
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
m_by,
Это задача на демонстрацию неочевидных возможностей контроллера, сокрытых от глаз программиста, а не задача, по которой нужен совет, как в теории с приложением определенных усилий со стороны программиста верхнего уровня ее можно было бы реализовать. Давайте примем, что на верхнем уровне задаются исключительно уставки времени и не более того, а вся математика и логика управления реализуются в ПЛК. Тем паче, что в панели оператора такую математику вам вряд-ли удастся реализовать. Про верхний уровень упомянул лишь для того, чтобы обратить внимание, что уставки времени - переменные величины, и у решающего задачу не возникло соблазна расценивать их как константы. Что касается вашей идеи вычисления и подсчета секунд, то мне, например, непонятно, зачем считать секунды, если уставки времени выражены даже не в минутах, а в часах... -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
24.03.2014 - 12:05
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 459 Регистрация: 5.02.2014 Пользователь №: 10203 |
Тем паче, что в панели оператора такую математику вам вряд-ли удастся реализовать. Замечу, что в некоторых типах панелей оператора подобная функция реализуется достаточно просто, не требуя при этом каких-либо вычислений со стороны ПЛК. 1.PNG ( 44.9 килобайт ) Кол-во скачиваний: 35 На приведенном скриншоте время вкл и выкл задается в часах:минутах и по дням недели. Однако, все это, легко модифицируется под года:месяцы:дни:часы, согласно условию задачи (37). Что же касается реализации подобного в самом ПЛК, то над этим, безусловно, нужно подумать, исходя из ограничений, указанных в задаче. Сообщение отредактировал ivgtrk - 24.03.2014 - 13:21 -------------------- Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
|
|
|
24.03.2014 - 14:32
Сообщение
#5
|
|
Гигант мысли Группа: Пользователи Сообщений: 459 Регистрация: 5.02.2014 Пользователь №: 10203 |
Реализация задачи "очевидными" функциями не вызывает сложностей, но, в моем случае, эта программа занимает 51 шаг, и несколько вылазит за рамки в 30 шагов.
Не очевидных же возможностей в этом отношении, пока действительно, не вижу... -------------------- Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
|
|
|
24.03.2014 - 16:41
Сообщение
#6
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг...
Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага... -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
24.03.2014 - 17:43
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Можно через TZCP ...
где час = месяц час = месяц+12, если годВкл<годОткл мин = день сек = час из ограничений - период Вкл\Откл не более года |
|
|
24.03.2014 - 18:40
Сообщение
#8
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Можно через TZCP ... где час = месяц час = месяц+12, если годВкл<годОткл мин = день сек = час из ограничений - период Вкл\Откл не более года Очень горячо, m_by! Только причем тут год, который уставкой не задается, если в предлагаемом Вами варианте достаточно сравнить сами уставки. Период, разумеется, в пределах года, по-моему это очевидно из задания. Хотелось бы увидеть Ваш вариант решения в формате рабочего программного кода. Уставка на включение D200-D202, на выключение D203-D205, флаги формируемые командой TZCP - M0-M2. Показания часов реального времени считываем в D0. Сообщение отредактировал inntele - 24.03.2014 - 18:52 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
25.03.2014 - 06:14
Сообщение
#9
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Такого-то месяца, такого-то числа, в такой-то час необходимо включить выход ПЛК (уставка времени на включение), и после такого-то месяца, такого-то числа, такого-то часа выключить указанный выход (уставка времени на выключение). Уставки времени могут задаваться произвольно и изменяться с верхнего уровня, располагаться как в пределах одного года - например, включить 12 июня в 3 часа дня, выключить 12 декабря в 1 ночи, так и с переходом на следующий - например, включить 12 декабря в 1 час ночи, выключить 12 июня в 3 часа дня. Необходимо уточнение. Как все-таки надо выключать? В час уставки на выключение или после него? Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг... Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага... У меня есть вариант с нетрадиционным использованием TZCP- 40 шагов без END, с выключением после часа уставки. С нетерпением жду ответа в 30 шагов с END. Сообщение отредактировал Sergei Troizky - 25.03.2014 - 06:36 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
25.03.2014 - 08:37
Сообщение
#10
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Необходимо уточнение. Как все-таки надо выключать? В час уставки на выключение или после него? После него. Чтобы уставку на выключение можно было непосредственно использовать с командой TZCP без каких-либо дополнительных преобразований. У меня есть вариант с нетрадиционным использованием TZCP- 40 шагов без END, с выключением после часа уставки. С нетерпением жду ответа в 30 шагов с END. 40 шагов - тоже очень недурно По-видимому, для сравнения уставок использовали инструкцию TCMP, которая, с одной стороны, занимает немало шагов, с другой, ей требуются три дополнительных флага... -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
25.03.2014 - 10:33
Сообщение
#11
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
LD m8000
MOV d203 d204 LD< d203 d200 (условие смены года) ADD d203 k12 d204 LD m8000 TZCP d200 d204 d0 m0 END d200, d201, d202 - уставки включения: месяц, день, час d203, d205, d206 - уставки отключения: месяц, день, час d0, d1, d2 - тек. время: месяц, день, час |
|
|
25.03.2014 - 10:35
Сообщение
#12
|
|
Гигант мысли Группа: Пользователи Сообщений: 459 Регистрация: 5.02.2014 Пользователь №: 10203 |
Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг... Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага... Да, извиняюсь. Упустил из виду кое-какие детали. 59 шагов получилось. Но все равно это решение под условия не подходит. -------------------- Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
|
|
|
25.03.2014 - 10:48
Сообщение
#13
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
LD m8000 MOV d203 d204 LD< d203 d200 (условие смены года) ADD d203 k12 d204 LD m8000 TZCP d200 d204 d0 m0 END d200, d201, d202 - уставки включения: месяц, день, час d203, d205, d206 - уставки отключения: месяц, день, час d0, d1, d2 - тек. время: месяц, день, час m_by, Ваша программа, конечно, лаконична. Но, во-первых, в ней отсутствуют процедуры включения/отключения выхода и, во-вторых, Вы ее на работоспособность тестировали? P.S. Пожалуйста, обратите внимание на еще один недостаток представленной программы. Что произойдет, если даты в обеих уставках окажутся одинаковыми, а значение часа, с которого требуется произвести включение выхода, превышает значение часа, после которого необходимо произвести выключение выхода. Т.е., фактически, выход должен быть включен без малого целый год... Сообщение отредактировал inntele - 25.03.2014 - 10:56 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
25.03.2014 - 11:34
Сообщение
#14
|
|
Гигант мысли Группа: Пользователи Сообщений: 459 Регистрация: 5.02.2014 Пользователь №: 10203 |
Необходимо уточнение. Как все-таки надо выключать? В час уставки на выключение или после него? После него. Чтобы уставку на выключение можно было непосредственно использовать с командой TZCP без каких-либо дополнительных преобразований. Стало быть, отключение должно происходить в час уставки +1 ? К примеру, час уставки выкл = 18 часов. А инструкция TZCP определит тек. значение как бОльшее чем уставка лишь в 19 часов, и выход проработает еще один час от установленного времени. Цитата Что произойдет, если даты в обеих уставках окажутся одинаковыми, а значение часа, с которого требуется произвести включение выхода, превышает значение часа, после которого необходимо произвести выключение выхода. Т.е., фактически, выход должен быть включен без малого целый год... А разве это не логично? Ведь подразумевается, что время выключения(уставка) всегда больше времени включения (уставки), даже если время выключения в числовом выражении меньше, чем время включения. В этом случае "система" должна понимать, что должна отключить выход в след. году. Или я не прав? -------------------- Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
|
|
|
25.03.2014 - 12:26
Сообщение
#15
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
К участвующим! Убедительная просьба не плодить демагогические посты! Если из условий задачи после его внимательного прочтения все очевидно и задача захватила ум - нужно просто подумать над тем, как ее решить, а, удостоверившись, что решение рабочее, опубликовать. Вот это достойно похвалы. Если в условиях задачи что-то недостаточно ясно сформулировано - задать соответствующие вопросы.
-------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
Текстовая версия | Сейчас: 29.03.2024 - 13:21 |