Адрес modbus (копия области %I, %Q) - 4xxx - вот его и брать . ЦЕЛИКОМ.
Адрес 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] /*===========================================*/
Адрес 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]
запись только по адресам в 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)...
какую такую ошибку? нет никакой принципиальной разницы между пользовательскими и параметрами в конфигурации. за исключением контроля диапазона. может вы в нее число вне диапазона пишите?
Так выше же приведен дамп:
Пишется число 1.0 [00][00][3F][80]; Байты переставляются местами согласно спецификации modbus. Float отплавляются в ПЛК теми же ф-ями, что и пользовательсткие конфигурациооные float, которые пишутся и читаем на ЖКИ ПЛК то же значение, что пишется.
У кого есть ПЛК-63 - можете попробовать включить и выключить выход 0 по modbus? Бесплатная утилита http://www.terring.ru/files/apps/Ter...-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; }
Последний раз редактировалось Gosha; 13.04.2010 в 07:44.
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]