# Puerto serie

Se trata de un conjunto de comandos de instrucción que nos permiten interactuar con dispositivos conectados a un puerto serie, que habrán sido declarados en el proyecto por medio de un objeto [dispositivo serie](../../../proyecto-de-aplicacion/dispositivo-serie).

## Puerto serie: abrir

Comando de instrucción del grupo [Puerto serie](puerto-serie).

**Origen de la instrucción**: cualquiera.

**Destino del subproceso**: ninguno.

#### Parámetros

*   **Identificador de dispositivo serie**

    Especificación del objeto dispositivo serie con el que queremos establecer la conexión.
*   **Identificador de variable local booleana de retorno de ok (Opcional)**

    [Variable local](../../variable-local) si no ha podido hacerla.
*   **Codificación**

    Opcional. Nos permite configurar el codec para la lectura y escritura en el puerto serie. Si seleccionamos el valor "ninguno", por defecto usa la codificación del sistema en Windows y UTF-8 en Linux y macOS.

#### **Funcionalidad**

Este comando de instrucción abre un puerto serie para comunicarse con un objeto dispositivo serie y retorna, en una variable local de tipo booleana, si lo ha podido abrir o no.

#### **Comentarios**

Si el puerto ya se encuentra abierto esta instrucción no se ejecuta.

#### Ejemplo

Abrimos el puerto serie guardando en la variable global PS\_OK el resultado de la apertura.

```
Modificar variable global ( PS_OK@ejemplo, 0,  )
Puerto serie: abrir ( PS@ejemplo, BOK, .Ninguno )
Modificar variable global ( PS_OK@ejemplo, BOK,  )
```

## Puerto serie: cerrar

Comando de instrucción del grupo Puerto serie.

**Origen de la instrucción**: cualquiera.

**Destino del subproceso**: ninguno.

#### Parámetros

*   **Identificador de dispositivo serie**

    Especificación del objeto dispositivo serie cuya conexión queremos cerrar.

#### **Funcionalidad**

Este comando de instrucción permite cerrar la conexión establecida previamente con un dispositivo conectado a un puerto serie. Dicho dispositivo habrá sido declarado en el [proyecto](../../..).

#### **Comentarios**

El puerto a cerrar tendrá que haber sido abierto previamente mediante el comando de instrucción [Puerto serie: abrir.](#puerto-serie-abrir)

Si en un proceso en el que abrimos un puerto no lo cerramos, éste permanecerá abierto hasta que finalice la sesión del ejecutable que lo disparó [Velneo vClient.](../../../../../velneo-vclient/que-es-velneo-vclient)

#### Ejemplo

Procedemos a cerrar el puerto serie PS.

```
Puerto serie: cerrar ( PS@ejemplo )
```

## Puerto serie: configurar dispositivo

Comando de instrucción del grupo Puerto serie.

**Origen de la instrucción**: cualquiera.

**Destino del subproceso**: ninguno.

#### Parámetros

*   **Identificador de dispositivo serie**

    Especificación del objeto dispositivo serie cuya configuración se desea modificar.
*   **Identificador de variable local booleana de retorno de ok (Opcional)**

    [Variable local](https://velneo.es/info_v7_20_es/velneo_vdevelop/proyectos_objetos_y_editores/variable_local\)%20al%20proceso%20de%20tipo%20booleano%20donde%20se%20retornar%C3%A1%20true%20\(1\)%20si%20ha%20podido%20realizar%20la%20operaci%C3%B3n%20o%20false%20\(0/) si no ha podido hacerlo.

#### **Funcionalidad**

Este comando de instrucción de proceso presenta una ventana que permite modificar la configuración de un objeto dispositivo serie, en la que podrá modificar los parámetros siguientes, según la configuración indicada por el fabricante del dispositivo:

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/umNETA1vYpuckgKnNry6/res_1696.jpg)

Desde esa misma ventana el usuario también podrá probar si la comunicación con el dispositivo es o no correcta, para ello se pulsará el botón “Test”; al hacerlo se presentará la ventana siguiente:

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/ZEw3A9AnFK4TLZk9Pg5G/res_1697.jpg)

En ella el usuario podrá establecer el codec a usar, escribir la cadena a enviar al dispositivo serie y pulsar el botón “Enviar”; si el dispositivo envía una respuesta, ésta será mostrada bajo el epígrafe “Recibido”.

#### **Comentarios**

Este comando de instrucción de proceso solamente podrá ser usando en procesos ejecutados en [primer plano](../../../../buenas-practicas-de-programacion/buenas-practicas-de-rendimiento/procesos/procesos-1-2-y-3-plano-cuando-usar-cada-uno). Los datos modificados en la configuración del dispositivo serie serán guardados en el fichero de registro del sistema donde se haya ejecutado el proceso.

#### Ejemplo

Lanzamos la ejecución de configuración del puerto serie.

```
Puerto serie: configurar dispositivo ( PS@ejemplo, BOK )
```

## Puerto serie: enviar

Comando de instrucción del grupo Puerto serie.

**Origen de la instrucción**: cualquiera.

**Destino del subproceso**: ninguno.

#### Parámetros

*   **Identificador de dispositivo serie**

    Especificación del objeto dispositivo serie con el que queremos establecer la conexión.
*   **Fórmula de dato**

    Expresión de tipo fórmula con el dato a enviar al puerto serie. Para facilitar la especificación de la fórmula podremos hacer uso del [asistente para edición de fórmulas](../../../editores/asistente-de-formulas).
*   **Identificador de variable local booleana de retorno de ok (Opcional)**

    Variable local si no ha podido hacerlo.

#### **Funcionalidad**

Este comando de instrucción envía la cadena establecida en sus parámetros a un dispositivo conectado a un puerto serie y retorna en una variable local del proceso si lo ha hecho (1) o no (0).

#### **Comentarios**

El uso de este comando de instrucción de proceso requiere que el puerto haya sido abierto previamente mediante el comando de instrucción [Puerto serie: abrir](#puerto-serie-abrir).

En la documentación de algunos dispositivos se expresan en forma hexadecimal los códigos que hay que utilizar usarse para establecer la comunicación con el dispositivo conectado al puerto serie. Cada código es la representación hexadecimal de un carácter ASCII, que es lo que realmente se ha de escribir en el puerto.

Por ejemplo, si se debe escribir en el puerto el hexadecimal 16, tendremos que convertirlo a decimal, convertir el resultado luego a cadena:

Ejemplo: getAsciiChar(stringHexToNumber (16), “ISO 8859-1”)

#### Ejemplo

```
Rem ( Escribe secuencia 01AR01 en el puerto serie para la apertura de un relé)
Puerto serie: enviar ( PS@ejemplo, "01AR01",  )
```

## Puerto serie: recibir

Comando de instrucción del grupo puerto serie.

**Origen de la instrucción**: cualquiera.

**Destino del subproceso**: ninguno.

#### Parámetros

*   **Identificador de dispositivo serie**

    Especificación del objeto dispositivo serie con el que queremos establecer la conexión.
*   **Identificador de variable local alfabética de retorno**

    Variable local de proceso, de tipo alfabético, donde se retornará el dato recibido del puerto serie.
*   **Identificador de variable local booleana de retorno de ok (Opcional)**

    Variable local si no ha podido hacerlo.

#### **Funcionalidad**

Este comando de instrucción permite recibir un dato de un dispositivo conectado a un puerto serie. Dicho dispositivo habrá sido declarado en el proyecto.

#### **Comentarios**

Habitualmente, el uso de este comando de instrucción estará supeditado al envío de una petición previa al dispositivo mediante el comando [Puerto serie: enviar.](#puerto-serie-enviar)

#### Ejemplo

Leer puerto serie para lectura de retorno de carro. Cada secuencia quedará registrada en la variable local SECUENCIA\_KEY.

```
Puerto serie: recibir ( PS@Puerto serie, SECUENCIA_LEIDA, BOK )
If ( (isEmpty(SECUENCIA_LEIDA)=0)&(BOK=1) )
    Set ( N_SECUENCIAS, 0 )
    Rem ( Para facilitar la comprensión del proceso, se reemplazan los ascii (10) y (13) por el | )
    Set ( SECUENCIA_LEIDA, replaceString(SECUENCIA_LEIDA, (getAsciiChar(10,"ISO-8859-2")+getAsciiChar(13,"ISO-8859-2")), "|") )
    Set ( N_SECUENCIAS, countString(SECUENCIA_LEIDA,"|" ) )
    For ( I, 0, I < (N_SECUENCIAS), 1 )
        Set ( SECUENCIA_KEY, stringSection(SECUENCIA_LEIDA, "|",I,0,0) )
```
