PZEM-004t и Ардуино

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Коллеги, а подскажите плиз - 

использовал опрос примерно как выше в теме - каждые 15 секунд запрашивал один параметр, и все было хорошо. 

Но прошло обновление либы, теперь она поддерживает hardwareserial (что для меня актуально), но теперь появилась задержка в секунду при опросе....

https://github.com/olehs/PZEM004T

менее, чем в 950 мсек - плата стабильно выдает ошибку (-1).

При выставлении #define PZEM_DEFAULT_READ_TIMEOUT 1000

менее, чем в 950 мсек - плата стабильно выдает ошибку (-1).

Подскажите, куда смотреть?

Спасибо заранее!

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ProstoAlex пишет:

Подскажите, куда смотреть?

В начало этой темы. Примерно первые постов 15.

Я там ЗАДОЛБАЛСЯ объяснять ТС, что нужно выкладывать код и именно тот, который работал, и логи работы тоже. Вот правда, ЗАДОЛБАЛСЯ! И Вам объяснять тоже самое уже не буду. Читайте сами. Дойдёт - сделаете как надо, не дойдёт - не моя проблема.

sadman41
Offline
Зарегистрирован: 19.10.2016

Очень интересно... Как Вы связали у себя в голове HardwareSerial и опрос раз в 950ms? Поделитесь логикой.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Коллеги, посыпаю голову пеплом - косяк у меня в коде:

перенося код из "дева" в "прод" оставил несколько лишних опросов...

 

Спасибо всем.... )

MaksVV
Offline
Зарегистрирован: 06.08.2015

пишу с телефона поэтому библу смотреть не удобно. Я правильно понял, что каждый запрос тормозит луп на секунду? частота опроса (получения данных от pzem) мне не критична, но вот loop так тормозить не вариант. 

sadman41
Offline
Зарегистрирован: 19.10.2016

MaksVV пишет:

Я правильно понял, что каждый запрос тормозит луп на секунду? частота опроса (получения данных от pzem) мне не критична, но вот loop так тормозить не вариант. 

Неправильно. Запросы должны осуществляться не чаще раза в секунду. Сам счётчик отвечает быстро.

MaksVV
Offline
Зарегистрирован: 06.08.2015

понял , тормозит когда опрашиваешь чаще одного параметра в секунду. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

только что проверил так тормозит луп (стандартный пример библы)

#include <PZEM004T.h>

PZEM004T* pzem;
IPAddress ip(192,168,1,1);

void setup() {
  while(!Serial) { }
  Serial.begin(9600);

  while(!Serial1) { }
  pzem = new PZEM004T(&Serial1);
  pzem->setAddress(ip);
}

void loop() {
  float v = pzem->voltage(ip);
  if (v < 0.0) v = 0.0;
  Serial.print(v);Serial.print("V; ");

  float i = pzem->current(ip);
  if(i >= 0.0){ Serial.print(i);Serial.print("A; "); }
  
  float p = pzem->power(ip);
  if(p >= 0.0){ Serial.print(p);Serial.print("W; "); }
  
  float e = pzem->energy(ip);
  if(e >= 0.0){ Serial.print(e);Serial.print("Wh; "); }

  Serial.println();
}

а вот так норм. опрашиваем поочереди параметры через 1,5 сек

#include <PZEM004T.h>

PZEM004T* pzem;
IPAddress ip(192,168,1,1);
uint32_t prev = 0;
void setup() {
  while(!Serial) { }
  Serial.begin(9600);

  while(!Serial1) { }
  pzem = new PZEM004T(&Serial1);
  pzem->setAddress(ip);
}

void loop() {
  if (millis() - prev>1500) {
  static byte izmtype;
  
 if (izmtype == 0 ){ float v = pzem->voltage(ip);
  if (v < 0.0) v = 0.0;
  Serial.print(v); Serial.println("V; ");}

else if (izmtype==1) {float i = pzem->current(ip);
  if(i >= 0.0){ Serial.print(i);Serial.println("A; "); }
 }
 else if (izmtype==2){
  float p = pzem->power(ip);
  if(p >= 0.0){ Serial.print(p);Serial.println("W; "); }}
  
else if (izmtype==3){  float e = pzem->energy(ip);
  if(e >= 0.0){ Serial.print(e);Serial.println("Wh; "); }}

prev = millis(); izmtype ++; if (izmtype==4) izmtype=0;}
  Serial.println(millis());
}

 

Pahanovna
Offline
Зарегистрирован: 25.03.2019

Китайцы выпустили новую версию платы (v3.0), обещают что не надо будет ждать по одной секунде между запросами. И считать можно будет все данные за один запрос. Но и протокол поменялся, так что либа работать не будет. А ещё улучшили изоляцию шины данных от измерительной части. Теперь экран на нижней стороне платы, который соединён с сетью, не заходит на разъём данных. И под оптронами сделали разрез, чтобы исключить пробой по поверхности платы.

Мне уже приехала новая плата. Надеюсь, на этой неделе найдётся время протестить.

sadman41
Offline
Зарегистрирован: 19.10.2016

Подкиньте ссылку на девайс.

Нашел описание. Производитель туда ModBus влепил вместо своего протокола.

Pahanovna
Offline
Зарегистрирован: 25.03.2019