Home Articles

Arduino本地网络DHCP失败

Asked
Viewed 869 times
-1

嗨,您好,

我会为我们的问题搜索并尝试很多解决方案,但没有任何工作 . 这将是一个很长的帖子,所以准备好了 .

我们的系统:

我们有一个 arduino uno r3 cloneethernet shield wiznet w5100 ,这个Arduino使 http post request 成为 windows web service. 根据回应,arduino会做一些不值得怀疑的事情 .

因此,在我们的测试环境中,我们将在Windows机器上安装一个Windows Web服务,并将此机器插入我们的本地网络 . 然后将arduino插入我们的本地网络 . 与我们的服务器ip相比,arduino从我们的调制解调器路由器发出了一个dhcp请求获取ip,并且可以从我们的服务器调用webservices .

从现在开始一切正常 .

这是我们的arduino的一些示例代码 . (我只为arduino使用这个额外的库:"RestClient.h"

#include <Ethernet.h>
#include <SPI.h>
#include "RestClient.h"
RestClient client = RestClient("192.168.100.17",51200);
String response;
String PostData;
void setup()
{
  Serial.begin(9600);
  byte mac[] = { 0x04, 0xD6, 0x2E, 0x81, 0x01, 0xB0 };

  if ( Ethernet.begin(mac) == 0) {
     Serial.println("Failed to configure Ethernet using DHCP");
  }
  delay(1000);
  Serial.println(Ethernet.localIP());
}

void postDataToServer(long rfidnumber,int rfidsource){
  String postedRFIDNumber=String(rfidnumber);
  postedRFIDNumber="000"+postedRFIDNumber;
  response = "";
  PostData="RFID="+postedRFIDNumber+"&SOURCE="+rfidsource;
  const char * myPost = PostData.c_str();
  int statusCode = 
 client.post("/sqlpublish/TTSWebService.asmx/INSERT_INDEXRFID",myPost,&response);
}

我们需要将我们的系统安装到公司 . 该公司拥有自己的本地网络 . 他们的本地网络非常有限 . 您可以连接他们的网络,但没有他们的权限就无法访问“www” . 但这不是问题 . 我们将仅为本地Web服务使用本地连接,因为我们还将使用将在本地网络内部的Windows服务器 .

这是他们的网络系统架构的图片:
Normal Network Configuration
在这张图片中缺少开关,但你可以简单地猜测他们使用了大量的swtiches . 因为公司非常广泛并且有很多设备 .

因此,如果我将任何设备连接到其本地网络,则此设备首先从 Windows DHCP Server 调用dhcp protocals get ip,然后可以在本地网络中与其他设备进行通信 . 但由于路由器中的防火墙,无法通过互联网调制解调器 .

然后我们将设置我们的系统:

our needed setup arduino

在此设置中,开关型号为:“AVAYA” .

VSP7000 XLS ERS4826 GTS-PWR+ ERS3549 GTS-PWR+

防火墙是:Watchguard Firebox M300

当我们设置系统时,会发生一些奇怪的事情 . 首先,当我将我的PC(我的设备)连接到本地网络时,我可以在Windows服务器中调用webservices . 但是Arduino无法从DHCP服务器获取IP,并且自然无法连接到Web服务 . 所以我们认为“好吧我们可以给IP静态” . 我们将手动为我们的Arduino提供IP . 在那之后奇怪的事情开始了 . 当Arduino尝试连接我们的Windows Web服务时,它只会得到一些响应 . 大约有20个人从服务器得到了响应,其他任何事情都得到了超时连接 . 并且响应时间也过长了 .

如果我们从另一个设备(例如Device_1)ping我们的静态arduino IP,它有时会再次得到响应 . (相同数量)

那么我们就试着缩小我们的问题范围 .

首先我们改变这样的设置一次,以确保本地网络的问题 .

changed version

Normaly所有系统都运行良好 . 所以我们的调制解调器的DHCP服务器使它完美运行 . (同样在这个设置中如果我给Ip静态它也工作) .

因此存在连接错误的可能性 .

1-Firewall 2-Switch问题3-Arduino Clon问题 .

1-Firewall

当我们谈到系统管理员的问题时,他告诉我们每个本地网络连接和端口都在防火墙中打开 . 他可能是对的,因为任何连接到本地网络的电脑都可以调用网络服务 .

2-Switch problem

This Question,谈到它作为解决方案,它说使用静态IP,在我们的情况下,它没有解决问题 .

In this Question jdr5ca回答有意义,但我不知道如何测试问题或解决问题

In this Question answer tried but not working.

最后this post,但它是如此笼统 . 还有什么应该在Windows中使用替换为"arping" .

3-Arduino Clon Problem.

下周我们和原来的arduino一起尝试,

我会告诉大家 .

所以,任何建议,工具或一些诊断工具的问题,我打开了所有的建议 .

1 Answer

  • 1

    显然我们的问题是一个特定的开关模型!

    这是型号:https://www.zyxel.com/tr/tr/products_services/es_108a.shtml?t=p(zyxel ES-108E)

    当我们直接将arduino连接到zyxel交换机,并从网络中的另一台设备ping arduino时,只有一些ping成功 . (大约%15成功) .

    但是如果我们使用其他交换机型号或者不直接连接到zyxel交换机,它可以正常工作 .

    我不知道为什么它不能与zyxel合作,但问题是切换!

Related