1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Разложение слова побитно

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить
Аватара пользователя

Автор темы
megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Разложение слова побитно

Сообщение megavolt86 »

Здравствуйте, уважаемые!)))
Появилась задачка осуществить обмен между узкоспециализированным плк и Сименс с7-1500 по протоколу модбас.
Битовые регистры модбас разбросаны по адресному пространству и чтоб уменьшить количество запросов хочу упаковать биты в слова. В Сименсе матаппарат сильный и процесс распаковки/упаковки осуществить проще простого, но вот на другой стороне (узкоспециализированный контроллер) такого аппарата нет, есть только простейшие математические функции.
Упаковку математическими функциями реализовать удалось, а вот распаковку ума не приложу как осуществить...
Может знатоки сталкивались с такими задачками и укажут нужное направление решения?
:ext_secret:

leon78
эксперт
эксперт
Сообщения: 1031
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 34 раза
Поблагодарили: 110 раз

Разложение слова побитно

Сообщение leon78 »

Остаток от деления на 2 - младший бит
Деление на 2 - сдвиг вправо на 1 бит.
Можно написать простую программу:

Код: Выделить всё

цикл n= 0 .. 15
бит[n]= остаток (число/2)
число = число/2
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

rwg
почётный участник форума
почётный участник форума
Сообщения: 1041
Зарегистрирован: 29 апр 2014, 09:57
Имя: Рыбкин Владимир Геннадьевич
Страна: Россия
город/регион: Тверь
Благодарил (а): 55 раз
Поблагодарили: 134 раза

Разложение слова побитно

Сообщение rwg »

Бит0 = (Регистр and 1 << 0) > 0; ..... Бит15 = (Регистр and 1 << 15) > 0;
Вообще оптимальный вариант зависит от возможностей неназванного контроллера
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4727
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 225 раз
Поблагодарили: 392 раза

Разложение слова побитно

Сообщение VADR »

leon78 писал(а): Можно написать простую программу:
Можно нулевой бит выделять по "И" с числом 1 (в двоичной системе получается слово 0000000000000001) - это вместо получения остатка от деления. И делить на 2 сдвигом на 1 разряд.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

leon78
эксперт
эксперт
Сообщения: 1031
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 34 раза
Поблагодарили: 110 раз

Разложение слова побитно

Сообщение leon78 »

Вопрос был про математические функции.
Сдвиг и побитовые И и ИЛИ, я так понял из первого поста, узкоспециализированный контроллер не поддерживает. Иначе вопрос бы не возник :)
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
Аватара пользователя

Автор темы
megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Разложение слова побитно

Сообщение megavolt86 »

:roll: Интригу создал)))
Базис 100 имя этого плк, операции логические он поддерживает, но во сдвига нет как такового. Язык программирования весьма специфический и потому от некоторых вещей голова кружиться начинает)))
С делением связываться не хотелось, но похоже придется...
Завтра с утра залью, проверю как работает.
Всем огромное спасибо за подсказки :good:
:ext_secret:

leon78
эксперт
эксперт
Сообщения: 1031
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 34 раза
Поблагодарили: 110 раз

Разложение слова побитно

Сообщение leon78 »

Если побитное И поддерживает, то все просто:
бит 0 = (регистр И 1) <> 0
бит 1 = (регистр И 2) <> 0
бит 2 = (регистр И 4) <> 0
и так далее
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Степа
осмотрелся
осмотрелся
Сообщения: 158
Зарегистрирован: 25 окт 2010, 10:30
Имя: Капуста Степан Степанович
Поблагодарили: 7 раз

Разложение слова побитно

Сообщение Степа »

Я вот сижу, читаю и со вчера понять задачу никак не могу. Зачем вообще что-то упаковывать?
S7-1500 у меня нет /и надеюсь, не появится/, S7-200 есть, S7-300, есть других ПЛК фирм... Во всех случаях делаю примерно одинаково: битовые флаги складываю по группам рядом. Скажем, m12.0, m12.1..m13.7. Затем беру и загоняю в 16-битный регистр MW12 - все 16 битовых флагов "улетают" в один регистр. На приемной стороне делаю аналогично: 16-битный регистр читаю, скажем, в MW0 и работаю с флагами m0.0, m0.1..m1.7.
Все, что тут надо знать - на S7-200 и S7-300 мотороловский формат данных - первым в слове идет старший байт.
Головняк бывает, если на одном из концов стоит ПК и программа, написанная на языке высокого уровня: тут битовый флаг вполне может оказаться 32-битным... Вот тут надо думать насчет упаковки....
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4727
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 225 раз
Поблагодарили: 392 раза

Разложение слова побитно

Сообщение VADR »

Степа писал(а): Я вот сижу, читаю и со вчера понять задачу никак не могу. Зачем вообще что-то упаковывать?
Если не обратили внимания: на другой стороне - "узкоспециализированный ПЛК", в котором так просто не получается. На стороне симатика проблемы нет.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

rwg
почётный участник форума
почётный участник форума
Сообщения: 1041
Зарегистрирован: 29 апр 2014, 09:57
Имя: Рыбкин Владимир Геннадьевич
Страна: Россия
город/регион: Тверь
Благодарил (а): 55 раз
Поблагодарили: 134 раза

Разложение слова побитно

Сообщение rwg »

Степа писал(а): Я вот сижу, читаю и со вчера понять задачу никак не могу. Зачем вообще что-то упаковывать?
megavolt86 писал(а): чтоб уменьшить количество запросов
Любой Инженер или Мастер стремятся решить задачу наилучшим образом. В том числе и этим они отличаются от менеджера, считающего, что качество не имеет значения, главное количество.

Степа
осмотрелся
осмотрелся
Сообщения: 158
Зарегистрирован: 25 окт 2010, 10:30
Имя: Капуста Степан Степанович
Поблагодарили: 7 раз

Разложение слова побитно

Сообщение Степа »

VADR писал(а): Если не обратили внимания: на другой стороне - "узкоспециализированный ПЛК", в котором так просто не получается.
Обратил... Странный какой-то контроллер: внутри себя позволяет работать, перепахивать данные, но не позволяет переразместить данные иным образом.
rwg писал(а): Любой Инженер или Мастер стремятся решить задачу наилучшим образом.
Кто бы спорил...
Вопрос-то у меня - не вообще зачем, а конкретно - если есть возможность работать внутри этого узкоспециализированного ПЛК, то сразу так и работать, чтобы ничего паковать не требовалось.
Или сразу сделать вывод, что это нереально.
К примеру, у меня вот рядом стоит узкоспециализированный контроллер, так у него все битовые сигналы надо выпрашивать строго по одному - иначе никак нельзя, не позволяет его протокол.

Ну если все так плохо, то тогда было бы очень интересно узнать, что это за ПЛК такой и какие у него возможности. И уже от этого плясать...
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»