PDA

Просмотр полной версии : ПЛК-63 не устанавливаются состояния выходов c регистров по modbus



Gosha
05.04.2010, 12:07
Конфигурация | ВУ | Сост.ВУ{N}2
{0, 1}{10, 11}
{4184, 4185}{4194, 4195}
r.oe
Float
0.000
1.000
--
Оперативный параметр, доступный на запись, задаётся в долях единицы с точностью 0,001. Определяет уровень выходного сигнала

С помощью free утилиты http://www.terring.ru/files/apps/TerringModbus-Installer.exe

С помощью modbus ф-ии 06 эти float пишутся за 2 транзакции (2 записи 16-битных слова).
Ф-я modbus 0x10 записи группы регистров по регистрам группового чтения параметров дает ошибку


Request
00:07 [10][10][10][58][00][02][04][00][00][3F][80][7A][99]
Response
00:07 [10][90][01][DD][C5]


Чтение регистров состояния выходов по адресам группового чтения параметров ({4184, 4185}{4194, 4195}) любыми modbus функциями дают константные значения, не имеющие отношения к состоянию выходов.

Состояния выходов, полученные с адресов {0, 1}{10, 11} - ok


Можно ли выложить log обмена с ПЛК-63:
запись в регистр управления выходом (float) за 1 транзакцию.
проверочное чтение этого регистра с области двух- байтных переменных(адреса{0, 1}{10, 11}).

Филоненко Владислав
05.04.2010, 12:57
1. Адрес неправильный. 4184 расшифровывается как (4 - код команды (доступ регистровый))184(адрес). Это стандарт описания ModBus переменных.
2.Формат float неправильный.
3. Контроллер отвечает "НЕТ ТАКОГО РЕГИСТРА"

Gosha
05.04.2010, 15:12
1. Адрес неправильный. 4184 расшифровывается как (4 - код команды (доступ регистровый))184(адрес). Это стандарт описания ModBus переменных.
2.Формат float неправильный.
3. Контроллер отвечает "НЕТ ТАКОГО РЕГИСТРА"

Т.е. надо писать ф-ей 4 (Read Input Registers) в регистр 184 ?

Или писать ф-ей 0x10 в регистр 184? - Тогда в документации должен быть указан еще и адрес 16-184 при записи?

Филоненко Владислав
05.04.2010, 15:54
так исторически (и не у нас) сложилось. адрес всегда 184.

Gosha
05.04.2010, 16:01
так исторически (и не у нас) сложилось. адрес всегда 184.

Да никто не против.

Все работает ok. Нормальный контроллер.

Только в документации " конфигурирование ..." в табличке написать бы в отдельных графах modbus ф-ю для чтения, записи и номер регистра.

Или указать, что адрес другой(какой ?) при записи.

:)

ASo
05.04.2010, 16:08
Или указать, что адрес другой(какой ?) при записи.:)Так первая цифра и задает эту ф-ю для чтения.

Филоненко Владислав
05.04.2010, 17:36
10015 - битовый доступ по адресу 0015
40020 - регистровый доступ по адресу 0020

Gosha
12.04.2010, 10:17
1. Адрес неправильный. 4184 расшифровывается как (4 - код команды (доступ регистровый))184(адрес). Это стандарт описания ModBus переменных.
2.Формат float неправильный.
3. Контроллер отвечает "НЕТ ТАКОГО РЕГИСТРА"

Попробовал читать как Вы рекомендовали. Нудача.
Регистр 4098(dec) читается. Рег. (ф-я modbus 4) (98 dec) не читается.



Request [10][04][00][B8][00][02][F2][AF]
Response [10][84][02][92][C4]
/*===========================================*/
Аналоговые Вх.{4098, 4099} {4102, 4103}{4106, 4107}{4110, 4111}{4114, 4115}{4118, 4119}{4122, 4123}
4098(dec)= 1002(hex)
Request [10][04][10][02][00][02][D7][8A]
Response[10][04][04][E1][29][42][90][2D][BD]
/*===========================================*/
0098(dec)= 62(hex)
Request [10][04][00][62][00][02][D3][54]
Response [10][84][02][92][C4]
/*===========================================*/

Филоненко Владислав
12.04.2010, 10:50
Кто в лес, кто по дрова.
1. Где Вы вообще такие цифры взяли? Все 4-х байтные параметры в конфигурации имеют адрес <82 дес.
2. Вам несказанно повезло! 1002(hex)
- находится в области для непрерывного чтения параметров. Поэтому и читается, но читает не то, что Вы ожидаете, т.к. реально это адрес 2!

Gosha
12.04.2010, 14:17
Кто в лес, кто по дрова.
1. Где Вы вообще такие цифры взяли? Все 4-х байтные параметры в конфигурации имеют адрес <82 дес.
2. Вам несказанно повезло! 1002(hex)
- находится в области для непрерывного чтения параметров. Поэтому и читается, но читает не то, что Вы ожидаете, т.к. реально это адрес 2!


Так я и хочу читать область непрерывного чтения параметров.
http://upload.caxapa.ru/plc63_config.pdf
Стр 27.

Из какого адреса читать?

Пропадаю.

Филоненко Владислав
12.04.2010, 14:38
Адрес modbus (копия области %I, %Q) - 4xxx - вот его и брать . ЦЕЛИКОМ.

Gosha
12.04.2010, 15:00
Адрес modbus (копия области %I, %Q) - 4xxx - вот его и брать . ЦЕЛИКОМ.

Так я же приводил дамп. Еще раз его повторяю:
Для адреса 4_098(dec) аналоговый вход 0 значение с АЦП:
По адресу 098(dec) (62(hex) ) ф-я 4 ответ 0x84 exception номер 4.
Скажите не абстрактно, а по дампу, что именно в нем не верно?

Приведите пож. дамп пакета, как прочитать из области непрерывного чтения параметров состояния аналогового входа 0 (2 регистра). Адреса для ПЛК63 указаны на стр 27 по ссылке http://upload.caxapa.ru/plc63_config.pdf



Request [10][04][00][B8][00][02][F2][AF]
Response [10][84][02][92][C4]
/*===========================================*/
Аналоговые Вх.{4098, 4099} {4102, 4103}{4106, 4107}{4110, 4111}{4114, 4115}{4118, 4119}{4122, 4123}
4098(dec)= 1002(hex)
Request [10][04][10][02][00][02][D7][8A]
Response[10][04][04][E1][29][42][90][2D][BD]
/*===========================================*/
0098(dec)= 62(hex)
Request [10][04][00][62][00][02][D3][54]
Response [10][84][02][92][C4]
/*===========================================*/

Филоненко Владислав
12.04.2010, 16:20
Адрес modbus (копия области %I, %Q) - 4xxx - вот его и брать . ЦЕЛИКОМ.
Правильно: Чтение из области копии I/O. Смещение 0х1000+0х02 адрес первого канала AI. Все как по документу.
Request [10][04][10][02][00][02][D7][8A]
Response[10][04][04][E1][29][42][90][2D][BD]
Неправильно: адрес 0х62 4 байта - такого параметра нету.
Request [10][04][00][62][00][02][D3][54]
Response [10][84][02][92][C4]
Правильный адрес для обращения как к параметру, т.е. для чтения (целиком)/ записи как параметра - 0х18

P.S. тут некоторая терминологическая путаница. Надеюсь теперь понятно.

Gosha
12.04.2010, 16:36
Адрес modbus (копия области %I, %Q) - 4xxx - вот его и брать . ЦЕЛИКОМ.
Правильно: Чтение из области копии I/O. Смещение 0х1000+0х02 адрес первого канала AI. Все как по документу.
Request [10][04][10][02][00][02][D7][8A]
Response[10][04][04][E1][29][42][90][2D][BD]
Неправильно: адрес 0х62 4 байта - такого параметра нету.
Request [10][04][00][62][00][02][D3][54]
Response [10][84][02][92][C4]
Правильный адрес для обращения как к параметру, т.е. для чтения (целиком)/ записи как параметра - 0х18

P.S. тут некоторая терминологическая путаница. Надеюсь теперь понятно.


Т. е. указывается адрес, приведённый в документации? 4096(dec) 1002(hex).
И 4 - никакая не ф-я, а часть адреса, т.к. байты 2,3 в пакете - это байты адреса согласно спецификации modbus-rtu. (если считать первый байт в пакете номером ноль(идентификатор(адрес) slave_абонента).)

я так и делал в начале. Можно посмотреть дампы в начале темы.

Тогда для записи в регистр управления выход 0 ? :

адрес 4184(dec) 1058(hex) приведите пож. дамп, как писать float(2 16-разрядных регистра) в регистр out_0 ПЛК за одну транзакцию.


Request [10][10][10][58][00][02][04][00][00][3F][80][7A][99]
Response [10][90][01][DD][C5]

Филоненко Владислав
12.04.2010, 19:11
запись только по адресам в 1-й колонке, и только параметр целиком.

Gosha
12.04.2010, 21:37
запись только по адресам в 1-й колонке, и только параметр целиком.

Т.е. по адресам {0,1}.. {10,11} ?

Float пишется, но только за 2шт 2хбайтных транзакции. Только ф-ей 0x06. Ф-я 0x10 дает ошибку.

Самое интересное, что мои (пользовательские) float конфигурационные переменные пишутся ф-ей 0x10 за 1(одну) (2шт 2х байтных регистра (4 байта)) транзакцию ok !!

Напр, по адресам pid_ki 100(dec), pid_kp 102(dec)...

Филоненко Владислав
12.04.2010, 23:50
какую такую ошибку? нет никакой принципиальной разницы между пользовательскими и параметрами в конфигурации. за исключением контроля диапазона. может вы в нее число вне диапазона пишите?

Gosha
13.04.2010, 08:36
какую такую ошибку? нет никакой принципиальной разницы между пользовательскими и параметрами в конфигурации. за исключением контроля диапазона. может вы в нее число вне диапазона пишите?

Так выше же приведен дамп:
Пишется число 1.0 [00][00][3F][80]; Байты переставляются местами согласно спецификации modbus. Float отплавляются в ПЛК теми же ф-ями, что и пользовательсткие конфигурациооные float, которые пишутся и читаем на ЖКИ ПЛК то же значение, что пишется.

У кого есть ПЛК-63 - можете попробовать включить и выключить выход 0 по modbus? Бесплатная утилита http://www.terring.ru/files/apps/TerringModbus-Installer.exe

За 2 транзакции это число (1.0 [00][00][3F][80]) пишется, но только по адресам {0,1}.И с них же читается. На ПЛК щелкает релюшка.
М.б. в документациии групповые адреса не те?


/*============================*/
1.0== [00] [00] [80] [3f]
0.5== [00] [00] [00] [3f]
0.1==[cd] [cc] [cc] [3d]
0.01==[0a] [d7] [23] [3c]
/*============================*/
/* программка печатает дамп 4х байт памяти, которое занимает float число */
int main()
{float v;
int i;
unsigned char *p;
p=(unsigned char *) &v;
v= 1.0;
for(i=0; i < 4; i++)
printf("[%02x] ", p[i]);
return;
}

Филоненко Владислав
13.04.2010, 09:42
Request
00:07 [10][10][00][00][00][02][04][00]
08:0F [00][3F][80][B3][C3]
Response
00:07 [10][10][00][00][00][02][42][89]
Все прекрасно записывается и щелкает.
И на следующем выходе тоже.
Request
00:07 [10][10][00][02][00][02][04][00]
08:0F [00][3F][80][32][1A]
Response
00:07 [10][10][00][02][00][02][E3][49]

Gosha
14.04.2010, 15:45
Request
00:07 [10][10][00][00][00][02][04][00]
08:0F [00][3F][80][B3][C3]
Response
00:07 [10][10][00][00][00][02][42][89]
Все прекрасно записывается и щелкает.
И на следующем выходе тоже.
Request
00:07 [10][10][00][02][00][02][04][00]
08:0F [00][3F][80][32][1A]
Response
00:07 [10][10][00][02][00][02][E3][49]

ok. Работает. Релюшка щелкает.
Но по адресам из столбика 3 таблицы (групповое чтение параметров) читается нулевые значения. А по адресу из столбика 2 -правильные.



Request [10][10][00][02][00][02][04][00] [00][00][00][22][4A]
Response [10][10][00][02][00][02][E3][49]

Request [10][04][10][5A][00][02][56][59]
Response [10][04][04][00][00][00][00][FA] [85]

Request [10][04][00][02][00][02][D3][4A]
Response [10][04][04][00][00][3F][80][EA] [D5]

Филоненко Владислав
14.04.2010, 16:29
значит в таблице опечатка. проверим.

Филоненко Владислав
15.04.2010, 11:05
действительно очепятка.
отнимите от числа 0х1000, разделите на 2 и прибавьте 0х1000. и все заработает :)
смещения от начала области дали байтовые, а не регистровые.

Gosha
15.04.2010, 12:52
действительно очепятка.
отнимите от числа 0х1000, разделите на 2 и прибавьте 0х1000. и все заработает :)
смещения от начала области дали байтовые, а не регистровые.

только для этого параметра, или для всех в столбце?

Филоненко Владислав
15.04.2010, 13:21
для всех в столбце. вроде бы. я каждый не проверял :)
а исправления внесем.

Филоненко Владислав
15.04.2010, 15:12
уточненные данные. поправки касаются только выходных значений, свыше 4139.