Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Помогите разобраться с соответствием регистров ТМ и регистрами PLC. В контроллере их адреса указанны как диапазоны (например: выходные регистры R3904-R3967, или регистры данных D0-D3999). Как их пересчитать для ТМ (в ТМ это уже будет канал?), особенно если числовая часть одинаковая (3950 есть в обоих диапазонах).
[ 08.02.2013, 08:47: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Видимо, речь идет о протоколе Modbus RTU? В этом случае надо уточнить Modbus-функции, которые используются для чтения этих переменных. Для разных групп Modbus-регистров могут использоваться разные функции чтения - 3 и 4. Соответственно надо использовать функции Rout_Word(3) – считать слово данных типа out и Rin_Word(4) – считать слово данных типа in.
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Обмен хочу организовать как по Modbas ASCII (видео нашел только для СОМ), так и через прямую запись/чтение в/из регистров.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Встроенного драйвера Modbus ASCII в Trace Mode 6 нет. С некоторыми ограничениями можно организовать такой обмен в Trace Mode 6 профессионального формата (см.http://www.adastra.ru/products/drivers/modbus/). В следующем релизе будет рассмотрена аналогичная возможность обмена по TCP.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
по фильму "Демонстрация настройки TRACE MODE на протоколы MODBUS RTU и TCP" в очередной раз создал проект со своим реальным IP адресом, запустил... все входные регистры =0, хотя я их заполнил значениями, в выходные регистры значения заношу, но не знаю куда, т.к. отображаемые регистры (через WinProLadder) остаются равными 0. В ролике речь идет о первых регистрах (1-100 для входных и 10-19 для выходных), но в modsim это уже входные 30001-30100 и выходные 40010-40019. Здесь http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/000866.html#000003 речь идет о смещении адресов на 0х1000. Вопрос: какой номер надо писать в Rin_Word(4)#???, чтобы прочитать значение из выходного регистра контроллера R3904 какой номер надо писать в W_Word(6)#???, чтобы записать значение во входной регистр контроллера R3840
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В документации на PLC должно быть указано, в каком формате задаются адреса регистров - 16-ричном или десятичном, и существует ли смещение адресов (в ModSim32, например, смещение равно 1). В Trace Mode 6 адреса переменных задаются в 16-ричном формате. Если указанные адреса в PLC заданы в десятичном формате, то в Trace Mode 6 надо задавать, соответственно, для выходного регистра 0xf40, а для регистра данных 0xf00.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Вы говорите:
quote: ...(в ModSim32, например, смещение равно 1)...
так почему-же входящий регистр в ТМ 1 уменьшенный на 1 => 0 получает данные из регистра Modsim (адрес в первой строке) 30001. откуда добавилось 30000
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
quote: В документации на PLC должно быть указано, в каком формате задаются адреса регистров - 16-ричном или десятичном,
все адреса расписаны в десятичном формате
quote:существует ли смещение адресов (в ModSim32, например, смещение равно 1).
про смещение ни слова не нашел.
единственно нашел: R3840-R3903 CH0-CH63 - регистры входов для аналоговых и цифровых входов R3904-R3967 CH0-CH63 - регистры выходов для аналоговых и цифровых выходов R3968-R3999 ТР0-ТР31 - регистры необработанной температуры для измерений температуры
ТМ (через Rin_Word(4)) с Modsim работает как на одном компе, так и на разнесенных в сетке, с присвоением компу IP контроллера, адрес-1. При отключении Modsim с дальнейшим подключением Fateka на тот-же IP и адрес-1...нули (проверил все каналы от 0 до 65535). порт в IP указывал :500 .
Раз не получается (надеюсь пока) получить данные, может можно проверить установку связи? Подскажите пожалуйста.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Задайте ключ DEBUGON=400 в файле конфигурирования запуска узла (см. раздел "Приложения/Задание параметров мониторов"). В профайлерном протоколе будут сообщения об ошибках обмена по сети.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
при подключении WinProLadeer указывается: протокол ТСР, порт №500 и IP адрес
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
R840-R3903 -> 3840,... это адреса регистров в ModBus их и надо задавать )
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Их в первую очередь опрашивал. на PLC сделал заполнение этих регистров со сдвигом (+1 регистр каждую секунду) - глухо...читает нули (если читает, проверить смогу завтра по DEBUGON=400)
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Вот результаты, ошибок не вижу...
code:
(10:27:44) INF_LOAD:Starting... mbtcp_0 (10:27:44) INF_RTM:Detected NT5.RTM 5.1 (10:27:44) INF_RTM:Base TRACE MODE 6 Profiler T-Factory RTM+ ver. 6.08.0 (10:27:44) ._.:RTM (10:27:44) INF_LOAD:max channel = 65535 (10:27:44) INF_LOAD:Load Channels = 101 (10:27:44) INF_LOAD:Templates=0 (math=0 sql=0 scr=0 doc=0 pnl=0) (10:27:44) INF_LOAD:Objects = 3 (10:27:44) INF_RTM:Timer=0.055s CalcLoop=550ms (10:27:44) INF_LOAD:LoadTime=0.031s CalcPeriod=550ms (10:27:44) INF_RTM:free_mem=434(452) handle=0 user=0 gui=0 after load (10:27:44) INF_RTM:DayLight disabled (10:27:46) INF_RTM:ModeSwitch e15=0000 e18=0000 e20=0000 [0] (10:27:46) INF_RTM:mode=2(Work) e15=00 e18=00 e20=00 [0-0-src4] (10:27:46) INF_RTM:start time is 0 s (10:27:46) INF_RTM:free_mem=434 handle=0 user=0 gui=0 after start (10:27:46) INF_GRAPH:popup=0 scrref=0 trend=0,0 update=0 (10:28:46) INF_RTM:stoping... (10:28:46) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [0-0-src0] (10:28:46) INF_RTM:stop time is 0.562 s (10:28:46) INF_RTM:number of calculation = 106 (10:28:46) INF_RTM:END OF WORK (10:28:46) INF_RTM:free_mem=434(452) handle=181 user=154 gui=1568 after load (10:28:46) INF_RTM:DayLight disabled (10:29:29) INF_RTM:ModeSwitch e15=0000 e18=0000 e20=0000 [0] (10:29:29) INF_RTM:mode=2(Work) e15=00 e18=00 e20=00 [0-0-src4] (10:29:29) INF_RTM:start time is 0 s (10:29:29) INF_RTM:free_mem=434 handle=181 user=154 gui=1568 after start (10:29:29) INF_GRAPH:popup=0 scrref=0 trend=0,0 update=0 (10:32:15) INF_RTM:stoping... (10:32:16) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [0-0-src0] (10:32:16) INF_RTM:stop time is 1.594 s (10:32:16) INF_RTM:number of calculation = 405 (10:32:16) INF_RTM:END OF WORK
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
для перезапуска проекта в МРВ желательно выходить из него ни какой отладки по TCP протоклам НЕТ ! или не задана отладка по сети(DEBUG=400) или каналов для связи с у-вами по TCP не обнаружено
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Пришлите, пожалуйста, Ваш проект (вместе с папкой проекта после сеанса) на адрес hotline@adastra.ru.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
quote:Отправитель / Originally posted by Nico: для перезапуска проекта в МРВ желательно выходить из него ни какой отладки по TCP протоклам НЕТ ! или не задана отладка по сети(DEBUG=400) или каналов для связи с у-вами по TCP не обнаружено
DEBUG=400 или DEBUGON=400 ? Создал файл с именем TMcom_1.cnf в нем строки DEBUG=400 END_OF_CNF пустая
DEBUGON=400 пробовал тоже, хотя в инструкции такой команды не нашел. имя проекта mbtcp.prj
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
quote:Отправитель / Originally posted by Nico: R840-R3903 -> 3840,... это адреса регистров в ModBus их и надо задавать )
Вы имели в виду задавать для W_WORD(6), т.к. для записи в них значений в контроллере нет доступа, видимо только из вне...
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
1. Имя файла в Вашем проекте должно быть TMcom_0.cnf. Ваш конфигурационный файл не читается, поэтому диагностики сетевого обмена нет. 2. Вы пишете о том, что задали порт 500, а в проекте задан порт 505. 3. Для упрощения процесса отладки оставьте в узле только 1 канал MODBUC-обмена.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
судя по ответу: (17:51:37) INF_TCP:HOST 192.168.0.69:27666 connect to 192.168.16.60:505 (17:53:6) ERR_TCP:ModBus recieve error from unit_1(192.168.16.60:505) err=4 Rin_Word(4)#1 достучаться получается, но не получить данные.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
оставить 1 канал в ТМ и менять адрес регистра вручную (атрибут 91) наблюдая за недостоверностью канала и записями в файле
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Подключиться получается на каналах 500, 502, 505, но дальше ошибка о получении данных (функция 4).
quote:Отправитель / Originally posted by Nico: у-во отвечает кодом ошибки попробывать исп 3 функцию(Rout_W)
оставить 1 канал в ТМ и менять адрес регистра вручную (атрибут 91) наблюдая за недостоверностью канала и записями в файле
пошла функция 3 Для контроля наличия данных в регистрах и их соответствия получаемым, установил ModScan32 Через 04:INPUT REGISTER не получил ни одного значения, только 01:COIL STATUS и 03:HOLDING REGISTER дают значения. указание канала после IP адреса убрал, т.к. если после открытия проекта первым указать :500, то потом на какой не меняй (502, 505), в файле сообщает о подключении через порт 500, а дальше ошибки о получении данных. При отсутствии адреса в строке IP сам подключается к 505.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
"указание канала после IP адреса убрал " - ???? вообще через : после IP это порт
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
"при подключении WinProLadeer указывается: протокол ТСР, порт №500 и IP адрес "
Вполне возможно, что эта среда программирования общается с контроллером через порт 500, а для обмена по Modbus TCP используется все-таки порт 502 (стандарт для Modbus TCP). Для чистоты эксперимента уберите из строки "Дополнительно" указание порта и удалите из папки узла файл ip_modbus (именно в нем может запоминаться какое-то старое назначение порта). По умолчанию будет задан порт 502.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
quote:Отправитель / Originally posted by Nico: "указание канала после IP адреса убрал " - ???? вообще через : после IP это порт
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Получается, что в файле ip_modbus ;502 Port - это комментарий, т.е. три варианта:
;502 Port 1 192.168.16.60
502 Port 1 192.168.16.60
1 192.168.16.60
имеют равное значение, т.к. порт 502 присваивается автоматически, если не указан другой. Всем большое спасибо.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Для передачи данных в контроллер использую W_Word(6): - направление Output - формат аналог Связан с каналом CALL: - тип вызова ChGrroupReq - параметр 0 - тип Output в котором аргумент тип OUT.
Данная связка работает (передает значения в контроллер), если в атрибут канала EXEC помещать единицу. Как можно сделать постоянную передачу данных?
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Единая система передачи сигналов по внешним интерфейсов предполагает, что передача должна происходить только при изменении передаваемых параметров. Если канал ChGroupReq будет типа INPUT, он будет пытаться всегда передавать сигналы с собственным периодом обработки, независимо от того, изменились значения его аргументов или нет. Это может существенно увеличить трафик по каналу связи, что чаще всего нежелательно. В следующем релизе такой канал будет отрабатывать передачу данных в том случае, если они изменились.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Изменил тип ChGroupReq на INPUT, написал программку на увеличение аргумента на 1, с передачей в канал - нет передачи без EXEC=1 (привязал на кнопку на экране)... Через просмотр компонентов всё меняется, но передачи нет пока кнопку не нажму.
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Прошу прощения за неточность формулировки. Именно для того, чтобы не перегружать трафик, в релизе 6.08 такой канал типа INPUT не работает.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Если я правильно понял, то в этом (6.08) релизе для передачи значения канала в контроллер надо: - тип Output - EXEC=1
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Функция W_Word(6) по стандарту передает только 1 слово - 2 байта. Чтобы передавать одновременно несколько последовательно адресованных регистров, надо использовать функцию W_Word(16). "Источник" настроить на адрес начального регистра передаваемого массива. Для каждого регистра надо у канала CALL_ChGrroupReq задать аргумент с типом данных UINT. При срабатывании канала будет сформирована команда записи в регистры по количеству заданных аргументов.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Создал у канала CALL_ChGrroupReq 2 аргумента с типом данных UINT, привязал оба к 4-байтному аргументу - передается два одинаковых обрезанных значения. Как разбить 4-х байтное значение на 2 части?
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Это зависит от того, что является источником 4-байтового числа и каков его формат. В общем случае задача должна решаться с помощью программы.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Alex33
Forum Member / Участник форума
Участник № / Member № 5973
отправлено / posted
Т.е. для передачи или считывания 4-байтового числа (к примеру это текущее время ОС как число секунд с 1.01.1970) с контроллера, встроенной функции не существует и надо программно разделять/соединять значения?
Сообщения / Posts 38 | Из / From: Россия
| IP / IP: IP адрес / IP address |