PDA

Просмотр полной версии : ПР200-24.3.Х: работа с ICP CON tM-P3R3 по Modbus RTU (нужна помощь)



CORSAR1500
02.06.2026, 10:15
Добрый день, третий день бьюсь головой в стену. Ситуация: есть модуль ICP CON tM-P3R3, нужно по сети считывать состояния DI и управлять состоянием DQ. Что имеем:
1. Скорость 38400, Even, 8, 1 для всех, с этим проблем нет
2. В документации на tM-P3R3 (модбас-адрес 29) смотрю адреса регистров: 0x0020~0x003F for DI value (вложение 00_регисты tM-P3R3.jpg)
3. В ПР200 задаю опрос этого регистра (вложение 01_настройка опроса в ПР.jpg)
4. В сети модбас есть только ПР200 и tM-P3R3, уже разобрал шкаф и все лежит на столе
5. Схема сети модбас: ПР200 -> MOXA UPort1150 -> компьютер -> ICP CON I-7561 -> модуль ICP CON tM-P3R3
6. В сеть через два переходника USB<>RS485 вклинился компьютером в режиме сниффера (вложение 02_настройки сниффера.jpg)
7. Обмен данными идет нормально (вложение 03_скрин работы сниффера), я не вижу каких-либо ошибок в запросах ПР200 и ответах tM-P3R3. На вход DI0 подано 24V DC, поэтому в ответе состояние входа 01.
8. Птички в OwenLogic в настройках (старшим байтом вперед/старшим регистром вперед) обмена пробовал во всех комбинациях: 00 / 01 / 10 / 11, не помогло
9. Итог: если загрузить программу при поданных 24V DC на DI0 модуля ICP CON tM-P3R3, то его состояние отображается корректно, однако бит индикации правильной связи в 0 (вложение 04_OwenLogic Online.jpg). Похоже, что ПР200 не может понять ответа от ICP CON tM-P3R3
10. После загрузки программы при поданных 24V DC на DI0 модуля ICP CON tM-P3R3 можно менять физическое состояние DI0 произвольным образом, онлайн в OwenLogic, значение входа остается в 1.
11. Аналогично можно загрузить при 0 на DI0, тогда всегда будет 0.

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

Иван Билык
02.06.2026, 10:37
Напишите по этому вопросу на почту технической поддержки ОВЕН: support@owen.ru

kondor3000
02.06.2026, 10:45
Удалите переменную из окна Опрос и Запуск чтения, сделайте циклическое чтение 100 мс.
Галку старшим регистром вперёд возможно надо снять.

Dimensy
02.06.2026, 11:14
А зачем два конвертера USB-RS485?

EFrol
02.06.2026, 11:52
Что-то мне подсказывает, что надо смотреть на таблицу стр.128
89391
т.е. адрес DI0 равен 32

CORSAR1500
02.06.2026, 12:05
Удалите переменную из окна Опрос и Запуск чтения, сделайте циклическое чтение 100 мс.
Галку старшим регистром вперёд возможно надо снять.

Спасибо за быстрый ответ!
1. Изменил настройки опроса
89392

2. Перепробовал все комбинации птичек с этими настройками 00 / 01 / 10 / 11 - на разных комбинациях бит контроля связи или мигает (записал видео, но как прикрепить не знаю), или просто в 0

3. Такое ощущение, что иногда ПР200 понимает ответ tM (в этот момент состояние DI0 передается, бит контроля связи в 1, через пару секунд на три секунды бит контроля связи становится 0 и ответы не воспринимаются)

CORSAR1500
02.06.2026, 12:08
А зачем два конвертера USB-RS485?

Режим сниффера для того, чтобы посмотреть как идет обмен данными между устройствами

CORSAR1500
02.06.2026, 12:16
Что-то мне подсказывает, что надо смотреть на таблицу стр.128
89391
т.е. адрес DI0 равен 32

Все верно в DEC 32, в HEX это 20
Чтобы ПР200 отправил устройству запрос 1D 01 00 20 00 01 FE 5C, где
1D - устройство с адресом 29 DEC
01 - с помощью модбас-функции 0х01
00 20 - начиная с адреса 20h (32 dec о которых вы и говорите)
00 01 - отдай мне информацию о состоянии канала 1
FE 5C - контрольная сумма

tM отвечает 1D 01 01 01 97 D8
1D - я 29-тый dec
01 - отвечаю по модбас-функции 0х01
01 - одним байтом данных
01 - значение байта ответа (состояние канала 1 равно 01), это правильно 24V DC на входе DI0 есть
97 D8 - контрольная сумма

И вот чтобы опросить 32 DEC адрес в ПР200 нужно опрашивать адрес 2, бит 0. Получается так.

CORSAR1500
02.06.2026, 12:28
Напишите по этому вопросу на почту технической поддержки ОВЕН: support@owen.ru

спасибо, сейчас напишу

EFrol
02.06.2026, 12:37
Я бы с Вами бы согласился, если бы не:
89393

CORSAR1500
02.06.2026, 12:41
Я бы с Вами бы согласился, если бы не:
89393

Спасибо за наводку, я с 0х02 и начинал, не получалось. Сейчас еще раз все попробую и отпишусь.
89394

CORSAR1500
02.06.2026, 12:51
Я бы с Вами бы согласился, если бы не:
89393

Пробую 0х02. Я с этой функции и начинал, но не работало. В поисках хоть чего-то рабочего ушел в 0х01, но и там не получилось.
Регистры:
89395

Настройки обмена (птички перепробовал во всех комбинациях 00 / 01 / 10 / 11):
89396

Работа сниффера:
89397

OwenLogic onine:
89398

Результат то же: запрос формируется корректно, ответ выглядит корректно, но в OL переменная не работает, бит состояния связи в 0, состояние DI0 в 1, поскольку загружается состояние на момент запуска программы после загрузки ПО и остается таковым до последующей перезагрузки или переподачи питания.

EFrol
02.06.2026, 13:32
Давайте заглянем сюда?
89402

CORSAR1500
02.06.2026, 13:36
Давайте заглянем сюда?
89402

Скрин настроек:
89403

По идее, если бы я неверно задал параметры, то через сниффер у меня не проходили бы запросы/ответы.

kondor3000
02.06.2026, 13:42
Я бы на вашем месте начал с чтения 0 регистра и прочитал число 29 - адрес модуля, то есть наладил связь и расставил галки перестановки байт и больше их не трогал. Сеть сделал бы по умолчанию 9600 8N1.
Потом бы занялся чтением бит.

CORSAR1500
02.06.2026, 13:59
Я бы на вашем месте начал с чтения 0 регистра и прочитал число 29 - адрес модуля, то есть наладил связь и расставил галки перестановки байт и больше их не трогал. Сеть сделал бы по умолчанию 9600 8N1.
Потом бы занялся чтением бит.

Решение проблемы:
1. По рекомендациям kondor3000 изменил настройки сети:
89404

2. Настройки модуля tM
89405

3. Настройки сниффера
89407

4. OwenLogic онлайн (работает, счастье-то какое!!!)
89408

Что изменилось: скорость с 38400 на 9600, контроль четности с Even на None. Это и решило проблему, сейчас скорость подниму до 38400 и отпишусь.

kondor3000: вам огромная благодарность! я даже не подозревал копать в этом направлении...

CORSAR1500
02.06.2026, 14:08
Поднял скорость до 38400, как и было: все работает. Получается, что помогло изменение Even на None. Более не менялось ничего.
Вывод у меня такой:
1. ПР200 формировало запрос верно (видно по снифферу)
2. tM формировал и отдавал ответ верно (видно по снифферу)
3. по непонятным причинам ПР200 ответ tM не видело

После изменения Even на None ПР200 ответы от tM начало воспринимать.

kondor3000
02.06.2026, 14:10
Поднял скорость до 38400, как и было: все работает. Получается, что помогло изменение Even на None. Более не менялось ничего.
Вывод у меня такой:
1. ПР200 формировало запрос верно (видно по снифферу)
2. tM формировал и отдавал ответ верно (видно по снифферу)
3. по непонятным причинам ПР200 ответ tM не видело

Вам и EFrol намекал на Even, лучше всегда оставлять настройки по умолчанию, менять только скорость.
Начинать с обмена целых и Float, расставляя байты и регистры галками. Потом биты и маски бит.

CORSAR1500
02.06.2026, 14:17
Вам и EFrol намекал на Even, лучше всегда оставлять настройки по умолчанию, менять только скорость.
Начинать с обмена целых и Float, расставляя байты и регистры галками. Потом биты и маски бит.

Согласен, писали про Even. Но я это понял как вопрос "а у вас действительно везде Even, вы не забыли его везде включить?". Скрином я показал, что "нет, не забыл, везде Even". Мысли поменять на None у меня тогда не возникло. В Вашем случае вы четко написали: "поставь 9600 8N1 и посмотри что будет". А будет чудо :)