Занимательные задачи, Оживляем форум. |
Здравствуйте, гость ( Вход | Регистрация )
Занимательные задачи, Оживляем форум. |
4.08.2009 - 05:30
Сообщение
#16
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Ответ на задачу №5.
Системные пульсирующие биты переключаются асинхронно с циклом программы, поэтому могут переключиться в любой момент ее выполнения. Если, во время выполнения программы, М8013 включится после прочтения контакта в шаге 6, но до прочтения контакта в шаге 12, оба условия на момент их прочтения будут ложны, и ни в одной из этих строк выходная инструкция выполнена не будет. Исправленная программа должна содержать промежуточный М бит, на основании которого будут выполняться альтернативные строки. Таким образом, темой задачи были устройства, асинхронные с циклом программы. Тема гораздо шире, чем описанный пример. Любые бит или слово, являющиеся результатом работы прерываний, изменяют состояние в любом месте основной программы. Прерываниями, кроме явно запрограмированных, являются также высокоскоростные счетчики и инструкции HSCS/HSCR/HSZ. Задача №6. Вновь HSCS/HSCR. Каким будет результат одновременного срабатывания инструкций-антагонистов DHSCS и DHSCR, то есть сконфигурированных на один и тот же счетчик, на одинаковые пороговые значения, и на один и тот же выход PLC? Единственный активный участник темы, m_by, по-видимому не пользуется высокоскоростными инструкциями. Может, еще кто-нибудь подключится, наконец? Сообщение отредактировал Sergei Troizky - 3.05.2011 - 01:30 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
5.08.2009 - 09:33
Сообщение
#17
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
(6) ... действительно не использую.
Вопрос (задача): определить четность D100, результат в M100. Есть различные варианты своей реализации на FX2N и FX3U, но интересны и другие решения. |
|
|
5.08.2009 - 17:56
Сообщение
#18
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Вопрос (задача): определить четность D100, результат в M100. Будем считать это задачей №7. Подожду пару дней с ответом, может кто попробует... -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
7.08.2009 - 04:53
Сообщение
#19
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Ответ на задачу №6.
Насколько мне известно, нигде не задокументирован. Результат будет достаточно неочевидным и зависит от порядка, в котором эти инструкции расположены в программе. Значение имеют только активные инструкции, то есть те, логические условия которых были истинны в последнем выполненном цикле программы. Итоговое состояние выхода-адресата будет определяться последней активной инструкцией по тексту программы. Неочевидность заключается в том, что тут нельзя говорить о порядке их выполнения в цикле программы, ибо все они- прерывания. Кроме того, имеет место интересная особенность. Если выход-адресат выключен на момент срабатывания инструкций, и последняя активная в программе- DHSCR, выход останется выключенным, но кратковременно будет включен. Включение настолько коротко, что не видно глазом на индикаторе выхода, но четко ловится диагностическим прерыванием, если сигнал с выхода завести на высокоскоростной вход. Если же выход исходно включен, и последняя активная в программе- DHSCS, выход останется включенным, но без аналогичного кратковременного выключения. В случае неоднократно продублированных инструкций-антагонистов, результат не зависит ни от общего количества активных дубликатов, ни от количества дубликатов каждой из них, ни от их порядка в программе (кроме последней активной). С практической точки зрения, в некоторых применениях следует избегать сценария с кратковременным незаметным включением выхода. Сообщение отредактировал Sergei Troizky - 10.08.2009 - 02:16 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
9.08.2009 - 20:20
Сообщение
#20
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Самый прямолинейный способ определения четности числа- деление его на 2 и анализ остатка.
При сравнении остатка с нулем- правильно работает и для отрицательных чисел. Parity_Straightforward.JPG ( 10.41 килобайт ) Кол-во скачиваний: 55 Способ использует сравнительно медленную инструкцию деления и занимает 2 регистра под результат. Если эти недостатки несущественны в конкретном случае, данный способ может быть предпочтителен именно в силу своей прямолинейности, что делает операцию понятной даже без имен и комментариев. А вообще, у четных чисел в младшем бите- всегда ноль (включая отрицательные числа). Поэтому, определение четности числа сводится к чтению его младшего бита. В FX3, допускающем обращение к битам регистров, задача становится тривиальной. Parity_FX3.JPG ( 8.67 килобайт ) Кол-во скачиваний: 55 А универсальный для всех моделей вариант- Parity_Universal.JPG ( 11.59 килобайт ) Кол-во скачиваний: 70 Для определения четности длинных слов, по-прежнему достаточно анализировать только младшее слово, поэтому ничего менять не нужно ни в одном из указанных методов. Сообщение отредактировал Sergei Troizky - 19.08.2009 - 02:41 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
9.08.2009 - 20:46
Сообщение
#21
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Задача №8.
Математическая. Требуется реализовать, в PLC Mitsubishi, вычисление x^y (возведение в степень, оно же- экспоненциальная функция), где x и y- действительные числа. Выберите подходящий контроллер из серии FX и напишите соответствующий код. Сформулируйте ограничения для значений x и y в вашем коде. P.S. X и Y в задании- это математические переменные. Не путать с входами/выходами PLC. Пускай заданием будет D100=D110^D120. Сообщение отредактировал Sergei Troizky - 10.08.2009 - 02:20 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
10.08.2009 - 09:47
Сообщение
#22
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
(7) нечего добавить.
(8) реализовывал таким образом: q5_2.jpg ( 8.27 килобайт ) Кол-во скачиваний: 62 d110 и d120 должны быть такими, чтобы результат в d100 не превышал двойное слово с учётом знака. |
|
|
10.08.2009 - 17:18
Сообщение
#23
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
m_by,
Вы неверно поняли задачу. Речь идет о действительных, то есть дробных, числах (они же floating point). -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
11.08.2009 - 10:26
Сообщение
#24
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
... действительно неверно понял.
С floating point стараюсь не связываться, из-за непредсказуемой потери точности. Решение (8) является частным для конкретного случая (например степень представленая дробью n/m, где на m накладываются ещё ограничения), и как следствие речь пойдёт не о реализации, а о математическом анализе поставленой задачи. Сообщение отредактировал m_by - 11.08.2009 - 10:34 |
|
|
13.08.2009 - 07:50
Сообщение
#25
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Вначале- краткое соображение по предложенному способу целочисленного возведения в степень.
Нетрудно посчитать, что 32-битный регистр результата может переполниться уже на кубе 4-значного числа, либо на 4-й степени 3-значного числа. Так что, формат floating point выдуман не зря и может понадобиться даже для работы с целыми числами, для расширения границ возможных значений. Точность его всегда одинакова- 23 бита мантиссы, что составляет 7-8 значящих десятичных цифр. Это, например, позволяет измерять десятки километров с точностью до сантиметра, несколько тонн с точностью до грамма, пару часов времени с точносью 1 мсек, либо более 3-х месяцев с точностью 1 сек. Ухудшается (предсказуемо) не точность, а разрешение; многие путают. Но floating point- не для счетчиков, где и при предельных значениях надо правильно единички прибавлять, а именно для вычислений с разумной точностью. Ответ на задачу №8. ... речь пойдёт не о реализации, а о математическом анализе поставленой задачи. Совершенно верно. Математический анализ. Имея в распоряжении натуральную экспоненциальную функцию и натуральные логарифмы, можно воспользоваться следующей зависимостью: x^y=(e^ln(x))^y=e^(y*ln(x)) Натуральный логарифм определен для ненулевых положительных чисел. 0^y=0 и 0^0 можно отработать, как частные случаи, поэтому x лишь не может быть отрицательным. Для y никаких ограничений нет. Единственным подходящим контроллером является FX3U. Контроллеры ниже FX2N не поддерживают действительных чисел, а в FX2N отсутствуют экспоненциальная функция и логарифмы. Код для FX3U: FX3U_REAL_POWER.JPG ( 21.64 килобайт ) Кол-во скачиваний: 67 D110 и D120 должны быть формата floating point. Сообщение отредактировал Sergei Troizky - 3.05.2011 - 01:40 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
13.08.2009 - 08:31
Сообщение
#26
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Задача №9.
Зонные сравнения. Инструкция ZCP не отрабатывает корректно ситуацию, когда начало зоны превышает по значению конец зоны. Например, DZCP K120 K80 C252 M10 не будет распознавать зону, начинающуюся со 120 и оканчивающуюся на 80. Между тем, такая необходимость часто возникает на кольцевых счетчиках (например, 200-импульсный энкодер со сбросом, делающий один оборот за цикл машины, должен включить некое устройство в положении 120, продолжая счет, сброситься со 199 в 0, и, по-прежнему продолжая счет, выключить устройство в положении 80). Напишите код без высокоскоростных инструкций, правильно реализующий для С252 детекцию зоны от D100 до D102, включительно, при любом их соотношении. Сообщение отредактировал Sergei Troizky - 3.05.2011 - 01:42 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
14.08.2009 - 09:52
Сообщение
#27
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Если каждый импульс отслеживается, то задача вырождается в тривиальную:
set m10 при D100=C252, и rst m10 при D102=C252. иначе q6.jpg ( 6.23 килобайт ) Кол-во скачиваний: 35 |
|
|
14.08.2009 - 17:56
Сообщение
#28
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Нет, каждый счет высокочастотного счетчика не может гарантированно отслеживаться в основной программе, иначе высокочастотные счетчики были бы не нужны.
Боже упаси так запрограммировать реальную машину. В предложенном ответе просматривается правильная идея- разделить детекцию на 2 случая, в зависимости от соотношения границ зоны. Сами сравнения, к сожалению, неверны. Сообщение отредактировал Sergei Troizky - 15.08.2009 - 20:34 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
17.08.2009 - 09:27
Сообщение
#29
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
|
|
|
18.08.2009 - 04:59
Сообщение
#30
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Сравнения опять неверны. И не забываем, что С252- 32-битный счетчик.
Правильное решение задачи №9: Ring_Compare.JPG ( 19.85 килобайт ) Кол-во скачиваний: 59 Один пример практического применения описан в самом задании. Также, при переводе программ из Allen Bradley в Mitsubishi, желательно так переводить инструкцию зонного сравнения LIM (она поддерживает любое соотношение границ зоны). Сообщение отредактировал Sergei Troizky - 18.08.2009 - 05:01 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
Текстовая версия | Сейчас: 29.04.2024 - 01:45 |