Dos consultas sobre C#

  • 5 Respuestas
  • 2984 Vistas

Mariano

  • Avanzado
  • ***
  • Mensajes: 106
Dos consultas sobre C#
« : junio 05, 2016, 14:54:39 pm »
Que tal Boris,

Te paso dos consultas…
*******************************************************************
1- Iniciándome en Visual C# me aparece un error al incluír la línea de programa:

PioBoard = new Stx8xxx("192.168.1.81", 0, Stx8xxxId.STX8081);

Realizando lo indicado en la AN001, recién al incluír esta línea mencionada el Visual Studio me da un error al querer correr el programa; mediante el botón Start Debug…

Te adjunto los archivos como Zip, y las imágenes que me aparecen en el error.
Al PLC le cargué el proyecto adjunto en la nota de aplicación Udp.RX.

La aplicación en Windows luego del error queda corriendo y activa/desactiva correctamente la salida 1 en el PLC.

Además, si en Visual le genero la solución (como aplicación terminada)… el programa completo de prueba funciona sin errores aparentes activando/desactivando el relé del PLC.

(Imágen 1 en word adjunto)

Si yo le doy a “No”… el programa corre y funciona (al parecer normalmente)….

(Imágen 2 en word adjunto)

El problema aparece al cerrarlo para tratar de volver al entorno de Visual… lo cierro con la clásica X… pero el entorno queda como “colgado”….

Te paso los códigos para que los pruebes a ver si te suceden los mismos errores… al parecer queda algo “colgado” o un bucle infinito que no permite retornar el control al entorno…

Con un programa de prueba sencillo en C# no se me producen errores… es decir, corro mediante Start debug y al cerrarlo el entorno vuelve a responder normalmente…


/////////////////

Si en la imagen 1, le doy a “si” para depurar se me abre un aplicativo IntelliTrace en el que me informa luego que el error correponde a un desbordamiento de la pila….

No obstante el entorno también queda como en un bucle infinito..... cómo podría evitarse este error?

*******************************************************************
2- En la sentencia:

PioBoard = new Stx8xxx("192.168.1.81", 0, Stx8xxxId.STX8081);

Cómo sería la sintaxis para agregar una IP remota (no en LAN) ? por ejemplo

186.190.175.158:83

Esto sería para direccional un PLC fuera de la LAN, es decir conectado a un router o modem que realiza un fordwarding mediante el puerto 83...

El código PAWN del PLC también debería cambiar?

Te adjunto un word donde estan las imágenes y los codigos de programa...

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2313
  • Soporte Técnico
Re:Dos consultas sobre C#
« Respuesta #1 : junio 06, 2016, 09:20:48 am »
Buenos días Mariano,

No, al iniciar la aplicación como debug (Depurar > Iniciar depuración (F5)) no queda colgado según pruebo.
¿Te da mas información del error? ¿Que versión de Visual Studio estas utilizando?.

Por otro lado, para transmisiones sobre internet, no se recomienda este método porque utiliza el protocolo UDP,
el cual no tiene un mecanismo que asegure que los datos llegan correctamente como el protocolo TCP.

El PLC escucha conexiones en el puerto 4950 por UDP (el router debería tener habilitada este puerto) y podrías
poner la IP externa normalmente.

Código: (C#) [Seleccionar]
PioBoard = new Stx8xxx("XXX.XXX.XXX.XX", 0, Stx8xxxId.STX8091);
Pero es conveniente que envíes los datos vía TCP si la idea es comunicarte vía internet, en ese caso debieras
utilizar la librería sockets TCP de Visual Studio como cliente, y el PLC escuchar los datos vía TCP como los ejemplos que te pase
inicialmente para la conexión TCP.

¿Cual seria la idea de la aplicación, enviar y leer datos del PLC por internet con aplicación C#?.



SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Mariano

  • Avanzado
  • ***
  • Mensajes: 106
Re:Dos consultas sobre C#
« Respuesta #2 : junio 06, 2016, 12:22:49 pm »
Buenos dias Boris,
La intencion es implementar un sistema scada. Quiero arrancar por una aplicacion para windows. La version vs que tengo es la ultimate 2010.... Es posible que sea la version del c#... cual es la ud utilizan?.... Esa es toda la info que me da Boris.... una excepcion por desbordamiento de la pila....
Para usar la libreria sockets TCP cliente debo iniciar webserber en el PLC?....
Lo que quiero implementar es una aplicacion puntual en c# que pueda comunicar una PC (o un celular) via internet con uno o varios PLC remotos.....

Enviado desde mi SM-J110M mediante Tapatalk


Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2313
  • Soporte Técnico
Re:Dos consultas sobre C#
« Respuesta #3 : junio 06, 2016, 20:19:15 pm »
Buenas tardes Mariano,

Los ejemplos actuales para descargar están en Microsoft Visual Studio 2010 Express que es la versión gratuita.

Pero también, por una cuestión de modernidad, utilizamos la ultima version Microsoft Visual Studio Community 2015 para esos mismos ejemplos y funciona correctamente.

La ultima versión del Visual Studio la podes bajar gratuitamente desde Microsoft:

https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx

Requiere 3-4 gigas de espacio en disco duro.

Te adjunto pantallas de tu aplicación funcionando en modo debug con la ultima version de Visual Studio.

La versión que utilizas es la version paga full de Visual Studio, que tiene el IntelliTrace, puede ser eso lo que este molestando, ya que no hay mas información disponible que lo que me pasas. Entonces proba desactivandolo:

  • En el menú Herramientas, haga clic en Opciones.
  • En el cuadro de diálogo Opciones, expanda el nodo IntelliTrace y haga clic en General.
  • Desactive la casilla Habilitar IntelliTrace.
  • Haga clic en Aceptar.

Reinicia el visual studio y proba nuevamente.

De lo contrario te recomiendo instalar Microsoft Visual Studio Community 2015 como te mencione.


Para tu aplicacion entonces lo que conviene utilizar alguna comunicacion basada en el protocolo TCP.

Hay varias alternativas:

  • Comunicacion con PLC usando conexion TCP pura, cliente PC y servidor PLC.
  • Comunicacion con PLC usando ModBus TCP, cleinte PC y servidor PLC.

Para el primer caso, podrías usar el servidor TCP del PLC que ya tenes funcionando o pensado utilizar para
la comunicación ente PLC-PLC. En este caso, te comunicarías desde la PC al PLC para escribir o leer datos.

El segundo caso es similar, solo que utilizarías sobre el protocolo TCP, el protocolo ModBus, el cual esta pensado
para leer/escribir registros y se utiliza mucho en SCADA. Para el cual vienen soluciones comerciales.
Este quizás te conviene así no mezclas la conexión entre PLC-PLC que tenes.

Finalmente, si la aplicación es para celular, lo que te conviene es servidor web, porque al usar datos (3G o 4G) la mayoría
de los puertos para comunicación del celular están bloqueados por las empresas de telefonía, excepto el 80 que es el servidor Web. Esto no aplica si usas WiFi.

Si estas interesado en un esquema utilizando el protocolo ModBus TCP para leer/escribir registros (variables) en el PLC con C#,
avísame y veo de hacerte un ejemplo simple para usar.


Podes ir leyendo estas notas de aplicación para entender que es ModBus y como se usa en el PLC:

http://slicetex.com/docs/an/an022/

Saludos










« Última Modificación: junio 06, 2016, 20:30:48 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Mariano

  • Avanzado
  • ***
  • Mensajes: 106
Re:Dos consultas sobre C#
« Respuesta #4 : junio 06, 2016, 22:24:25 pm »
Buenas noches Boris,

Efectivamente, desactivando la opción Intellitrace como me indicaste funciona sin problemas la opción debug.
Habilité el puerto 4950 en el router y anduvo sin problemas.
El paso siguiente será intentar la comunicación usando TCP como recomendás.

Muchas gracias por la inmejorable asistencia

Saludos cordiales

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2313
  • Soporte Técnico
Re:Dos consultas sobre C#
« Respuesta #5 : junio 07, 2016, 08:18:50 am »
Muy bien Mariano, si tenes dudas con el TCP, quedo a disposición.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com