IPB

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

 
Ответить в эту темуОткрыть новую тему
> "Подтягивающий" сдвиг битов
acoustik
сообщение 30.01.2017 - 15:30
Сообщение #1


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

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



Да да, знаем мы про сдвиги и ротации smile.gif. Но тут фокус весь вот в чем:
К примеру имеем входы X0...X7 и набор маркеров M0...M7. Допустим включился Х0, это событие зафиксировалось включившимся маркером М0. Затем включился Х5, но отображающий это событие маркер должен стать М1.
Более понятно:
Х0 М0
Х1 М1
Х2 М2
Х3 М3
Х4 М4
Х5 М5
Х6 М6
Х7 М7

Теперь добавился вход Х3 и его маркер следующий по порядку - М2:
Х0 М0
Х1 М1
Х2 М2
Х3 М3
Х4 М4
Х5 М5
Х6 М6
Х7 М7
Маркер М0 "принадлежит" входу Х0, маркер М1 входу Х5 и маркер М2 входу Х3 - в порядке их появления.

Теперь сигнал с Х0 исчез:
Х0 М0
Х1 М1
Х2 М2
Х3 М3
Х4 М4
Х5 М5
Х6 М6
Х7 М7
кол-во включенных входов (Х) и вкл маркеров остались равны, однако маркеры "сместились" вверх и теперь маркеру М0 соотв вход Х5 (т.к. он появился раньше Х3) а маркеру М1 соответственно вход Х3.

Вот над таким алгоритмом размышляю... Если у кого будут какие идеи - милости прошу smile.gif


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 30.01.2017 - 18:25
Сообщение #2


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

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



То есть нужо включить столько последовательных битов, сколько включенных входов.
Можно вот так.
Модель контроллера не указана, поэтому написано так, чтобы подходило для любого контроллера серии FX.

Сообщение отредактировал Sergei Troizky - 30.01.2017 - 19:38
Прикрепленные файлы
Прикрепленный файл  Bits.jpg ( 36.88 килобайт ) Кол-во скачиваний: 37
 


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


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

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



Цитата(Sergei Troizky @ 31.01.2017 - 00:25) *
Можно вот так.
Модель контроллера не указана, поэтому написано так, чтобы подходило для любого контроллера серии FX.

Хм... Работает! Спасибо! rolleyes.gif Вот оно как просто оказалось...
А я в своих размышлениях забрел вообще в дебри ph34r.gif. Думал анализировать слово К2Х0 на кол-во включенных бит, затем через массив включать маркеры... ой...
Завтра прокручу все "на листочке", чтобы понять суть )

Тоже чуял, что надо применить некий буфер, как у Вас (К2М100)...

Сообщение отредактировал acoustik - 30.01.2017 - 19:32


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 30.01.2017 - 19:48
Сообщение #4


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

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



Цитата(Sergei Troizky @ 31.01.2017 - 00:25) *
То есть нужо включить столько последовательных битов, сколько включенных входов.

Да. Для более глубокого понимания сути поясню: мне поставили задачу сделать регистратор событий.
Эти маркеры - это биты отображения полей на HMI. На экране будут присутствовать несколько статичных полей, которые отображают некие данные. Но отсутствующие события (данные) будут отображаться на экране в виде нулей в полях вывода цифровых данных, и следовательно, эти поля нужно отключать (убирать из видимости).
Существующие же данные отображать, сдвигая и группируя их в порядке убывания возрастания, сверху страниц.

Сообщение отредактировал acoustik - 30.01.2017 - 19:58


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 30.01.2017 - 20:09
Сообщение #5


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

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



Цитата(acoustik @ 30.01.2017 - 19:29) *
Завтра прокручу все "на листочке", чтобы понять суть.

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

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


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


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

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



В случае применения процессора FX3U можно было бы использовать сортировку массива по полю, содержащему код события, а нулевые коды (отсутствующие события) в конце списка - гасить, выключением соотв битов.
Просто думаю, для таких задач ставить 3U... что стрелять из пушки по воробьям. Поэтому хотел разработать такой алгоритм и для более младших моделей плк семейства FX. Но там нет инструкции SORT... sad.gif


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 30.01.2017 - 20:19
Сообщение #7


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

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



Цитата(Sergei Troizky @ 31.01.2017 - 02:09) *
Цитата(acoustik @ 30.01.2017 - 19:29) *
Завтра прокручу все "на листочке", чтобы понять суть.

Чтобы Вам не мучиться, сразу подскажу: сложение слова с самим собой есть умножение на два, что равносильно сдвигу на один бит влево, но выполняется быстрее команды сдвига.

Ну что Вы, это я понял сразу. Еще подумал, а почему просто не умножить на 2... И снова в курсе - команда сложения быстрее команды умножения rolleyes.gif .
То что сдвиг влево/вправо на число равному степени двойки равносильно умножению/делению - это есть "азбука".

Я заострил внимание на установке М0 при каждом проходе цикла... Пока не укладывается в голове зачем это. В смысле что это дает wacko.gif

Сообщение отредактировал acoustik - 30.01.2017 - 20:23


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 30.01.2017 - 20:24
Сообщение #8


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

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



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

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


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


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

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



Цитата(Sergei Troizky @ 31.01.2017 - 02:24) *
Вы бы удивились, узнав, скольким программистам мне приходилось это разъяснять.
М0 включается не в каждом проходе цикла, а только когда обнаружен включенный старший бит буфера после очередного сдвига.

Тьфу, прошу прощения. Слона то я и не приметил smile.gif. Да, конечно, если включен М107.


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 30.01.2017 - 20:37
Сообщение #10


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

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



Цитата(Sergei Troizky @ 31.01.2017 - 02:09) *
сложение слова с самим собой есть умножение на два, что равносильно сдвигу на один бит влево, но выполняется быстрее команды сдвига.

Вот это гениально. Что называется век живи... Я просто не додумался провести параллели между этими действиями (сложение/умножение/сдвиг) соотнеся их между собой smile.gif Максимум - сдвигал бы влево.


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 30.01.2017 - 20:58
Сообщение #11


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

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



Еще раз спасибо, Сергей - вопрос считаю закрытым. Все равно на бумажке прям по битикам разложу Ваши действия, чтобы в голове отложилось smile.gif


--------------------
There are only 10 types of people in the world — those who understand binary, and those who don't.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

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

 



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