Занимательные задачи, Оживляем форум. |
Здравствуйте, гость ( Вход | Регистрация )
Занимательные задачи, Оживляем форум. |
16.07.2009 - 04:53
Сообщение
#1
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
В продолжение темы «Дохлый форум».
Постараюсь немного оживить его: буду выкладывать небольшие задачки по серии FX. Для хорошего профессионала очень ценны знание недокументированных и неочевидных мелочей (и не очень мелочей), а также умение не усложнять решений. Вот о таком и будут задачки. Они будут, по-возможности, относиться ко всей серии FX и независимы от применяемого софта (на моей памяти уже сменилось 5 поколений софта при том же железе). Пишите ответы. Ни к чему повторять, если другие уже ответили так же. Если же есть другая точка зрения- отлично, особенно аргументированная. Правильные ответы буду давать через несколько дней, чтобы у заинтересовавшихся была возможность самим разобраться. Кому неинтересно- не мешайте другим. Если никому неинтересно- тему закрою. Итак, Задача №1 Тема- биты, сгрупированные в слова и индексная адресация. Вопрос: что означает адрес K1X20Z при Z=10 ? Дополнительный вопрос: в каком качестве этот адрес может использоваться в инструкциях? Сообщение отредактировал Sergei Troizky - 18.07.2009 - 23:00 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
19.07.2009 - 04:22
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Мда, интерес ниже плинтуса
Что же, сделаю еще пару попыток. Ответ на задачу №1. Вопрос не так прост, как кажется на первый взгляд. Будь это K1M20Z, все было бы элементарно: при Z=10, K1M(20+10), оно же K1M30, означает биты М30, М31, М32, М33. Иное дело с входами/выходами. Индексация там по-прежнему десятичная, а адресация- восьмиричная. Поэтому, группа K1X20Z при Z=10 начинается не с X30, а с X32 и означает входы Х32, Х33, Х34, Х35. Руководство по программированию FX3U впрямую говорит об этом, но для более ранних моделей этот вопрос незадокументирован. Использовать в инструкциях такой адрес можно только в качестве источника данных, но не получателя результата, так как изменить состояние входов програмно- невозможно. Задача №2. Тема- высокоскоростные инструкции HSCS/HSCR. Как известно, количество этих инструкций, которое можно выполнять в каждом цикле программы, ограничено. Вопрос: что происходит при превышении этого количества? Ясно, что выполняться будет лишь разрешенное количество, но которые? Прочитанные первыми или последними? Сообщение отредактировал Sergei Troizky - 19.07.2009 - 07:48 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
20.07.2009 - 09:48
Сообщение
#3
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Тема интересна.
Можно несколько задач сразу, так как: - первая задача - ответ используется [ for k4; mov k4x0z0 k4m0z0; add z0 k16 z0; next ], для виртуальной подмены сигнала(ов) на входе - вторая задача - не использую высокоскоростные функции за ненадобностью Сообщение отредактировал m_by - 20.07.2009 - 09:51 |
|
|
23.07.2009 - 07:43
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Давать несколько задач сразу не хочется. Их ведь придумывать и тестировать нужно; некогда, да и закончатся раньше.
Ответ на задачу №2. Выполняются инструкции HSCS/HSCR, прочитанные первыми. Ответ незадокументирован и неочевиден, так как обычно действия, выполняемые в цикле программы позднее, имеют приоритет над ранее выполненными. Для сведения: все ответы- результат тестирования на живых PLC. Тесты проводятся на контроллерах FX1S/FX1N и результаты, по личному опыту, полностью справедливы для FX2N. Никогда не работал с FX3U (и вряд ли буду скоро- наша фирма сменила стандарт PLC на OMRON). Если обнаружите расхождения ответов с поведением FX3U- просьба делиться этой ценной информацией. Задача №3. Несложная задачка на тему альтерации бита. Система команд PLC Мitsubishi содержит достаточно уникальную инструкцию ALT, изменяющую состояние бита-аргумента на противоположное. В контроллерах других производителей такой инструкции нет (поправьте, если неправ). Задача: напишите наиболее компактный эквивалент кода LD M100 ALT M101 без использования инструкции ALT. Сообщение отредактировал Sergei Troizky - 3.05.2011 - 01:27 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
23.07.2009 - 09:31
Сообщение
#5
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
... задача поставлена так, что значение m101 будет изменяться при каждом скане.
LD m100 LD m101 inv ori m101 anb out m101 ... в итоге на 2 шага больше кода с ALT. Сообщение отредактировал m_by - 23.07.2009 - 09:34 |
|
|
23.07.2009 - 18:46
Сообщение
#6
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
То есть, как на картинке ниже ...
ALT.JPG ( 9.21 килобайт ) Кол-во скачиваний: 108 Решение неверно: при выключенном условии М100, инструкция INV активирует реле М101. Инструкция же ALT не изменяет состояния выходного бита, если ее условие выключено. Попробуйте снова. P.S. Кто-нибудь знает, как вставлять картинку в сообщение, а не прицеплять файл? Сообщение отредактировал Sergei Troizky - 24.07.2009 - 01:21 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
24.07.2009 - 09:33
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
... предыдущее решение с защелкой, для сохранения результата. Однако данное решение не подходит для бит с памятью.
LD m100 LD m101 inv ori m101 anb ldi m100 and m101 orb out m101 ... решение с set и rst (тривиальное) ld m100 mps ani m101 set m101 out m102 mpp and m101 ani m102 rst m121 |
|
|
28.07.2009 - 02:32
Сообщение
#8
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
m_by, а почему Вы Ladder-ом не пользуетесь?
Ведь неизмеримо нагляднее получается. ... предыдущее решение с защелкой, для сохранения результата. Однако данное решение не подходит для бит с памятью. LD m100 LD m101 inv ori m101 ALT_m_by_2.JPG ( 7.73 килобайт ) Кол-во скачиваний: 56 anb ldi m100 and m101 orb out m101 То же замечание, что и прежде: при выключенном условии М100, инструкция INV всегда включает М101, независимо от всей остальной логики этого кода и для любого типа битов. Поэтому решение неверно. ... решение с set и rst (тривиальное) ld m100 mps ani m101 ALT_m_by_3.JPG ( 9.81 килобайт ) Кол-во скачиваний: 49 set m101 out m102 mpp and m101 ani m102 rst m121 Решение вполне работоспособно. Контакт М101 в нижней ветке не нужен; будет работать и без него. Ответ на задачу №3. Наиболее компактное решение выглядит так: ALT_Compact.JPG ( 5.44 килобайт ) Кол-во скачиваний: 115 Если логика условия сложная, а промежуточный бит создавать не хочется, можно так: ALT_Complex_Cond.JPG ( 5.39 килобайт ) Кол-во скачиваний: 84 (логика условия здесь не показана). В обоих вариантах, верхняя ветвь переключает бит когда условие включено, нижняя- сохраняет состояние бита когда условие выключено. Оба полностью эмулируют инструкцию ALT и могут пригодиться для перевода программы из Mitsubishi на другую платформу. Задача №4. Чем-то сродни предыдущей. Напишите код, эмулирующий таймер задержки выключения (off-delay timer), отсутствующий в PLC Mitsubishi. Контакт такого таймера включается сразу при выполнении условия и выключается спустя заданное время после того, как условие перестало выполняться. P.S. Предлагаю в будущих решениях стараться не использовать инструкцию INV и импульсные контакты с суффиксом P, поскольку их не могут вводить пользователи программы Medoc, и решения перестанут быть независимыми от софта. Сообщение отредактировал Sergei Troizky - 28.07.2009 - 03:26 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
28.07.2009 - 09:29
Сообщение
#9
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Пользуюсь исключительно Ladder-ом, а вот прикремлять рисунки не довелось, поэтому в Developer-е переключаюсь на список инструкций, и списываю ответ ...
Ответ на (4): Q3.JPG ( 5.57 килобайт ) Кол-во скачиваний: 105 |
|
|
29.07.2009 - 02:59
Сообщение
#10
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Абсолютно верное решение; нечего ни убрать, ни добавить.
Возможное применение- перевод на Mitsubishi программы из другой модели (например, Allen Bradley). Задача №5. Тему сформулирую вместе с правильным ответом, иначе она будет подсказкой. Для разнообразия- ladder из Medoc-а: M8013.JPG ( 20.48 килобайт ) Кол-во скачиваний: 123 В приведенной программе, исходное значение D10 равно нулю. Затем, в зависимости от состояния системного бита M8013, переключающегося с частотой 1 сек., в D10 записывается, с равной вероятностью, 10 либо 20. Так задумывалось. Но запустите эту программу, и очень скоро (через секунды, или даже доли секунды) бит М100 включится, указывая, что в очередном цикле программы не произошло ни того, ни другого, и содержимое D10 осталось нулевым. Объясните это явление и исправьте программу! Сообщение отредактировал Sergei Troizky - 30.07.2009 - 02:32 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
30.07.2009 - 09:37
Сообщение
#11
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
По задаче 5 ...
- ни на симуляторе, ни на FX2N, ни на FX3U - за период вплоть до 15 мин бит M100 так и не включился q4.JPG ( 9.04 килобайт ) Кол-во скачиваний: 38 |
|
|
31.07.2009 - 05:06
Сообщение
#12
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
По задаче 5 ... - ни на симуляторе, ни на FX2N, ни на FX3U - за период вплоть до 15 мин бит M100 так и не включился q4.JPG ( 9.04 килобайт ) Кол-во скачиваний: 38 Странно, у меня на FX1S включается через секунды (там, правда, М8012). И, вообще, задача не придумана, это- случай с реального вызова к клиенту. На симуляторе может и не произойти. Сообщение отредактировал Sergei Troizky - 31.07.2009 - 05:08 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
31.07.2009 - 09:24
Сообщение
#13
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Серии FX1S использовалась на фирме пару раз и очень давно, на данный момент и FX2N уже остатки на складах - по сему и проверить не представляется возможным.
|
|
|
3.08.2009 - 02:04
Сообщение
#14
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Попробовал снова на FX1S.
С М8013 включается через несколько минут, с М8012 или М8011- через несколько секунд. Феномен не зависит от модели PLC (пока разобрались, проблема бывала и на FX1N, и на FX2N; FX3 тогда не существовало), про симулятор ничего сказать не могу. Будете пробовать еще? Или поверите на слово? Или снимать задачу? Сообщение отредактировал Sergei Troizky - 27.08.2009 - 02:06 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
3.08.2009 - 09:31
Сообщение
#15
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
- хотелось бы увидеть ответ ...
- при формировании импульсов другим способом (например на таймере), а не на M8013 - феномен остаётся актуальным? |
|
|
Текстовая версия | Сейчас: 29.03.2024 - 10:08 |