открыл пример 100RL_MU110_8R.pro с диска мх110, дописал одно слово, скомпилировал, получил предупреждение. так и должно быть?
если нет, то каким образом в дворд записывать биты?
http://img21.imageshack.us/i/pictu.png/
Вид для печати
открыл пример 100RL_MU110_8R.pro с диска мх110, дописал одно слово, скомпилировал, получил предупреждение. так и должно быть?
если нет, то каким образом в дворд записывать биты?
http://img21.imageshack.us/i/pictu.png/
1. Уберите пожалуйста картинки в файл.
2. Используйте блок Pack из библиотеки Util.lib
И к стати - Вы записываете в WORD а не в DWORD
так ведь как в примере сделано, что в конфигурации плк переменная определена как 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;
так?
Распутываю. :)
У Вас на картинках компилятор не ругается, а предупреждает.
Все нормально, в конфигурации ПЛК оставляете регистр (с ним все гарантированно работает).
Далее блок Pack и далее "значение_в_сеть":=byte_to_word("значение_из_pack) ;
В графическом языке - просто добавьте еще один блок с именем Byte_to_word. На вход подаем выход блока Pack, на выходе - то, что посылаем в сеть.
0-7 это как раз Ваши 8 выходов. Остальные прибор просто не будет воспринимать. Почему Word - по тому, что у приборов есть браться, 16-ти канальные. Для них, как Вы понимаете воспринимаются все биты с 0-го по 15.
спасибо, превращу байт в ворд
начал вникать в это дело, нашел пример считывания всех регистров с мва8 на основе библиотеки unm...
Николаев Андрей, подскажите, вы имели ввиду такую реализацию считывания 8ас по маске?
если да, то как это можно превратить в считывание флоатов и кодов ошибок с модуля 8ас тому, кто ничего не понимает в массивах/указателях?
Здравствуйте. Пример с МВА8 и библиотекой UNM вообще не из данной оперы. Часть разговора на форуме видимо отсутствует. Зачем вам маска для модуля 8АС. Можно делать поканальный опрос.
Александр Приходько, часть разговора находится тут.
маска необходима, по словам Николаева Андрея, для значительного уменьшения времени опроса модулей, для повышения быстродействия реагирования.
у меня 3 модуля 8АС, если опрашивать поканально (нужны только ошибки и реал):
(2шт*8каналов + 5каналов)*2 параметра=42параметра
42*20мс(время опроса 1 канала)=почти секунда. это очень медленно.
Валенок, а ваш пост кому адресован?:)
Пример с UNM это похоже на то о чем вы говорите. Но в вашем случае все проще намного. Используйте библиотеку SysLibCom + ComService + ModbusLib.
Первая необходима для работы с портом напрямую, вторая - это библиотека построенная на базе первой, для удобства управления портом.
С помощью первых двух библиотек вы открываете порт с заданными настройками(скорость, стоп-биты и др...). Третья библиотека - это функции протокола модбас. Вам необходимы функции либо 03, либо 04 для чтения регистров с модулей. В отличии от конфигурации ПЛК вы можете указать номер регистра с которого необходимо начать читать данные и число регистров для чтения. В итоге вы вместо 42 запросов можете реализовать один запрос и один "большой" ответ. Но т.к. вы сокращаете время на всяких таймаутах данная комбинация сработает значительнее быстрей.
как будет "соседствовать" такой опрос модулей 8АС библиотеками с опросом модулей 8Р и 16Д, настроенным в конфигурации плк по 50/51 регистрам (маска) в universal modbus device? т.е. другими словами, если я буду обычными (конф. плк, univ. modbus dev.) методами "общаться" с модулями 8Р и 16Д и необычными (напрямую с портом), не будет ли каких либо конфликтов оборудования, потерь данных из-за несинхронности опросов библиотеками и конфигуратором (например выполняется запрос к модулю 8Р, а в этот момент библиотеки инициируют запрос к 8АС)?
p.s. в случае работы библиотеками с 8АС в конфигурации плк модули модбас мастер на эти 8АС естественно не добавлять?
p.p.s. в описании к примеру UNM вами было написано
если я правильно понял, это как бы говорит о том, что UNM проще/доработанней чем просто SysLibCom, или я неправильно понял?
Modbus.lib предназначена для работы с SysLibCom. Если вы будете делать групповой опрос регистров, то конфигурация исключается. Опрос всей шины RS-485 вы реализуете программно, как для 8АС, так для 8Р и 16Д. Конфликтов не будет и потерь тоже.
понятно, но смутно. как реализовать опрос 7 модулей? case'ом по режимам слать запрос на 1й модуль, подождать, получить ответ, подождать, послать на 2й и т.д. все 7, правильно?
на форуме есть примеры "ручного" опроса модулей по шине rs485 с помощью библиотек. в них описывается принцип опроса, который упрощенно можно представить как: посылаем запрос, слушаем, принимаем ответ, ждем, посылаем следующий запрос и т.д. есть посылка устройству, есть ответ от него.
интересует, как реализуется общение с модулями вывода, например му110-8р. есть посылка в устройство маски выходов, есть ли от него ответ, как это выглядит?
Ответ от него есть.
Стандартный (по стандарту ModBus), содержащий ответ записал.
есть ли на форуме примерчик содержащий общение с модулем вывода, прием ответа, обработку ошибок связи?
Логвиненко Андрей спасибо за внимание к проблеме, но решение из той темы мне не подходит - там используется конфигурация плк, у меня же "общение" с модулями идет "ручками" сам открываю порт, посылаю команду, слушаю ответ.
Я бы не стал заморачиваться с самодельным протоколом, если можно обойтись стандартными средствами. Используйте string input/output module state. У меня получилось читать в одном запросе все регистры МВ110-8А, а затем разбирать ответ через указатель на структуру. Есть два ньюанса:
1-под string модуль всегда отводится 80 байт независимо от количества запрашиваемых байт, поэтому надо смотреть, чтобы не получилось наложение данных,
2- при разборе real надо переставлять старшее и младшее слово.