Mostrar Mensajes

Esta sección te permite ver todos los mensajes hechos por este usuario, recuerda que solo puedes ver los mensajes en áreas en donde tu tienes acceso.


Mensajes - Soporte

Páginas: 1 ... 50 51 [52] 53 54 ... 63
766
STX8081 / Re: Entrada Analógica
« : septiembre 09, 2014, 16:43:16 pm »
OK, estamos atento a novedades.

En cuanto a Watchdog para el modo PLC no esta implementado para los scripts.
Podría agregarlo en una revisión de firmware si sospechas que es algo de eso.
Dame un tiempito para trabajarlo, y la semana que viene podría tener algo listo
así lo actualizas.

767
STX8081 / Re: MODBUS RS485
« : septiembre 09, 2014, 11:33:20 am »
Que bien!

Si, es compatible con el ModBus.

768
STX8081 / Re: Dosificacion de material - Realimentacion
« : septiembre 08, 2014, 20:59:21 pm »
Buenas tardes Ariel,

En el archivo adjunto TemperaturaControl_v01.zip te paso el proyecto en Pawn para StxLadder que
implementa un control de temperatura básico para tu horno.

Según entendí, la termocupla genera 0.84V por grado celsius. Para el material refrigerante, serian aproximadamente 0.02V por cada
grado celsius que se quiere bajar en el horno.

Dicho esto, el funcionamiento del programa es el siguiente. Se establece un SET_POINT=100.0 con la temperatura final
deseada del horno. Un ciclo de HISTERESIS= +/-1.5 celsius, que es la tolerancia donde no se agrega mas material refrigerante
si la temperatura entra en esa zona.

El programa utiliza un temporizador timer1 que se llama cada 1000 mS, y muestrea la temperatura. Si esta por encima del
SET_POINT, agrega material refrigerante (la cantidad depende de cuanto es la diferencia de temperatura final con la actual,
si es muy grande, por ejemplo mas de 50 grados, agrega mas cantidad, si es menor, agrega menos).

La velocidad del timer te da la respuesta del sistema, a menor valor mas rápido responde.

Todo es configurable en el programa que te paso, fíjate en las constantes #define, de allí podes configurar SET_POINT,
relaciones de temperatura de la termocupla y del material refrigerante, como leer los datos, velocidad de muestreo,
etc.

Para estructurar mejor todo, dividí el código en varios archivos, por ejemplo:

  • PlcMain.p: Punto de entrada principal.
  • Control.p: se realiza el control de temperatura.
  • Temperature.p: están las rutinas relacionadas a la temperatura del horno.
  • Cooler.p: Rutinas para agregar material refrigerante.

Nota como se emplean funciones para agrupar rutinas en común y hacer el programa mas robusto a cambios.

También, en el display LCD de la placa se muestra: Temperatura actual, diferencia de temperatura respecto al set-point,
y temperatura o cantidad de material se esta poniendo como refrigerante.

Para la cantidad de material refrigerante, utilizo como unidad grados celsius, ya que según explicas en tu mensaje anterior, utilizas
0.02V por cada grado que deseas bajar. Entonces las rutinas especifican cuantos grados hay que bajar y
automáticamente se convierte a un valor de tensión.

Para probar el programa te recomiendo:

  • Tester para medir tensión en salida analógica VOUT1, que indica cantidad de material refrigerante.
  • Fuente variable, de rango 0-3.3 para simular temperatura en entrada VIN1.
  • Colocar jumper en J7.
  • Colocar jumper en J5.
  • Display LCD de la placa conectado.
  • Tener ultima version de firmware de placa STX8081 y de software StxLadder.

Entonces, comenza por colocar una tensión de 2.5V en la entrada VIN1, eso serian 300 grados y observa
como sube la tensión en la salida analógica para agregar material refrigerante.

Anda bajando progresivamente la tensión hasta que en el display de la placa te indique 100 grados
y la cantidad de material ira disminuyendo hasta 0.

Prioritariamente lee el código programa e intenta comprender todo, así podes realizar los
ajustes necesarios y mejorarlo.

Con esto tenes una base para empezar el control de temperatura.

Esperemos que te sirva y cualquier duda avísanos.

Estamos a disposición.

769
STX8081 / Re: MODBUS RS485
« : septiembre 05, 2014, 16:59:12 pm »
En el manual se refiere a "Single Precision Float", por lo tanto debe hablar de una palabra de 32-bits,
o lo que es lo mismo, a dos registros de 16-bits que debes leer consecutivamente para formar el valor final en float.

No especifica que direccion tiene los 16-bits mas altos de la palabra.

Pero supongamos que queres leer "Gas Level - Sensor 1", en dirección Base+207.

El float, debería estar almacenado en las direcciones de registros como sigue:

Base+207 = 16-bits mas significativos.
Base+208 = 16-bits menos significativos.

Entonces, debes leer ambos registros (supongamos que ya recibiste ambos valores vía ModBus y los tenes en las variables RegistroH y RegistroL):

// En Pawn (en rojo los valores ya recibidos)
new RegistroH = Base+207
new RegistroL = Base+208


new RawValue
new Float: FloatValue = 0


// Convertir a 32-bits (unir ambos registros para formar el float de 32-bits).
// Notar en segunda linea como realizo una operación SHIFT y luego un OR bit-a-bit.
RawValue = RegistroL
RawValue |= (RegistroH << 16)


// Almacenar en float haciendo un cast (para que se interprete correctamente).
FloatValue = Float: RawValue

// Finalmente, imprimir:
LcdPrintf(0,1, "%f", FloatValue)


Proba esta forma, si no funciona, proba recuperando al reves los valores, es decir en RegistroH = Base+208 y en RegistroL = Base+207.

No esta muy claro en la hoja de datos cuales son los dos bytes mas significativos del "Single Precision Float".








770
STX8081 / Re: MODBUS RS485
« : septiembre 05, 2014, 15:17:24 pm »
Si podes, pero es confuso porque dice "Coils".

Normalmente si dice coils, cada direccion deberia representar un bit, y se deberia poder modificar
con la funcion MbRtuClSendWriteCoil().

Sin embargo, viendo la tabla, lo toma como un Word, que es de 16-bits. En otras palabras,
un registro normal.

Entonces, para modificar un solo bit, primero debes leer el registro con MbRtuClSendReadHoldingReg(),
alterar el valor del bit deseado dentro del PLC, y luego sobre-escribir el valor del registro
con el nuevo valor utilizando la funcion MbRtuClSendWriteReg().

La operación de lectura debes realizarla antes, ya que debes conservar el valor de los otros bits del registro.

Entonces, primero debes leer el registro:

// Enviar peticion para leer 1 "Holding Registers".

MbRtuClSendReadHoldingReg(247, 302, 1)

// Esperas la respueta.

// Suponiendo que el valor del registro se encuentra en la variable "Registro",
// podes alterar el valor del bit con las funciones BitSet() y BitClr(),
// ver manual de programacion Pawn, pagina 151.

// Si queres poner en "1" el bit 2 de la variable "Registro" haces:

BitSet(Registro, 2)

// Finalmente, debes enviar el nuevo valor del registro en otra transacción  de escritura usando:

MbRtuClSendWriteReg(247, 302, Registro)


Ese es el procedimiento, recorda comprobar errores en cada transacción,
y hacerlo mas prolijo. Podes crear una función Pawn que englobe todo esto, así
te queda mas modular.

Entonces, se integro correctamente la interfaz RS485 ?.



771
STX8081 / Re: Dosificacion de material - Realimentacion
« : septiembre 04, 2014, 16:00:54 pm »
Buenas tardes Ariel,

Quizas lo mas conveniente para realizar ese tipo de control, sea implementar un control PID por software, o
utilizar un principio similar.

Ya que tenes un sistema realimentado, donde la entrada depende de la salida, y hay que diseñar
un control que no te oscile.

Dame un tiempito para analizarlo e implementar un control básico en Pawn para lo que necesitas,
así te sirve de base.

Mientras tanto, actualiza la placa a la ultima versión de firmware y bájate la ultima versión de StxLadder.

Estamos en contacto.

772
STX8081 / Re: MODBUS RS485
« : agosto 29, 2014, 11:44:59 am »
Ya fue actualizada y corregida la nota de aplicación AN026, revisión 02.

773
STX8081 / Re: MODBUS RS485
« : agosto 28, 2014, 18:11:28 pm »
Si, te da ese error porque la función esta mal escrita tal como figura en la nota de aplicación AN026 (error nuestro).

Debes reemplazar:

if( MbRtuClSendWriteSingle (247, 40140, 11) < 0 )

Por:

if( MbRtuClSendWriteReg(247, 40140, 11) < 0 )

Ya vamos a actualizar la AN026 en estos días con estas correcciones.

Por otro lado, en tu código, la variable "new MbStat" esta definida dos veces, borra la que tiene alcance global.

Te adjunto un proyecto Pawn con lo que queres realizar escrito de una forma mas
prolija, fíjate si te funciona o que errores te devuelve, y avísanos.

774
STX8081 / Re: MODBUS RS485
« : agosto 28, 2014, 17:06:13 pm »
Es para el sensor de GAS que me pasaste antes?.

Inicializas bien los parámetros de comunicación? por lo que entiendo es:

MbRtuClInit(19200, SERIAL_8E1, 10, MB_RTU_INTERFACE_RS485)

Lo tenes configurado al sensor de GAS para utilizar 19200 bps, paridad even, 8 bits datos y 1 stop bit ?.

Por lo que leo en las demás direcciones utilizan una dirección base que cargas en el registro 1000, que tiene
un valor por defecto de 40000.

Proba hacer una lectura en el registro 40001, por ejemplo:

if(MbRtuClSendReadHoldingReg(247, 40001, 1) < 0)

También, decime que valor te devuelve esta función (llámala después de que recibís la respuesta del sensor):

LcdPrintf(0,1, "Func: 0x%X", MbRtuClGetFuncCode())

Quiero ver si se corresponde con la función enviada.

775
STX8081 / Re: MODBUS RS485
« : agosto 28, 2014, 11:48:57 am »
Eso significa que estas enviando un comando (función) o dirección o valor de datos ilegal al esclavo ModBus RTU.

Fíjate obtener el código de excepción que devuelve con:

LcdPrintf(0,1, "Exception: %03d", MbRtuClGetExceptionCode())   

Y compara dicho valor con la tabla 2, pagina 4 de la nota AN026 para orientarte.

Ejecuta la función después de que la transacción retorna.

Avísame como te va.

 

776
STX8081 / Re: Entrada Analógica
« : agosto 27, 2014, 15:57:44 pm »
Buenas tardes Pablo,

Tenes el modelo de sensor 4-20mA o datasheet del mismo para mirar por las dudas ?.

Si pones el resistor en serie al lazo de corriente, con un extremo a AGND, deberías medir
normalmente tensión, ya que el generador intentara mantener la corriente constante que
consuma la resistencia cerrando el lazo con AGND.

Sin embargo:

  • La caída de tensión en el resistor debe ser menor a la tensión de alimentación que utilices para el generador, con una diferencia de 2 a 3 Volts, según indique la hoja de datos.
  • Verifica que la masa utilizada en el generador para alimentarlo, también este conectada a tierra o al GND de la placa que conectes a tierra.
  • Una vez que conectes el resistor a la salida del generador, no lo conectes a ningún otro aparato en paralelo, solo debe estar dedicada al PLC.
  • Hay una probabilidad de que el valor de resistencia que usas sea inadecuado, ya que depende de la impedancia de salida del generador e impedancia de entrada de la entrada del PLC. Proba también reducir el valor a 250 Ohms.
  • Realiza una conexión a tierra entre PLC y generador 4-20 mA lo mas directa posible, verificando que no existan otras fuentes de interferencia hasta la jabalina a tierra, ya que eso puede generarte una resistencia adicional.

Estamos a disposición.

777
STX8081 / Re: MODBUS RS485
« : agosto 19, 2014, 19:13:17 pm »
Según la documentación de la función, si retorna "-1", es porque se envío el comando ModBus, pero
la librería esta ocupada esperando la respuesta de una transacción MosBus previa.

Debes estar llamando dos o mas veces seguidas la función (o hay una transacción en curso realizada por otra funcion).

Por otro lado, me parece que tendría mas sentido el código como lo reescribo a continuación, ademas presta atención donde pongo las llaves { } y como compruebo el error en el if con paréntesis en (error = func()) < 0 ya que primero asignas valor a variable y luego comprobas si es menor a 0:


if(MbWaitResponse == 0)
{
   // Enviar peticion para leer "Holding Registers".
   if((error = MbRtuClSendReadHoldingReg(247, 1000, 1)) < 0)
   {
      // Error en transmision.
      LcdPrintf(0,1, "ERROR... %d", error)
      DelayMS(5000)
   }
   else
   {
      WaitResponse = 1
      LcdPrintf(0,1, "Esperando respuesta... ")
      DelayMS(5000)
   }
}

Quedamos a disposición.

778
STX8081 / Re: MODBUS RS485
« : agosto 13, 2014, 16:58:12 pm »
Buenas tardes Victor,

En la foto que te adjunto, esta como deberías conectar desde el puerto de expansión HP2
del PLC a tu MAX-485.

Procura utilizar algún conector adecuado desde el puerto a tu placa, para evitar cortos.

Recorda que debes declarar la interfaz RS-485 que utilizas desde StxLadder, como explica la nota de aplicación AN026 pagina 5.

Lo mismo cuando inicialices el puerto en Pawn, utiliza la constante MB_RTU_INTERFACE_RS485 para
que el software entienda el tipo de interfaz RS485.

Ejemplo:

MbRtuClInit(9600, SERIAL_8E1, 10, MB_RTU_INTERFACE_RS485)

Quedamos a disposición.


779
VirtualHMI - Terminal HMI Remoto / Re: Archivo nethmi.inc
« : julio 16, 2014, 16:58:44 pm »
Cuando referencia a una constante, por ejemplo LCDSTRING_OPT_NONE, el compilador
remplaza esa constante por su valor al usarlo, y escribe "0" en la linea de código.

Son constantes de pre-procesamiento, no se guardan en la placa, se reemplazan en código al momento
de utilizarlas.

780
VirtualHMI - Terminal HMI Remoto / Re: Archivo nethmi.inc
« : julio 16, 2014, 16:34:59 pm »
Claro, no es visible desde StxLadder porque el usuario no debería modificarlo por lo que te comente.

Pero si queres verlo o editarlo manualmente lo podes encontrar en:

<directorio_instalación>\StxLadder\pawn\include\common\nethmi.inc

Páginas: 1 ... 50 51 [52] 53 54 ... 63