PDA

Просмотр полной версии : Не читается датчик ModBus RTU c кабелем 5м и верными параметрами.



Иван73
09.04.2026, 08:53
Здравствуйте! Есть контроллер ПЛК210-14-CS и датчик давления с протоколом ModBus RTU фирмы ООО "Мидаус". С программной частью протокола разобрались, прочитали корректно давление на коротких проводах 30см на витой паре на ПЛК210 и на Arduino (через конвертер RS485-TTL). Это к тому, что с программной частью и с правильностью подключения проблем нет. при этом терминального резистора на датчике не было, на конвертере для Arduino он 120 Ом по умолчанию, на ПЛК210 его нет. Далее взяли экранированный многожильный провод длина примерно 5м, к разъёму датчика присоединили резистор 115 Ом (не 120 потому что не было под рукой). Arduino читает его без проблем!!! (читал на протяжении эксплуатации 3 месяца, пока на ПЛК210 велись другие разработки). Наконец, подключили его к ПЛК210 через этот же кабель - ПЛК210 не читает. Поставили резистор 120 Ом на вход ПЛК210 - не читает, поменяли резистор 120 Ом у датчика - не читает. Убрали на горячую резистор 120Ом на входе ПЛК210 - начал читать значения, но связь обрывается, нестабильная. Попробовали увеличить резистор на датчике до 130 Ом - так же нестабильная связь. то есть может читать, а может связь оборваться даже на несколько минут. Я честно не знаю, это особенность датчика или особенность ПЛК210, но на Ардуино читается стабильно. Никаких высоковольтных проводов и источников помех рядом нет. Других устройств ModBus тоже нет, длина кабеля очень скромная. Есть какие-нибудь идеи?

kondor3000
09.04.2026, 08:59
Не согласуются уровни TTL, для этого в ПЛК есть резисторы подтяжки, (условно в Ардуино 3 В, а в ПЛК 7-9 В) , вам надо согласовать уровни, а не менять 120 Ом.
Возможно проблема в вашем конвертере RS485-TTL, его лучше просто заменить на обычный RS485.
Кабель, витая пара с экраном (подойдёт даже кабель Изернет или обычный МГШВ, 3-жильный), при отсутствии помех, на 5 метрах, 120 Ом можно не ставить даже.

In_Da_Cher_A
09.04.2026, 08:59
экранированный многожильный провод......марки.......?

Иван73
09.04.2026, 10:13
Марка кабеля USB-4CG. Какие уровни мне надо согласовывать? У датчика есть 4 пина: земля, питание (3,3-12В, мы подаём 5В), A, B. Всё! Что там согласовывать? Надо присоединить А к А, B к B. Датчик работает ЛИБО с Arduino, ЛИБО c ПЛК210. Не одновременно, естественно. Так с Arduino работает, а с ПЛК210 нет на "длинном" кабеле. Никакого конвертера RS485-TTL с ПЛК210 не используется. Он используется с Arduino, потому что в Arduino нет интерфейса RS485, стоит 200 рублей. Но на коротком кабеле (до 30см) с ПЛК210 работает. Можно не ставить резистор 120 Ом? А насколько это правильно, что он, допустим, будет работать без резистора, но не будет работать с резистором, и где гарантия, что он не отвалится без резистора?

kondor3000
09.04.2026, 10:19
Марка кабеля USB-4CG. Какие уровни мне надо согласовывать? У датчика есть 4 пина: земля, питание (3,3-12В, мы подаём 5В), A, B. Всё! Что там согласовывать? Надо присоединить А к А, B к B. Датчик работает ЛИБО с Arduino, ЛИБО c ПЛК210. Не одновременно, естественно. Так с Arduino работает, а с ПЛК210 нет на "длинном" кабеле. Никакого конвертера RS485-TTL с ПЛК210 не используется. Он используется с Arduino, потому что в Arduino нет интерфейса RS485, стоит 200 рублей. Но на коротком кабеле (до 30см) с ПЛК210 работает. Можно не ставить резистор 120 Ом? А насколько это правильно, что он, допустим, будет работать без резистора, но не будет работать с резистором, и где гарантия, что он не отвалится без резистора?

Вот и ответ, 5 В не хватает на стандартный уровень TTL, у RS485 уровни около 9 В. Только ваш конвертер, при питании 12 В может умереть.

imaex
09.04.2026, 10:19
Попробуйте взять обычную неэкранированную витую пару. И резисторы уберите, с обоих концов.

In_Da_Cher_A
09.04.2026, 10:49
Марка кабеля USB-4CG. \и что вы хотите то?

Иван73
09.04.2026, 10:50
Ещё раз 1. Схема датчик-кабель-конвертер-ардуино питается от 5В и работает. 2. Схема датчик-кабель-ПЛК210 (без конвертера!) не работает. 3. Минимальный читаемый логический уровень RS485 это дифференциальный сигнал 200мВ (между A и B), а уровень до 12В это максимально допустимый (но не обязательный) уровень относительно земли на A или B. Какое это отношение имеет к нашей ситуации? Или вы хотите сказать, что мне надо на датчик 9-12В подать? Тогда почему он работает с Arduino от 5В?

Иван73
09.04.2026, 10:50
и что вы хотите то?

Наверно, чтобы датчик стабильно читался с ПЛК210.

Иван73
09.04.2026, 10:53
Попробуйте взять обычную неэкранированную витую пару. И резисторы уберите, с обоих концов.

Как только доберусь - сразу попробую. Но нет ли объяснения, почему без резисторов должно работать, а с резисторами нет, хотя по протоколу они требуются? Я просто не убирал хотя бы один резистор, потому что кабель всё-таки какую-то длину имеет, и потому что резистор требуется. И почему вдруг неэкранированный кабель должен быть лучше экранированного?

imaex
09.04.2026, 11:09
По протоколу не требуются, это на физическом уровне согласование. Более того, на коротких линиях они могут даже мешать. 5 метров - короткая линия.

Кстати, я совершено согласен:


Возможно проблема в вашем конвертере RS485-TTL, его лучше просто заменить на обычный RS485.

kondor3000
09.04.2026, 11:19
Ещё раз 1. Схема датчик-кабель-конвертер-ардуино питается от 5В и работает. 2. Схема датчик-кабель-ПЛК210 (без конвертера!) не работает. 3. Минимальный читаемый логический уровень RS485 это дифференциальный сигнал 200мВ (между A и B), а уровень до 12В это максимально допустимый (но не обязательный) уровень относительно земли на A или B. Какое это отношение имеет к нашей ситуации? Или вы хотите сказать, что мне надо на датчик 9-12В подать? Тогда почему он работает с Arduino от 5В?

На датчик подать 9-12 В, Ардуино и конвертер отключить и проверить.

Иван73
09.04.2026, 11:54
По протоколу не требуются, это на физическом уровне согласование. Более того, на коротких линиях они могут даже мешать. 5 метров - короткая линия.

Кстати, я совершено согласен:

Ну я уже не знаю, как объяснить, что никакого конвертера я с ПЛК210 не использую. Схема Датчик-кабель-ПЛК210. всё. Другая схема Датчик-кабель-конвертер RS485-TTL-ардуино. Это две независмые схемы. 1я не работает,2я работает, подтверждая, что датчик рабочий и способен работать с таким кабелем. RS485-TTL означает, что интерфейс RS-485 преобразуется в логические уровни, совместимые с входами Arduino (0 и 1 типа 0В и 5В). Если действительно есть такое свойство ModBus RTU, что на коротких линиях резисторы мешают, то конечно попробую. Спасибо!

IVM
09.04.2026, 12:41
Ну я уже не знаю, как объяснить, что никакого конвертера я с ПЛК210 не использую. Схема Датчик-кабель-ПЛК210. всё. Другая схема Датчик-кабель-конвертер RS485-TTL-ардуино. Это две независмые схемы. 1я не работает,2я работает, подтверждая, что датчик рабочий и способен работать с таким кабелем. RS485-TTL означает, что интерфейс RS-485 преобразуется в логические уровни, совместимые с входами Arduino (0 и 1 типа 0В и 5В). Если действительно есть такое свойство ModBus RTU, что на коротких линиях резисторы мешают, то конечно попробую. Спасибо!

Таймауты в ПЛК попробуй поменять. В стоповом бите что стоит ?

EFrol
09.04.2026, 12:45
Это особенность ПЛК210 https://owen.ru/forum/showthread.php?t=38244&p=413850&viewfull=1#post413850
Похоже датчику не хватает смещения на линии RS485. Попробуйте подтянуть провод А резистором 20кОм к "+" блока питания.

kondor3000
09.04.2026, 13:14
Это особенность ПЛК210 https://owen.ru/forum/showthread.php?t=38244&p=413850&viewfull=1#post413850
Похоже датчику не хватает смещения на линии RS485. Попробуйте подтянуть провод А резистором 20кОм к "+" блока питания.

Для начала надо увеличить питание датчика с 5 до 9-12 В, а потом уже смещением играться.
У него размах диф. сигнала на грани +/- 200 мв

Иван73
09.04.2026, 13:33
Таймауты в ПЛК попробуй поменять. В стоповом бите что стоит ?

один стоповый бит, как и должно быть. Говорю, с параметрами связи проблем нет, потому что он корректно читается: 1. с помощью ПЛК210 через короткую витую пару 2. с помощью Ардуино через короткую витую пару (на всякий случай повторю еще раз - ПЛК210 и Ардуино не связаны, это две разные схемы, служащие для чтения одного и того же датчика, не одновременно). Таймаут не помню, но тот который по умолчанию, 1000 вроде.

IVM
09.04.2026, 16:57
один стоповый бит, как и должно быть. Говорю, с параметрами связи проблем нет, потому что он корректно читается: 1. с помощью ПЛК210 через короткую витую пару 2. с помощью Ардуино через короткую витую пару (на всякий случай повторю еще раз - ПЛК210 и Ардуино не связаны, это две разные схемы, служащие для чтения одного и того же датчика, не одновременно). Таймаут не помню, но тот который по умолчанию, 1000 вроде.

Скорость обмена какая ?

AlexandrGr
09.04.2026, 17:27
Посмотрите осциллографом и по результатам примите решение.
P.S. Подключите ваш преобразователь без опроса с Arduino.