Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

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

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

Автор темы
megavolt86
специалист
специалист
Сообщения: 627
Зарегистрирован: 14 ноя 2013, 19:35
Ф.И.О.: Анатолий Сергеевич
Откуда: Башкортостан
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Автор темы
megavolt86
специалист
специалист
Сообщения: 627
Зарегистрирован: 14 ноя 2013, 19:35
Ф.И.О.: Анатолий Сергеевич
Откуда: Башкортостан
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

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

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


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

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

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

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


Степа
осмотрелся
осмотрелся
Сообщения: 146
Зарегистрирован: 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
администратор
администратор
Сообщения: 2405
Зарегистрирован: 25 июл 2008, 06:12
Ф.И.О.: Диев Александр Васильевич
Благодарил (а): 19 раз
Поблагодарили: 25 раз

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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


Вернуться в «Средний уровень автоматизации»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей