-----
18.11.2017 форум перенесён на другой хостинг. О замеченых глюках просьба сообщать администраторам.
-----
На форуме обязательно:
  1. Заполнить свой профиль на Русском языке. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.
Рекламу на своём форуме мы не размещаем ни на каких условиях.

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

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

Автор темы
megavolt86
авторитет
авторитет
Сообщения: 810
Зарегистрирован: 14 ноя 2013, 19:35
Имя: Анатолий Сергеевич
Откуда: Башкортостан
Благодарил (а): 8 раз
Поблагодарили: 18 раз

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

Сообщение megavolt86 » 21 мар 2016, 09:00

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


leon78
завсегдатай
завсегдатай
Сообщения: 590
Зарегистрирован: 25 июл 2008, 09:06
Имя: U.L.A.
Благодарил (а): 2 раза
Поблагодарили: 6 раз
Контактная информация:

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

Сообщение leon78 » 21 мар 2016, 09:49

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

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

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


rwg
завсегдатай
завсегдатай
Сообщения: 593
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 15 раз
Поблагодарили: 32 раза

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

Сообщение rwg » 21 мар 2016, 10:00

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

Аватара пользователя

VADR
администратор
администратор
Сообщения: 2632
Зарегистрирован: 25 июл 2008, 06:12
Имя: Диев Александр Васильевич
Благодарил (а): 35 раз
Поблагодарили: 38 раз

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

Сообщение VADR » 21 мар 2016, 11:00

leon78 писал(а):Источник цитаты Можно написать простую программу:

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


leon78
завсегдатай
завсегдатай
Сообщения: 590
Зарегистрирован: 25 июл 2008, 09:06
Имя: U.L.A.
Благодарил (а): 2 раза
Поблагодарили: 6 раз
Контактная информация:

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

Сообщение leon78 » 21 мар 2016, 14:16

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

Аватара пользователя

Автор темы
megavolt86
авторитет
авторитет
Сообщения: 810
Зарегистрирован: 14 ноя 2013, 19:35
Имя: Анатолий Сергеевич
Откуда: Башкортостан
Благодарил (а): 8 раз
Поблагодарили: 18 раз

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

Сообщение megavolt86 » 21 мар 2016, 15:43

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


leon78
завсегдатай
завсегдатай
Сообщения: 590
Зарегистрирован: 25 июл 2008, 09:06
Имя: U.L.A.
Благодарил (а): 2 раза
Поблагодарили: 6 раз
Контактная информация:

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

Сообщение leon78 » 21 мар 2016, 16:20

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


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

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

Сообщение Степа » 22 мар 2016, 06:58

Я вот сижу, читаю и со вчера понять задачу никак не могу. Зачем вообще что-то упаковывать?
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
администратор
администратор
Сообщения: 2632
Зарегистрирован: 25 июл 2008, 06:12
Имя: Диев Александр Васильевич
Благодарил (а): 35 раз
Поблагодарили: 38 раз

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

Сообщение VADR » 22 мар 2016, 08:48

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

Если не обратили внимания: на другой стороне - "узкоспециализированный ПЛК", в котором так просто не получается. На стороне симатика проблемы нет.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.


rwg
завсегдатай
завсегдатай
Сообщения: 593
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 15 раз
Поблагодарили: 32 раза

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

Сообщение rwg » 22 мар 2016, 10:01

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

megavolt86 писал(а):Источник цитаты чтоб уменьшить количество запросов

Любой Инженер или Мастер стремятся решить задачу наилучшим образом. В том числе и этим они отличаются от менеджера, считающего, что качество не имеет значения, главное количество.


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

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

Сообщение Степа » 22 мар 2016, 12:30

VADR писал(а):Источник цитаты Если не обратили внимания: на другой стороне - "узкоспециализированный ПЛК", в котором так просто не получается.

Обратил... Странный какой-то контроллер: внутри себя позволяет работать, перепахивать данные, но не позволяет переразместить данные иным образом.

rwg писал(а):Источник цитаты Любой Инженер или Мастер стремятся решить задачу наилучшим образом.

Кто бы спорил...
Вопрос-то у меня - не вообще зачем, а конкретно - если есть возможность работать внутри этого узкоспециализированного ПЛК, то сразу так и работать, чтобы ничего паковать не требовалось.
Или сразу сделать вывод, что это нереально.
К примеру, у меня вот рядом стоит узкоспециализированный контроллер, так у него все битовые сигналы надо выпрашивать строго по одному - иначе никак нельзя, не позволяет его протокол.

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