, когдаadishis писал(а):а Чтение данных по UART работает без проблем.
adishis писал(а):Master RS485 не видит Слейва
+1starshoy81 писал(а):А вообще без проекта можно долго гадать на пальцах
то есть Вы вообще удаляете связь по софтсериал?adishis писал(а):удаляя строку #include<SoftwareSerial.h> , скеч компилируется без ошибок.
А это как проверяли?adishis писал(а):В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
Проверял у себя на столе. USB - 485 Moxa Uport1150 и программа мастер modbus на компе.starshoy81 писал(а):Цитата adishis ()В этой связке Master RS485 не видит Слейва, а Чтение данных по UART работает без проблем. Если отключаю библиотеку чтения данных по UART, то Modbus начинает работать.
А это как проверяли?
То есть две Ардуинки. Одна принимает данные другая отправляет по модбас. А как между двумя Ардуинками передать данные без интерфейсной связи? я думаю, что блок PZEM004 не даст интерфейсной связи нормально работать. (если не брать конечно типа I2C или что то не связанное с Serial)starshoy81 писал(а):adishis, попробуйте не напрямую из блока передавать в модбас, а через запись в переменную. И эту переменную отправлять в модбас на другой плате.
Пробовал так, не помогаетstarshoy81 писал(а):adishis, Не-не, плата в программе. Первая плата считывание из энергомонитора и присвоение выхода V переменной, а вторая плата присвоение вышеобозначенной переменной тега модбас
Спасибо за ответы. В выходные не мог проверить. Тестовая программа компилируется без проблем.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)
Я так полагаю независимая работа подпрограмм не возможна.Boroda писал(а):5. Суть в чем: Если начался опрос Pzem и в этот момент поступил запрос по модбасу, пока не опросятся 4 параметра Pzem, модбас не отдаст данные скаде. Увеличивайте таймаут ответа в мастере, возможно этого времени не хватает на опрос энергомонитора.
Ну она псевдонезависимая за счет скорости прохождения циклов программы. А так, да, все выполняется последовательно. Поэтому пока не придут данные от пзема на запрос от модбаса ответа не будет.adishis писал(а):Я так полагаю независимая работа подпрограмм не возможна.
Нет, на Мохе то нет, я имел ввиду на ардуиновском 485-м. (МАХ485)starshoy81 писал(а):adishis, на Моха преобразователе необязательно пин PEDE, там скорее всего автоматическое распознавание направления передачи данных.
А почему не будет? если не успел считать от пзема пусть отдает старые данные по Модбас. Или все таки сам обмен, что аппаратный, что программный он последовательный, тоесть обмен сначала по UART - как закончит обмен , то если есть запрос по Модбас, отдаем данные по Модбас.starshoy81 писал(а):Ну она псевдонезависимая за счет скорости прохождения циклов программы. А так, да, все выполняется последовательно. Поэтому пока не придут данные от пзема на запрос от модбаса ответа не будет.
Вот в этом примере просто не подключена PIN PE-DE в настройках Modbus в программе FlProgBoroda писал(а):Вот программа.Прикрепления: test_pzem.flp(272Kb)