IPB

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

23 страниц V   1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Занимательные задачи, Оживляем форум.
Sergei Troizky
сообщение 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 19.07.2009 - 04:22
Сообщение #2


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

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



Мда, интерес ниже плинтуса sad.gif
Что же, сделаю еще пару попыток.

Ответ на задачу №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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 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

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 28.07.2009 - 02:32
Сообщение #8


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

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



m_by, а почему Вы Ladder-ом не пользуетесь?
Ведь неизмеримо нагляднее получается.

Цитата(m_by @ 24.07.2009 - 09:33) *
... предыдущее решение с защелкой, для сохранения результата. Однако данное решение не подходит для бит с памятью.
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, независимо от всей остальной логики этого кода и для любого типа битов. Поэтому решение неверно.

Цитата(m_by @ 24.07.2009 - 09:33) *
... решение с 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 28.07.2009 - 09:29
Сообщение #9


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

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



Пользуюсь исключительно Ladder-ом, а вот прикремлять рисунки не довелось, поэтому в Developer-е переключаюсь на список инструкций, и списываю ответ ...

Ответ на (4):
Прикрепленный файл  Q3.JPG ( 5.57 килобайт ) Кол-во скачиваний: 105


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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


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


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

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



По задаче 5 ...
- ни на симуляторе, ни на FX2N, ни на FX3U - за период вплоть до 15 мин бит M100 так и не включился
Прикрепленный файл  q4.JPG ( 9.04 килобайт ) Кол-во скачиваний: 38
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 31.07.2009 - 05:06
Сообщение #12


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

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



Цитата(m_by @ 30.07.2009 - 09:37) *
По задаче 5 ...
- ни на симуляторе, ни на FX2N, ни на FX3U - за период вплоть до 15 мин бит M100 так и не включился
Прикрепленный файл  q4.JPG ( 9.04 килобайт ) Кол-во скачиваний: 38

Странно, у меня на FX1S включается через секунды (там, правда, М8012).
И, вообще, задача не придумана, это- случай с реального вызова к клиенту.
На симуляторе может и не произойти.

Сообщение отредактировал Sergei Troizky - 31.07.2009 - 05:08


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 31.07.2009 - 09:24
Сообщение #13


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

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



Серии FX1S использовалась на фирме пару раз и очень давно, на данный момент и FX2N уже остатки на складах - по сему и проверить не представляется возможным.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 3.08.2009 - 09:31
Сообщение #15


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

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



- хотелось бы увидеть ответ ...
- при формировании импульсов другим способом (например на таймере), а не на M8013 - феномен остаётся актуальным?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

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

 



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