 | |
Предыдущие результаты
Возникли сложности с настройкой даннго модуля. Использую RSLogic5000 и PCB 2.1.9.1
Нужно прочитать 100 регистров и записать 10. Создаю новый проект с настройками. MNET овский модуль добавил в проект. 1000 регистров на чтение, 600 на запись (по умолчанию)
Error/Status Pointer : 4500
Read Register Start : 1000
Read Register Count : 1000
Write Register Start : 0
Write Register Count : 600
Failure Flag Count : 0
Initialize Output Data : No
Pass-Through Mode : 0
Duplex/Speed Code : Auto-negotiate
Создаю модбасс запрос(пока на чтение)
Enable - yes
Internal Address - 0 (с нулевого регистра в MNET.Data.read) - я так понимаю.
Poll Interval - 0
Reg Count - 100 (сто регистров для чтения)
Swap Code - No Change
Node IP Address - IP device (IP машины на которой заведен MODSIM)
Serv Port - 502
Slave Address - 1
ModBus Function - FC 3 - Read Holding Registers(4X)
MB Address in Device - 0 (с нулевого регистра лежат данные)
В области чтения MNET модуля нули. Данных нет. Подскажите в какую сторону копать? Заранее спасибо.
|
Насколько я помню, MVI-MCM модули конфигурируются и управляются с помощью MOV- и BTR/BTW-инструкций.
Почему бы Вам не посетить сайт производителя и не скачать там вместе с документацией на Ваш модуль файлы конфигурации и примеры программирования?
http://www.prosoft-technology.com/prosoft/products/for_rockwell_automation/protocol/serial/modbus
По указанной ссылке выберите свой вариант модуля, поскольку они выпускаются для различных платформ от PLC-5 до ControlLogix.
Удачи!
|
Помогите разобраться, ситуация такая:
Подключаю к MVI-MCM-мастер, modbus slave
в контроллере прописываю такую команду, установить 1
N11:50 1__100__0__1__0__1__5__0__0
внутр адресе М1.1.100 = FF00h
команда не исполняется, остальные 6, 15, 16 норм. выполняются.
|
[quote:3ff767622e="Eraser"]ведь при использовании функции 3 в сеть уйдет запрос на чтение того адреса, что указан в DevAddres + 40001. Или не так?
[/quote:3ff767622e]
откуда такая информация?
Еще раз, из мануала MVI56-MCM:
[quote:3ff767622e]
"With Modbus, to read an address of 40001, what will actually be transmitted out port is Function Code 03 (one byte) with an address of 00 00 (two bytes)."
[/quote:3ff767622e]
На человеческом языке это:
Чтобы считать адрес 40001 по модбасу, из порта, в действительности, будет передаваться функция 3 с адресом 0 (в двух байтах).
|
[quote:e83d966153="AlexV"]...там лежит файл ModbusMaster.ACD
В нем готовая реализация протокола на ладдере через встроенный COM-порт процессора. :wink:[/quote:e83d966153]
У RS232 скорость передачи данных меньше и помехозащищенность хуже. ИМХО не годится он для серьезных решений в автоматизации.
А также нарушается принцип модульности АСУ ТП. Горячей замены коммуникационного модуля после возможного замыкания сети модбас на силовую сеть уже не получится :(
Но при ограниченном бюджете можно воспользоваться этим вариантом.
[quote:e83d966153="Eraser"]
необходимо на одно шасси приводить 3 разных сети от 3-х шкафов с расходомерами, так что нужны дополнительные порты.
[/quote:e83d966153]
В принципе, сети можно объединить через повторители, если по количеству хостов влазите в 247 штук и не требуется высокая скорость обмена данными.
[quote:e83d966153="Eraser"][quote:e83d966153]Мануал со мной тоже согласен: Smile[/quote:e83d966153]
что то мне кажется что мануал не очень то согласен :). В мануале то как раз и прописано, что чтение при посылке байтов 00 00 будет идти с 40001, а если я хочу скажем считать с 38950 ? что мне записать в тэг DevAddress? Отрицательные значения?[/quote:e83d966153]
Вы не поняли то, что я написал. В сеть (модбас слейву) передается адрес регистра в диапазоне от 0 до 65535. Это традиционное представление адреса. В "нетрадиционном" представлении модбас адресов типа "40001" ведущая цифра "4","3", "1", "0" определяет как бы "тип данных". "4" - это регистры хранения, "3" - регистры чтения, "1" - входные биты "0" - выходные биты. А число образованное оставшимися 4мя цифрами минус один это как раз адрес из диапазона 0-FFFF. Вот его то и надо посылать слейву. А "тип данных" в отсылаемой модбас телеграмме определяется функцией, которую вы указали.
Если вам разработчики расходомера указали адрес 38950, это значит, что вам надо считывать данные функцией 4 из регистра чтения по адресу 8949.
Если разработчики указали адрес 38950, а также указали, что считывать надо из [u:e83d966153]регистров хранения[/u:e83d966153], то вам надо считывать данные функцией 3 из регистра хранения по адресу 38950.
Вот такая путаница в модбасе. :o
И опять уже Википедия со мной согласна: :D
[quote:e83d966153="Wikipedia - Modbus"]
Следует отметить, что со способом адресации данных связана определённая путаница. Modbus был первоначально разработан для контроллеров Modicon. В этих контроллерах для каждой из таблиц использовалась специальная нумерация. Например, первому регистру ввода соответствовал номер ячейки 30001, а первому регистру хранения — 40001. Таким образом, регистру хранения с адресом 107 в команде Modbus соответствовал регистр № 40108 контроллера. Хотя такое соответствие адресов больше не является частью стандарта, некоторые программные пакеты могут автоматически «корректировать» вводимые пользователем адреса, например, вычитая 40001 из адреса регистра хранения.[/quote:e83d966153]
Вот здесь спецификация модбаса. [url]http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf[/url]
|
[quote:121226639e="Eraser"]И еще вдогонку, в конце при посылке надо добавлять СRC. Так вот MVI-MCM будет сам добавлять это к каждому запросу? Или мне нужно это еще высчитывать дополнительными командами?[/quote:121226639e]
MCM будет добавлять сам. Для удаленного шасси обрати внимание на [b:121226639e]MVI56E-MCMR[/b:121226639e].
С расходомером могут быть проблемы и другого рода, например корректор расхода газа БВР.М имеет как-бы протокол "Modbus", но:
- считывать надо весь блок данных (128 байт).
- данные упакованы (8 бит, 8 бит, ..., 16, 32, 32, ..., 80, 8, ...).
|
Прежде, чем покупать дорогущие модули MVI-MCM или задумываться о ручном программировании ADM, посмотрите в каталог
C:\RSLogix 5000\Projects\Samples\ENU\v16\Rockwell Automation
там лежит файл ModbusMaster.ACD
В нем готовая реализация протокола на ладдере через встроенный COM-порт процессора. :wink:
|
[quote:0f340934fe="Eraser"]Чем бы вычитать правильно эти данные в ControlLogix? [/quote:0f340934fe]
MVI-MCM - это оптимальный вариант. Можно также использовать MVI-GSC или MVI-ADM.
[quote:0f340934fe="Eraser"]По заверению разработчиков - протокол modbus, НО не modiconовский (т.е. данные будут лежать не в области начиная с 40001, а в какой то другой, в какой - еще точно не знаю).
...
Через MVI-MCM? Но насколько я вычитал из документации, при применении функции 3 (чтение), вычитка начинается с 40001 (devaddr). Как изменить не нашел.
[/quote:0f340934fe]
Согласно спецификации modbus, доступ к регистрам ввода (также как и к дискретным входа, выходам и регистрам хранения) осуществляется с помощью 16-битного адреса. Это значит, что вы указываете адрес требуемого регистра в диапазоне от 0 до FFFF. А формат адресации вида "40001" придуман для логического разделения дискретных входов, выходов, входных регистров и регистров хранения. Он используется на бумаге (в документации). В железе - просто 16-битный адрес.
Так что, если эти разработчики используют 16-битный адрес, то данные вы считаете без проблем.
Мануал со мной тоже согласен: :)
[quote:0f340934fe="User manual MVI56-MCM, page 47"]
DevAddress specifies the Modbus Slave address for the registers associated with that command. This is the offset address for the Modbus Slave device. With Modbus, to read an address of 40001, [u:0f340934fe]what will actually be transmitted out port is[/u:0f340934fe] Function Code 03 (one byte) [u:0f340934fe]with an address of 00 00 (two bytes)[/u:0f340934fe]. This means that to read an address of 40501, use Func 3 with a DevAddress of 500.[/quote:0f340934fe]
[quote:0f340934fe="Eraser"]
Через MVI-GSC (или MVIe-GCS)? Но там вроде как прийдется как-то прописывать весь этот протокол (что в общем то лень), да и потянет ли он работу в удаленных шасси?
[/quote:0f340934fe]
Да, придется реализовывать модбас протокол на релейной логике. Это лишняя трата времени.
MVI-GSC "потянет работу в удаленном шасси" точно также, как и MVI-MCM. У них одинаковые размеры тегов входа/выхода модуля.
Из личного опыта: два MVI-GSC с RPI = 30мс в удаленных шасси нормально работают в одном сегменте controlnet. К тому же, в этой сети еще шасси с сигнальными модулями работают.
Если время обновления данных не критично, то можно смело размещать MVI-MCM в удаленном шасси. Если требуется максимальная скорость обновления данных, то может стоит использовать MVI-ADM, размещенный в локальном шасси. Можно сэкономить несколько десятков миллисекунд :)
|
Есть прибор - расходомер УВР-011. У него есть выход RS-485. По заверению разработчиков - протокол modbus, НО не modiconовский (т.е. данные будут лежать не в области начиная с 40001, а в какой то другой, в какой - еще точно не знаю).
Чем бы вычитать правильно эти данные в ControlLogix?
Через MVI-MCM? Но насколько я вычитал из документации, при применении функции 3 (чтение), вычитка начинается с 40001 (devaddr). Как изменить не нашел.
Через MVI-GSC (или MVIe-GCS)? Но там вроде как прийдется как-то прописывать весь этот протокол (что в общем то лень), да и потянет ли он работу в удаленных шасси?
|
ModScan32 - программа Client ModBus (лучше Version 7.B01-00).
PortMon - программа сканер COM порта.
Все бесплатное.
|
Предыдущие результаты
Ещё результаты |
|
| |
|