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

Задачка на чтение данных

Ответить

Автор темы
harbor
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 22 май 2014, 19:35
Имя: Максим

Задачка на чтение данных

Сообщение harbor »

Решил не создавать новую тему, а спросить тут

Задачка такая, есть диапазон адресов около 100 слов
в этом диапазоне в разных словах находятся 15 битов под одному биту-состоянию в слове, которые необходимо считать по modbus с контроллера в Unity Pro
по идее задача решается двумя способами:
1. в контроллере можно сформировать новое слово из этих битов и читать готовое слово, потом его расшифровывать соответственно
2. но можно ли не меняя ПО контроллера читать эти 15 битов и каким способом это лучше делать?
вроде бы можно прочитать сразу 100 регистров и потом их уже обрабатывать..
Либо надо 15 раз прочитать каждое слово с необходимым нам битом, и есть ли тут какое-нибудь лаконичное решение в плане размера кода? Например можно ли это как-то компактно написать на ST ?
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17553
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 818 раз
Поблагодарили: 1647 раз

Re: Задачка на чтение данных

Сообщение Jackson »

Я так понимаю, многое зависит от конкретного диапазона адресов, поскольку какие-то регистры можно читать побитно (Read Single Coil), а какие-то нет. Опять же, зависит от требований по скорости вычитки: если время и посылки надо экономить то в контроллеры нужно собрать слово из бит и потом его прочесть, а если трафик некритичен то читайте все 100 слов и берите нужный бит.

Собственно, решения Вы уже перечислили. Я полагаю, Вам так и поставили задачу неоднозначно - специально, чтобы поняли все нюансы. Поэтому самым правильным ИМХО будет решить её всеми способами, объяснив достоинства и недостатки каждого.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Exactamente
частый гость
частый гость
Сообщения: 409
Зарегистрирован: 20 ноя 2012, 13:45
Имя: :.О.N.Ф
Страна: Россия
Благодарил (а): 3 раза
Поблагодарили: 7 раз

Re: Задачка на чтение данных

Сообщение Exactamente »

У некоторых ОРС, не знаю как там в Unity Pro, бывает настроечка, сколько лишних регистров разрешается прочитать (если нужно считать 10 и 15, то 11, 12, 13 и 14 получаются "лишними"). Соответственно, если ваши слова в некоторых местах кучкуются, то эту настройку можно оптимально установить, чтобы такие кучки читались одним запросом - для вас это будет выглядеть как 15 настроенных на опрос регистров, а оно там само оптимизирует какие отдельно читать, какие вместе.
«Сразу видно внимание к каждой мелочи, неиспорченным не осталось ничто».

Автор темы
harbor
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 22 май 2014, 19:35
Имя: Максим

Re: Задачка на чтение данных

Сообщение harbor »

Вообще это как бы не учебная задача, рабочая. просто я вопрос решил задать в этом подфоруме, потому что для меня это примерно как учебный вопрос.
И я забыл написать что чтение регистров делается из одного контроллера Quantum другим контроллером Quantum, то есть верхний уровень пока не рассматривается.
Поэтому мне нужно написать секцию и скорее всего на ST, если читать 15 регистров по отдельности, но я не нашел еще примерна реализации чтения по modbus на языке ST.

Например функция CREAD_REG(в среде Concept, не знаю есть она Unity Pro или нет) может читать 100 регистров за раз, но я не уверен что это разумное решение.
Xmit вроде может читать 4 блока регистров за раз, но я не нашел пока русского хелпа по ней.
Нормально ли гонять 100 регистров по modbus сети, не создаст ли это излишнюю загрузку и не будет ли вероятности большей потери данных?

Автор темы
harbor
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 22 май 2014, 19:35
Имя: Максим

Re: Задачка на чтение данных

Сообщение harbor »

регистры все из диапазона слов, то есть не Coils
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17553
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 818 раз
Поблагодарили: 1647 раз

Re: Задачка на чтение данных

Сообщение Jackson »

Тогда ИМХО лучше в первом ПЛК сформировать слово из нужных бит, которое потом прочесть вторым ПЛК. Об OPC тут и речи не идёт. Ибо гонять по 200 байт ради того чтобы получить 2 байта - по-моему, неразумно. Хотя и можно если у Вас сеть не загружена.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
harbor
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 22 май 2014, 19:35
Имя: Максим

Re: Задачка на чтение данных

Сообщение harbor »

наверное так и сделаем, просто у нас там гарантия на проект и ПО как бы нельзя менять еще полгода.

а кто-нибудь мог бы показать реализацию чтения слова по модбас на языке ST
или оно однотипно FBD только с переносом объектов в текст ? просто почему-то не смог найти именно текстовую версию
Ответить

Вернуться в «Вопросы от студентов»