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

Рекламу на своём форуме мы не размещаем ни на каких условиях.

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

Ответить

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

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

Сообщение harbor » 05 мар 2015, 17:15

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

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

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

TEB
администратор
администратор
Сообщения: 9080
Зарегистрирован: 17 июн 2008, 15:01
Имя: Евгений свет Брониславович
Благодарил (а): 90 раз
Поблагодарили: 121 раз
Контактная информация:

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

Сообщение TEB » 05 мар 2015, 22:37

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

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

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

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

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

Сообщение Exactamente » 06 мар 2015, 02:09

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


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

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

Сообщение harbor » 06 мар 2015, 07:05

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

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


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

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

Сообщение harbor » 06 мар 2015, 07:19

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

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

TEB
администратор
администратор
Сообщения: 9080
Зарегистрирован: 17 июн 2008, 15:01
Имя: Евгений свет Брониславович
Благодарил (а): 90 раз
Поблагодарили: 121 раз
Контактная информация:

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

Сообщение TEB » 06 мар 2015, 10:20

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


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

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

Сообщение harbor » 09 мар 2015, 13:46

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

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

Ответить