Manejo de Strings y Cliente TCP en Pawn

  • 11 Respuestas
  • 10237 Vistas

VictorR

  • Novato
  • *
  • Mensajes: 19
Manejo de Strings y Cliente TCP en Pawn
« : mayo 16, 2013, 18:55:39 pm »
Hola, tengo un par de dudas:

1- Como puedo pasar binario a string o char para utilizar RelayGetState y DinRead
2- Hay alguna forma de concatenar strings, en el manual de pawn dice de la funcion strcat pero no funciona..

Gracias!
« Última Modificación: mayo 17, 2013, 15:41:25 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Dudas pawn
« Respuesta #1 : mayo 16, 2013, 21:08:15 pm »
Respecto a tu primer consulta, RelayGetState() y DinRead() retornan un valor binario,
podes imprimir dicho valor en el display LCD.

No hay implementación para concatenar cadenas. El Manual del Lenguaje Pawn habla sobre el lenguaje,
luego da funciones recomendadas pero que no necesariamente se implementan en los dispositivos.

Las funciones soportadas, son aquellas que estan en el manual de usuario y notas de aplicacion
de nuestro sitio Web.

¿ Que necesitas hacer ?

Nota 23/05/2013: Se agregó soporte para manejo de cadenas (ver mensaje).
« Última Modificación: mayo 23, 2013, 10:08:04 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

VictorR

  • Novato
  • *
  • Mensajes: 19
Re: Dudas pawn
« Respuesta #2 : mayo 17, 2013, 01:47:31 am »
Necesitar pasar esos binarios a un string para poder enviar una cadena por el nuevo cliente tcp.
La cadena que envio por tcp es una string que tiene una forma especifica, por ejemplo empieza con 1* y finaliza con #

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Dudas pawn
« Respuesta #3 : mayo 17, 2013, 09:54:48 am »
Como seria un ejemplo completo (la cadena resultante) con valores reales de RelayGetState y DinRead ?.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

VictorR

  • Novato
  • *
  • Mensajes: 19
Re: Dudas pawn
« Respuesta #4 : mayo 17, 2013, 12:23:52 pm »
Por ejemplo seria:
1*011000000%10010000#

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Dudas pawn
« Respuesta #5 : mayo 17, 2013, 15:40:24 pm »
Si, probablemente para que sea simple, habria que agregar alguna funcion
que permita hacer lo que necesitas, lo vamos viendo asi la agregamos.

Mientras tanto, podes crear un array y completarlo con las valores ASCII.

Luego envias el array con TcpClSend(Str, size, false)

Nota: Podrias crear una funcion intermedia en Pawn, que llene el array.

Código: [Seleccionar]
new Str[25]

Str[0] = '1'
Str[1] = '*'
Str[3] = '0' + 0
Str[4] = '0' + 1  // Sumo al valor ASCII "0" el numero uno, para obtener el valor ASCII "1".
Str[5] = '0' + 1
...
Str[X] = '%'
Str[X+1] = ''0' + 1
...
Str[X+N] = '#'

« Última Modificación: mayo 17, 2013, 16:32:36 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

VictorR

  • Novato
  • *
  • Mensajes: 19
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #6 : mayo 20, 2013, 18:00:19 pm »
Algo asi hice, funciona perfecto.

Ahora el único tema que veo son para mandar las analógicas, todavía no veo alguna forma de mandarlas bien.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #7 : mayo 20, 2013, 19:50:35 pm »
Ok, no te hagas problema, vamos agregar una funcion para crear cadenas con formato, asi podes convertir numeros a ASCII. Danos un tiempito, y mediado de semana actualizamos.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

VictorR

  • Novato
  • *
  • Mensajes: 19
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #8 : mayo 21, 2013, 15:45:40 pm »
Perfecto, seria bastante útil poder usar las funciones string, como strcat, strcmp, etc para poder manejar los comandos vía remota facilmente.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #9 : mayo 22, 2013, 10:25:11 am »
Buen dia Victor,

Le dimos soporte para manipular strings en Pawn al PLC con las funciones requeridas.

Para utilizarlo debes actualizar:


Adjunto a este post, te dejo un ejemplo completo en Pawn
que podes abrir con StxLadder.

Probablemente la funcion mas util para utilizar con el cliente TCP, sea StrFormat(),
ya que podes crear un string con valores de variables (como LcdPrintf()) y luego enviar
el array con TcpClSend().

En el siguiente Post te paso la descripcion de las funciones implementadas.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #10 : mayo 22, 2013, 10:49:31 am »
Documentacion de las funciones agregadas (hasta que se publique la documentacion oficial):


StrFormat(DestStr[], Size, Pack=false, const FormatStr[], ...)

Convierte valores a texto, utilizando una cadena con formato.

Entradas:

- DestStr[] = Array con el resultado formateado (maximo 160 caracteres).
- Size = Numero maximo de celdas a utilizar en DestStr[] incluyendo el terminador '\0'.
- Pack = Utilizar siempre "false" en la implementacion actual.
- FormatStr[] = Cadena con el formato y codigos de formato.
- ... = Parametros para los codigos de formato en FormatStr[]

Retorno:

- ( >=0) = Retorna el numero de caracteres impresos en DestStr[] (sin incluir el terminador '\0')
- ( -1 ) = Direccion invalida de Array/String.
- ( -2 ) = Error en la conversion.

Notas:

Los codigos de formatos posibles pueden obtenerse de la funcion LcdPrintf()
desde el manual de programacion Pawn, ya que el modo de operacion es igual,
pero la salida no es en el display LCD, sino en un array.

Ejemplo:

Código: [Seleccionar]

new Str1[] = "Hola"
new StrNum[20]
new i=0

// Imprimir valor de variable "i" en cadena y luego incrementar.
StrFormat(StrNum, 20, false, "%s: %d", Str1, i++)


La cadena resultante en StrNum[] sera:

"Hola: 0"

Si se llama otra vez a la funcion, la cadena resultante sera:

"Hola: 1"





StrLen(const Str[])

Retorna la longitud de un string.

Entradas:

- Str[] = Array con el string para obtener longitud.

Retorno:

- ( >=0) = Tamaño de string (sin incluir el terminador '\0')




StrCmp(const Str1[], const Str2[], IgnoreCase=false, Length)

Compara dos strings.

Entradas:

- Str1[] = String 1.
- Str2[] = String 2.
- IgnoreCase = Si es "true" mayusculas/minusculas son ignoradas.
- Length = Cantidad maxima de caracteres a considerar en la comparacion.

Retorno:

- (  0 ) = Los strings son inguales, Str1=Str2.
- ( -1 ) = El Str1 < Str2.
- (  1 ) = El Str1 > Str2.




StrFind(const Str[], const SubStr[], IgnoreCase=false, Index=0)

Busca una sub-string dentro de un string.

Entradas:

- Str[] = String donde buscar la sub-string.
- SubStr[] = Sub-string a buscar.
- IgnoreCase = Si es "true" mayusculas/minusculas son ignoradas.
- Index = Posicion del caracter donde comenzar la busqueda en "Str[]".

Retorno:

- ( >=0 ) = Posicion del caracter (Index) en Str[] de la primera ocurrencia
            de SubStr[]. Puede utilizar este numero (mas 1) como parametro
            de Index para la busqueda de la siguiente ocurrencia en Str[].
- ( -1  ) = No se encontro SubStr[] en Str[].





StrCat(StrDest[], const Str1[], Length)

Concatena dos cadenas, resultando StrDest[] = StrDest[] + Str1[]

Entradas:

- StrDest[] = Cadena de destino.
- Str1[] = Cadena que se agregara a StrDest[].
- Length = Cantidad maxima de caracteres en StrDest[].

Retorno:

- (  >=0 ) = Tamaño resultante en caracteres de StrDest[], sin incluir terminador '\0'.


« Última Modificación: mayo 22, 2013, 20:20:34 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

VictorR

  • Novato
  • *
  • Mensajes: 19
Re: Manejo de Strings y Cliente TCP en Pawn
« Respuesta #11 : mayo 22, 2013, 19:47:40 pm »
Wow! Excelente !!!!
Con esto me sobra! Muchas gracias! Los felicito.