IPB

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

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


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


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

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



(6) ... действительно не использую.
Вопрос (задача): определить четность D100, результат в M100.
Есть различные варианты своей реализации на FX2N и FX3U, но интересны и другие решения.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 5.08.2009 - 17:56
Сообщение #18


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

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



Цитата(m_by @ 5.08.2009 - 09:33) *
Вопрос (задача): определить четность D100, результат в M100.

Будем считать это задачей №7.

Подожду пару дней с ответом, может кто попробует...


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


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

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



Ответ на задачу №6.
Насколько мне известно, нигде не задокументирован.
Результат будет достаточно неочевидным и зависит от порядка, в котором эти инструкции расположены в программе.
Значение имеют только активные инструкции, то есть те, логические условия которых были истинны в последнем выполненном цикле программы.
Итоговое состояние выхода-адресата будет определяться последней активной инструкцией по тексту программы.
Неочевидность заключается в том, что тут нельзя говорить о порядке их выполнения в цикле программы, ибо все они- прерывания.
Кроме того, имеет место интересная особенность.
Если выход-адресат выключен на момент срабатывания инструкций, и последняя активная в программе- DHSCR, выход останется выключенным, но кратковременно будет включен. Включение настолько коротко, что не видно глазом на индикаторе выхода, но четко ловится диагностическим прерыванием, если сигнал с выхода завести на высокоскоростной вход.
Если же выход исходно включен, и последняя активная в программе- DHSCS, выход останется включенным, но без аналогичного кратковременного выключения.
В случае неоднократно продублированных инструкций-антагонистов, результат не зависит ни от общего количества активных дубликатов, ни от количества дубликатов каждой из них, ни от их порядка в программе (кроме последней активной).
С практической точки зрения, в некоторых применениях следует избегать сценария с кратковременным незаметным включением выхода.

Сообщение отредактировал Sergei Troizky - 10.08.2009 - 02:16


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


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


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


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

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



(7) нечего добавить.
(8) реализовывал таким образом:
Прикрепленный файл  q5_2.jpg ( 8.27 килобайт ) Кол-во скачиваний: 62

d110 и d120 должны быть такими, чтобы результат в d100 не превышал двойное слово с учётом знака.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 10.08.2009 - 17:18
Сообщение #23


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

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



m_by,
Вы неверно поняли задачу.
Речь идет о действительных, то есть дробных, числах (они же floating point).


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


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

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



... действительно неверно понял.
С floating point стараюсь не связываться, из-за непредсказуемой потери точности.
Решение (8) является частным для конкретного случая (например степень представленая дробью n/m, где на m накладываются ещё ограничения), и как следствие речь пойдёт не о реализации, а о математическом анализе поставленой задачи.

Сообщение отредактировал m_by - 11.08.2009 - 10:34
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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.
Цитата(m_by @ 11.08.2009 - 10:26) *
... речь пойдёт не о реализации, а о математическом анализе поставленой задачи.

Совершенно верно. Математический анализ.
Имея в распоряжении натуральную экспоненциальную функцию и натуральные логарифмы, можно воспользоваться следующей зависимостью:
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


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


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


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

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



Если каждый импульс отслеживается, то задача вырождается в тривиальную:
set m10 при D100=C252, и rst m10 при D102=C252.
иначе
Прикрепленный файл  q6.jpg ( 6.23 килобайт ) Кол-во скачиваний: 35
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 14.08.2009 - 17:56
Сообщение #28


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

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



Нет, каждый счет высокочастотного счетчика не может гарантированно отслеживаться в основной программе, иначе высокочастотные счетчики были бы не нужны.
Боже упаси так запрограммировать реальную машину.

В предложенном ответе просматривается правильная идея- разделить детекцию на 2 случая, в зависимости от соотношения границ зоны.
Сами сравнения, к сожалению, неверны.

Сообщение отредактировал Sergei Troizky - 15.08.2009 - 20:34


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


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

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



поспешил, и не проверял ...
Прикрепленный файл  q6_2.jpg ( 7 килобайт ) Кол-во скачиваний: 31
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 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


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

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

 



- Текстовая версия Сейчас: 29.04.2024 - 01:45