FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Вторник, 22.08.2017, 17:49
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » UART и RS485 (Проблемы связи UART и RS485 на одном контроллере)
UART и RS485
adishis Дата: Пятница, 03.03.2017, 12:44 | Сообщение # 1
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Здравствуйте.
Вот такая проблема образовалась. необходимо снять данные с монитора электроэнергии по 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
 
starshoy81 Дата: Пятница, 03.03.2017, 15:08 | Сообщение # 2
Майор
Группа: Проверенные
Сообщений: 167
Награды: 1
Репутация: 0
Статус: Offline
adishis, смотрите какие интерфейсы куда подключены. скорее всего модбас и блок pzem сидят на одном уарте. А вообще без проекта можно долго гадать на пальцах.
 
Sancho Дата: Пятница, 03.03.2017, 15:28 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 393
Награды: 12
Репутация: 12
Статус: Offline
ВЫ используете один и тот-же serial port?
Откуда Вы знаете, что
Цитата adishis ()
а Чтение данных по UART работает без проблем.
, когда
Цитата adishis ()
Master RS485 не видит Слейва

Цитата starshoy81 ()
А вообще без проекта можно долго гадать на пальцах

+1


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
adishis Дата: Пятница, 03.03.2017, 16:44 | Сообщение # 4
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Порт используется разный, 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> , скеч компилируется без ошибок.
Прикрепления: MyProgPZEM004_M.flp(157Kb)
 
starshoy81 Дата: Пятница, 03.03.2017, 18:06 | Сообщение # 5
Майор
Группа: Проверенные
Сообщений: 167
Награды: 1
Репутация: 0
Статус: Offline
Цитата adishis ()
удаляя строку #include<SoftwareSerial.h> , скеч компилируется без ошибок.
то есть Вы вообще удаляете связь по софтсериал?

А без дисплея не пробовали?
Цитата adishis ()
В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
А это как проверяли?
 
adishis Дата: Пятница, 03.03.2017, 19:32 | Сообщение # 6
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Без дисплея, просто принять данные по 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. 
Цитата starshoy81 ()
Цитата adishis ()В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
А это как проверяли?

Проверял у себя на столе. USB - 485 Moxa Uport1150 и программа мастер modbus на компе.
Заливаю скеч опрос данных по UART и на дисплей - работает
Заливаю скеч с переменными 485 (константы) - работает
а вот связка - не работает.

Пытался поочередно сначала считывать по UART а потом Обновлять данные в переменных 485 тоже не работает. (циклично 500мс - UART, 500мс - 485).
 
starshoy81 Дата: Пятница, 03.03.2017, 19:40 | Сообщение # 7
Майор
Группа: Проверенные
Сообщений: 167
Награды: 1
Репутация: 0
Статус: Offline
adishis, попробуйте не напрямую из блока передавать в модбас, а через запись в переменную. И эту переменную отправлять в модбас на другой плате.
 
adishis Дата: Пятница, 03.03.2017, 20:04 | Сообщение # 8
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Цитата starshoy81 ()
adishis, попробуйте не напрямую из блока передавать в модбас, а через запись в переменную. И эту переменную отправлять в модбас на другой плате.

То есть две Ардуинки. Одна принимает данные другая отправляет по модбас. А как между двумя Ардуинками передать данные без интерфейсной связи? я думаю, что блок  PZEM004 не даст интерфейсной связи нормально работать. (если не брать конечно типа I2C или что то не связанное с Serial)
Или разбираться с библиотекой PZEM004, или написать поновой (этого никогда не делал и буду долго писать) wacko
 
Boroda Дата: Пятница, 03.03.2017, 20:21 | Сообщение # 9
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
В блоке (PZEM004T/Энергомонитор) в секции Setup уберите строчку Serial.begin(9600). Получается, что ваш блок запускает и софтварный, и хардварный юарт.

Сообщение отредактировал Boroda - Пятница, 03.03.2017, 20:23
 
starshoy81 Дата: Пятница, 03.03.2017, 20:23 | Сообщение # 10
Майор
Группа: Проверенные
Сообщений: 167
Награды: 1
Репутация: 0
Статус: Offline
adishis, Не-не, плата в программе. Первая плата считывание из энергомонитора и присвоение выхода V переменной, а вторая плата присвоение вышеобозначенной переменной тега модбас.
 
Boroda Дата: Пятница, 03.03.2017, 22:29 | Сообщение # 11
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
Ээээээээ... в блоке в LoopSection объявлены переменные и они же стоят на выходе. Двойное декларирование.

Сообщение отредактировал Boroda - Суббота, 04.03.2017, 00:56
 
adishis Дата: Пятница, 03.03.2017, 22:41 | Сообщение # 12
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Цитата starshoy81 ()
adishis, Не-не, плата в программе. Первая плата считывание из энергомонитора и присвоение выхода V переменной, а вторая плата присвоение вышеобозначенной переменной тега модбас

Пробовал так, не помогает
 
Boroda Дата: Пятница, 03.03.2017, 23:09 | Сообщение # 13
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
Доработал блок, положил в блоки пользователя в 5м комментарии.

Добавлено (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.03.2017, 00:56
 
Boroda Дата: Пятница, 03.03.2017, 23:58 | Сообщение # 14
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
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)


Сообщение отредактировал Boroda - Суббота, 04.03.2017, 00:59
 
adishis Дата: Понедельник, 06.03.2017, 08:53 | Сообщение # 15
Рядовой
Группа: Проверенные
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Цитата 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, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
Я так полагаю независимая работа подпрограмм не возможна.
Прикрепления: test_pzem_v2.0.flp(195Kb)


Сообщение отредактировал adishis - Понедельник, 06.03.2017, 08:51
 
Форум » Основной » Спросить у знатоков » UART и RS485 (Проблемы связи UART и RS485 на одном контроллере)
Страница 1 из 212»
Поиск:

FLProg © 2017
Яндекс.Метрика