Mensajes recientes

Páginas: 1 ... 3 4 [5] 6 7 ... 10
41
Kinco / Configurar HMI esclava de un PLC genérico ModBus TCP
« Último mensaje por Jose Hernandez abril 22, 2021, 17:12:18 pm »
Me gustaría saber cómo configurar la pantalla MT4532TE como esclava de un PLC. La pantalla estará conectada mediante ethernet al un plc Unitronics. Sé cómo configurar el HMI para que sea maestro y el PLC esclavo, pero no al revés.
42
StxLadder - Slicetex Ladder Designer Studio / Re:CONTROL PID
« Último mensaje por Soporte abril 07, 2021, 18:42:53 pm »
Buenas tardes,

Si es posible, en el ejemplo utiliza la salida PWM, variando su valor entre 0 y 1000.

Si usas la salida analógica, la misma varia entre 0 y 10V (si le escribís un valor de voltaje) o entre 0 y 1023, si escribís el valor digital.

En la función de inicialización del ejemplo, deberías colocar alguno de esos dos límites, y luego remplazar la salida PWM por la salida analógica VOUT1. La salida analógica, la hacés variar entre 0 a 1023 o 0 a 10V, depende de la función que elijas para modificar su valor.

Es lo mismo, nada más que cambiás el tipo de salida y el rango de valores de salida a controlar.

Si hay algo que no se entienda, avísame.

Saludos!
43
StxLadder - Slicetex Ladder Designer Studio / CONTROL PID
« Último mensaje por Mariano Leiva abril 07, 2021, 15:57:52 pm »
Hola buenas tardes. Tengo un 8091-d2 y quiero usar el controlador PID del mismo.
La diferencia con el ejemplo que hay en la pagina es que, la salida del controlador la quiero manejar con la salida analógica del PLC.
Es posible hacer eso?
Desde ya muchas gracias
44
STX8081 / Re:Consulta por problemas de conectividad con internet HTTP
« Último mensaje por PabloGa marzo 17, 2021, 16:15:05 pm »
Hola Boris, muchas gracias por tu respuesta.

Efectivamente, el problema es solo al usar http.

Este es un extracto del código que uso. La función "ThingSpeakUp" se ejecuta una vez por minuto. Cuando la transacción http finaliza, ejecuta "@OnHttpSendCompleted()". Según mi análisis, lo que ocurre es que @OnHttpSendCompleted() no se estaría ejecutando (deja de ejecutarse porque por alguna razón no se completó la transacción), y por ende ThingSpeakError queda = 255, que es el valor con el que se inicializó al iniciar la funcionalidad.
La forma que yo tengo de "detectar" este problema es -precisamente- detectando que ThingSpeakError se queda clavado en 255.

Buen viaje, y lo seguimos más adelante.
Gracias desde ya,
Pablo

// --------------------------------------------------------------------------------
// Funcion     : ThingSpeakUp
// Descripcion : Sube la información a ThingSpeak
//               SE EJECUTA 1 VEZ POR MINUTO
// --------------------------------------------------------------------------------

ThingSpeakUP()
{
   // Comprobar que no haya otras conexiones http en curso, ni el envío de email en curso
   if(ThingSpeakSending == 0 && EmailSending == 0)
   {
      // Marca que hay un envío en curso
      ThingSpeakSending = 1
         
      // Inicializar cliente Thingspeak
      ThingSpeakInit()
     
      // Limpia las variables con el string que se enviara a ThingSpeak:
      ThingSpeak_String1 = ""
      ThingSpeak_String2 = ""
      ThingSpeak_String3 = ""
      ThingSpeak_String4 = ""
      ThingSpeak_String5 = ""
      ThingSpeak_String6 = ""     
      ThingSpeak_String  = ""

      StrFormat(ThingSpeak_String1, 50, true, "field1=%d.%d&field2=%d&", Dato1,Dato1_d,Dato2)
      StrFormat(ThingSpeak_String2, 50, true, "field3=%d&", Letra1+Letra2+Letra3)
      StrFormat(ThingSpeak_String3, 50, true, "field4=%d.%d&", Dato2,Dato2_d)
      StrFormat(ThingSpeak_String4, 50, true, "field5=%d&field6=%d&", Tiempo_1,Tiempo_2)     
      StrFormat(ThingSpeak_String5, 50, true, "field7=%d.%d&", Dato3,Dato3_d)
      StrFormat(ThingSpeak_String6, 50, true, "field8=%d", Dato4)
     
      // Concatena los 6 segmentos
      StrFormat(ThingSpeak_String, 100, true, "%s%s%s%s%s%s", ThingSpeak_String1,ThingSpeak_String2,ThingSpeak_String3,ThingSpeak_String4,ThingSpeak_String5,ThingSpeak_String6)
       
      // Aquí hace la subida de la info a ThingSpeak
      HttpSendGet("/update?key=%s&%s", THINGSPEAK_APIKEY, ThingSpeak_String)
     
   }
   return 0
}

// --------------------------------------------------------------------------------
// Funcion     : ThingSpeakInit
// Descripcion : Inicializa las funcionalidades para ThingSpeak
// --------------------------------------------------------------------------------

ThingSpeakInit()
{
   ThingSpeakError = 255

   // Inicializar cliente HTTP.
   HttpSendInit("api.thingspeak.com", 80, HTTP_SEND_OPT_DEFAULT, 60)

   // Activar evento OnHttpSendCompleted()
   HttpSendSetCompletedEvent()
   
   return 0
}

// ********************************************************************************
// Funcion     : OnHttpSendCompleted()
// Descripcion : Evento generado al finalizar transaccion HTTP.
// ********************************************************************************

@OnHttpSendCompleted()
{   
   // Aquí si el evento http es por ThingSpeak
   if (ThingSpeakSending == 1)
   {     
      // Actualizar flag de error.
      ThingSpeakError = !HttpSendCheckValidTransaction()
   }
     
   // marca la finalización del comando http y habilita el siguiente
   ThingSpeakSending = 0
   
return 0
}
45
STX8081 / Re:Consulta por problemas de conectividad con internet HTTP
« Último mensaje por Soporte marzo 16, 2021, 19:21:20 pm »
Buenas tardes Pablo,

El problema es que de un momento para otro "dejan de andar": los correspondientes http utilizados para ThingSpeak o PushingBox dejan de realizar su función, y retornan códigos de error. Eso es así de un momento para otro, y no se subsana más .... HASTA QUE hago un PLC reset.
El sistema funciona bien por unos 5 días (a veces solo 2), y luego deja de andar la conectividad. Todo lo demás anda perfecto (incluyendo los emails y ModBus).

¿Cuál código de error te devuelve las funciones? ¿Y qué función?.

La solución que estoy buscando es una de dos: a) Encontrar la causa de este problema  o bien b) Como puedo ejecutar comandos para resetear completamente la parte de conectividad a internet (stacks, resolucion de nombres, etc, etc) que sea EQUIVALENTE a un PLC RESET ... pero sin hacer PLC RESET.  Será esto factible?.

Por lo que me comentás parece algo particular del protocolo HTTP, ya que el resto te sigue funcionando.

¿En alguna función relacionada, de argumento variable o con datos tipo array/string, podés estar estar pasando cadenas con formato demasiado largas? ¿O es simpre fija la información y acotada a un límite?.

No hay una forma de hacer un reset de memoria a todo el stack TCP/IP, sin justamente reiniciar. Lo que si, si tenés el fragmento de código que sospechás que no funciona y que pueda ser el origen del problema, seria ideal para tener una pista de la raiz del error, y ver que medida tomar. ¿Lo has identificado como para compartirlo?.

Esta semana voy a estar de viaje, pero si podés bridarme más información, lo veo al regresar.

Saludos!

46
STX8081 / Consulta por problemas de conectividad con internet HTTP
« Último mensaje por PabloGa marzo 16, 2021, 12:36:38 pm »
Hola Boris buen día,

Estoy tratando de resolver un problema de conectividad en el que llevo meses y no lo puedo resolver.

Tengo 2 tipos de conectividad en uso, en las que tengo problemas: a) Subida de datos a ThingSpeak b) Un servicio de notificación que es llama PushingBox, que es muy util y se invoca por http.

El problema es que de un momento para otro "dejan de andar": los correspondientes http utilizados para ThingSpeak o PushingBox dejan de realizar su función, y retornan códigos de error. Eso es así de un momento para otro, y no se subsana más .... HASTA QUE hago un PLC reset.
El sistema funciona bien por unos 5 días (a veces solo 2), y luego deja de andar la conectividad. Todo lo demás anda perfecto (incluyendo los emails y ModBus).

He actualizado firmware y PLCLadder a lo último, pensando que allí había algunas mejoras sobre la parte de stacks y TCPIP, pero no, el problema persiste.

Ya tengo hecho un pequeño código que todos los días "detecta" la situación y me envía un email para avisarme y resetar el PLC y así todo comienza a funcionar de nuevo. El problema es que resetear el PLC es demasiado "hard", y podría estar apagando dispositivos que están encendidos, y se pierden también los totalizadores y variables que están en RAM.

La solución que estoy buscando es una de dos: a) Encontrar la causa de este problema  o bien b) Como puedo ejecutar comandos para resetear completamente la parte de conectividad a internet (stacks, resolucion de nombres, etc, etc) que sea EQUIVALENTE a un PLC RESET ... pero sin hacer PLC RESET.  Será esto factible?  Si esto se puede hacer, yo puedo detectar diariamente cuándo se da la situación anómala, y "reseteo" lo necesario para que vuelva a funcionar.

Ya he probado a ejecutar   ResolvClearCache()  +  HttpSendClose()  + HttpSendSetCompletedEvent() cuando la situación se da, pero no soluciona el problema. No equivale a resetar el PLC.

Desde ya muchas gracias,
Pablo.
47
PD3060-PT100 / Re:Oscilación en la medida
« Último mensaje por Soporte marzo 02, 2021, 15:46:57 pm »
hay algun ejemplo de como promediar? alguna forma de poner una variable en el indice del array?

Buenas tardes, ¿qué lenguaje de programación estás utilizando?.

Podés pasarme adjunto en archivo ZIP el proyecto, y te guío si necesitas ayuda.

El concepto es sencillo, declarás una variable, por ejemplo "Temp1Suma" que almacenará las sumas de la temperatura número 1.

También definís otra variable llamada "TempCount" que mantiene el número de sumas que vas realizando.

Cada vez que lees la temperatura, la sumás a Temp1Suma e incrementás en uno TempCount.

Temp1Suma = Temp1Suma  + Temp1Sensor
TempCount = TempCount + 1


Temp1Sensor es la temperatura instantánea sin promediar leída del sensor.

Cuando TempCount sea igual a 10, sacás el promedio dividiendo:

Temp1 = Temp1Suma / 10.0

Luego hacés Temp1Suma y TempCount igual a cero para reiniciar el ciclo.

Si tenés varias temperaturas, deberías declarar una variable de suma intermedia por cada temperatura: Temp1Suma, Temp2Suma, etc

El resto del proyecto no lo modificás, ya que seguís usando la variable "Temp1" que ahora tiene un valor promediado.

Saludos!
48
PD3060-PT100 / Re:oscilacion en la medida
« Último mensaje por ramigran marzo 02, 2021, 14:37:29 pm »
hay algun ejemplo de como promediar? alguna forma de poner una variable en el indice del array?
49
PD3060-PT100 / Re:oscilacion en la medida
« Último mensaje por ramigran marzo 02, 2021, 13:04:19 pm »
tengo pt100 de 3 hilos de buena calidad (dinorte) cable subterráneo de instrumentación mallado, asi que voy a hacer promedio y después te comento. Gracias
50
PD3060-PT100 / Re:oscilacion en la medida
« Último mensaje por Soporte marzo 01, 2021, 16:37:59 pm »
Buenas tardes,

Si están muy alejadas conviene utilizar un PT100 de tres hilos, con cable mallado, esto podría mejorar la exactitud, pero si hay oscilación es porque hay interferencia. Es probable que pase cerca de otros cables de potencia, eso puede inducir voltajes y ruidos. Es recomendado colocar el cable de los sensores por un cablecanal dedicado.

También si el PT100 es de los económicos, probar intercambiar con alguno de mejor calidad, ya que suele haber diferencia cuando hay vibraciones y los cables se mueven mecánicamente.

El módulo internamente no realiza un promediado, por lo que como sugerís, tendrías que sumar los valores recibidos en una variable intermedia (por ejemplo sumar 10 o 20 muestras) y luego dividir para obtener el promedio. Utilizar más o menos muestras según los resultados. Esto puede ayudar a resolver la oscilación.

Saludos!
Páginas: 1 ... 3 4 [5] 6 7 ... 10