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

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


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

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

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

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

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

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

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7884
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 35 раз
Поблагодарили: 63 раза
Контактная информация:

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
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 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
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 22 май 2014, 18:35
Ф.И.О.: Максим

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

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

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

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

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7884
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 35 раз
Поблагодарили: 63 раза
Контактная информация:

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

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

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


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

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

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

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

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


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



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

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