TODOPIC

Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: juaperser1 en 23 de Junio de 2020, 07:23:29

Título: W5500 servidor por ethernet
Publicado por: juaperser1 en 23 de Junio de 2020, 07:23:29
Hola.

Dispongo de un proyecto que tiene un chip wiznet W5500, el cual sirve como servidor de un sistema, nada del otro mundo, leer algunos datos y/o modificarlos.

El problema es que tal y como esta hecho ahora es bastante arcaico y feo, y mi idea es implementar un servidor modbus ethernet, o algun tipo de pagina que entres desde el browser y modifiques y leas, el problema es que voy ha hacer esto por primera vez y voy a ir colgando aquí mis avances y ver si alguien me puede ir guiando o corrigiendo.

Del hardware me olvido por que ya esta comprobado que funciona correctamente, por lo tanto voy a ir incluyendo las librerías en un proyecto nuevo, de momento con datos ficticios que voy a guardar en un vector que simulara la tabla de registros de modbus.

¿La primera duda que me encuentro es, que librería seria la mas adecuada para mi?
tenemos:

DHCP client
DNS client
FTP client
FTP server
SNMP agent / trap (SNMPv1)
SNTP client
TFTP client
HTTP Server

Supongo que lo mejor para un Modbus es el DHCP y para que aparezca en el browser un HTTP?

un saludo y gracias.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 23 de Junio de 2020, 09:16:33
Necesitas:

DHCP si queres que el IP sea dinamico, dado por el router a donde estes conectado.
DNS si queres comunicarte con www.google.com en ves de usar su IP. Necesitas algo que resuelva el DNS antes de enviar la info.
HTTP Server. El servidor para mostrar las paginas.
SNMP - No lo vas a necesitar
SNTP - Util si deseas tomar el tiempo desde internet, algun servidor NTP.
FTP/TFTP - No vas a subir/descargar archivos asi que seguramente no.
ICMP - Para tenr un ping :3 y probar

Y luego aparte tenes lo de MODBUS. O es via ethernet tambien?
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 23 de Junio de 2020, 13:42:32
Hola gracias por contestar,

Pues por lo que comentas no creo que necesite DNS, ni FTP/TFTP ni SNTP.

Lo que me gustaría hacer, (no se si estoy diciendo una tonteria) es lo mismo que se hace con el modbus con un rs485 pero por ethernet, en una red local. Entiendo que se puede hacer por que en la norma modbus viene implementado los mensajes para esto:

http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf


En vez de usar el modelo de mensaje PDU seria el ADU. Siendo modbus cualquier cliente podría conectarse. Si esto no es viable, pues entonces me gustaría que desde el browser o buscador escribiera la direccion ip de este, o la MAC o lo que sea y me saliera por pantalla los valores, pero creo que desde el navegador no podria escribir valores por lo que estoy leyendo, todavia estoy muy verde.

Ya he añadido las librerias, ahora estoy modificandolas para comunicarme mediante el spi con el W5500, por cierto estoy usando un Renesas synergy S3A1, aunque no creo que esto influya mucho.

un saludo
un saludo.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 23 de Junio de 2020, 15:23:48
Si es unicamente MODBUS, entonces el MODBUS TCP/IP se basa sobre TCP, teniendo el stack TCP/IP + la capa de modbus (que usaria las funciones TCP/IP) entonces tendrias tu codigo, lo que si vas a tener que buscar si encontrar el codigo de esa capa MODBUS.

Si implementas el server HTTP entonces vas a tener si o si la capa TCP/IP, asi que te faltaria solo encontrar eso.. la capa de modbus y hacer la interconexion. Ese ADU vos lo envias a la capa TCP.

Se podria considerar que es el problema mas grande: buscar esa capa que hace de servidor/cliente MODBUS
Microchip ofrece una version basica

https://www.microchip.com/forums/m1053072.aspx

Como para que te guies
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 25 de Junio de 2020, 06:35:19
 
Si es unicamente MODBUS, entonces el MODBUS TCP/IP se basa sobre TCP, teniendo el stack TCP/IP + la capa de modbus (que usaria las funciones TCP/IP) entonces tendrias tu codigo, lo que si vas a tener que buscar si encontrar el codigo de esa capa MODBUS.

Si implementas el server HTTP entonces vas a tener si o si la capa TCP/IP, asi que te faltaria solo encontrar eso.. la capa de modbus y hacer la interconexion. Ese ADU vos lo envias a la capa TCP.

Se podria considerar que es el problema mas grande: buscar esa capa que hace de servidor/cliente MODBUS
Microchip ofrece una version basica

https://www.microchip.com/forums/m1053072.aspx

Como para que te guies

Hola, ok de momento ya he conseguido configurarlo todo, con la MAC(un integrado de microchip que me da una mac unica) la ip dinamica, mascara de red etc, esto va bien por que con la aplicación fing del movil veo que esta conectado a la red. Aparece como atmel debido al chip para la mac.

ahora me llegan un poco las dudas sobre como trabaja esta comunicación, es decir, por ejemplo para hacer el modbus en RS485, lo hice yo mismo, cogi el documento este:
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

y me hice yo las librerias, con sus mensajes de excepción, sus códigos de función el mapeo etc. Pero no se como hacerlo con ethernet.

El siguiente paso que veo es que debo conectarme a un puerto, por lo general el 5000, ¿pero como actuaria un cliente modbus, como le haría la peticion a mi esclavo? que es el MBAP de la trama de 7 bytes para el ethernet.

un saludo.

  - Tienes que ingresar para ver archivos adjuntos -  
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 25 de Junio de 2020, 07:19:29
Tienes el grupo de librerías completo en el GitHub de Wiznet: Wiznet ioLibrary (https://github.com/Wiznet/ioLibrary_Driver)

Busca en la raíz de Wiznet que creo que hay también algo para ModBus.

un saludo
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 25 de Junio de 2020, 07:23:11
Ok he avanzado un poco mas, y ya he conseguido mandar datos y establecer la conexión a un par remoto:

usando hercules (no se si hay una herramienta mejora para esto que estoy haciendo)

  - Tienes que ingresar para ver archivos adjuntos -  

El código todavia esta muy verde pero básicamente lo que he hecho es (es una maquina de estados asi que lo voy a copiar los trozos que van de manera secuencial para que se entienda sin tener que ir buscando en los estados)

Código: [Seleccionar]
         
{
      //Dirección MAC
                netInfo.mac[0] = AppDatos.Memoria.DireccionMac.Valor[0];
                netInfo.mac[1] = AppDatos.Memoria.DireccionMac.Valor[1];
                netInfo.mac[2] = AppDatos.Memoria.DireccionMac.Valor[2];
                netInfo.mac[3] = AppDatos.Memoria.DireccionMac.Valor[3];
                netInfo.mac[4] = AppDatos.Memoria.DireccionMac.Valor[4];
                netInfo.mac[5] = AppDatos.Memoria.DireccionMac.Valor[5];

                //Dirección IP
                netInfo.ip[0] = 192;
                netInfo.ip[1] = 168;
                netInfo.ip[2] = 0;
                netInfo.ip[3] = 214;

                //Mascara de Subnet
                netInfo.sn[0] = 255;
                netInfo.sn[1] = 255;
                netInfo.sn[2] = 255;
                netInfo.sn[3] = 0;

                //Dirección gateway
                netInfo.gw[0] = 192;
                netInfo.gw[1] = 168;
                netInfo.gw[2] = 0;
                netInfo.gw[3] = 1;

                netInfo.dns[0] = 0;
                netInfo.dns[1] = 0;
                netInfo.dns[2] = 0;
                netInfo.dns[3] = 0;

                netInfo.dhcp = NETINFO_DHCP;

                Inicializacion_W5500();
}

void Inicializacion_W5500(void)
{
    uint8_t temp;
    uint8_t W5500FifoSize[2][8] = {{2, 2, 2, 2, 2, 2, 2, 2, }, {2, 2, 2, 2, 2, 2, 2, 2}};

    reg_wizchip_cs_cbfunc(cs_sel, cs_desel);                        //Indicamos las funciones CS utilizar por el W5500
    reg_wizchip_spi_cbfunc(SPI_Recibir, SPI_Escribir);              //Indicamos las funciones SPI utilizar por el W5500

    if (AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
    {
        if (ctlwizchip(CW_INIT_WIZCHIP, (void*)W5500FifoSize) == -1)
        {
            while(1);
        }

        do
        {
          if (ctlwizchip(CW_GET_PHYLINK, (void*)&temp) == -1)
          {

          }
        } while (temp == PHY_LINK_OFF);
    }

    if (AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
    {
        setSHAR(netInfo.mac);
        DHCP_init(0, DHCP_Buffer);
        reg_dhcp_cbfunc(AsignarIP, AsignarIP, ConflictoIP);
    }
}

después en el bucle principal:

Código: [Seleccionar]
        case ETHERNET_ESTADO_IP_AUTOMATICA:
        {
            uint8_t SocketEstado = 0;
            Cliente_DHCP();

            if(FlagEjecucionTareasEthernet)
            {
                FlagEjecucionTareasEthernet = false;

                wizchip_setnetinfo(&netInfo);                       //Tomamos la informaci
                wizchip_getnetinfo(&netInfo);

                if(socket(0, Sn_MR_TCP, 5000, 0) == 0)              //numero de socket, protocolo, puerto,
                {
                    if(listen(0) == SOCK_OK)
                    {
                        // While socket is in LISTEN mode we wait for a remote connection
                        while((SocketEstado = getSn_SR(0)) == SOCK_LISTEN)
                        {
                                //Colocar algo para salir en caso de que no se establezca la conexión
                        }

                        //Conexión establecida con par remoto
                        if((SocketEstado = getSn_SR(0)) == SOCK_ESTABLISHED)
                        {
                            uint8_t Mensaje[] = "Hola Mundo";
                            uint16_t Longitud = (uint16_t)strlen(Mensaje);
                            send(0, Mensaje, Longitud);
                        }
                        //Algo ha salido mal con la conexión remota. Desconexión
                        else if((SocketEstado = getSn_SR(0)) ==  SOCK_SYNRECV)
                        {
                            ErrorNoAbrePuerto++;
                        }
                        else
                        {
                            ErrorNoAbrePuerto++;
                        }
                    }
                    else                                            //El socket no esta en modo escucha algo salio mal
                    {
                        ErrorNoAbrePuerto++;
                    }
                }
                else //No se ha podido abrir
                {
                    ErrorNoAbrePuerto++;
                }
            }
        }
            break;

/**Ejecuta el cliente DHCP en el bucle principal*/
void Cliente_DHCP(void)
{
    uint8_t ValorDHCP = DHCP_run();

    switch (ValorDHCP)
    {
        case DHCP_IP_ASSIGN:
        {
//            Error = 1;
        }
            break;
        case DHCP_IP_CHANGED:
        {
//            Error = 2;
        }
            break;
        case DHCP_IP_LEASED:
        {
            AppDatos.Memoria.DireccionIP.Valor[0]=netInfo.ip[0];
            AppDatos.Memoria.DireccionIP.Valor[1]=netInfo.ip[1];
            AppDatos.Memoria.DireccionIP.Valor[2]=netInfo.ip[2];
            AppDatos.Memoria.DireccionIP.Valor[3]=netInfo.ip[3];

            FlagEjecucionTareasEthernet = true;
        }
            break;
        case DHCP_FAILED:
        {
//            Error = 2;
        }
            break;
        default:
            break;
    }
}

Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 25 de Junio de 2020, 07:25:31
Tienes el grupo de librerías completo en el GitHub de Wiznet: Wiznet ioLibrary (https://github.com/Wiznet/ioLibrary_Driver)

Busca en la raíz de Wiznet que creo que hay también algo para ModBus.

un saludo

Hola xocas gracias por responder, he buscado, pero en principio creo que no hay nada para modbus, hay dos aplicaciones que son loopback y multicast, y luego los protocolos para el ethernet son:

DHCP client
DNS client
FTP client
FTP server
SNMP agent / trap (SNMPv1)
SNTP client
TFTP client
HTTP Server

o no he sabido verlo, que también puede ser.
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 25 de Junio de 2020, 07:58:07
Tienes razón, lo que hay es para algunos de sus módulos.

Para el W5500 encontré esto: WIZ550S2E-Modbus (https://github.com/Wiznet/WIZ550S2E-Modbus) y en la wiki tienes documentación y ejemplos de otros módulos W5500-S2E: https://wizwiki.net/wiki/doku.php/products:w5500s2e-s1:start

Espero que te sirvan de algo...

un saludo

Edito: Para Arduino: https://github.com/goddland16/Modbus-TCP
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 25 de Junio de 2020, 08:14:18
Tienes razón, lo que hay es para algunos de sus módulos.

Para el W5500 encontré esto: WIZ550S2E-Modbus (https://github.com/Wiznet/WIZ550S2E-Modbus) y en la wiki tienes documentación y ejemplos de otros módulos W5500-S2E: https://wizwiki.net/wiki/doku.php/products:w5500s2e-s1:start

Espero que te sirvan de algo...

un saludo

Edito: Para Arduino: https://github.com/goddland16/Modbus-TCP

Gracias voy a ver que pueedo sacar en claro
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 25 de Junio de 2020, 08:51:38
Ok por lo que veo, una vez que puedo recibir y mandar datos es bastante parecido a un modbus serie normal y corriente (por favor corregirme si me equivoco)

solo que la trama en vez de ser Direccion-funcion-datos-checksum, es:

MBPA-Funcion-datos siendo MBPA:

-Transación ID (2Bytes): es un numero que da el cliente, por lo que yo como servidor solo tengo que replicarlo en la respuesta.
-Protocolo ID (2Bytes): Para el protocolo modbus siempre es el 0.
-Longitud (2Bytes): Numero de bytes a partir de ahora.
-unitID 1Bytes: igual, lo pone el cliente y el servidor lo repite.

después la trama es igual, pero sin CRC.
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 26 de Junio de 2020, 05:57:49
Encontré un par de tutoriales sobre el tema que creo te pueden interesar. Modbus TCP/RTU Client/Master (http://portal.eletrocursos.net/tutorial9.html) y Webserver (http://portal.eletrocursos.net/tutorial8.html). Tienen enlace de descarga del proyecto completo (código, librerías, etc).

Creo que abarcan lo que tratas de hacer y te pueden dar pistas de como llevarlo a cabo. Si tienes problemas con el idioma pregunta, porque ahí sí te puedo ayudar.

saludo
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 26 de Junio de 2020, 09:13:44
Muchas gracias xocas, tirare de google translate y de los subtítulos generados automáticamente y con eso y viendo el código supongo que me aclararé.

De todas formas tengo una duda viendo el documento este: http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

es con respecto a las excepciones, por ejemplo si vemos el diagrama de flujo de la función 0x03, dice que si el número de registros no esta entre 1 y 125 debe dar la excepción 3, pero que pasa si yo solo tengo 20 registros? debo comprobar que este entre 1 y 125 o entre 1 y 20 para dar la excepción 3.

Por que luego también esta la excepción 2, que comprueba que estés en un rango correcto de memoria de registros, entonces en caso de que me pidan leer 25 registros, ¿debo dar la excepción 2 o la 3?

un saludo.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 26 de Junio de 2020, 10:25:41
El documento dice claramente

Si se pide inicialmente un registro correcto, pero el largo no... Por ejemplo si se da inicio en el registro 17 y largo 3, esto es bueno ya que ocuparia 17,18,19. Pero si por ejemplo fuera 18 y 3 de largo, trataria de escribir 18,19 y 20, el cual el 20 no es valido, asi que excepcion 2. Esto es tambien para el caso de que supere directamente el valor de 19.

Cantidad de registros  <= (Inicio de direccion+Largo-1)

Ahora la excepcion 3, no es de direccion de memoria, sino de datos fuera de rango.

La figura 9 te da un buen aproximado del manejo de excepciones
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 27 de Junio de 2020, 08:16:40
Bueno pues esto va de lujo, aun no he terminado pero la cosa pinta muy bien.

Esto es un ejemplo de función 3 modbus (lectura de registros de retención) el cual lee 3 registros desde la dirección 0x01A0, desde un cliente modbus tcp IP. Responde correctamente, desde el puerto 502 que es el que se suele usar para modbus.

ya tengo implementada las funciones 3 y 4 y también voy a implementar las 0x06 y 0x10, también estan implementadas todas las funciones de excepción y su respuesta.

  - Tienes que ingresar para ver archivos adjuntos -  
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 28 de Junio de 2020, 07:39:10
Para que sirve la mascara de subred, he visto que se suele colocar la 255:255:255:0.

Se que es para que solo cambie la cuarta parte de la IP, pero al ser una red modbus y poder tener muchos dispositivos convendría mas que colocara la mascara de red 255:255:0:0 en mi sistema?

Otra duda es el gateway, que igualmente parece otra IP y no se exactamente para que sirve, o como se debe configurar para mi caso en particular ahora mismo la tengo con:

                netInfo.gw[0] = 192;
                netInfo.gw[1] = 168;
                netInfo.gw[2] = 0;
                netInfo.gw[3] = 1;
y funciona todo perfectamente, pero no se cual es la razón y me gustaría saberla, para tener un mayor control sobre el sistema.

un saludo.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 28 de Junio de 2020, 10:25:51
Considero que xocas te daria una mejor respuesta... Pero algo mas o menos sencillo te puedo ir adelantando sin entrar en profundidad.
Pasa mas como esta formado la red eso. Voy a dar un ejemplo sencillo.

Red domiciliaria ---- Router --- Internet

En este caso el Router es el gateway, es decir hace de paso de una red a otra, ya que la red domiciliaria esta definidad como 192.168.0.xxx 255.255.255.0 e internet posee otros valores totalmente distintos. (Donde cambia el IP/mascara para ser mas sencillo.)

Las redes privadas tienen designados ciertos rangos de IPs, segun la cantidad de equipos es lo que vas a usar:

https://en.wikipedia.org/wiki/Private_network
https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing

Con mascara de subred 255.255.0.0 , significa que no vas a descartar los mensajes que lleguen con rango 192.168.0.0 a 192.168.255.255

Ahora pensa que tendrias unos 250 dispositivos con 255.255.255.0 (el IP 0 y el 255 son broadcast en este caso). pero en el caso anterior no, el broadcast cambia y por lo tanto deberias tener todos los dispostiivos con la misma mascara.
Esto no significa que no puedas usar un 172.16.0.0/255.240.0.0 o 172.16.0.0/12, lo podes usar tranquilamente. Lo que si tu red tiene que usar los mismos valores.

En fin... depende de la red en la que estes trabajando. O donde vaya a ser usada. Por eso es mucho mas comodo el IP dinamico. Pones y funciona :P, y ademas te carga el gateway solo. El problema seria el direccionamiento con los clientes, a no ser que exista un previo reconocimiento de todos los elementos 1 a 1, por todas las IPs posibles.
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 28 de Junio de 2020, 11:07:28
ok pues entonces le dejare la mascara 255:255:255:0

ya he terminado el servidor modbus, ahora estoy haciendo la aplicación robusta. Como las librerías tienen muchos while, y el dispositivo tiene que hacer muchas mas cosas a parte de la comunicación, he metido todo lo referente al ethernet en un hilo a parte con una prioridad menor, para que ningun while pare el código principal.

Tambien he modificado las librerias de ioLibrary, mas concretamente en este punto:

socket.c

Código: [Seleccionar]
int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len)
{
   uint8_t  tmp = 0;
   uint16_t recvsize = 0;
//A20150601 : For integarating with W5300
#if   _WIZCHIP_ == 5300
   uint8_t head[2];
   uint16_t mr;
#endif
//
   CHECK_SOCKNUM();
   CHECK_SOCKMODE(Sn_MR_TCP);
   CHECK_SOCKDATA();
   
   recvsize = getSn_RxMAX(sn);
   if(recvsize < len) len = recvsize;
     
//A20150601 : For Integrating with W5300
#if _WIZCHIP_ == 5300
   //sock_pack_info[sn] = PACK_COMPLETED;    // for clear     
   if(sock_remained_size[sn] == 0)
   {
#endif
//
      while(1)
      {
          uint8_t temp;
          ctlwizchip(CW_GET_PHYLINK, (void*)&temp);           //Comprobar si se ha cortado el cable
          if(temp == PHY_LINK_OFF)
          {
              PerdidaConexion = 1;
              break;
          }

         recvsize = getSn_RX_RSR(sn);
         tmp = getSn_SR(sn);
         if (tmp != SOCK_ESTABLISHED)
         {
            if(tmp == SOCK_CLOSE_WAIT)
            {
               if(recvsize != 0) break;
               else if(getSn_TX_FSR(sn) == getSn_TxMAX(sn))
               {
                  close(sn);
                  return SOCKERR_SOCKSTATUS;
               }
            }
            else
            {
               close(sn);
               return SOCKERR_SOCKSTATUS;
            }
         }
         if((sock_io_mode & (1<<sn)) && (recvsize == 0)) return SOCK_BUSY;
         if(recvsize != 0) break;
      };

He añadido esta parte:

Código: [Seleccionar]
          uint8_t temp;
          ctlwizchip(CW_GET_PHYLINK, (void*)&temp);           //Comprobar si se ha cortado el cable
          if(temp == PHY_LINK_OFF)
          {
              PerdidaConexion = 1;
              break;
          }

Lo he hecho por que si el dispositivo establecía conexión con el par, y estaba esperando mensajes, si en ese momento se desenchufa el cable, o se corta o lo que sea, el hilo del ehternet se queda infinitamente esperando mensajes, con esas lineas hago que salga y reinicio la comunicación, a la espera de que vuelva a ser conectada.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 28 de Junio de 2020, 12:07:35
Pero ahi te estas protegiendo contra un fallo en el cable del servidor, ¿pero que pasaria si es el cliente el cual se desconecta? No te convendria un timeout ?
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 28 de Junio de 2020, 13:20:36
No pasa nada porque si el cliente se desconecta en otra parte del código se detecta porque la función devuelve un menos 7 creo recordar, así vuelve a pasar a modo escucha a la espera de que se establezca de nuevo la conexión con el par, pero si se iba el cable ya siempre se quedaba en esperar datos.
Ahora ya no hay problemas, ya está terminado lo he probado con el cliente modbus que me baje de Internet, y funciona bien. Incluso si le cambio la ip de dinámica a fija en tiempo real se reconfigura automáticamente, rotura de cable, manejo de flash de los dos 4 hilos de toda la aplicación, manejo de todas las excepciones, comprabacion de todos los mensajes... Lo he puesto a prueba haciéndole put*dillas, y parece que está a prueba de bombas.

Muchas gracias a todos por ayudarme.

Un saludo
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 29 de Junio de 2020, 11:15:29
Para que sirve la mascara de subred, he visto que se suele colocar la 255:255:255:0.

Se que es para que solo cambie la cuarta parte de la IP, pero al ser una red modbus y poder tener muchos dispositivos convendría mas que colocara la mascara de red 255:255:0:0 en mi sistema?

Encontré un vídeo que explica lo básico de forma muy sencilla y mejor de lo que podría hacer yo usando texto:


Si no me equivoco, una red modbus admite un máximo de 247 esclavos y con 255.255.255.0 puedes direccionar hasta 254 hosts, de manera que sería suficiente.

Ojo, el signo de separación es el punto ( . ) y no los dos puntos ( : ). Te lo comento porque si te acostumbras a escribirlo mal será fácil que mañana estés programando y lo hagas igualmente mal. Los dos puntos se usan cuando quieres dirigirte a un puerto determinado, por ejemplo: 192.168.0.42:502

Otra duda es el gateway, que igualmente parece otra IP y no se exactamente para que sirve, o como se debe configurar para mi caso en particular

El Gateway sirve de enlace entre dos redes diferentes, usen el mismo o diferentes protocolos. Un caso que se entiende bien (tal como adelantó KILLERJC) es el Router, que sirve de pasarela entre la red pública (internet) y nuestra red local privada.

En Modbus, el Gateway permite que dos protocolos distintos puedan comunicarse entre sí, por ejemplo un Modbus RTU con un Modbus TCP.

He visto algunos diagramas de conexionado Modbus que denominan como Gateway dispositivos que, en mi opinión, no lo son. Si tienes una red con cinco dispositivos Modbus usando RTU, cuatro de ellos con RS485 y un quinto con RS232 lo que necesitas es un convertidor que adapte las señales de éste último a RS485, un adaptador de capa física creo que se llama, no necesitas un Gateway si el protocolo es el mismo. Por otra parte, hay dispositivos que integran ambos. Busca información sobre el Modelo OSI si quieres saber más del tema.

https://es.wikipedia.org/wiki/Puerta_de_enlace

un saludo
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 30 de Junio de 2020, 15:43:06
Entonces según el vídeo y lo que me comentas colocaré una mascara de 255.255.0.0 mejor. No por que se me vaya a quedar corto para mis dispositivos, pero ¿Y si en la red hay 250 dispositivos con mascara 255.255.255.0 (Ordenadores, impresoras, moviles, etc...) yo solo tendría disponible 10 direcciones de ese host.

El puerto seleccionado yo tengo el 502 que es el que se utiliza para modbus en la mayor parte de los dispositivos que he visto, he visto que hay muchos puertos asignados a una función o a otra, y otros que son genéricos como el 5000.

¿pero que es exactamente estos puertos? y en que me limitan.

Citar
Ojo, el signo de separación es el punto ( . ) y no los dos puntos ( : ). Te lo comento porque si te acostumbras a escribirlo mal será fácil que mañana estés programando y lo hagas igualmente mal. Los dos puntos se usan cuando quieres dirigirte a un puerto determinado, por ejemplo: 192.168.0.42:502

okis lo tendré en cuenta.

gracias.
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 30 de Junio de 2020, 19:51:19
Citar
¿Y si en la red hay 250 dispositivos con mascara 255.255.255.0 (Ordenadores, impresoras, moviles, etc...) yo solo tendría disponible 10 direcciones de ese host.

Pero esa red no es TU problema. Es problema del administrador de red. Si vos tenes 250 lugares,  y estas usando 240, no vas a poner 400 mas..

La persona encargada de mantener/organizar la red va a ser quien modifique la red para abarcar mas. O montara otra red exclusiva para el MODBUS, especialmente para esta aplicación ya que buscas una respuesta rapida con tus clientes.

Citar
¿pero que es exactamente estos puertos? y en que me limitan.

No te limitan en nada, Es como un canal... a pesar que una PC tiene una sola IP, tiene como muchos buzones, entonces los clientes especificos solo esperan las cosas en ese buzon. Por ejemplo el MODBUS solo busca/espera sobre el puerto 502,
Como bien decis, algunos puertos son definidos, otros registrados y otros para uso privado.

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 01 de Julio de 2020, 06:57:24
Una dirección IP se compone de 4 grupos de 1 Byte que contienen el identificador de red y el identificador de host y la máscara de red determina que grupos corresponden a uno u otro identificador.

La máscara establece a que red pertenece una IP determinada y el número de hosts disponibles en dicha red. En un caso típico de red local con IP 192.168.1.x y máscara 255.255.255.0, los 3 octetos a la izquierda determinan la red y el cuarto el número de hosts (0..255). Como el valor 0 está reservado al nombre de la red y el 255 a la difusión (broadcast) nos queda un total de 254 hosts posibles.

Gracias a la máscara también se pueden acotar de forma rápida y sencilla las llamadas dentro de una red ya que se realiza una operación AND entre la IP y la máscara. Si el resultado en el identificador de red es 1 se trata de la misma red y solamente queda por resolver el host, en caso contrario no se presta atención a la llamada.

El router que tenemos en casa decide si se trata de una comunicación en la red local o ha de darle salida a internet mediante un AND entre la IP solicitada y la máscara (11111111.11111111.11111111.00000000).
192.168.1.x AND máscara = 1, 88.x.x.x AND máscara = 0

Entonces según el vídeo y lo que me comentas colocaré una mascara de 255.255.0.0 mejor. No por que se me vaya a quedar corto para mis dispositivos, pero ¿Y si en la red hay 250 dispositivos con mascara 255.255.255.0 (Ordenadores, impresoras, moviles, etc...) yo solo tendría disponible 10 direcciones de ese host.

Ummmm, a ver... sería una barbaridad que en un entorno industrial dispositivos Modbus compartieran red con móviles, impresoras o la parte ofimática, lo lógico será que pertenezcan a redes diferentes.
192.168.1.0/24 y 192.168.32.0/24 serían dos redes distintas aunque ambas usen una máscara del mismo tipo. /24 es otra forma de definir el tipo de máscara, indica el número de 1 que contiene

Si necesitaras aumentar el número de dispositivos no es necesario dar un salto tan grande. Una máscara 255.255.254.0 (/23) te daría para 510 dispositivos: 192.168.0.0 - 192.168.1.255

https://es.wikipedia.org/wiki/M%C3%A1scara_de_red

El puerto seleccionado yo tengo el 502 que es el que se utiliza para modbus en la mayor parte de los dispositivos que he visto, he visto que hay muchos puertos asignados a una función o a otra, y otros que son genéricos como el 5000.

Modbus puede utilizar cualquier puerto entre 1..65535 (o casi) pero se ha adoptado el puerto 502 como referente en Modbus TCP, y te aconsejo que lo mantengas porque algunos dispositivos lo tienen establecido por defecto.

un saludo

Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 02 de Julio de 2020, 06:46:57
Ok pues por lo que me comentáis voy a dejar la 255.255.255.0 y lo especificare en el manual y ya esta.

Yo también opino que es una barbaridad compartir redes con otros dispositivos, pero todos sabemos los tipos de barbaridades que se hacen  :D :D

Pensaba que la mascara solo aceptaba octetos de 255 o de 0, también lo tendré en cuenta para un futuro.

Bueno pues ya esta terminado, le he hecho todas las pruebas que he podido y parece que va perfecto, incluso desenchufando, volviendo a enchufar, cambiando la dirección ip, de dinámica a fija y al contrario,... todo va bien.

un saludo y muchas gracias a los dos.
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 02 de Julio de 2020, 08:49:37
he cantado victoria demasiado pronto.

Lo he probado en la red de la oficina y tengo algún problema. En el router de mi casa va perfecto. pero al conectarlo en la oficina la IP que se me asigna es la 192.168.1.204.

Pero al intentar acceder me dice que esa dirección esta fuera del rango de mi red y no puedo conectarme. Al buscar todos los dispositivos conectados, el mio no aparece, y me estraña que todos los que están conectados son 192.168.0.X un 0 en el tercer octeto.

Si coloco una ip manual por ejemplo 192.168.0.198 puedo conectarme a traves del hercules, pero no del MBTCP cliente.

¿Que puede estar pasando?
Título: Re:W5500 servidor por ethernet
Publicado por: KILLERJC en 02 de Julio de 2020, 10:07:15
Estaria bueno un diagrama aunque sea simplificado de como es la red.
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 02 de Julio de 2020, 10:26:01
Ahora mismo estoy en el móvil y es difícil pintar nada, voy a intentar explicarlo. A ver esta el router que se conecta directamente a un switch, en este switch se conectan varios ordenadores y otro switch al cual se conectan otros dos o 3 ordenadores. A esos se le suma el WiFi de móviles y cosas que haya conectadas, creo qye alguna impresora.
Lo que creo esque ela dirección 192.169.1.204 no me la da el router, es la que yo pongo por defexto antes de que se asigne una, por lo tanto creo qye no se me está asignando ninguna, si pongo una fija tampoco me la acepta.
He probado a conectar al router y a los dos switch directamente con el mismo resultado.

Puede ser algo de mi configuración? En mi casa funciona pero lo suyo es que funcione en cualquier sitio que lo pongan.

Un saludo.
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 02 de Julio de 2020, 12:13:23
Si tienes acceso a algún ordenador en la red que tenga Windows instalado abre una ventana de Símbolo de sistema (Inicio > cmd) y ejecuta: ipconfig /all

Fíjate en los valores de la máscara de subred y Servidor DHCP para conocer la red. Si son 255.255.255.0 y 192.168.0.1 respectivamente ya sabrás que la red es 192.168.0 y por eso no tienes acceso, porque estás en otra red, en 192.168.1

Si los valores no son esos y la red es más amplia también puede darse el caso de que no pueda acceder porque la IP ya está en uso. Descarga e instala Advanced IP Scanner (https://www.advanced-ip-scanner.com/es/) y pídele que explore el rango 192.168.0.1 - 192.168.1.254 a ver que pasa.

Si tienes definida una IP por defecto en tu dispositivo... ¿es posible que esté en más de una parte del código?. Se me ocurre que estes datos deberían estar en un archivo externo y fácil de modificar, de manera que por defecto tome la IP vía DHCP y a posteriori podamos modificarla.

un saludo



Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 04:13:10
Ok pues a ver, lo primero yo coloco una dirección IP en mi dispositivo, la MAC, una puerta de enlace etc. Pero supuestamente eso es antes de usar el DHCP el cual solo usa la MAC y la demás información debería pisarla.

Esta es la configuración que introduzco:

Citar
                netInfo.mac[0] = AppDatos.Memoria.DireccionMac.Valor[0];
                netInfo.mac[1] = AppDatos.Memoria.DireccionMac.Valor[1];
                netInfo.mac[2] = AppDatos.Memoria.DireccionMac.Valor[2];
                netInfo.mac[3] = AppDatos.Memoria.DireccionMac.Valor[3];
                netInfo.mac[4] = AppDatos.Memoria.DireccionMac.Valor[4];
                netInfo.mac[5] = AppDatos.Memoria.DireccionMac.Valor[5];

                netInfo.ip[0] = 192;
                netInfo.ip[1] = 168;
                netInfo.ip[2] = 0;
                netInfo.ip[3] = 214;

                //Mascara de Subnet
                netInfo.sn[0] = 255;
                netInfo.sn[1] = 255;
                netInfo.sn[2] = 255;
                netInfo.sn[3] = 0;

                //Dirección gateway
                netInfo.gw[0] = 192;
                netInfo.gw[1] = 168;
                netInfo.gw[2] = 0;
                netInfo.gw[3] = 1;

                netInfo.dns[0] = 0;
                netInfo.dns[1] = 0;
                netInfo.dns[2] = 0;
                netInfo.dns[3] = 0;

                if(AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
                {
                    netInfo.dhcp = NETINFO_DHCP;
                }
                else
                {
                    netInfo.dhcp = NETINFO_STATIC;
                }


Luego en mi router (me lo he traido a la oficina por que es un router de esos 4G LTE que va con una SIM, por si eso tiene algo que ver), lo que veo en el ipconfig es esto:

Citar
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
   Vínculo: dirección IPv6 local. . . : fe80::58f6:b8c7:c217:fada%11(Preferido)
   Dirección IPv4. . . . . . . . . . . . . . : 192.168.1.103(Preferido)
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Concesión obtenida. . . . . . . . . . . . : viernes, 3 de julio de 2020 8:49:36
   La concesión expira . . . . . . . . . . . : sábado, 4 de julio de 2020 8:49:36
   Puerta de enlace predeterminada . . . . . : 192.168.1.1
   Servidor DHCP . . . . . . . . . . . . . . : 192.168.1.1
   IAID DHCPv6 . . . . . . . . . . . . . . . : 227047539
   DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-20-22-38-A8-D4-81-D7-77-DF-ED
   Servidores DNS. . . . . . . . . . . . . . : 192.168.1.1
   NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado

y en la red de la empresa donde no funciona me dice lo siguiente:

Citar
   Sufijo DNS específico para la conexión. . : home
   Descripción . . . . . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
   Vínculo: dirección IPv6 local. . . : fe80::58f6:b8c7:c217:fada%11(Preferido)
   Dirección IPv4. . . . . . . . . . . . . . : 192.168.0.202(Preferido)
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Concesión obtenida. . . . . . . . . . . . : viernes, 3 de julio de 2020 8:57:34
   La concesión expira . . . . . . . . . . . : viernes, 3 de julio de 2020 13:32:52
   Puerta de enlace predeterminada . . . . . : 192.168.0.1
   IAID DHCPv6 . . . . . . . . . . . . . . . : 227047539
   DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-20-22-38-A8-D4-81-D7-77-DF-ED
   Servidores DNS. . . . . . . . . . . . . . : 192.168.0.1
   NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado

Por lo que veo la puerta de enlace y el dns coinciden, y también coinciden en que en mi router le da la dirección 192.168.1.x y en la de la empresa los ordenadores y demás tienen una 192.168.0.x.

Pero lo que mas me extraña incluso es que la configuración que introduzco (que no creo que sea el problema por que el cliente DHCP debe pisar esa información) coincide con la de la oficina.

un saludo.
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 04:32:06
La función del cliente DHCP se queda siempre en RUN:

Código: [Seleccionar]
/**Ejecuta el cliente DHCP en el bucle principal*/
void Cliente_DHCP(void)
{
    uint8_t ValorDHCP = DHCP_run();

    BorrarVariablePrueba = ValorDHCP;

    switch (ValorDHCP)
    {
        case DHCP_IP_ASSIGN:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        case DHCP_IP_CHANGED:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        case DHCP_IP_LEASED:
        {
            AppDatos.Memoria.DireccionIP.Valor[0]=netInfo.ip[0];
            AppDatos.Memoria.DireccionIP.Valor[1]=netInfo.ip[1];
            AppDatos.Memoria.DireccionIP.Valor[2]=netInfo.ip[2];
            AppDatos.Memoria.DireccionIP.Valor[3]=netInfo.ip[3];

            ServidorModbus_FlagGuardarMemoria = true;

            FlagEjecucionTareasEthernet = true;
            EthernetDatos.EstadoProximo = ETHERNET_ESTADO_FUNCIONAMIENTO_NORMAL;
        }
            break;
        case DHCP_FAILED:
        {
            FlagEjecucionTareasEthernet = false;
        }
            break;
        default:
            FlagEjecucionTareasEthernet = false;
            break;
    }
}

Siempre se va a default con un valor de 1 que corresponde con DCHP_RUNING

Código: [Seleccionar]
enum
{
   DHCP_FAILED = 0,  ///< Processing Fail
   DHCP_RUNNING,     ///< Processing DHCP protocol
   DHCP_IP_ASSIGN,   ///< First Occupy IP from DHPC server      (if cbfunc == null, act as default default_ip_assign)
   DHCP_IP_CHANGED,  ///< Change IP address by new ip from DHCP (if cbfunc == null, act as default default_ip_update)
   DHCP_IP_LEASED,   ///< Stand by
   DHCP_STOPPED      ///< Stop processing DHCP protocol
};

Si lo ejecuto en mi router sin embargo, me llega a DHCP_IP_LEASED y en esta ocasión le da 192.168.1.100

Voy a colocar paso por paso mi configuración a ver si el fallo puede venir por ahi.

Primero el sistema llama:

Código: [Seleccionar]
                //Dirección MAC
                netInfo.mac[0] = AppDatos.Memoria.DireccionMac.Valor[0];
                netInfo.mac[1] = AppDatos.Memoria.DireccionMac.Valor[1];
                netInfo.mac[2] = AppDatos.Memoria.DireccionMac.Valor[2];
                netInfo.mac[3] = AppDatos.Memoria.DireccionMac.Valor[3];
                netInfo.mac[4] = AppDatos.Memoria.DireccionMac.Valor[4];
                netInfo.mac[5] = AppDatos.Memoria.DireccionMac.Valor[5];

                netInfo.ip[0] = 192;
                netInfo.ip[1] = 168;
                netInfo.ip[2] = 0;
                netInfo.ip[3] = 214;

                //Mascara de Subnet
                netInfo.sn[0] = 255;
                netInfo.sn[1] = 255;
                netInfo.sn[2] = 255;
                netInfo.sn[3] = 0;

                //Dirección gateway
                netInfo.gw[0] = 192;
                netInfo.gw[1] = 168;
                netInfo.gw[2] = 0;
                netInfo.gw[3] = 1;

                netInfo.dns[0] = 192;
                netInfo.dns[1] = 168;
                netInfo.dns[2] = 0;
                netInfo.dns[3] = 1;

                if(AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
                {
                    netInfo.dhcp = NETINFO_DHCP;
                }
                else
                {
                    netInfo.dhcp = NETINFO_STATIC;
                }

                Inicializacion_W5500();

siendo:

Código: [Seleccionar]
void Inicializacion_W5500(void)
{
    uint8_t temp;
    uint8_t W5500FifoSize[2][8] = {{2, 2, 2, 2, 2, 2, 2, 2, }, {2, 2, 2, 2, 2, 2, 2, 2}};

    reg_wizchip_cs_cbfunc(cs_sel, cs_desel);                        //Indicamos las funciones CS utilizar por el W5500
    reg_wizchip_spi_cbfunc(SPI_Recibir, SPI_Escribir);              //Indicamos las funciones SPI utilizar por el W5500

    if(ctlwizchip(CW_INIT_WIZCHIP, (void*)W5500FifoSize) == -1)
    {
        ERROR(ERROR_ETHERNET);
        while(1);
    }

    do
    {
        if (ctlwizchip(CW_GET_PHYLINK, (void*)&temp) == -1)
        {

        }
    } while (temp == PHY_LINK_OFF);


    wizchip_setnetinfo(&netInfo);                       //Tomamos la información
    wizchip_getnetinfo(&netInfo);
}

Acto seguido se hace lo siguiente:

Código: [Seleccionar]
            if(AppDatos.Memoria.TipoIP == IP_AUTOMATICA)
            {
                EthernetDatos.EstadoProximo = ETHERNET_ESTADO_IP_AUTOMATICA;

                setSHAR(netInfo.mac);
                DHCP_init(0, DHCP_Buffer);
                reg_dhcp_cbfunc(AsignarIP, AsignarIP, ConflictoIP);

            }
            else
            {
                EthernetDatos.EstadoProximo = ETHERNET_ESTADO_IP_MANUAL;

                setSHAR(netInfo.mac);
            }

estamos siempre en automatica, colocamos los punteros a las funciones para que trabaje el DHCP y un buffer de 2048.

Código: [Seleccionar]
/**Función para asignar una IP*/
void AsignarIP(void)
{
   getIPfromDHCP(netInfo.ip);
   getGWfromDHCP(netInfo.gw);
   getSNfromDHCP(netInfo.sn);
   getDNSfromDHCP(netInfo.dns);
   netInfo.dhcp = NETINFO_DHCP;

   // Inicializacion de la red
    Inicializacion_RED();
}

/**Ocurre si hay un conflicto de IP*/
void ConflictoIP(void)
{
   while(1);                //Paramos
}

en "Asignar IP" es donde se pisa la configuración inicial una vez nos la da el router.

void Inicializacion_RED(void)
{
    wiz_NetInfo netinfo1;
    //Establecer información de red desde la estructura netinfo
    ctlnetwork(CN_SET_NETINFO, (void*)&netInfo);

    //Obtener información de la red
    ctlnetwork(CN_GET_NETINFO, (void*)&netinfo1);
}[/code]

y ya se ejecuta el " Cliente_DHCP();" que es donde se queda siempre en running.

un saludo
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 03 de Julio de 2020, 05:49:18
¿Qué estás usando para obtener la info vía ipconfig? ¿Un ordenador de la empresa? ¿Un portátil tuyo? ...

No veo información del Servidor DHCP cuando usas la red de la empresa, que sí aparece cuando usas tu router (192.168.1.1).
Tener NETBIOS sobre TCP/IP habilitado podría causar un grave problema de seguridad.

En caso de tener un portátil... ¿si lo conectas al router o un switch vía ethernet te toma bien los parámetros de la red?

seguimos...
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 06:03:32
Hola xocas, gracias por responder.

Acabo de encontrar la solución a la mitad del problema. Al pasar el software a limpio me salte una función por que parece que soy medio gili*ollas. no había configurado el timer del DHCP, he añadido en el bucle principal esto:

Código: [Seleccionar]
    if(ServidorEthernet_ContadorTemporizacionDHCP >= 1000)
    {
        DHCP_time_handler();
    }

que se ejecuta a cada segundo y ya funciona perfectamente en la red de la oficina, no se por que narices funcionaba en mi router, pero no debería haber funcionado tampoco.

Ahora me queda solucionar el tema de la IP estatica, en este ambito estoy un poco mas perdido y vuelvo a tener el mismo problema, en mi router va y en el de la oficina no.
Aunque este me extraña menos que no funcione por que no tengo algo que me establezca la comunicación como hace el cliente DHCP.

cuando lo pongo en IP statica, lo que ejecuto es esta función.

/**Ejecuta el cliente para una IP Fija en el bucle principal*/
void Cliente_IPFija(void)
{
    uint8_t bufSize[] = {2, 2, 2, 2};

    wizchip_init(bufSize, bufSize);

    //Se pone la IP que ha introducido el usuario por pantalla
    netInfo.ip[0] = AppDatos.Memoria.DireccionIP.Valor[0];
    netInfo.ip[1] = AppDatos.Memoria.DireccionIP.Valor[1];
    netInfo.ip[2] = AppDatos.Memoria.DireccionIP.Valor[2];
    netInfo.ip[3] = AppDatos.Memoria.DireccionIP.Valor[3];

    wizchip_setnetinfo(&netInfo);
    wizchip_getnetinfo(&netInfo);

    ServidorModbus_FlagGuardarMemoria = true;

    FlagEjecucionTareasEthernet = true;
    EthernetDatos.EstadoProximo = ETHERNET_ESTADO_FUNCIONAMIENTO_NORMAL;
}

supongo que aquí debería colocar la configuración adecuada de la red, pero si es asi por que en mi router funciona?

por cierto:

Citar
No veo información del Servidor DHCP cuando usas la red de la empresa, que sí aparece cuando usas tu router (192.168.1.1).
Tener NETBIOS sobre TCP/IP habilitado podría causar un grave problema de seguridad.

algo que deba cambiar para mejorar mi seguridad?
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 03 de Julio de 2020, 06:17:13
Tengo que volver a preguntar...

¿Qué estás usando para obtener la info vía ipconfig? ¿Un ordenador de la empresa? ¿Un portátil tuyo? ...

En caso de tener un portátil... ¿si lo conectas al router o un switch vía ethernet te toma bien los parámetros de la red?

Hay que ir descartando cosas, si con tu router funciona y con el de la empresa no el problema quizá no sea del dispositivo sinó de alguna configuración en el router de la empresa.

saludo
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 06:19:33
Si conecto mi portatil directo por ethernet puedo entrar en internet sin problemas, al hacer ipconfig /all me sale lo siguiente:

Código: [Seleccionar]
Configuración IP de Windows

   Nombre de host. . . . . . . . . : DESKTOP-JPM5FFI
   Sufijo DNS principal  . . . . . :
   Tipo de nodo. . . . . . . . . . : híbrido
   Enrutamiento IP habilitado. . . : no
   Proxy WINS habilitado . . . . . : no
   Lista de búsqueda de sufijos DNS: home

Adaptador de Ethernet Ethernet:

   Sufijo DNS específico para la conexión. . : home
   Descripción . . . . . . . . . . . . . . . : Killer E2400 Gigabit Ethernet Controller
   Dirección física. . . . . . . . . . . . . : D4-81-D7-77-DF-ED
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
   Vínculo: dirección IPv6 local. . . : fe80::586:882d:61a9:1cad%8(Preferido)
   Dirección IPv4. . . . . . . . . . . . . . : 192.168.0.199(Preferido)
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Concesión obtenida. . . . . . . . . . . . : viernes, 3 de julio de 2020 11:18:12
   La concesión expira . . . . . . . . . . . : sábado, 4 de julio de 2020 11:18:12
   Puerta de enlace predeterminada . . . . . : 192.168.0.1
   Servidor DHCP . . . . . . . . . . . . . . : 192.168.0.1
   IAID DHCPv6 . . . . . . . . . . . . . . . : 282362327
   DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-20-22-38-A8-D4-81-D7-77-DF-ED
   Servidores DNS. . . . . . . . . . . . . . : 192.168.0.1
   NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado

Adaptador de LAN inalámbrica Conexión de área local* 3:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4B
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de LAN inalámbrica Conexión de área local* 4:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #2
   Dirección física. . . . . . . . . . . . . : 8A-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de Ethernet Conexión de red Bluetooth 2:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . :
   Descripción . . . . . . . . . . . . . . . : Bluetooth Device (Personal Area Network) #2
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4E
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí

Adaptador de LAN inalámbrica Wi-Fi 2:

   Estado de los medios. . . . . . . . . . . : medios desconectados
   Sufijo DNS específico para la conexión. . : home
   Descripción . . . . . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265
   Dirección física. . . . . . . . . . . . . : 88-78-73-D7-1F-4A
   DHCP habilitado . . . . . . . . . . . . . : sí
   Configuración automática habilitada . . . : sí
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 03 de Julio de 2020, 06:51:17
Ok.

Descarga e instala en tu portátil Advanced IP Scanner (https://www.advanced-ip-scanner.com/es/). Explora la red a ver si aparece tu dispositivo.

Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 06:58:49
En dinámico aparece el dispositivo, con esos cambios que he realizado, pero en estático no.

Pero revisando todos tus comentarios para ver si se me ocurria algo me he parado en este:

Citar
Si los valores no son esos y la red es más amplia también puede darse el caso de que no pueda acceder porque la IP ya está en uso. Descarga e instala Advanced IP Scanner y pídele que explore el rango 192.168.0.1 - 192.168.1.254 a ver que pasa.

Si tienes definida una IP por defecto en tu dispositivo... ¿es posible que esté en más de una parte del código?. Se me ocurre que estes datos deberían estar en un archivo externo y fácil de modificar, de manera que por defecto tome la IP vía DHCP y a posteriori podamos modificarla.

Creo que pueden venir por aquí los tiros, que se este pisando con la que pongo en memoria por defecto que es 192.168.1.204, esto no me había saltado antes por que de manera dinámica se pisa, y de manera estática, mi router daba la casualidad que es 192.168.1.x pero el de la oficina es 192.168.0.x y aquí no funciona.

voy a ir depurando a ver si es posible que sea esto.
Título: Re:W5500 servidor por ethernet
Publicado por: xocas en 03 de Julio de 2020, 07:25:40
algo que deba cambiar para mejorar mi seguridad?

En las propiedades de tu adaptador de red (Panel de control > Redes e Internet > Conexiones de red) selecciona Protocolo de Internet v4 > Propiedades > Opciones avanzadas > Wins y deshabilita NetBIOS sobre TCP/IP.

Creo que sigue ahí por motivos de compatibilidad pero no es necesario y utiliza un par de puertos con vulnerabilidades conocidas.

saludo
Título: Re:W5500 servidor por ethernet
Publicado por: juaperser1 en 03 de Julio de 2020, 08:54:05
algo que deba cambiar para mejorar mi seguridad?

En las propiedades de tu adaptador de red (Panel de control > Redes e Internet > Conexiones de red) selecciona Protocolo de Internet v4 > Propiedades > Opciones avanzadas > Wins y deshabilita NetBIOS sobre TCP/IP.

Creo que sigue ahí por motivos de compatibilidad pero no es necesario y utiliza un par de puertos con vulnerabilidades conocidas.

saludo

Pues no lo sabia, voy a cambiarlo inmediatamente.

y efectivamente, el problema era ese, la IP la puedo configurar por 3 sitios distintos, via modbus rtu, via modbus ethernet y de forma manual en el dispositivo, pues en la forma manual, cuando guardaba el tipo de IP lo hacia bien y reiniciaba toda la comunicación ethernet, pero cuando cambiaba la IP manualmente no hacia un reset del ethernet y por lo tanto me ponía la IP por defecto.
No había saltado antes por que daba la casualidad de que mi red eran los mismos números y la posición 204 no estaba cogida. ahora en la red de la oficina como es 192.168.0 no funcionaba.

Los típicos fallos tontos que dan bastante dolor de cabeza, parece que ahora todo va bien.

un saludo y muchas gracias.