Arduino Nano + ENC28J60 + UIPEthernet + задержки 20-500мс

использование и разработка плат расширения

Arduino Nano + ENC28J60 + UIPEthernet + задержки 20-500мс

Сообщение zakaso » 28 дек 2015, 12:35

Всем привет,

столкнулся с проблемой задержек запрос-ответ порядка от 20 до 500мс.

Использую железку Arduino Nano + Ethernet Shield (ENC28J60) (вставлены друг в друга) и библиотеку UIPEthernet_library взятую отсюдаhttps://github.com/ntruchsess/arduino_uip

Ардуино использую в качестве сервера, клиент написан на Delphi.

Работает так: Клиент (программа Delphi) посылает строку (25 символов) Серверу(Arduino), Сервер получает и высылает ответ Клиенту и так в цикле с интервалом в секунду. Клиент фиксирует время выполнения запроса. Сервер тоже фиксирует время на цикл приема-отправки (см. скетч ниже).

Как видно из протокола опроса (например по трафику снятому WireShark-ом) есть периодическая задержка цикла запрос-ответ, не связанная с работой кода (скетча) Ардуины (и видимо библиотеки UIPEthernet), причем она периодически линейно уменьшается с ~300 мс до 10-20 мс.

С чем могут быть связаны такие задержки? Являются ли такие задержки нормальными для этого железа? Если нет, то как это побороть? Будет ли Arduino UNO + w5100 работать быстрее?

Или проблема все таки в библиотеке?...

P.S. Мне необходим быстрый сервер максимальная задержка на ответ от которого не должна превышать 20мс.

Вот скетч ардуины:
Код: Выделить всё
#include <UIPEthernet.h>

byte mac[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };                                       
IPAddress ip(192, 168, 137, 11);                       
EthernetServer server(8888);

unsigned long Time_Start = 0;
unsigned long ReadTime = 0;
unsigned long WriteTime = 0;
unsigned long AvailableTime = 0;

unsigned long CycleTime_Start = 0;
unsigned long CycleTime = 0;


void setup() {
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop() {
  EthernetClient client = server.available();

  if (client)
  { 
    while (client.connected()) {
       CycleTime_Start = millis();
     
       Time_Start = millis();
       
       if (client.available())
       {
        AvailableTime = (millis() - Time_Start);
       
        uint8_t buf[25];

        Time_Start = millis();       
        int bytesRead = client.read((uint8_t*)buf, 25);         
        ReadTime = (millis() - Time_Start);

        if (bytesRead) {
         
          Time_Start = millis();         
          client.write(buf, 25);         
          WriteTime = (millis() - Time_Start);

          CycleTime = (millis() - CycleTime_Start);
         
          client.print("AT = ");
          client.print(AvailableTime);         
          client.print("ms | RT = ");
          client.print(ReadTime);
          client.print("ms | WT = ");
          client.print(WriteTime);
          client.print("ms | CT = ");
          client.print(CycleTime);         
          client.println("ms");
         }
     }
    }
   
    client.stop();
  }
}


Вот то что приходит Клиенту с Ардуины (dT - интервал времени запрос-ответ измеренный Клиентом):

31.23.40.26.46.62.12.4E dT = 68мс
AT = 0ms | RT = 0ms | WT = 0ms | CT = 0ms dT = 68мс
52.39.15.30.09.39.23.46 dT = 53мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 53мс
3A.45.33.50.20.41.46.46 dT = 40мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 40мс
15.4F.05.49.29.35.5F.21 dT = 25мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 25мс
30.5A.4B.3A.20.3E.5E.3B dT = 12мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 13мс
3C.2F.09.11.30.5A.59.1C dT = 248мс
AT = 2ms | RT = 0ms | WT = 1ms | CT = 3ms dT = 248мс
3A.1D.61.21.39.5D.32.17 dT = 235мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 235мс
5E.0A.32.3B.40.2C.4D.52 dT = 221мс
AT = 1ms | RT = 1ms | WT = 0ms | CT = 2ms dT = 221мс
4C.41.2C.50.33.29.4B.25 dT = 206мс
AT = 1ms | RT = 1ms | WT = 0ms | CT = 2ms dT = 206мс
62.2B.40.5B.3A.54.05.45 dT = 193мс
AT = 1ms | RT = 0ms | WT = 1ms | CT = 2ms dT = 193мс
0A.50.12.4D.50.03.09.43 dT = 180мс
AT = 1ms | RT = 1ms | WT = 0ms | CT = 2ms dT = 180мс
04.5A.1E.03.0A.1C.1E.60 dT = 165мс
AT = 1ms | RT = 0ms | WT = 1ms | CT = 2ms dT = 165мс
35.5C.18.02.03.2C.05.41 dT = 151мс
AT = 1ms | RT = 0ms | WT = 1ms | CT = 2ms dT = 151мс
3D.08.52.51.4C.49.23.07 dT = 137мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 137мс
3B.05.55.18.28.22.33.3C dT = 124мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 124мс
11.05.24.03.3B.2F.2E.40 dT = 109мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 109мс
05.2C.3D.61.2C.60.5E.34 dT = 96мс
AT = 2ms | RT = 0ms | WT = 0ms | CT = 2ms dT = 97мс
48.5A.02.19.4B.35.36.37 dT = 83мс
AT = 1ms | RT = 0ms | WT = 1ms | CT = 2ms dT = 83мс

Вот трафик снятый WireShark-ом:
Изображение
zakaso
 
Сообщения: 1
Зарегистрирован: 28 дек 2015, 12:32
programming: c, Java, Delphi

Вернуться в Шилды (Shields)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron
© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |