IPB

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Задача №37, Занимательные задачи 2014
inntele
сообщение 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


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 24.03.2014 - 09:26
Сообщение #2


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



Задачу разбить на две составляющие:
1) Установка текущего времени, синхронизация.
2) Отработка условия включения\отключения.

Реализация ...
Задать счётчик секунд (в двойном слове более 136 лет) от базовой даты. Инкрементировать значение каждую секунду.
Условие включения\отключения сведётся к сравнению с двойным словом.

Все остальные функции (начальная инициализация, расчет значения включения\отключения) возложить на систему верхнего уровня.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 24.03.2014 - 10:04
Сообщение #3


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



m_by,
Это задача на демонстрацию неочевидных возможностей контроллера, сокрытых от глаз программиста, а не задача, по которой нужен совет, как в теории с приложением определенных усилий со стороны программиста верхнего уровня ее можно было бы реализовать.
Давайте примем, что на верхнем уровне задаются исключительно уставки времени и не более того, а вся математика и логика управления реализуются в ПЛК. Тем паче, что в панели оператора такую математику вам вряд-ли удастся реализовать. Про верхний уровень упомянул лишь для того, чтобы обратить внимание, что уставки времени - переменные величины, и у решающего задачу не возникло соблазна расценивать их как константы.
Что касается вашей идеи вычисления и подсчета секунд, то мне, например, непонятно, зачем считать секунды, если уставки времени выражены даже не в минутах, а в часах...


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ivgtrk
сообщение 24.03.2014 - 12:05
Сообщение #4


Гигант мысли
****

Группа: Пользователи
Сообщений: 459
Регистрация: 5.02.2014
Пользователь №: 10203



Цитата(inntele @ 24.03.2014 - 14:04) *
Тем паче, что в панели оператора такую математику вам вряд-ли удастся реализовать.

Замечу, что в некоторых типах панелей оператора подобная функция реализуется достаточно просто, не требуя при этом каких-либо вычислений со стороны ПЛК.
Прикрепленный файл  1.PNG ( 44.9 килобайт ) Кол-во скачиваний: 35

На приведенном скриншоте время вкл и выкл задается в часах:минутах и по дням недели. Однако, все это, легко модифицируется под года:месяцы:дни:часы, согласно условию задачи (37).

Что же касается реализации подобного в самом ПЛК, то над этим, безусловно, нужно подумать, исходя из ограничений, указанных в задаче.

Сообщение отредактировал ivgtrk - 24.03.2014 - 13:21


--------------------
Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ivgtrk
сообщение 24.03.2014 - 14:32
Сообщение #5


Гигант мысли
****

Группа: Пользователи
Сообщений: 459
Регистрация: 5.02.2014
Пользователь №: 10203



Реализация задачи "очевидными" функциями не вызывает сложностей, но, в моем случае, эта программа занимает 51 шаг, и несколько вылазит за рамки в 30 шагов.
Не очевидных же возможностей в этом отношении, пока действительно, не вижу...


--------------------
Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 24.03.2014 - 16:41
Сообщение #6


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг...
Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага...


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 24.03.2014 - 17:43
Сообщение #7


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



Можно через TZCP ...

где
час = месяц
час = месяц+12, если годВкл<годОткл
мин = день
сек = час
из ограничений - период Вкл\Откл не более года
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 24.03.2014 - 18:40
Сообщение #8


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



Цитата(m_by @ 24.03.2014 - 19:43) *
Можно через TZCP ...

где
час = месяц
час = месяц+12, если годВкл<годОткл
мин = день
сек = час
из ограничений - период Вкл\Откл не более года


Очень горячо, m_by! smile.gif Только причем тут год, который уставкой не задается, если в предлагаемом Вами варианте достаточно сравнить сами уставки. Период, разумеется, в пределах года, по-моему это очевидно из задания.
Хотелось бы увидеть Ваш вариант решения в формате рабочего программного кода. Уставка на включение D200-D202, на выключение D203-D205, флаги формируемые командой TZCP - M0-M2. Показания часов реального времени считываем в D0.

Сообщение отредактировал inntele - 24.03.2014 - 18:52


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 25.03.2014 - 06:14
Сообщение #9


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(inntele @ 23.03.2014 - 15:01) *
Такого-то месяца, такого-то числа, в такой-то час необходимо включить выход ПЛК (уставка времени на включение), и после такого-то месяца, такого-то числа, такого-то часа выключить указанный выход (уставка времени на выключение).

Уставки времени могут задаваться произвольно и изменяться с верхнего уровня, располагаться как в пределах одного года - например, включить 12 июня в 3 часа дня, выключить 12 декабря в 1 ночи, так и с переходом на следующий - например, включить 12 декабря в 1 час ночи, выключить 12 июня в 3 часа дня.

Необходимо уточнение.
Как все-таки надо выключать? В час уставки на выключение или после него?


Цитата(inntele @ 24.03.2014 - 16:41) *
Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг...
Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага...

У меня есть вариант с нетрадиционным использованием TZCP- 40 шагов без END, с выключением после часа уставки.
С нетерпением жду ответа в 30 шагов с END.

Сообщение отредактировал Sergei Troizky - 25.03.2014 - 06:36


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2014 - 08:37
Сообщение #10


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



Цитата(Sergei Troizky @ 25.03.2014 - 08:14) *
Необходимо уточнение.
Как все-таки надо выключать? В час уставки на выключение или после него?

После него. Чтобы уставку на выключение можно было непосредственно использовать с командой TZCP без каких-либо дополнительных преобразований.

Цитата(Sergei Troizky @ 25.03.2014 - 08:14) *
У меня есть вариант с нетрадиционным использованием TZCP- 40 шагов без END, с выключением после часа уставки.
С нетерпением жду ответа в 30 шагов с END.

40 шагов - тоже очень недурно smile.gif По-видимому, для сравнения уставок использовали инструкцию TCMP, которая, с одной стороны, занимает немало шагов, с другой, ей требуются три дополнительных флага...


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 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 - тек. время: месяц, день, час
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ivgtrk
сообщение 25.03.2014 - 10:35
Сообщение #12


Гигант мысли
****

Группа: Пользователи
Сообщений: 459
Регистрация: 5.02.2014
Пользователь №: 10203



Цитата(inntele @ 24.03.2014 - 20:41) *
Не понимаю, как программа, реализованная "очевидными" функциями, могла уложиться в 51 шаг...
Если в под "очевидными" функциями подразумеваются команды сравнения, то только грамотно написанная процедура сравнения текущего времени с уставкой времени и активацией/дезактивацией выхода занимает как минимум 26 шагов. Таких процедур требуется две, значит уже имеем 52 с лишним шага. Плюс команда END, занимающая 3 шага...

Да, извиняюсь. Упустил из виду кое-какие детали. 59 шагов получилось. Но все равно это решение под условия не подходит.


--------------------
Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2014 - 10:48
Сообщение #13


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



Цитата(m_by @ 25.03.2014 - 12:33) *
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


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ivgtrk
сообщение 25.03.2014 - 11:34
Сообщение #14


Гигант мысли
****

Группа: Пользователи
Сообщений: 459
Регистрация: 5.02.2014
Пользователь №: 10203



Цитата(inntele @ 25.03.2014 - 12:37) *
Цитата(Sergei Troizky @ 25.03.2014 - 08:14) *
Необходимо уточнение.
Как все-таки надо выключать? В час уставки на выключение или после него?

После него. Чтобы уставку на выключение можно было непосредственно использовать с командой TZCP без каких-либо дополнительных преобразований.

Стало быть, отключение должно происходить в час уставки +1 ? К примеру, час уставки выкл = 18 часов. А инструкция TZCP определит тек. значение как бОльшее чем уставка лишь в 19 часов, и выход проработает еще один час от установленного времени.

Цитата
Что произойдет, если даты в обеих уставках окажутся одинаковыми, а значение часа, с которого требуется произвести включение выхода, превышает значение часа, после которого необходимо произвести выключение выхода. Т.е., фактически, выход должен быть включен без малого целый год...

А разве это не логично? Ведь подразумевается, что время выключения(уставка) всегда больше времени включения (уставки), даже если время выключения в числовом выражении меньше, чем время включения. В этом случае "система" должна понимать, что должна отключить выход в след. году.
Или я не прав?


--------------------
Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2014 - 12:26
Сообщение #15


Гуру
******

Группа: Пользователи
Сообщений: 1000
Регистрация: 19.08.2009
Пользователь №: 9149



К участвующим! Убедительная просьба не плодить демагогические посты! Если из условий задачи после его внимательного прочтения все очевидно и задача захватила ум - нужно просто подумать над тем, как ее решить, а, удостоверившись, что решение рабочее, опубликовать. Вот это достойно похвалы. Если в условиях задачи что-то недостаточно ясно сформулировано - задать соответствующие вопросы.


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

3 страниц V   1 2 3 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 29.03.2024 - 13:21