PDA

Просмотр полной версии : запись значений по маске



swerder
18.04.2011, 16:35
открыл пример 100RL_MU110_8R.pro с диска мх110, дописал одно слово, скомпилировал, получил предупреждение. так и должно быть?
если нет, то каким образом в дворд записывать биты?
http://img21.imageshack.us/i/pictu.png/

Николаев Андрей
18.04.2011, 17:26
1. Уберите пожалуйста картинки в файл.
2. Используйте блок Pack из библиотеки Util.lib

И к стати - Вы записываете в WORD а не в DWORD

swerder
18.04.2011, 18:02
так ведь как в примере сделано, что в конфигурации плк переменная определена как word, так и делал, присвоил только значение одному биту.
и, кстати, блок pack упаковывает в байт, а вы говорите, что вроде бы надо дворд использовать...

p.s. и еще - в рэ к му110-вр написано, что биты с 0 по 7 несут значения выходов, а биты с 8 по 15 всегда = 0. за этим равенством 0 нужно особо следить или не обязательно?

p.p.s. совсем запутали, блоком pack упаковываем в байт, его объявляем как байт в глобальных с адресом регистра в universal modbus device вида
perem AT %QW10.1.0.0 : BYTE;
так?

Николаев Андрей
18.04.2011, 18:59
Распутываю. :)
У Вас на картинках компилятор не ругается, а предупреждает.
Все нормально, в конфигурации ПЛК оставляете регистр (с ним все гарантированно работает).
Далее блок Pack и далее "значение_в_сеть":=byte_to_word("значение_из_pack);
В графическом языке - просто добавьте еще один блок с именем Byte_to_word. На вход подаем выход блока Pack, на выходе - то, что посылаем в сеть.

0-7 это как раз Ваши 8 выходов. Остальные прибор просто не будет воспринимать. Почему Word - по тому, что у приборов есть браться, 16-ти канальные. Для них, как Вы понимаете воспринимаются все биты с 0-го по 15.

swerder
18.04.2011, 23:40
спасибо, превращу байт в ворд

swerder
21.04.2011, 12:50
начал вникать в это дело, нашел пример считывания всех регистров с мва8 на основе библиотеки unm (http://www.owen.ru/forum/showpost.php?p=48013&postcount=63)...
Николаев Андрей, подскажите, вы имели ввиду такую реализацию считывания 8ас по маске?
если да, то как это можно превратить в считывание флоатов и кодов ошибок с модуля 8ас тому, кто ничего не понимает в массивах/указателях?

Александр Приходько
22.04.2011, 12:16
Здравствуйте. Пример с МВА8 и библиотекой UNM вообще не из данной оперы. Часть разговора на форуме видимо отсутствует. Зачем вам маска для модуля 8АС. Можно делать поканальный опрос.

swerder
22.04.2011, 13:33
Александр Приходько, часть разговора находится тут (http://www.owen.ru/forum/showthread.php?t=10355).
маска необходима, по словам Николаева Андрея, для значительного уменьшения времени опроса модулей, для повышения быстродействия реагирования.
у меня 3 модуля 8АС, если опрашивать поканально (нужны только ошибки и реал):
(2шт*8каналов + 5каналов)*2 параметра=42параметра
42*20мс(время опроса 1 канала)=почти секунда. это очень медленно.

swerder
25.04.2011, 09:40
Валенок, а ваш пост кому адресован?:)

Александр Приходько
25.04.2011, 09:49
Александр Приходько, часть разговора находится тут (http://www.owen.ru/forum/showthread.php?t=10355).
маска необходима, по словам Николаева Андрея, для значительного уменьшения времени опроса модулей, для повышения быстродействия реагирования.
у меня 3 модуля 8АС, если опрашивать поканально (нужны только ошибки и реал):
(2шт*8каналов + 5каналов)*2 параметра=42параметра
42*20мс(время опроса 1 канала)=почти секунда. это очень медленно.
Пример с UNM это похоже на то о чем вы говорите. Но в вашем случае все проще намного. Используйте библиотеку SysLibCom + ComService + ModbusLib.

Первая необходима для работы с портом напрямую, вторая - это библиотека построенная на базе первой, для удобства управления портом.

С помощью первых двух библиотек вы открываете порт с заданными настройками(скорость, стоп-биты и др...). Третья библиотека - это функции протокола модбас. Вам необходимы функции либо 03, либо 04 для чтения регистров с модулей. В отличии от конфигурации ПЛК вы можете указать номер регистра с которого необходимо начать читать данные и число регистров для чтения. В итоге вы вместо 42 запросов можете реализовать один запрос и один "большой" ответ. Но т.к. вы сокращаете время на всяких таймаутах данная комбинация сработает значительнее быстрей.

swerder
25.04.2011, 11:24
как будет "соседствовать" такой опрос модулей 8АС библиотеками с опросом модулей 8Р и 16Д, настроенным в конфигурации плк по 50/51 регистрам (маска) в universal modbus device? т.е. другими словами, если я буду обычными (конф. плк, univ. modbus dev.) методами "общаться" с модулями 8Р и 16Д и необычными (напрямую с портом), не будет ли каких либо конфликтов оборудования, потерь данных из-за несинхронности опросов библиотеками и конфигуратором (например выполняется запрос к модулю 8Р, а в этот момент библиотеки инициируют запрос к 8АС)?
p.s. в случае работы библиотеками с 8АС в конфигурации плк модули модбас мастер на эти 8АС естественно не добавлять?
p.p.s. в описании к примеру UNM вами было написано


Для корректной работы библиотеки SysLibCom необходимо было увеличивать время цикла, плюс вручную открывать и настраивать порт. При использовании библиотеки UNM данные задачи выполнять нет необходимости.

если я правильно понял, это как бы говорит о том, что UNM проще/доработанней чем просто SysLibCom, или я неправильно понял?

Александр Приходько
25.04.2011, 15:45
Modbus.lib предназначена для работы с SysLibCom. Если вы будете делать групповой опрос регистров, то конфигурация исключается. Опрос всей шины RS-485 вы реализуете программно, как для 8АС, так для 8Р и 16Д. Конфликтов не будет и потерь тоже.

swerder
26.04.2011, 10:03
понятно, но смутно. как реализовать опрос 7 модулей? case'ом по режимам слать запрос на 1й модуль, подождать, получить ответ, подождать, послать на 2й и т.д. все 7, правильно?

swerder
08.07.2011, 11:12
на форуме есть примеры "ручного" опроса модулей по шине rs485 с помощью библиотек. в них описывается принцип опроса, который упрощенно можно представить как: посылаем запрос, слушаем, принимаем ответ, ждем, посылаем следующий запрос и т.д. есть посылка устройству, есть ответ от него.
интересует, как реализуется общение с модулями вывода, например му110-8р. есть посылка в устройство маски выходов, есть ли от него ответ, как это выглядит?

Николаев Андрей
08.07.2011, 12:06
Ответ от него есть.
Стандартный (по стандарту ModBus), содержащий ответ записал.

swerder
08.07.2011, 13:20
есть ли на форуме примерчик содержащий общение с модулем вывода, прием ответа, обработку ошибок связи?

Логвиненко Андрей
12.07.2011, 14:18
посмотрите здесь (http://www.owen.ru/forum/showthread.php?t=8920&page=2)

swerder
12.07.2011, 15:56
Логвиненко Андрей спасибо за внимание к проблеме, но решение из той темы мне не подходит - там используется конфигурация плк, у меня же "общение" с модулями идет "ручками" сам открываю порт, посылаю команду, слушаю ответ.

Логвиненко Андрей
13.07.2011, 09:06
Логвиненко Андрей спасибо за внимание к проблеме, но решение из той темы мне не подходит - там используется конфигурация плк, у меня же "общение" с модулями идет "ручками" сам открываю порт, посылаю команду, слушаю ответ.
Я бы не стал заморачиваться с самодельным протоколом, если можно обойтись стандартными средствами. Используйте string input/output module state. У меня получилось читать в одном запросе все регистры МВ110-8А, а затем разбирать ответ через указатель на структуру. Есть два ньюанса:
1-под string модуль всегда отводится 80 байт независимо от количества запрашиваемых байт, поэтому надо смотреть, чтобы не получилось наложение данных,
2- при разборе real надо переставлять старшее и младшее слово.

swerder
13.07.2011, 09:44
Я бы не стал заморачиваться с самодельным протоколом, если можно обойтись стандартными средствами. Используйте string input/output module state. У меня получилось читать в одном запросе все регистры МВ110-8А, а затем разбирать ответ через указатель на структуру. Есть два ньюанса:
1-под string модуль всегда отводится 80 байт независимо от количества запрашиваемых байт, поэтому надо смотреть, чтобы не получилось наложение данных,
2- при разборе real надо переставлять старшее и младшее слово.

интересное решение) на данный момент опрос уже реализовал ручным методом с горем пополам. вроде работает без сбоев.