ModBUS
- Войдите на сайт для отправки комментариев
Ср, 02/09/2015 - 16:09
Добрый день!
Думаю, не я первый, не я последний. Мне тут потребовалось собрать некий PLC, работающий по ModBUS RTU (RS-485), в режиме Slave, который читал бы несколько аналоговых входов, и при опросе Мастером, выдавал бы их значения ему. Я понял, при беглом ознакомлении с ATMega - там всего 6 аналоговых канало (10 бит каждый) - можно ли на каких-то контроллерах больше?
P. s. Просьба сильно не "пинать" новичка. :-)
С уважением,
Эллад
На меге 2560 их 16 штук.
На Uno - 6, на Nano - 8, на Mega - 16, а сколько надо?
P. s. Просьба сильно не "пинать" новичка. :-)
Будем пинать! Учитесь вопросы задавать! Что не устраивает - количество или разрадность? Сколько надо?
-> Radjah: А Мега поддерживается софтом программирования?
-> Евгений П: 32 хотелось бы. Разрядность - устраивает.
Меня больше сейчас волнует, как сделать так, чтобы в схемотехническом плане таже упомянутая МЕГА была связана с сетью RS485. Программой я уже добьюсь, чтобы устройство передавало и реагировало сообщения ModBUS.
Я поясню - это надо для нашего ЦОДа, чтобы в Заббикс ввести значения токов и напряжений на вводе в КАЖДУЮ 19" СТОЙКУ. Я пока не придумал, как я буду это получать с выхода автомата (в шкафу, видимо, удобнее всего будет) - наверное, трансформатор, выпрямитель и как-то "смасштабировать" на операционнике - по типу токовых клещей.
А вот как состыковать Мегу с сетью RS-485 на сигнальном уровне - для меня пока "темный лес".
Взять одну Мегу и дополнить внешними АЦП, благо цифровых пинов хватает. Софтом Arduino IDE поддерживается "из коробки". Модельки внешних АЦП не подскажу - может кто-нибудь другой...
Простите, но ничего не понял.
Простите, но ничего не понял.
Нет таких Ардуин, чтоб было 32 канала АЦП. Даже в старших моделях STM32 (ARM Cortex-M) максимум 24 канала АЦП. Поэтому Вам советуют совместно с Ардуиной применять отдельные специализиорованные микросхемы АЦП. Более конкретно не подскажу, т.к. не приходилось с этой темой сталкиваться.
Ясно. Но главный вопрос все-таки как его включить в сеть RS-485 "электрически".. Пусть будет несколько "Ардуин". Не суть важно.
MAX485 использовать можно.
Ясно. Но главный вопрос все-таки как его включить в сеть RS-485 "электрически".. Пусть будет несколько "Ардуин". Не суть важно.
Электрически:
Если нужен более точный внешний АЦП, например
http://ru.aliexpress.com/item/J34-Free-Shipping-ADS1115-Module-I2C-16-Bi...
У ATmega32u4 ака Ардуино Леонардо и Микро 12 аналоговых входов. Ну и у Меги 16.
Скажите, такое подойдет?
http://ru.aliexpress.com/item/MAX485-Module-RS-485-TTL-to-RS485-MAX485CS...
Вполне, это и есть MAX485 с обвесом
Только, как я понимаю, его придется рядом монтировать,так как его "разножка" не совпадает с "ногами" самой Меги?..
Есть и такие:
http://ru.aliexpress.com/wholesale?shipCountry=ru&shipFromCountry=&shipC...
Только цены озверевшие.
Берете MAX485, подключаете RX/TX и все работает
Товарищи, утро доброе!
Помогите разобраться. Хочу вникнуть в работу нескольких Arduino по Modbus RTU. Имеется Arduino UNO прошитая как "Slave", могу ли я опросить её цифровой вход (допустим D12) с компа работающего как "Master" через монитор последовательного порта софта ардуины? В каком виде я должен отправить запрос? Или без этого преобразователя не обойтись?
Alekssey этот преобразователь для Arduino UNO не нужен, так как в этой модификации ардуино всего один UART порт и он уже задействован через свой преобразователь на USB платы.
Опрос Modbus RTU Slave возможно с Modbus RTU Master. Для этого берем любой Modbus OPC сервер, например Lectus Modbus OPC/DDE сервер, настраиваем и опрашиваем.
Отладку одного слейва действительно можно проводить прямо через родной USB. Когда слейвов несколько приведенный преобразователь нужен для мастера-компьютера, а для слейвов ардуин нужен преобразователь TTL - 485 типа такого:
http://www.aliexpress.com/item-img/MAX485-Module-RS-485-TTL-to-RS485-MAX485CSA-Converter-Module-For-Arduino-Integrated-Circuits-Products/32295998063.html?spm=2114.10010208.100005.20.1UasnI
он подключается к 0,1 ноге и отлично работает паралельно со штатным преобразователем TTL - USB, к которому в этом случае подключать USB кабель бесполезно.
Извините, господа, за долгое молчание. Но я взял в Амперке шилд RS-485 и полностью реализовал протокол. :-)
Все уже несколько месяцев работает.
Тему можно закрыть. Если кому-то нужна моя реализация, пишите, вышлю.
Тему можно закрыть. Если кому-то нужна моя реализация, пишите, вышлю.
здесь не хотите опубликовать наработки?
я хотел бы посмотреть на вашу реализацию modbus протокола. Если можно скиньте на електронку tgs2611@ukr.net. Зарание спасибо.
Если приёмник требуемых сигналов имеет ModbusTCP, то забудьте про RS-485 - доканает его пауза синхронизации в 0.3с. Да и сам пакет ModbusTCP намного проще и удобнее. По крайней мере, считать CRC не придётся. :) Хотя, может быть, есть уже и готовые библиотеки для Modbus RTU... Я сам курил... :)
Не пинайте чайника.
А почему нельзя подключить провода из устройства на Modbus RTU прямо к RX/TX ардуины (или GPIO любого другого девайса)? Почему нужен именно rs485 посредник? Всё равно ж софт писать, поскольку 485 не контроллер модбаса. Или чего не понимаю?
Почему нельзя? Можно конечно! Нужно только, что бы устройства на Modbus RTU выдавала TTL RX TX. Например другая ардуина. У меня так замечательно общаются две наны. Нужен именно rs485 посредник, если устройство выдаёт rs485 и его надо конвертировать в RX TX ардуины.
А. ДОшло, спасибо :)
Тогда последнее. А есть чем отладить модбас ИЗ ардуины в отсутствие реальной железки? а то пока из-за бугра приедет JBUS-железка, я тут заскучаю. Правильно ли я понимаю, что на одном конце ставим ардуину с 485, далее - RS485-USB-converter в компьютер, и запускаем софт типа http://www.mikont.com/products/mbregistrator.html или http://www.modbustools.com/download.html ?
Добрый вечер!
У меня реализация была такой - Mega была подцеплена по USB к компьютеру (COM-порт 232), на ней стоял шилд 485, от него шли линии к 485-ой сети. С Linux я опрашивал Mega, передавал запрос в формате ModBUS, потом в течение установленного стандартом таймаута ожидал ответа. Если ответ приходил - декодировал его "вдоль по стандарту", либо сообщал "вышестоящему" софту о таймауте ожидания отклика от устройства.
232 от 485 отличается уровнями сигналов, которые шилд и согласует. Насколько я помню - 232 униполярный, дуплексный (линия приема от удаленного устройства, линия передачи на удаленное устройство и земля), 485 - это всего две линии, по которым передается либо 0, либо какой-то уровень, соответствующий логической "1". Причем по линии А - это положительный уровень, по линии В - отрицательный. Так что без шилда никак. :-) Причем передача в каждый момент времени либо от мастера ModBUS к слейвам, либо обратно. Но никак не одновременно.
Арудиона имеет "врожденное" ограничение на скорость - 38400. Никаких там 115200. Это накладывает ограничение на число устрйоств (либо на размер сообщений, либо на то и на другое). Поэтому я отошел от этой реализации и ушел в SNMP (Ethernet-shield).
Эллад
eyatsko,
а почему вы не с USB компьютера сразу в 485 слали (через соответствующий конвертер конечно), зачем мега?
или, переформулирую, а если бы вам на том конце ничего не дали, чем бы модбас-железку эмулировали? (вторая мега эт перебор)
я себе написал отладчик https://github.com/vde69/A_House
а в ардуинке сделал эхо в USB
vde69, пойдет! хотя и аскетичненько :)
Всем привет!
Ранее, возможно, я не очень ясно описал задачу)
Вобщем прошло уже достаточно времени чтобы найти ответы на основные вопросы. Схема такая: ПК>USB to RS485>RS485 to ttl>arduino, после модуля usb to rs в парралель предпологалось включить еще несколько ардуин через rs to ttl. Каждая ардуина подключена к своей группе датчиков и по команде с пк опрашивает их и передает данные обратно в пк.Сейчас работаю над алгоритмом поочередного опроса ардуин. Софт на пк пишу в visualstudio.
"На той стороне" у меня был Bolid. :-) Можно, в принципе и как вы предлагаете, но у меня была другая задача.
Арудиона имеет "врожденное" ограничение на скорость - 38400. Никаких там 115200. Это накладывает ограничение на число устрйоств (либо на размер сообщений, либо на то и на другое).
Может быть у меня неправильная Ардуина? Почему к меня всё бегает на 115200? По цепи PC-USB-RS485-RS485-TTL-Arduino. Пересылает массив 100 слов. Сервер написан на Delphi. Как Это может накладывать ограничение на число устройств, если только сервер имеет право задавать транзакции и устройства сами не занимают шину? Можно предположить, что вам надо опрашивать устройства очень часто. Тогда да, есть проблемы, но это не проблемы модбаса.
Самый лучший бесплатный софт QModBus. Единственный недостаток - не умеет работать с ком портами с номером больше 9. Можно посылать запросы и видеть что отвечает ардуина. Это только сервер.
Вышли пожалуйста реализацию мастера и слейва в коде. заранее спасибо! leonoffmaxim@yandex.ru
Тему можно закрыть. Если кому-то нужна моя реализация, пишите, вышлю.
Здравствуйте, хочу сделать что-то похожее на Ваш проект, не могли бы Вы поделиться кодом ?
Andrey053@gmail.com
Спасибо
Молодец автор , не просто создал, но и разобрался как это работает!
Я так не могу, по этому прошу , поделись кодом с ближним : OxFFFFAA@mail.ru ( первая анг.буква О )
Заранее благодарю.