Реализация Modbus RTU на устройстве UART

У меня есть счетчик частиц HPMA115S0 с интерфейсом связи UART. Я купил модуль преобразователя TTL UART в RS485, чтобы он работал с ПЛК по протоколу Modbus RTU.

Обычно я работаю с устройствами, имеющими стандарт последовательной связи RS485, но эти устройства имеют всю информацию, необходимую мне для работы по протоколу последовательной связи Modbus (ПЛК в качестве ведущего), такую ​​как идентификатор, скорость передачи и адреса регистров, которые содержать данные для запроса.

Однако с HPMA115S0 я не знаю, какой будет идентификатор, каков адрес регистра значения измерения и так далее. Итак, могу ли я заставить это устройство со связью UART работать по последовательному протоколу Modbus с помощью преобразователя UART в RS485?

Удалил мой минус. Спасибо, что навели порядок :) Я посмотрел характеристики вашего модуля вентилятора. Вот забавное приложение и спецификация для MODBUS. Вам придется переключаться между спецификациями UART и спецификациями MODBUS.
KingDuken Спасибо за ваш ответ, как я могу получить ответ из спецификаций Modbus?
Насколько я могу судить по спецификациям вашего устройства, он использует специальный протокол UART «точка-точка». Таким образом, он не сможет обрабатывать запросы Modbus (кадры Modbus имеют фиксированную структуру: идентификатор ведомого устройства, FC, AddrHigh, AddrLow и т. д.), независимо от того, какое оборудование вы будете использовать. Таким образом, если вам действительно необходимо связать это устройство с главным устройством Modbus, вам потребуется создать шлюз Custom-UART/RS485-ModbusRTU, который будет поддерживать оба протокола.

Ответы (1)

Вашему датчику вообще не нужен Modbus, из таблицы видно, что он использует простой протокол, который отправляет 32 байта на кадр.

Если у вас есть ПЛК, вы сможете легко получать эти кадры. Большинство (по крайней мере, те, что я видел) ПЛК с портом RS485 могут работать либо с Modbus, либо с так называемым «символьным режимом», что означает, что порт на ПЛК работает, так сказать, как необработанный UART, и вам нужно определите свой собственный протокол в своем программном обеспечении. Когда вы используете этот необработанный протокол, вам не нужен адрес устройства или номер регистра или что-то подобное, вы просто открываете свой порт с правильными настройками и начинаете прослушивать и обрабатывать кадры и значения записи.

Если вам не нужен ПЛК, вы всегда можете использовать любой компьютер с последовательным портом или последовательный USB-адаптер (RS232 или RS485, если датчик находится далеко в поле). Самое простое и дешевое, что я могу придумать, — это Raspberry Pi Zero рядом с датчиком со скриптом Python для записи значений каждые 10 или более секунд и записи их в базу данных. Таким образом, вам не понадобится ссылка RS485, и вы можете подключиться к Pi, чтобы читать или загружать значения разными способами. Вы даже можете установить что-то вроде Domoticz ( http://www.domoticz.com/ ), чтобы иметь графики с тенденциями или запускать сигналы тревоги по электронной почте или смс (обратите внимание, что я не думаю, что ваш датчик поддерживается Domoticz из коробка, но с таким простым протоколом интерфейс должен быть проще простого).

Действительно много возможностей!

Спасибо за ваш ответ, причина, по которой я хочу использовать rs485, заключается в расстоянии между датчиком и ПЛК и количестве датчиков, протокол UART не будет работать на большом расстоянии, и это протокол ptp. Я купил TTL для rs485. модуль преобразователя, я потянул RE и DE на низкий уровень, и мне удалось отправить запросы на датчик, и он ответил, но когда я переключаю контакты RE и DE HIGH, и датчик находится в режиме автоматической отправки, я ничего не могу получить от датчик
пожалуйста. Я вижу, что теперь вы столкнулись с другой проблемой. Как у вас дела с преобразованием TTL в RS485? Если у вас есть собственный чип (MAX485 или аналогичный), вам придется каким-то образом управлять сигналом DE/~RE самостоятельно. Если у вас есть готовое устройство, оно должно автоматически управлять этим сигналом. Если нет, возможно, вы можете сделать это с помощью таймера 555, как я предложил здесь stackoverflow.com/questions/45957314/…
Читая ваш комментарий снова, я склонен думать, что вы переключаете сигнал RE/~ DE вручную; если это так, взгляните на решение 555, это довольно просто
Я использую этот модуль rs485 хоббикомпоненты . иметь возможность что-то получить, не вбивая пины DE и RE?
У меня тоже есть пара таких! Я не вижу в спецификации, как быстро ваш датчик будет пытаться ответить после получения запроса, но в целом это время порядка миллисекунд, поэтому я не думаю, что вы сможете переключать DE/ ~RE low достаточно быстро и, кроме того, это было бы хорошо только для тестирования, но как только вы развернете свой датчик где-нибудь, вы захотите, чтобы он автоматически обрабатывал обмен данными. Как я понимаю, неважно, что датчик в автопосыле, надо как-то самому переключать сигнал DE/~RE. Посмотрите на схему 555.
Или, если это слишком грубо для вас, возможно, взгляните на это: amazon.com/… electronicdesign.com/embedded-revolution/…
И это от DSD, у меня нет именно этой платы, но марка вполне нормальная, и MAX13487 решит вашу проблему: amazon.com/DSD-TECH-SH-U12-MAX13487-Raspberry/dp/B07B667STP/… maximintegrated .com/en/products/interface/transceivers/…
Теперь я вижу, что неправильно понял, что вы имели в виду. Автоматическая отправка означает, что вы хотите сохранить симплексную шину вместо полудуплексной. Ваши датчики будут отправлять данные непрерывно, и вы будете считывать данные только с ПЛК или компьютера. Это должно сработать, если вы держите DE и ~RE всегда высокими; датчик увидит эхо своих собственных кадров данных, но это не должно быть проблемой. Я сохраняю комментарии выше на случай, если вы захотите взглянуть. Обратите внимание, что с полудуплексом вы сможете изменить конфигурацию датчика, если вам это нужно.
Еще раз спасибо, вот чего я не понимаю, так это почему я ничего не получаю, когда датчик в режиме автоотправки и DE и RE модуля вытянули High, ведь в реальном приложении я хочу получать только от датчика и все и датчик постоянно отправляет данные, я протестировал датчик с помощью max232, и мне удалось получить данные на моем компьютере без отправки какого-либо запроса, потому что датчик отправляет непрерывно,
Читая руководство, я вижу, что вам нужно только отправить HEX 68 01 40 57, он ответит положительным или отрицательным ACK и немедленно начнет отправлять данные. Если он работает на стороне TTL, он должен работать и на стороне RS485, пока у вас высокие значения DE и ~RE (на самом деле я даже не думаю, что ~RE имеет значение, и то, что я написал выше об эхо-сигналах, неверно, если вы продолжаете ~RE высокий)
У вас есть возможность проверить, поступает ли сигнал на сторону RS485? Или, может быть, другой конвертер, чтобы проверить, что тот, который вы используете, неплох
А, теперь я вижу кое-что еще: ваш датчик UART дает 3,3 В, но трансивер у вас есть для сигналов 5 В, у вас может быть проблема. Иногда вам удается решить эти 5 В с 3,3 В, но это совсем не точно и не очень надежно. Смотрите здесь для быстрого трюка: electronics.stackexchange.com/questions/81580/…
Я проверил другой модуль и проблему с sem, в таблице данных max485 min VIH = 2,0 В, поэтому 3,3 В должно работать нормально. то, что я еще не тестировал, - это преобразователь логического уровня, я сделал один на два npn-транзистора, но это не сработало.
Вы правы насчет VIH, но эти 2 В действительны только при напряжении питания 5 В. В любом случае, если вы пробовали с переключателем уровня и все равно не работает, должно быть что-то еще. Кроме проверки с помощью прицела, я не могу думать ни о чем другом. Я дам вам знать, если что-то еще придет в голову