UART и RS485
UART и RS485
Здравствуйте.
Вот такая проблема образовалась. необходимо снять данные с монитора электроэнергии по UART и отвечать по RS485 Modbus.
В программе FLProg создаю RS485 Slave с переменными, так же подключаю пользовательскую библиотеку для связи и чтению данных с энергомонитора PZEM004 (UART).
В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
Пробовал переключать входа и 485 и UART. в общем транслит из одного протокола в другой не работает. Может кто может помочь разобраться?
FLProg 2.3.2
Arduino ProMini 328 5v 16MHz
Библиотека - http://flprog.ru/load....1-0-184
Вот такая проблема образовалась. необходимо снять данные с монитора электроэнергии по UART и отвечать по RS485 Modbus.
В программе FLProg создаю RS485 Slave с переменными, так же подключаю пользовательскую библиотеку для связи и чтению данных с энергомонитора PZEM004 (UART).
В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
Пробовал переключать входа и 485 и UART. в общем транслит из одного протокола в другой не работает. Может кто может помочь разобраться?
FLProg 2.3.2
Arduino ProMini 328 5v 16MHz
Библиотека - http://flprog.ru/load....1-0-184
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
adishis, смотрите какие интерфейсы куда подключены. скорее всего модбас и блок pzem сидят на одном уарте. А вообще без проекта можно долго гадать на пальцах.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
UART и RS485
ВЫ используете один и тот-же serial port?
Откуда Вы знаете, что
Откуда Вы знаете, что
, когдаadishis писал(а):а Чтение данных по UART работает без проблем.
adishis писал(а):Master RS485 не видит Слейва
+1starshoy81 писал(а):А вообще без проекта можно долго гадать на пальцах
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
UART и RS485
Порт используется разный, UART программный на 10 и 11 ноге, 485 аппаратный на 0 и 1 ноге.
когда 485 перевожу на программный порт (например на 2 и 3 ноге), то при компиляции ругается -
"Несколько библиотек найдено для "SoftwareSerial.h"
Используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\hardware\arduino\avr\libraries\SoftwareSerial
Не используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\libraries\pzem
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini."
удаляя строку #include<SoftwareSerial.h> , скеч компилируется без ошибок.
когда 485 перевожу на программный порт (например на 2 и 3 ноге), то при компиляции ругается -
"Несколько библиотек найдено для "SoftwareSerial.h"
Используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\hardware\arduino\avr\libraries\SoftwareSerial
Не используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\libraries\pzem
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini."
удаляя строку #include<SoftwareSerial.h> , скеч компилируется без ошибок.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
то есть Вы вообще удаляете связь по софтсериал?adishis писал(а):удаляя строку #include<SoftwareSerial.h> , скеч компилируется без ошибок.
А без дисплея не пробовали?
А это как проверяли?adishis писал(а):В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
UART и RS485
Без дисплея, просто принять данные по UART и отправить по 485 все равно ругается, та же самая ошибка
"Несколько библиотек найдено для "SoftwareSerial.h"
Используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\hardware\arduino\avr\libraries\SoftwareSerial
Не используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\libraries\pzem
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini."
Дело в том наверное, что блок обработки PZEM004T уже в себе содержит вызов библиотеки SoftwareSerial.
Заливаю скеч опрос данных по UART и на дисплей - работает
Заливаю скеч с переменными 485 (константы) - работает
а вот связка - не работает.
Пытался поочередно сначала считывать по UART а потом Обновлять данные в переменных 485 тоже не работает. (циклично 500мс - UART, 500мс - 485).
"Несколько библиотек найдено для "SoftwareSerial.h"
Используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\hardware\arduino\avr\libraries\SoftwareSerial
Не используется: c:\Users\Администратор\Desktop\FLProg-2_3_2_Portable\ideV1\libraries\pzem
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini."
Дело в том наверное, что блок обработки PZEM004T уже в себе содержит вызов библиотеки SoftwareSerial.
Проверял у себя на столе. USB - 485 Moxa Uport1150 и программа мастер modbus на компе.starshoy81 писал(а):Цитата adishis ()В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
А это как проверяли?
Заливаю скеч опрос данных по UART и на дисплей - работает
Заливаю скеч с переменными 485 (константы) - работает
а вот связка - не работает.
Пытался поочередно сначала считывать по UART а потом Обновлять данные в переменных 485 тоже не работает. (циклично 500мс - UART, 500мс - 485).
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
adishis, попробуйте не напрямую из блока передавать в модбас, а через запись в переменную. И эту переменную отправлять в модбас на другой плате.
UART и RS485
То есть две Ардуинки. Одна принимает данные другая отправляет по модбас. А как между двумя Ардуинками передать данные без интерфейсной связи? я думаю, что блок PZEM004 не даст интерфейсной связи нормально работать. (если не брать конечно типа I2C или что то не связанное с Serial)starshoy81 писал(а):adishis, попробуйте не напрямую из блока передавать в модбас, а через запись в переменную. И эту переменную отправлять в модбас на другой плате.
Или разбираться с библиотекой PZEM004, или написать поновой (этого никогда не делал и буду долго писать)
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
UART и RS485
В блоке (PZEM004T/Энергомонитор) в секции Setup уберите строчку Serial.begin(9600). Получается, что ваш блок запускает и софтварный, и хардварный юарт.
Последний раз редактировалось Boroda 03 мар 2017, 20:23, всего редактировалось 1 раз.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
adishis, Не-не, плата в программе. Первая плата считывание из энергомонитора и присвоение выхода V переменной, а вторая плата присвоение вышеобозначенной переменной тега модбас.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
UART и RS485
Ээээээээ... в блоке в LoopSection объявлены переменные и они же стоят на выходе. Двойное декларирование.
Последний раз редактировалось Boroda 04 мар 2017, 00:56, всего редактировалось 1 раз.
UART и RS485
Пробовал так, не помогаетstarshoy81 писал(а):adishis, Не-не, плата в программе. Первая плата считывание из энергомонитора и присвоение выхода V переменной, а вторая плата присвоение вышеобозначенной переменной тега модбас
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
UART и RS485
Доработал блок, положил в блоки пользователя в 5м комментарии.
Добавлено (03.03.2017, 23:01)
---------------------------------------------
adishis, поменяйте адрес слейва на 2, обычно адрес 1 присваивается мастеру сети.
Добавлено (03.03.2017, 23:09)
---------------------------------------------
Убейте из папки C:\Program Files (x86)\Flprog\ideV1\libraries\pzem файлы SoftwareSerial, потому как в стандартных либах IDE они уже есть. У меня с модбасом и блоком ПЗЕМ все компилируется нормально.
Добавлено (03.03.2017, 23:01)
---------------------------------------------
adishis, поменяйте адрес слейва на 2, обычно адрес 1 присваивается мастеру сети.
Добавлено (03.03.2017, 23:09)
---------------------------------------------
Убейте из папки C:\Program Files (x86)\Flprog\ideV1\libraries\pzem файлы SoftwareSerial, потому как в стандартных либах IDE они уже есть. У меня с модбасом и блоком ПЗЕМ все компилируется нормально.
Последний раз редактировалось Boroda 04 мар 2017, 00:56, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
UART и RS485
adishis, чем опрашиваете Arduino?
У меня нет энергомонитора PZEM, тестирую систему с пустыми ногами. Результаты:
1. В файле PZEM004T.cpp есть строчка #define DEFAULT_READ_TIMEOUT 1000, это таймаут софтового UART, если данные от Pzem не пришли в течении секунды, то возвращается значение "-1". С подключенным энергомонитором данные возвращаются намного быстрее.
2. У меня Pzem отсутствует, поэтому софтовый UART на каждый запрос ждет 1 секунду и возвращает -1. Итого на опрос Pzema уходит 4 секунды (у Вас это происходит быстрее).
3. Опрашиваю ардуину скадой SIMP, по умолчанию ожидание ответа от слейва стоит 1000мс. У нас выходит 4 секунды, следовательно скада это воспринимает как ошибка TimeOut.
4. Уменьшил в PZEM004T.cpp параметр DEFAULT_READ_TIMEOUT до 500 (получилось 2 секунды на запрос 4х переменных) и увеличил в скаде таймаут ожидания до трех секунд. Скада увидела нули. Опрос Pzen идет как положено, смотрю логером.
5. Суть в чем: Если начался опрос Pzem и в этот момент поступил запрос по модбасу, пока не опросятся 4 параметра Pzem, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
6. Используйте блок, который я выложил выше.
П.С. Не включайте индикатор en=true, так он обновляется каждый цикл программы и пожирает драгоценное время, лучше сделать так: данные для вывода поменялись -> обновляем экран. Программа быстрее работать будет. Да и вообще все преобразования и экран лучше выносить на отдельную плату с условием. И запускать эту плату тогда, когда необходимо обновить инфу.
Вот программа.
У меня нет энергомонитора PZEM, тестирую систему с пустыми ногами. Результаты:
1. В файле PZEM004T.cpp есть строчка #define DEFAULT_READ_TIMEOUT 1000, это таймаут софтового UART, если данные от Pzem не пришли в течении секунды, то возвращается значение "-1". С подключенным энергомонитором данные возвращаются намного быстрее.
2. У меня Pzem отсутствует, поэтому софтовый UART на каждый запрос ждет 1 секунду и возвращает -1. Итого на опрос Pzema уходит 4 секунды (у Вас это происходит быстрее).
3. Опрашиваю ардуину скадой SIMP, по умолчанию ожидание ответа от слейва стоит 1000мс. У нас выходит 4 секунды, следовательно скада это воспринимает как ошибка TimeOut.
4. Уменьшил в PZEM004T.cpp параметр DEFAULT_READ_TIMEOUT до 500 (получилось 2 секунды на запрос 4х переменных) и увеличил в скаде таймаут ожидания до трех секунд. Скада увидела нули. Опрос Pzen идет как положено, смотрю логером.
5. Суть в чем: Если начался опрос Pzem и в этот момент поступил запрос по модбасу, пока не опросятся 4 параметра Pzem, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
6. Используйте блок, который я выложил выше.
П.С. Не включайте индикатор en=true, так он обновляется каждый цикл программы и пожирает драгоценное время, лучше сделать так: данные для вывода поменялись -> обновляем экран. Программа быстрее работать будет. Да и вообще все преобразования и экран лучше выносить на отдельную плату с условием. И запускать эту плату тогда, когда необходимо обновить инфу.
Вот программа.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Boroda 04 мар 2017, 00:59, всего редактировалось 1 раз.
UART и RS485
Спасибо за ответы. В выходные не мог проверить. Тестовая программа компилируется без проблем.Boroda писал(а):adishis, чем опрашиваете Arduino?У меня нет энергомонитора PZEM, тестирую систему с пустыми ногами. Результаты:
1. В файле PZEM004T.cpp есть строчка #define DEFAULT_READ_TIMEOUT 1000, это таймаут софтового UART, если данные от Pzem не пришли в течении секунды, то возвращается значение "-1". С подключенным энергомонитором данные возвращаются намного быстрее.
2. У меня Pzem отсутствует, поэтому софтовый UART на каждый запрос ждет 1 секунду и возвращает -1. Итого на опрос Pzema уходит 4 секунды (у Вас это происходит быстрее).
3. Опрашиваю ардуину скадой SIMP, по умолчанию ожидание ответа от слейва стоит 1000мс. У нас выходит 4 секунды, следовательно скада это воспринимает как ошибка TimeOut.
4. Уменьшил в PZEM004T.cpp параметр DEFAULT_READ_TIMEOUT до 500 (получилось 2 секунды на запрос 4х переменных) и увеличил в скаде таймаут ожидания до трех секунд. Скада увидела нули. Опрос Pzen идет как положено, смотрю логером.
5. Суть в чем: Если начался опрос Pzem и в этот момент поступил запрос по модбасу, пока не опросятся 4 параметра Pzem, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
6. Используйте блок, который я выложил выше.
П.С. Не включайте индикатор en=true, так он обновляется каждый цикл программы и пожирает драгоценное время, лучше сделать так: данные для вывода поменялись -> обновляем экран. Программа быстрее работать будет. Да и вообще все преобразования и экран лучше выносить на отдельную плату с условием. И запускать эту плату тогда, когда необходимо обновить инфу.
Вот программа.
Прикрепления: test_pzem.flp(272Kb)
Саму Ардуинку опрашиваю пока просто компьютером программой МБ TCP Железо Usb-485 (Moxa) . Железо PZEM так же есть в наличии. В дальнейшем хочу построить сеть ModbusRTU (Arduino) и в голове Мастером поставить S7-1200. Железо PZEM так же есть в наличии.
По программу:
У Вас не включен в настройках RTU - PIN PE-DE. При его включении (у меня 2 нога) (Или PIN PE-DE не обязательно подтягивать?) в компиляции появляется надпись #include SoftwareSerial опять.
Она тоже компилируется с этим включением. Если убрать вывод данных на дисплей, то уже компиляция не проходит.
Программа:
Добавлено (06.03.2017, 08:53)
---------------------------------------------
Я так полагаю независимая работа подпрограмм не возможна.Boroda писал(а):5. Суть в чем: Если начался опрос Pzem и в этот момент поступил запрос по модбасу, пока не опросятся 4 параметра Pzem, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось adishis 06 мар 2017, 08:51, всего редактировалось 1 раз.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
adishis, на Моха преобразователе необязательно пин PEDE, там скорее всего автоматическое распознавание направления передачи данных.
Ну она псевдонезависимая за счет скорости прохождения циклов программы. А так, да, все выполняется последовательно. Поэтому пока не придут данные от пзема на запрос от модбаса ответа не будет.adishis писал(а):Я так полагаю независимая работа подпрограмм не возможна.
UART и RS485
Нет, на Мохе то нет, я имел ввиду на ардуиновском 485-м. (МАХ485)starshoy81 писал(а):adishis, на Моха преобразователе необязательно пин PEDE, там скорее всего автоматическое распознавание направления передачи данных.
А почему не будет? если не успел считать от пзема пусть отдает старые данные по Модбас. Или все таки сам обмен, что аппаратный, что программный он последовательный, тоесть обмен сначала по UART - как закончит обмен , то если есть запрос по Модбас, отдаем данные по Модбас.starshoy81 писал(а):Ну она псевдонезависимая за счет скорости прохождения циклов программы. А так, да, все выполняется последовательно. Поэтому пока не придут данные от пзема на запрос от модбаса ответа не будет.
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
UART и RS485
adishis, на мах485csa точно нужно включать, без него не работает.
Чтобы отдавать старые данные нужно их записывать в переменные, тогда они будут висеть в озу до обновления. Дело здесь в другом, проц занят опросом пзема и на другой запрос не реагирует. В блоке пзема, кстати, delay, не проставлена случайно? Это тоже может влиять на опросы проца.
Чтобы отдавать старые данные нужно их записывать в переменные, тогда они будут висеть в озу до обновления. Дело здесь в другом, проц занят опросом пзема и на другой запрос не реагирует. В блоке пзема, кстати, delay, не проставлена случайно? Это тоже может влиять на опросы проца.
UART и RS485
Вот в этом примере просто не подключена PIN PE-DE в настройках Modbus в программе FlProgBoroda писал(а):Вот программа.Прикрепления: test_pzem.flp(272Kb)
UART и RS485
Такой вопрос:
на Slave по модбасу есть переменные.......
можно их не отдельно передавать, а упаковать через 8int to UART, потом конвертировать в BYTE , а потом одним пакетом передавать через модбаст...
а потом там распоковать.......
на Slave по модбасу есть переменные.......
можно их не отдельно передавать, а упаковать через 8int to UART, потом конвертировать в BYTE , а потом одним пакетом передавать через модбаст...
а потом там распоковать.......
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось igrik1972 19 мар 2017, 18:07, всего редактировалось 1 раз.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя