PDA

Просмотр полной версии : ПЛК63, modbus slave, адреса регистров



monteg
26.12.2011, 18:40
Есть ПЛК100 и ПЛК63 соединенные по RS-485.
На ПЛК63 настроил modbus slave - 5 IntP регистров с адресами 332-336.
ПЛК100 - мастер. Когда за одну транзакцию читается один регистр, все работает.
Пожалуйста, подскажите какой адрес регистра использовать, чтобы прочитать 5 регистров за одну транзакцию.
P.S. Документацию читал, не понял...

Валенок
26.12.2011, 19:09
Не получицца. Только в россыпь. Авторская задумка. В РЭ есть.
Разве только спарить пару интов в область от 82..

monteg
26.12.2011, 19:16
Спасибо. А то в документации непонятно написано...

ASo
27.12.2011, 17:40
Теоретически, в документации написано как можно.
Но в прошивке 2.12 не работает :(

ASo
24.01.2012, 20:52
Возвращаясь к данному вопросу.
Провел тут мини-НИОКР :(
Оказалось, что реальность соответствует инструкции, с точностью до номера первого регистра ;)
Если начинать делать групповой запрос с адреса 1050h (4176) то все соответствует инструкции. А в ней указано совсем другое.

Валенок
24.01.2012, 21:52
Токма в этой области нет пользовательских параметров.
И глючит иногда. ;)
Я поэтому плк-63 стараюсь делать мастером. Удобней

capzap
24.01.2012, 22:20
а что библиотечный модбас в этом ПЛК не рабоает? У меня просто никогда небыло 63-го

Валенок
24.01.2012, 22:35
штатный только слейв.
Но сам ПЛК удобный для большого круга задач

ASo
25.01.2012, 06:55
Токма в этой области нет пользовательских параметров.Вот как раз с этого адреса начинаются пользователевские параметры.

Валенок
25.01.2012, 11:00
...Для группового чтения параметров по протоколу 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

Валенок
25.01.2012, 21:52
Ok. Проверим в ближайшее время
Судя по картинке с размещением, сложно сделать такой вывод, т.к. обл I и Q - разные оффсеты

А пользовательский дабл-регистр 88 ? Опаньки ?

Пост #10 п1. а) - частично снимается.

ASo
26.01.2012, 09:56
Для группового доступа на чтение добавьте к номеру регистра число 0x1000Ну да, ну да....
И чтоже не соответствует даже РП по фиксированным регистрам??? :(


Во вложении тестовая программа и результат запроса. В запросе "Плавающая 4" заменена с ПЛК на -4. Четко видно что... И то, что двухрегистровые переменные выравниваются на четный адрес.

Это соответствует действительности?

Валенок
26.01.2012, 10:20
Походу они этой копией достигли чрезмерного числа параметров :)

Филоненко Владислав
26.01.2012, 12:32
двухрегистровые переменные выравниваются на четный адрес -Это обязательное условие

Валенок
26.01.2012, 13:13
а смещение у копий 2-х региcтровых тоже +4096 ?

ASo
26.01.2012, 13:15
Я же написал и привел пример.
Как и сказано в РП - они замешиваются "единым потоком" (с точностью до выравнивания) по обходу дерева меню. С адреса 4176. Вне зависимости от того, указан на них адрес МОДБАС в меню или не указан.

Валенок
26.01.2012, 13:32
1.тов. Филоненко указал на простое смещение копии по отношению оригинала, что было просто и замечательно, но
где все-таки тогда копия с адреса 88 ?

2. см.пример и уточняем - адреса регистров оригинальным польз.параметрам можно задать в произвольном, не обязательно возрастающем, порядке. Думаю что вопрос просто вытекает
Где в РП про "единый поток" ?

тов. Филоненко ? Внесите ясность пж-ста

ASo
26.01.2012, 13:49
2. см.пример и уточняем - адреса регистров оригинальным польз.параметрам можно задать в произвольном, не обязательно возрастающем, порядке. Думаю что вопрос просто вытекает
Где в РП про "единый поток" ?
Для группового чтения параметров по протоколу Modbus возможно обращение к области регистров Modbus, начинающейся с адреса 4096. В ней располагается копия памяти ввода/вывода, доступно групповое чтение значений параметров из области этой области функциями 03, 04, 01, 02. Область %I доступна с регистра 4096 до 4184 и
область %Q от 4185. Вторая граница области %Q не определена, т.к. пользовательские параметры при создании добавляются именно в нее, а их количество заранее не известно.

тов. Филоненко ? Внесите ясность пж-ста
Мне бы тоже этого хотелось бы.

Валенок
26.01.2012, 13:55
to ASo
Имеем внешнюю б-ку с заданной структурой (учитываем всякие выравнивания добавляя неиспользуемые слова)
В локальном ПЛК-63 через указатель накладываем эту струткуру на область конфигурации (добавляя невидимые регистры для выравнивания)
В внешнем ПЛК делаем переменную такого же типа и читаем в неё разом.
Все замечательно - пока надо читать. Но для записи надо иметь перекрестную таблицу адресов :eek: ? На кой спрашивается ? :confused:

ASo
26.01.2012, 13:59
Все замечательно - пока надо читать. Но для записи надо иметь перекрестную таблицу адресов :eek: ? На кой спрашивается ? :confused:Ну извините, такая конструкция.
Видимо, ограничения КДС на данном железе :(

Валенок
26.01.2012, 14:07
Я бы не говорил про КДС. Руки.

Филоненко Владислав
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. Конфигурационные не отображаются.

ASo
28.01.2012, 09:27
Такие "сложности" вызваны тем, что каждый параметр имеет кучу атрибутов доступа, пределов и пр. И если разрешить групповую запись - то не ясно, как, оставаясь в рамках стандарта ModBus разрешать коллизии, когда 15 параметров имеют правильные значения, 1 вышел за пределы , 1 запрещён на запись и т.п. Нет таких функций и кодов ошибок в ModBus-е.Вопрос был не об этом. Групповая запись используется достаточно редко (кроме rial, ...).
Вопрос был - почему нельзя сделать групповое чтение и одиночную запись по тому же адресу для одного и того же параметра???
А в некоторых случаях это дополнительные лицензионные платежи за OPC, SCADA, ....

Валенок
29.01.2012, 01:11
..Групповая запись используется достаточно редко..
Да ладно. Лично я принципиально использую группы для R/W везде где это возможно в принципе. И не для real, а для несколько более крупных объектов. И все летает, и проблем нет. А 63-слейвом общаюсь одним тегом - делаю сетевую переменную ( ;) ) для массива параметров


Вопрос был - почему нельзя сделать групповое чтение и одиночную запись по тому же адресу для одного и того же параметра???
Ну или не сложно было бы не тупо переносить область польз.параметров в копию помощью move, а раскидать туда параметры в соотв. со смещением оригинал-адресов (от 332 и 82) А неиспользованные адреса вернули б нули. Ведь СП200 не парится - использован адрес или нет - возвращает данные при дырках в порядках использованных регистров - реально очень удобно.


. Конфигурационные не отображаются.
Ну а чего зажали - чтение ж ?

Филоненко Владислав
30.01.2012, 10:28
Все очень просто. Нет памяти. Совсем нету. ПЛК63/73 весьма предельный прибор. А процессоры с большим количеством ОЗУ на момент разработки просто отсутствовали.
Если же ставить процессор с внешним ОЗУ - сразу существенно дороже.

Валенок
31.01.2012, 21:21
Все очень просто. Нет памяти. Совсем нету.
А зачем она вообще когда речь об ответе на запрос ?

Филоненко Владислав
02.02.2012, 13:13
Есть куча параметров, отдельно. надо их собрать в "виртуальный" групповой запрос.
Т.е. расположить в порядке возрастания, проверить что нет дыр и пр., сгрупировать данные в виде 1 массива, и т.п. Все это требует памяти.

Валенок
02.02.2012, 14:38
L и M предусматривают наличие некоторого безусловного объема. Разве нет ? + cейчас ведь находится место для копий, почему там должно лежать что-то определённое, ведь их кроме проца никто не видит.

Пришел запрос - известно начало и конец. Формируем там временный массив. Дыры забиваем нулями также как и в СП200

Пришел еще один запрос, а этот не ушел весь - проблемы crazy-мастера,
от такого не спасет и существующий вариант.

Филоненко Владислав
03.02.2012, 10:41
Помимо лицензионной области есть просто ОЗУ для программы. Достаточно мало. А потребителей этого ОЗУ много.

Валенок
03.02.2012, 11:17
Ну ведь вы сейчас кладёте в некую область копии.
Эту область и использовать как динамический буффер-окно для ответов.

ASo
03.02.2012, 11:53
Для каких ответов?

Валенок
03.02.2012, 13:10
: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 .
Как всё же прочитать эти параметры именно группой?

ASo
16.06.2017, 14:58
Вы распишите, как эти регистры в меню расположены.

Евгений Владимирович
16.06.2017, 15:26
ASo, вот так:
31707

ASo
16.06.2017, 20:12
_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 сразу ругается.

ASo
16.06.2017, 22:05
Никак, это не нужно.
Вы делаете групповое чтение по этой фиксированной от начала адресации. Запись по тем адресам, которые вписываете.

Евгений Владимирович
16.06.2017, 22:19
Никак, это не нужно.
Вы делаете групповое чтение по этой фиксированной от начала адресации. Запись по тем адресам, которые вписываете.
Т.е. смещённый адрес зависит от порядка следования регистров в меню, а не от назначенного адреса? Как получился смещённый адрес первого регистра - 4176?

ASo
16.06.2017, 22:32
Из РЭ на ПЛК-63.

Евгений Владимирович
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?

ASo
19.06.2017, 08:46
Из экспериментов.