Нужна помощь, ардуино-rs485-modbus-slave - PLC OWEN
- Войдите на сайт для отправки комментариев
Пт, 24/07/2015 - 23:47
Помогите мне знающие люди, не могу связать в сеть контроллер овен по сети 485 и протоколу модбас рту
в сети есть примеры работы с контроллерами других фирм (например https://www.youtube.com/watch?v=Nzi0NBb9ZVE)
может кто имеет опыт настройки такой связки, вообще идея такая, что бы не покупать модуль дискретного входа овен за 4500р использовать ардуино с одной кнопкой и светодиодом как сигналом дешевле выходит в разы и я хочу подружить плс и ардуино но не хватает знаний.
Подскажите примерами хотябы похожими, буду пытаться разобраться.
Спасибо.
Добрый день! Предлагаю объединть усилия. Только у меня своя задача стоит. Необходимо сделать ардуину мастером сети и по RS485 опрашивать модуль ввода температур, и в соответствии и уставками , блокировками и пр, управлять твердотельным реле. Цены на ПЛК что то ооочень закусались. Вот и приходиться искать альтернативные пути.
Я уже много примеров поробовал и изменял их все ровно нет связи, не знаю как еще сделать. вот пример отсюда http://forum.arduino.cc/index.php?topic=291648.0
вот еще пример http://www.biemmeitalia.net/blog/android-touchscreen-communicates-with-arduino-using-modbus-rs485/
в понедельник забираю преобразователь на плате мах485. судя по примерам смысл ясен. Вопрос в библиотеках.
Оказывается ПЛК в codesys гораздо проще программируется :)
в понедельник забираю преобразователь на плате мах485. судя по примерам смысл ясен. Вопрос в библиотеках.
Оказывается ПЛК в codesys гораздо проще программируется :)
Ну да просто, подключил, выставил скорость и переменные и все работает у меня не возникло трудностей с работой модулей а вот как ардуино подвязать не выходит
подвяжем! это такой же контроллер.
Вот программа которая у меня заработала в связке с ПЛК теперь осталось реализовать вход и выход.Я не могу в регистрах протокола разобраться ((
#include "ModbusRtu.h"
Modbus slave(1, 0, 2);
int8_t state = 0;
unsigned long tempus;
uint16_t au16data[11];
void setup()
{slave.begin( 9600 )}
void loop() {
state = slave.poll( au16data, 11);
if (state > 4) {
tempus = millis() + 50;
digitalWrite(13, HIGH);
}
if (millis() > tempus) digitalWrite(13, LOW );
}
Я пользовался этой статьей и брал от сюда библиотеку, это если кому интересно.
http://habrahabr.ru/post/249043/
но я так и не разобрался и работает у меня все криво
Всем спасибо разобрался.
Предлагаю озвучить бесценный труд :)
Что именно? я все ссылки дал я тупо брал чужие примеры так как сам не разбираюсь.
Если еще есть интерес мы с моим товарищем осилили эту проблему и Modbus TCP и Modbus RTU для Modbus RTU работает как мастер так и слейв с контролерами и модулями овен пробовал плк 100, плк110, спк107 и модуль мх110-16дн
Уважаемый alexval2007! Если не затруднит, можете просветить по этому вопросу! Буду очень признателен!
хорошо я на днях ближе к выходным подготовлю материал чтобы он был более менее читаем и выложу сами понимаете все как попало творческий хаус кстати на тему овена есть у меня эксперементы удачные с установкой codesys с веб визуализацией на Rasproberry Pi все работает прикольно
Думаю мы сможем быть полезны друг другу :) Заранее спасибо!
Тоже интересно. Подписался на тему.
тоже с удовольствием посмотрел бы. на даче стоит ПЛК-63, хочу его с ардуинкой подружить
смотреть тут выложил http://arduino.ru/forum/proekty/modbusrtu-modbustcp-arduino-i-owen-plc
Люди добрые! Помогите разобраться... Хочу отправить пакет в виде 040403FA0001, светодиод моргает на ардуине, т.е цикл выполняется, но ничего не вижу, ни отправлено пакета, ни полученного ответа... Как ловить данные которы присылает устройство? Подключено Autonics TM4. Использую RS485 для коммутации. На Serial1 сидит RS485, а Serial - комп. Так же в сети подключена Овен AC4, чтобы мониторить что ходит по сети...
Вот этот код отправляет в сеть пакет... т.е. я все вижу и на компе и на ас4... а вот с модбас чет не выходит...
Я извиняюсь за глупый вопрос а почему вы уверены в этом коде что он отправляет модбас пакет а не просто сериал посылку я почемуто вэтом коде неуверен что за библиотеку используетепочему симпле модбус предложеное мной нехотите использовать там все роверено
#include <ModbusRtu.h>
Вот этот код отправляет в сеть пакет... т.е. я все вижу и на компе и на ас4... а вот с модбас чет не выходит...
Спасибо что откликнулись! Честно говоря, я разные библиотеки подключал, и в том числе предложенную вами, но не совсем понимаю в каком месте происходит обработка принятных ответов от slave устройств... Вот пример из вашего кода:
Как я понимаю вот здесь "modbus_configure(&Serial, baud, SERIAL_8N1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs" - происходит инициализация, если я использую RX1 и TX1 на ардуино Мега, то указываю &Serial1, верно? Так же исправляю параметр TxEnablePin на ногу где соединены DE и RE ноги RX485, больше в инициализации ничего не меняю?
Теперь собственно пакет разобрать хочется. Мне нужно отправить пакет в виде "04 04 03FA 0001" где функция 04 соответствует READ_INPUT_REGISTERS, а вот что дальше не совсем понято... "адрес регистра,количесво запрашиваемых регистров,локальный адрес регистра" - адрес регистра у меня = 03FA, количество запрашиваемых регистров = 0001, а вот что значит "локальный адрес регистра" не понимаю...
"modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 0, 1, 0);" формируется пакет для отправки.
А вот ответ который я ожидаю должен прийти в таком виде "04 04 02 015F" где 04 - адрес, 04 - функция, 02 кол-во байт, 015F - значение датчика температуры (в DEC = 351 или 35,1 градуса цельсия).
В каком месте кода и каким образом я могу прочитать полученный ответ от устройства подскажите пожалуйста? Заранее благодарен!
если я использую RX1 и TX1 на ардуино Мега, то указываю &Serial1, верно? ДА
Так же исправляю параметр TxEnablePin на ногу где соединены DE и RE ноги RX485, ДА
Serial, baud, СКОРОСТЬ ОБМЕНА ВЫСТАВИТЬ ВАШУ
// Пакет,SLAVE адрес,функция модбус,адрес регистра,количесво запрашиваемых регистров,локальный адрес регистра.
37
modbus_construct(&packets[PACKET1], 4, READ_INPUT_REGISTERS, 1018, 1, 0);
ТУТ ЧТЕНИЕ ПО 4Й ФУНКЦИИ АДРЕС ОПРАШИВАЕМОГО СЛЕЙВА 4, РЕГИСТР 1018, КОЛИЧЕСТВО РЕГИСТРОВ 1 ОН 16БИТНЫЙ НАСКОЛЬКО Я ПОМНЮ 2 БАЙТА ВХОДЯТ ТУДА, ЛОКАЛЬНЫЙ АДРЕС РЕГИСТРА ОСТАВИМ НУЛЕВЫМ ЭТО АДРЕС РЕГИСТРА В ПАМЯТИ ВАШЕГО АРДУИНО ГДЕ БУЕТ ХРАНИТСЯ ПОЛУЧЕНОЕ И ВАШЕГО ПРИБОРА ПО МОДБУС
ВОТ ТУТ ЗАБИРЁМ ПОЛУЧЕННЫЕ ОТ ВАШЕГО ПРИБОРА ДАННЫЕ ИЗ НУЛЕВОГО ЛОКАЛЬНОГО РЕГИСТРА ТАК КАК МЫ ТУДА ЕГО СОХРАНЯЛИ
temp1 = regs[0];
// чтение данных slave-master (slave адрес 4, регистр 1018)
38
modbus_construct(&packets[PACKET1], 4, READ_HOLDING_REGISTERS, 1018, 1, 0);
ТУТ ЧТЕНИЕ ПО 3Й ФУНКЦИИ
Отлично, вроде все по коду рабочее, но на деле - в регистре
regs[0] остается постоянный 0... как будто ничего не приходит от slave
Куда теперь нужно поглядеть? ))) на этих же проводах еще висит Овен АС4 и подключен к компу. У ардуино сом5 у овна сом3. Запущена программа мониторинга данных на сом портах, и пакетов отправки нет... А еще интересный момент - решил установить паузу в коде программы и мультиметром замерить напряжение на управляемой ноге DE и RE. Там 0.4вольта и не дергается даж...
Нашел проблему! Я при монтажных работах использую брэд, у него есть две шины питания, на них я питание подал с ардуинки, а с шинки на rs485 не взял ))))) 4 дня мозг выносил себе и вам!))))
При чем когда работал как мастер - на rs485 горел светодиод, поэтому подозрений то не вызывал. А когда решил попробовать slave библиотеку, то он потух, и тут стал вопрос в чем дело )) Так и нашел проблему )
всем привет!
решил не начинать новую тему а в этой задать вопрос!
Пришли модули на базе чипа макс решил попробовать, подключил сперва 2 ардуинки по сериалу, все работает.., установил модули вроди как рабоотает но выдает не то что нужно а точнее мусор
вот 2 скетча мега это мастер а уно это слейв.
мега
уно
вот что выдает...
отправляю 1 получаю g=
отправляю 2 получаю 3=
отправляю 3 получаю f=
в чем может быть подвох? кто знает отзавитель пож....
Похоже такая же ситуация как и та, с которой я на днях столкнулся. Заказал на ali переходник USB-RS485 (для ПК) и преобразователь уровней Arduino TTL-RS485 (для Arduino). Вроде что-то передается, но не то. Промучился два дня. Затем убрал одну из линий (RX или TX) и увидел, что на результат это не повлияло. Закрадывается впечталение, что неисправен один из модулей. Сейчас закажу новую пару преобразователей уровней. Они копеечные, жаль только времени, которое тратится на доставку. Из-за этого простой в проекте.
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-konvertera-rs-4...
Кстати при отправке 1 у меня помоему тоже g получалось получить.
ПОдскажите, а что вы пытаетесь сделать? чип макс485 соответствует протоколу Modbus. Кодировка передачи данных - в hex системе исчисления. При инициализации протокола вы должны указать уникальные адреса для устройств в пределах 127. ПРи отправке пакета в первый байт записываем адрес нашего устройства, которому хотим что-то передать. Затем команду запись 06h, затем адрес регистра в который хотим сделать запись, например 00h 01h затем - то что хотим, число или код символа. Следовательно на втором устройстве должен быть регистр 0001, в который устройство будет ожидать прием данных. Суть как-то так ))
Я реализовал код по передачи команд по modbus ардуино, а ардуино, выбрав нужную команду - отправила устройству(например частотнику) и получила от него ответ. С компа мы можем прочитать этот ответ записанный уже в нашем ардуино
Dr_grizzly,
ну немножко неверно связывать физическое преобразование уровней и протокол Modbus. Приведя свой сигнал от уровней TTL arduino к уровням RS485 я могу передавать любую информацию по любому протоколу (одни из которых является Modbus, особенностю которого является возможность адресации устройств). Мне ничего подобного делать не нужно было. Мне от компьютера нужно передать один пакет в 5 байт в ардуино (на текущий момент). Зачем мне к этому привязывать какой-то протокол?
Поэтому я в лоб из терминальной программы отправляю посылку (упростил до передачи одного байта), читаю его ардуиной и транслирую этот же байт обратно в терминальную программу. В данном случае не вижу никакой программной разницы с отправкой через обычный USB кабель (в этом варианте все прекрасно работает). Разница лишь в физической реализации.
Но особенность в том, что в конечном итоге мне нужно будет передать эту информация на 30-70 метров. А USB кабелей такого размера не делают :). А благодаря стандарту RS485 я смогу без всяких сложностей передать информацию на такое расстояние.
может попробовать каждый символ в некст переводить потом передавать и потом обратно из некста в символ?
воот )) я про это хотел сказать )) что все таки эта система будет жевать hex данные )))
Здравствуйте товарищи! Вопрос все о том же... Связь аналогового модуля ОВЕН с ардуиной-мастер.
Задача - в браузере наблюдать измеренное значение.
Использую: ардуино Уно, преобразователь RS485, ethernet модуль(enc28j60), ну и собственно Овен МВ110-2АС.
для опроса Овен на ардуине подключаю SimpleModbusMaster.h
В общем-то успех есть, но с оговорками. Возникают 2-е проблемы:
Измеренные значения не изменяются, даже если отсоединить сигнал от канала ОВЕН.
И инициализирутся только один Пакет, т.е. одним пакетом могу опросить 2 канала, а опросить каждый канал отдельным пакетом нет.
При опросе использовал и 3-ю, и 4-ю функции Modbus. Измеренные значения хранятся 0х100 - 1 канал, 0х101 - 2 канал.
Вот эту конструкцию нужно не в setup а в loop и желательно по таймеру, чтобы не сплошняком валила. Тогда данные будут обновлятся. Такой же конструкцией можно опрашивать каждый регистр который нас интересует. Просто его надо конфигурировать в loop цикле перед каждым запросом. P.S. я посчитал что эта библиотека не слишком гибкая, и использую другую. см.выше.
modbus_construct(&packets[PACKET1], 16, READ_INPUT_REGISTERS, 256, 2, 0);
У меня такая задача: Имеются несколько (8) датчиков температуры и давления подключенных к ТРМ202 (4). ТРМ в свою очередь подключены к компу по RS485 через ОВЕНовский преобразователь АС4 . На компе у дежурного в программе SimpLight отображаются эти данные. Нужно подключив ардуино через свой преобразователь RS485 к линии прослушивать данные поступающие на комп и далее по СМС запросу через Neoway M590 (https://istarik.ru/blog/arduino/68.html) отсылать эти данные на номер от которого пришла СМС. Есть ли у кого наработки на данную тему прошу помочь.
Как обычно черт ногу сломит в этих библиотеках. Какая библиотека Modbus Slave актуальней на сегодняшний день? Мне для связи с Mach3. Библиотек много, но мне как новичку, лучше разбирать библиотеку по проще, самую используемую и с документацией.
Кто ж его знает. Ни разу не видел рейтинга библиотек. Устрой опрос. А так они все одинаково работают - выполняют что надо. Бери любую. Лучшая та, которую знаешь.
Как обычно черт ногу сломит в этих библиотеках. Какая библиотека Modbus Slave актуальней на сегодняшний день? Мне для связи с Mach3. Библиотек много, но мне как новичку, лучше разбирать библиотеку по проще, самую используемую и с документацией.
Я эту использую.
Опять же вопрос для чего и как она будет использоваться. Если только опрос то библиотека не нужна вовсе.
Вот такой вариант реализовывал.
Правда modbusTCP, клиент отдает по запросу состояние регистра.
.
А что не понятно? Ответ пришёл. Теперь по мануалу надо его расшифровать. В мануале написано в каких ячейках что лежит. Так что там в мануале про адреса 45000 и далее написано?
.
Я вот не понял, что нужно от программы. Что она должна делать и как. Например по полученному ответу видно, что что то имете значение +0.91 . Что с этим надо сделать?
.
Это ж простая математика. Берём переменную float. Eй присваиваем значение из регистра 45000, прибавляем значение из регистра 45001 делённое на 10000 и ставим знак из регистра 45002. И выводим переменную на экран.
.
.
Вот я опять не понимаю, что надо сделать. Кто мастер? Какие значения надо считать? Откуда? Слейв не может считать. В него можно только записать. В библиотеке есть описание, что такое state для pool. Пока он не примет значение принято читать регистры бесполезно - нет там ничего. Но в регистр должен записать мастер. Кто когда и как пишет в регистры? Можете нарисовать диаграмму обмена между ячейками сети?
.
Не похоже. Modbus view это что? Программа сниффер или мастер?
.