PDA

Просмотр полной версии : ПЛК63 - Modbus возвращает ошибку 02



melky
21.10.2015, 17:14
Ошибка ILLEGAL ADDRESS DATA.

даже если один регистр забиваю, все равно. Регистр 332 пользовательский или регистр 0 - не имеет значения.

Как с этим бороться ?

Без ОРС сервера от Owen ПЛК по документации должен опрашиваться ведь ?

capzap
21.10.2015, 17:32
Ошибка ILLEGAL ADDRESS DATA.

даже если один регистр забиваю, все равно. Регистр 332 пользовательский или регистр 0 - не имеет значения.

Как с этим бороться ?

Без ОРС сервера от Owen ПЛК по документации должен опрашиваться ведь ?

так хотя бы лог выложили, что Вы там передаете, может перевернули байтв в регистре и запрашиваете не один регистр а 65536 вот и проблема нарисовалась

Валенок
21.10.2015, 19:28
должен опрашиваться ведь
Вообще без проблем. Возвращает 02 - это хорошо. Связь - есть. А что 02 :
1.банально не сделали этот регистр в ПЛК63. Мы ж не видим проекта 63-его
2.см. п#2. Мы ж не видим проекта мастера

melky
21.10.2015, 19:46
1-е - Регистры в ПЛК есть, иначе бы я их не опрашивал.
2-е - часть регистров в ПЛК зашиты намертво, например 0-10 это регистры состояния выходов, параметр real.

Реакция на них аналогичная, связь есть, данных нет, ошибка та же.

Валенок
21.10.2015, 19:47
А кто опрашивает-то ?

melky
21.10.2015, 19:55
Валенок , опрашивает Rapid SCADA. накидал несколько параметров для проверки, а тут облом-с..

Holding Registers, адрес регистра 0, float (4 байта). переставлением не занимался, так как ошибка говорит за себя, не видит она данного регистра, а он должен быть.
В РЭ и в руководстве по программированию никакой конкретики, только разделение предустановленых регистров и пользовательских для разных типов данных. Все.

Валенок
21.10.2015, 20:01
Ну так это рапид-скада и чудит. Уверены что, например, не вычитает 30001/40001 ?. Посылку прям по байтам выкладывает где ?

Какая конкретика нужна для модбас-слейва кроме доступных функций, карты регистров и формата данных (ну может специально оговоренных ограничений типа не полной многорегистровости для запросов) ?

melky
21.10.2015, 20:07
да, тоже подумал на счет 30001/40001 когда домой ехал.
В то же время подключался к другим устройствам Рапидой, проблем не было. И к МЭ110 и шнайдеровским Micrologic-ам, всегда вбивал регистры из руководств и всегда получал то, что нужно.
А тут странность...

Валенок
21.10.2015, 20:27
99% - в этом. Все симптомы - exc#2.

melky
22.10.2015, 08:49
Отправка (8): 01 03 00 01 00 0A 94 0D
Приём (5/5): 01 83 02 C0 F1

Вот из лога запрос ответ, что-то мне сдается, что с запросом что-то не так ?

Отправка (8): 01 03 01 4C 00 08 84 27
Приём (5/5): 01 83 02 C0 F1

И лог запроса пользовательских данных

capzap
22.10.2015, 08:52
что не так, пытаетесь читать 10 регистров начиная с первого, т.е заканчивается 11 - а он есть?

ASo
22.10.2015, 09:25
Групповое чтение в ПЛК63 по отличным от указанного в конфигурации адресам.

petera
22.10.2015, 09:48
Отправка (8): 01 03 00 01 00 0A 94 0D
Приём (5/5): 01 83 02 C0 F1

Вот из лога запрос ответ, что-то мне сдается, что с запросом что-то не так ?

Отправка (8): 01 03 01 4C 00 08 84 27
Приём (5/5): 01 83 02 C0 F1

И лог запроса пользовательских данных


что не так, пытаетесь читать 10 регистров начиная с первого, т.е заканчивается 11 - а он есть?
10 регистров из области %Q за один раз читать запрещается.
20503
Для группового чтения используйте регистры с номера 4184.

melky
22.10.2015, 10:24
Да, я уже понял, что связано с групповым запросом. Сегодня поеду проверять...

Сейчас только определюсь, почему у меня с 1-ого регистра читалось а не с 0-ого

melky
22.10.2015, 21:19
Проверил, все работает.
Как определить в какой последовательности попадают данные для возможности группового запроса ?

И возможности передать dword все-таки нет. записывал переменную в DateP (dword), при чтении 0. На живом контроллере работает не так, как в эмуляторе.

petera
22.10.2015, 22:47
Проверил, все работает.
И возможности передать dword все-таки нет. записывал переменную в DateP (dword), при чтении 0. На живом контроллере работает не так, как в эмуляторе.
Наверно опять что-то перепутали. Например оставили тип "Конфигурационный" вместо "Оперативный".
А то получается, что ни какой пользовательский элемент по сети записать нельзя?

Валенок
22.10.2015, 23:15
Проверил, все работает.
Как определить в какой последовательности попадают данные для возможности группового запроса ?

И возможности передать dword все-таки нет. записывал переменную в DateP (dword), при чтении 0. На живом контроллере работает не так, как в эмуляторе.

Как передашь dword - так и упадет. Но у рапиды порядок слов (а то и байтов) дворда может быть другой.
Из рапиды запиши типа 16#12345678, сделай в КДС вид 16#, и наведи на эту DateP - указатель то дворд.

melky
22.10.2015, 23:40
Не парьтесь, не работает :).
Параметр был "Оперативный", записывал из программы температуру, переведя в dword, порядок байт хоть обменяйся.
Разрешил показ на экране - 01.01.2000 при нулях в переменной по сети.

Валенок, у Рапиды порядок байт такой, какой задашь.
petera, int можно и float можно.

melky
23.10.2015, 09:41
Вопрос открытый, как рассчитать где будут храниться данные при групповом запросе ?
Ведь вся область Q транслируется, не только пользовательские данные, но и все разрешенные в конфигурации регистры, которые нельзя отключить. Состояние выходов, имя устройства, контраст и так далее...

Филоненко Владислав
23.10.2015, 12:43
Вопрос открытый, как рассчитать где будут храниться данные при групповом запросе ?
Ведь вся область Q транслируется, не только пользовательские данные, но и все разрешенные в конфигурации регистры, которые нельзя отключить. Состояние выходов, имя устройства, контраст и так далее...

Прибавить 0x1000

melky
23.10.2015, 12:54
Филоненко Владислав то есть данные собираются как и в варианте прямого запроса ? 0 регистр, real первого выхода, 82 регистр - пользовательский 4 байта, 332 регистр - пользовательский 2 байта.

Не получается как-то, выход 1, real регистр 0, если прибавить 0х1000 то это 4096 а по мануалу область Q начинается с 4185
И в 3хх регистрах есть и I область.

melky
23.10.2015, 15:53
Если собрать последовательно все Q и назначить им регистры, так будет правильно или порядок какой-то иной ?, например сперва все системные, потом пользовательские, или сперва STRING потом 4-х байтные, потом 2-х байтные или как ?

Где представители Овен, что скажут ?

ASo
23.10.2015, 15:59
Приеду домой, скажу. Проверенный на реальном объекте пример.

ASo
23.10.2015, 18:12
DI - 4096
AI1 - 4098
AI2 - 4102
AI3 - 4106
.....
AO1 - 4140
AO2 - 4142
.....
Первый параметр из первой ветви - 4176
Далее подряд с учетом на выравнивание на четный адрес параметров QD

melky
23.10.2015, 23:53
ASo Хм, ниче непонятно, на кой тогда документация, если она не соответствует ?
АО, это ведь каналы Q, почему они в области каналов I ?

Что значит первый параметр первой ветви ?

Валенок
24.10.2015, 13:39
melky, нормально у 63/73 работает по базовым адресам. Не юзал бы (причем не однократно) - не говорил.
С копией гиморой в том, что стоит вставить новый параметр в меню (которому можно задать новый адрес и парится про существующие) как адреса копии все передут. Адресация в копии базируется на физическом расположении в меню и с учетом выравнивания.

ASo
24.10.2015, 13:57
ASo Хм, ниче непонятно, на кой тогда документация, если она не соответствует ?
АО, это ведь каналы Q, почему они в области каналов I ?Она соответствует, но с некоторыми ошибками в адресах. Читайте внимательно.

Валенок
24.10.2015, 15:04
ASoЧто значит первый параметр первой ветви ?
Aso правильно сказал - юзерная ветка начинается с 4176. Но - только чтение. Про адресацию сказал выше.
Т.е. адресация в копии - не имеет никакого отношения к индивидуальным адресам забитым руками.
Причем в копии есть даже параметры с не забитыми адресами

melky
25.10.2015, 10:58
Копия позволяет сделать групповой запрос, а обращение по указанным регистрам только по отдельности.
Вот и хочу настроить групповой запрос хотя бы пользовательских данных.

Вот и хотелось бы понять, как и в какой последовательности туда попадают данные. Ну и соответственно как начиная с адреса 4096 попадают данные предустановленные

Валенок
25.10.2015, 20:27
Копия позволяет только читать данные. Вот это и плохо.

ASo
25.10.2015, 20:39
Копия позволяет только читать данные. Вот это и плохо.
Чем плохо? Все замечательно! Читаем групповухой, а пишем - индивидуально в регистр. Master-OPC и куча других средств это позволяют.
Учитывая, что чтение существенно чаще записи - самое оно.

Валенок
25.10.2015, 21:40
Видимо это имхо. Просто я сетевой параметр описываю переменной как RW. И он и тут и там ....
А тута каждому W и плюс 1 R на все. На 1 параметр больше будет

melky
26.10.2015, 00:28
Валенок, не сыпьте матюками :)
ПЛК уже в работе, есть список переменных, менять ничего уже не буду. Просто надо разобраться в правильности группового запроса. Соответствие переменных адресам.

Валенок
26.10.2015, 02:33
Ну да ладно. Раз охота с адресами возится

melky
26.10.2015, 13:15
Для меня ST полутемный лес честно говоря.

Валенок
26.10.2015, 16:25
Настоящему индейцу завсегда везде..

melky
26.10.2015, 17:06
Валенок, вот объясни дураку, при чем тут адрес 4096, если пользовательские данные сидят ДАЛЬШЕ ?

И можно было в двух словах, как в данном случае работает массив ?

Валенок
26.10.2015, 18:54
С 4096 сидит копия. Можно из структуры выкинуть все кроме пользовательских веток и читать с 4176 - это пользовательские.

melky
26.10.2015, 19:33
примерно понял. Только float все равно придется вычислять как и где сидит. Структура вся в ворд ведь. А там еще и стринг сидит.

Валенок
26.10.2015, 23:58
Зачем структура в ворде ? Она - в том в чем есть.
На картинке с квадратиками - настоящий адрес ai5 в копии. Тоже самое и реалами в меню.

melky
27.10.2015, 13:11
Валенок, так вы же копируете область памяти в массив word , нет ? p : pointer to array[4096..5000] of word

ASo
27.10.2015, 16:31
Вы будете считывать параметры другим контроллером или компом?

melky
27.10.2015, 16:39
ASo компом, той же скадой, просто нужен групповой запрос, вместо каждого регистра по отдельности. Раздельно очень медленно, я включаю автомат (стоит допконтакт) а изменение вижу с большой задержкой при скорости 115 к/с
Набросал сейчас с адреса 4176 последовательно как в конфигурации, поеду проверять.

ASo
27.10.2015, 16:43
Так какие проблемы?
Читайте как пример MasterOPC групповухой, с указанием отдельного регистра записи в RW параметрах.
Пример устройства во вложении.

melky
28.10.2015, 09:24
ASo Спасибо за наводку по адресу 4176, действительно пользовательские данные идут последовательно с данного адреса, согласно Конфигурации, даже те параметры, которым не назначены регистры.
Что касается системных, после каждого AI идет регистр "Время измерения". С небольшими перестановками. Все еще не вычислил, просто не все параметры набрал.

MasterOPC мне не поможет, не использую. Сохранил потом посмотреть...

ASo
28.10.2015, 09:48
ASo Спасибо за наводку по адресу 4176, действительно пользовательские данные идут последовательно с данного адреса, согласно Конфигурации, даже те параметры, которым не назначены регистры.
Дык Вам про это говорилось! Тем же Валенком.

Что касается системных, после каждого AI идет регистр "Время измерения". С небольшими перестановками. Все еще не вычислил, просто не все параметры набрал.А Вам так нужно время измерения в компе?

melky
28.10.2015, 15:00
ASo вообще-то и вам важно, так как AI идут через два регистра и при групповом запросе можно лохануться.
Поправлю сегодня табличку и выложу.

ASo
28.10.2015, 15:31
Эээээ.... Это учитывается при запросе. Собственно, многие системы учитывают это сами, задавая максимальный разрыв, при котором группа "закрывается" и создается следующий групповой запрос.

melky
28.10.2015, 15:44
ASo ну я Rapid SCADA настраивал, там отдельно группы создаются.

Вот набросал, что вычислил.
Пользовательские переменные идут последовательно, как в конфигурации. Местами требуется выравнивание.