Просмотр полной версии : ПЛК63, modbus slave, адреса регистров
Есть ПЛК100 и ПЛК63 соединенные по RS-485.
На ПЛК63 настроил modbus slave - 5 IntP регистров с адресами 332-336.
ПЛК100 - мастер. Когда за одну транзакцию читается один регистр, все работает.
Пожалуйста, подскажите какой адрес регистра использовать, чтобы прочитать 5 регистров за одну транзакцию.
P.S. Документацию читал, не понял...
Не получицца. Только в россыпь. Авторская задумка. В РЭ есть.
Разве только спарить пару интов в область от 82..
Спасибо. А то в документации непонятно написано...
Теоретически, в документации написано как можно.
Но в прошивке 2.12 не работает :(
Возвращаясь к данному вопросу.
Провел тут мини-НИОКР :(
Оказалось, что реальность соответствует инструкции, с точностью до номера первого регистра ;)
Если начинать делать групповой запрос с адреса 1050h (4176) то все соответствует инструкции. А в ней указано совсем другое.
Токма в этой области нет пользовательских параметров.
И глючит иногда. ;)
Я поэтому плк-63 стараюсь делать мастером. Удобней
а что библиотечный модбас в этом ПЛК не рабоает? У меня просто никогда небыло 63-го
штатный только слейв.
Но сам ПЛК удобный для большого круга задач
Токма в этой области нет пользовательских параметров.Вот как раз с этого адреса начинаются пользователевские параметры.
...Для группового чтения параметров по протоколу Modbus возможно обращение к области регистров Modbus, начинающейся с адреса 4096. В ней располагается копия памяти ввода/вывода, доступно групповое чтение значений параметров из области этой области функциями 03, 04, 01, 02. Область %I доступна с регистра 4096 до 4184 и область %Q от 4185. Вторая граница области %Q не определена, т.к. пользовательские параметры при создании добавляются именно в нее, а их количество заранее не известно...
И куда пихается копия, скажем, регистра 364 :confused: ??
to Aso
:( Виноват.Исправлюсь.
Формулирую конкретнее. Для меня доступность польз.параметра это R/W (ниже - только п.1)
Вообщем вот :
1.Польз. п-ры для R/W доступны россыпью по своим адресам в конфигурации - проверено лично. Все Ok
2.Польз. п-ры для R доступны пачкой из области копии - лично не проверял, т.к:
a) недостаточно информации (см.выше) !!! Адрес регистра + 4096 (См. пост #11)
б) только R неинтересует
3.Штатные I для R доступны россыпью по своим адресам в конфигурации - проверено лично. Все Ok
4.Штатные I для R доступны пачкой из области копии - проверял. Сравнивая с п.3. лично наблюдал несоответствие. И так и эдак - см .п.7
5.Штатные Q для R/W доступны россыпью по своим адресам в конфигурации - проверено лично. Все Ok
6.Штатные Q для R доступны пачкой из области копии - не проверял, т.к. хватило п.4
7.Тип REAL для п1,3,5 не требует модификации - проверено лично, п.2,4,6 - см.выше
Филоненко Владислав
25.01.2012, 20:36
Для группового доступа на чтение добавьте к номеру регистра число 0x1000
Например:
"И куда пихается копия, скажем, регистра 364"
364+0х1000=364+4096=4460
Ok. Проверим в ближайшее время
Судя по картинке с размещением, сложно сделать такой вывод, т.к. обл I и Q - разные оффсеты
А пользовательский дабл-регистр 88 ? Опаньки ?
Пост #10 п1. а) - частично снимается.
Для группового доступа на чтение добавьте к номеру регистра число 0x1000Ну да, ну да....
И чтоже не соответствует даже РП по фиксированным регистрам??? :(
Во вложении тестовая программа и результат запроса. В запросе "Плавающая 4" заменена с ПЛК на -4. Четко видно что... И то, что двухрегистровые переменные выравниваются на четный адрес.
Это соответствует действительности?
Походу они этой копией достигли чрезмерного числа параметров :)
Филоненко Владислав
26.01.2012, 12:32
двухрегистровые переменные выравниваются на четный адрес -Это обязательное условие
а смещение у копий 2-х региcтровых тоже +4096 ?
Я же написал и привел пример.
Как и сказано в РП - они замешиваются "единым потоком" (с точностью до выравнивания) по обходу дерева меню. С адреса 4176. Вне зависимости от того, указан на них адрес МОДБАС в меню или не указан.
1.тов. Филоненко указал на простое смещение копии по отношению оригинала, что было просто и замечательно, но
где все-таки тогда копия с адреса 88 ?
2. см.пример и уточняем - адреса регистров оригинальным польз.параметрам можно задать в произвольном, не обязательно возрастающем, порядке. Думаю что вопрос просто вытекает
Где в РП про "единый поток" ?
тов. Филоненко ? Внесите ясность пж-ста
2. см.пример и уточняем - адреса регистров оригинальным польз.параметрам можно задать в произвольном, не обязательно возрастающем, порядке. Думаю что вопрос просто вытекает
Где в РП про "единый поток" ?
Для группового чтения параметров по протоколу Modbus возможно обращение к области регистров Modbus, начинающейся с адреса 4096. В ней располагается копия памяти ввода/вывода, доступно групповое чтение значений параметров из области этой области функциями 03, 04, 01, 02. Область %I доступна с регистра 4096 до 4184 и
область %Q от 4185. Вторая граница области %Q не определена, т.к. пользовательские параметры при создании добавляются именно в нее, а их количество заранее не известно.
тов. Филоненко ? Внесите ясность пж-ста
Мне бы тоже этого хотелось бы.
to ASo
Имеем внешнюю б-ку с заданной структурой (учитываем всякие выравнивания добавляя неиспользуемые слова)
В локальном ПЛК-63 через указатель накладываем эту струткуру на область конфигурации (добавляя невидимые регистры для выравнивания)
В внешнем ПЛК делаем переменную такого же типа и читаем в неё разом.
Все замечательно - пока надо читать. Но для записи надо иметь перекрестную таблицу адресов :eek: ? На кой спрашивается ? :confused:
Все замечательно - пока надо читать. Но для записи надо иметь перекрестную таблицу адресов :eek: ? На кой спрашивается ? :confused:Ну извините, такая конструкция.
Видимо, ограничения КДС на данном железе :(
Я бы не говорил про КДС. Руки.
Филоненко Владислав
27.01.2012, 09:07
Доброе утро. Дедушка Мороз надо кричать 3 раза, хором. :) Но это лирика...
Прям вот сейчас про именно 88 регистр ничего сказать не могу. Однако, если Вы не заметили, все переменные делятся на оперативные (есть канал I/O) и конфигурационные - без канала.
Так вот последние в области копии не отображаются. Нечему там отображаться, не выросло.
88 регистр, вероятно, и относится к таким конфигурационным переменным.
Такие "сложности" вызваны тем, что каждый параметр имеет кучу атрибутов доступа, пределов и пр. И если разрешить групповую запись - то не ясно, как, оставаясь в рамках стандарта ModBus разрешать коллизии, когда 15 параметров имеют правильные значения, 1 вышел за пределы , 1 запрещён на запись и т.п. Нет таких функций и кодов ошибок в ModBus-е.
Для сложных случаев фирма ОВЕН бесплатно распространяет библиотеки протоколов. Их и надо использовать.
P.S. Область %I доступна с регистра 4096 до 4184 - это как раз 88 регистров, с 0-го по 87-й. Оперативных параметров типа I. Далее идут тип Q. Конфигурационные не отображаются.
Такие "сложности" вызваны тем, что каждый параметр имеет кучу атрибутов доступа, пределов и пр. И если разрешить групповую запись - то не ясно, как, оставаясь в рамках стандарта ModBus разрешать коллизии, когда 15 параметров имеют правильные значения, 1 вышел за пределы , 1 запрещён на запись и т.п. Нет таких функций и кодов ошибок в ModBus-е.Вопрос был не об этом. Групповая запись используется достаточно редко (кроме rial, ...).
Вопрос был - почему нельзя сделать групповое чтение и одиночную запись по тому же адресу для одного и того же параметра???
А в некоторых случаях это дополнительные лицензионные платежи за OPC, SCADA, ....
..Групповая запись используется достаточно редко..
Да ладно. Лично я принципиально использую группы для R/W везде где это возможно в принципе. И не для real, а для несколько более крупных объектов. И все летает, и проблем нет. А 63-слейвом общаюсь одним тегом - делаю сетевую переменную ( ;) ) для массива параметров
Вопрос был - почему нельзя сделать групповое чтение и одиночную запись по тому же адресу для одного и того же параметра???
Ну или не сложно было бы не тупо переносить область польз.параметров в копию помощью move, а раскидать туда параметры в соотв. со смещением оригинал-адресов (от 332 и 82) А неиспользованные адреса вернули б нули. Ведь СП200 не парится - использован адрес или нет - возвращает данные при дырках в порядках использованных регистров - реально очень удобно.
. Конфигурационные не отображаются.
Ну а чего зажали - чтение ж ?
Филоненко Владислав
30.01.2012, 10:28
Все очень просто. Нет памяти. Совсем нету. ПЛК63/73 весьма предельный прибор. А процессоры с большим количеством ОЗУ на момент разработки просто отсутствовали.
Если же ставить процессор с внешним ОЗУ - сразу существенно дороже.
Все очень просто. Нет памяти. Совсем нету.
А зачем она вообще когда речь об ответе на запрос ?
Филоненко Владислав
02.02.2012, 13:13
Есть куча параметров, отдельно. надо их собрать в "виртуальный" групповой запрос.
Т.е. расположить в порядке возрастания, проверить что нет дыр и пр., сгрупировать данные в виде 1 массива, и т.п. Все это требует памяти.
L и M предусматривают наличие некоторого безусловного объема. Разве нет ? + cейчас ведь находится место для копий, почему там должно лежать что-то определённое, ведь их кроме проца никто не видит.
Пришел запрос - известно начало и конец. Формируем там временный массив. Дыры забиваем нулями также как и в СП200
Пришел еще один запрос, а этот не ушел весь - проблемы crazy-мастера,
от такого не спасет и существующий вариант.
Филоненко Владислав
03.02.2012, 10:41
Помимо лицензионной области есть просто ОЗУ для программы. Достаточно мало. А потребителей этого ОЗУ много.
Ну ведь вы сейчас кладёте в некую область копии.
Эту область и использовать как динамический буффер-окно для ответов.
:confused:
на запросы
в смысле видимая извне область обмена необязательно должна иметь некую копию всей этой области. Если сейчас именно так и сделано. (?)
Евгений Владимирович
16.06.2017, 11:33
Нужно прочитать группу параметров (6 штук) из ПЛК63 по протоколу Modbus командой 03h. Параметры расположены, начиная с адреса 350. Пытаюсь прочитать копию памяти вывода, начиная с адреса 0x11B7 (4185+350=4535->0x11B7). Вот сам запрос [10][03][11][B7][00][06][73][93], вот ответ [10][83][02][90][F4], Modbus Tester пишет, что Exception 83h/02h .
Как всё же прочитать эти параметры именно группой?
Вы распишите, как эти регистры в меню расположены.
Евгений Владимирович
16.06.2017, 15:26
ASo, вот так:
31707
_PanelChoise_ - 4176 (дес)
_TIME_WORK_ - 4178
_TIME_WORK_1_ - 4180
И т.д. От 4176 в порядке следования в дереве. QD* выравниваются на четный адрес.
Евгений Владимирович
16.06.2017, 20:35
_PanelChoise_ - 4176 (дес)
_TIME_WORK_ - 4178
_TIME_WORK_1_ - 4180
Как вписать значение адреса больше указанного интервала [332... 511]? CodeSys сразу ругается.
Никак, это не нужно.
Вы делаете групповое чтение по этой фиксированной от начала адресации. Запись по тем адресам, которые вписываете.
Евгений Владимирович
16.06.2017, 22:19
Никак, это не нужно.
Вы делаете групповое чтение по этой фиксированной от начала адресации. Запись по тем адресам, которые вписываете.
Т.е. смещённый адрес зависит от порядка следования регистров в меню, а не от назначенного адреса? Как получился смещённый адрес первого регистра - 4176?
Евгений Владимирович
17.06.2017, 20:40
Из РЭ на ПЛК-63.
В Руководстве по эксплуатации ПЛК63(М01) (http://www.owen.ru/uploads/rie_plk63[m01]_2315.pdf) такого не нашёл.
А в Руководстве по программированию ПЛК63/73 (http://www.owen.ru/uploads/rp_plk63.73_v.1.4.pdf) указано следующее:
Для группового чтения параметров по протоколу Modbus возможно обращение к
области регистров Modbus, начинающейся с адреса 4096. В ней располагается копия
памяти ввода/вывода, доступно групповое чтение значений параметров из области
этой области функциями 03, 04, 01, 02. Область %I доступна с регистра 4096 до 4184 и
область %Q от 4185. Вторая граница области %Q не определена, т.к. пользователь-
ские параметры при создании добавляются именно в нее, а их количество заранее не
известно.
Поэтому и не понятно откуда взялся адрес 4176 :confused:
Евгений Владимирович
19.06.2017, 08:27
_PanelChoise_ - 4176 (дес)
_TIME_WORK_ - 4178
_TIME_WORK_1_ - 4180
И т.д. От 4176 в порядке следования в дереве. QD* выравниваются на четный адрес.
Проверил на "железе", всё работает. Спасибо большое!
Но всё же откуда смещение 4176?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot