Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CB350i
CAPÍTULO 3
3. EXTENSIÓN DE SOFTWARE
Comunicación en serie Analizador <-> Computadora Pág.: 250
huésped
3.1. General Pág.: 250
3.2. Transmisión de pacientes al Analizador Pág.: 250
3.3. Recepción de resultados Pág.: 252
3.4. Cálculo de suma de verificación Pág.: 253
3.5. Diagrama de conexión del cable de interfaz Pág.: 253
3.6. Protocolo de comunicación variable Pág.: 254
3.7. Programas para tests con comunicación en serie Pág.: 265
3.7.1. Programa Comunica.exe Pág.: 265
3.7.2. Programa BTPLUS.exe Pág.: 265
Aviso Importante:
Cualquier modificación del Protocolo Serie Variable queda limitada a personal calificado
únicamente. Wiener Laboratorios SAIC garantiza el correcto rendimiento del protocolo serie interno.
El malfuncionamiento que provenga de modificaciones en los scripts del Protocolo Serie Variable
es responsabilidad del cliente.
ADVERTENCIA
249
3. COMUNICACIÓN EN SERIE: ANALIZADOR <-> COMPUTADORA
HUÉSPED
3.1. GENERAL
El analizador permite la comunicación bi-direccional a través de una conexión serial RS
232C con cualquier computadora huésped.
La característica particular del diálogo es que siempre es la computadora huésped la que
inicia la comunicación, tanto para transmitir la lista de pacientes como para recibir los
resultados.
Para iniciar cualquier comunicación, la computadora huésped debe enviar el carácter STX
(0x02) al analizador y esperar el carácter ACK (0x06) como respuesta. A partir de ese
momento, la computadora huésped envía datos al analizador, y termina la comunicación al
enviar el carácter EOT (0x04).
Es importante recordar que toda comunicación es seguida por una respuesta del
analizador.
Tenga en cuenta que si el parámetro que se transmite es más corto que lo que requerido
por el protocolo de comunicación, entonces debe agregarse un espacio antes o después.
Por ejemplo: el análisis tiene una longitud de 4; por ende, para enviar el código GLY, uno
debe agregar un espacio para alcanzar la longitud de 4 caracteres.
250
0x06 Error en la posición del contenedor
0x07 Error en el campo Número de análisis
0x08 Número de test erróneo
0x09 Posición ya en ejecución
0x0A Imposible clonar
0x0B Código duplicado
0x0C Uno o más análisis no están presentes en el analizador
0x0D Uno o más análisis no están presentes en la bandeja actual
0x0E Demasiados análisis para el paciente
0x12 No hay pacientes para repetir
0x13 El campo de suero en el paciente a repetirse es diferente al que se
encuentra en memoria.
0x14 Paciente a repetirse, pero la lista está llena
0x15 Paciente a repetirse, pero la lista es diferente
0x16 La posición asignada ya está en uso
0x17 Paciente ya existente o analizado; no es un clon y pertenece a una
lista suplementaria (extra)
0x18 Paciente ya analizado, pero no hay repeticiones o clones activos
Por ejemplo: para enviar un paciente con código 000000000000001, tipo de suero y
análisis GLY, BUN y CHO a la lista de STAT, debe enviar la siguiente secuencia de
caracteres (excluyendo la secuencia inicial STX <-> ACK):
Donde:
251
3.3. RECEPCIÓN DE RESULTADOS
Hay tres comandos para la recepción de informes del analizador:
Donde:
000000000000001........ Código de paciente
R.................................... Identifica la lista de STAT
S.................................... Identifica el tipo de paciente (en este caso: Suero)
003................................ Identifica la cantidad de informes
GLU................................ Primer código de test
000.000......................... Resultado de test GLU
BUN.............................. Segundo código de test
252
0010.10......................... Resultado de test BUN
CHO............................... Tercer código de test
00100.0......................... Resultado de test CHO
245................................ Identifica la suma de verificación
<EOT>.......................... Este carácter finaliza la comunicación
ANALIZADOR
ANALIZADOR
253
3.6. PROTOCOLO DE COMUNICACIÓN VARIABLE
Introducción
El protocolo serie variable fue diseñado para proporcionar al usuario la posibilidad de
personalizar los datos transmitidos y recibidos del analizador.
El usuario puede transmitir o recibir además de los datos pre-establecidos (código de
paciente, código de análisis, resultados, etc.), sucesiones de texto simple o caracteres de
acuerdo a sus necesidades personales.
El usuario puede optar por enviar o recibir información numérica (por ej. Cantidad de test)
no en forma de bytes individuales sino en series numéricas pre-establecidas o viceversa.
Por ejemplo: el usuario puede optar por recibir algo así:
"Iniciar análisis de datos"
<Análisis de datos verdadero y típico>
"Finalizar análisis de datos"
Donde las frases "Iniciar análisis de datos" y "Finalizar análisis de datos" no refieren a
ningún dato pre-establecido por el analizador sino que sirven únicamente para monitorear
el proceso de comunicación (puede ser útil para insertar marcadores específicos en
aquellos programas que obtienen información de archivos de texto).
Es obvio que el protocolo de iniciación y finalización de comunicación, los comandos para
la petición de informes, y las respuestas del analizador en caso de errores o aciertos
permanecen idénticos a la comunicación en serie pre-establecida usual.
NOTA:
a) Si se omite una suma de verificación en una comunicación, entonces el analizador
no la controlará.
b) Los siguientes números han sido utilizados para representar los códigos de error
relevantes al envío de un paciente al analizador de acuerdo a los parámetros que
no forman parte de la comunicación en serie estándar:
0x0F Los datos (constantes) enviados a un TAG #Char, #String o #Stringn no entran en el
rango de valores posibles
0x10 Los datos (variables) enviados a un TAG #Char, #String o #Stringn no son válidos
0x11 Una variable de análisis se encuentra por fuera SET BEGIN/END relativo al análisis.
254
es posible escribir un script con cualquier editor de texto (DOS o Windows), como el Bloc
de Notas de Windows o el EDITOR de DOS. No es posible importar documentos escritos
con UNIX ya que lo caracteres utilizados para pasar a la siguiente línea son diferentes de
aquellos utilizados por DOS o Windows.
¡PRECAUCIÓN!
Si quiere utilizar un script que está guardado en un disco removible (por ejemplo, un
disquete), es necesario copiarlo al disco rígido.
TIPO DE DATOS
Character: Identifica a un carácter individual, que puede presentarse como carácter imprimible
(encerrado entre comillas simples), como valor decimal ASCII (seguido al símbolo $) o
como valor hexadecimal ASCII (seguido a 0x).
Si por ejemplo queremos representar el carácter A (valor decimal 65 o valor hexadecimal
41), entonces podemos escribir 'A', $65 o 0x41.
String: Identifica una serie de caracteres imprimibles encerrados entre comillas simples, por
ejemplo: 'esto es una cadena'
Comment: Identifica una porción de texto (precedido por un carácter ;) que no se compila pero sirve
de nota para el programador.
Variables: Éstas son secuencias particulares de caracteres precedidas por el símbolo #, que son
usadas por el programa para guardar información interna (código de paciente, nombre
de análisis, etc.); véase la "TABLA 1 – TRANSMISIÓN/RECEPCIÓN".
También hay variables para usos directos, las cuales permiten la identificación de
cualquier carácter por debajo de ASCII 32 (espacio) para facilitar la escritura del script
(por ejemplo, uno puede usar la variable #EOT para identificar el carácter $4); véase la
"TABLA 2 – VARIABLES INTERNAS".
255
FUNCIONES DE SCRIPT
String: Identifica una cadena de longitud variable que finaliza con un carácter particular.
Sintaxis:
String <string>I<Terminator>
Donde
<String> Cadena transmisión/recepción
<Terminator> Carácter de finalización
Nota:
No es posible utilizar variables como parámetro <Terminator>
Ejemplo:
String ‘Hello Word’|$0
String ‘My String’|’@’
String #Variable1|0x10
Sintaxis:
Stringn <String>|<Longitud>
Donde
<String> Cadena transmisión/recepción
<Longitud> Longitud de la cadena
Nota:
Si la longitud de las cadenas de texto es menor a los datos, entonces se agregan una
serie de espacios a la derecha para alcanzar la longitud pre-establecida de los datos.
Si la cadena de texto es mayor a la longitud de los datos, entonces se corta el final de
la cadena para adaptarla a la longitud de los datos.
Ejemplo:
Stringn ‘Hello Word’|$40
Stringn #Variable1|0x10
Sintaxis:
Char <Carácter>
256
Ejemplo:
Char ‘H’
Char $20
Char 0x10
Char #STX
Sintaxis
Nota:
Actualmente, el único SET presente es el ANALYSESDATA, el cual identifica el
análisis en la transmisión/recepción.
Solo una orden SET BEGIN y una orden SET END pueden estar presentes en un
script.
Un script siempre debe contener la orden SET.
La variable PATIENTNUMBERTEST debe estar presente antes de la orden SET.
ERRORES DE COMPILACIÓN
Uno o más errores por una escritura incorrecta de script o un error de sistema pueden
aparecer durante la compilación de un script. El compilador muestra el código de error, la
descripción del error y la línea donde se detectó tal error.
La tabla en la siguiente página muestra los códigos de error, descripción y posibles causas:
257
Código
Descripción Posibles causas
error
Se ha introducido un comando desconocido en los
1 Comando desconocido
comandos de script.
No se ha insertado una cadena como primer
2 Pedido de cadena
parámetro para String o Stringn.
Se ha insertado una cadena como parámetro
3 Pedido de número
<longitud> en un comando Stringn.
Se ha insertado un número decimal o hexadecimal
4 Formato de número inválido
inválido.
a) Se han insertado más de dos parámetros para
un comando String o Stringn.
5 Datos excesivos
b) Se ha insertado más de un parámetro para el
comando Char o Set.
6 Datos inválidos Se ha insertado una cadena para un comando Char.
7 Pedido de Terminator de String No se encuentra el carácter de finalización (') de una cadena.
a) Se han insertado menos de dos parámetros
para un comando String o Stringn.
8 Muy pocos datos
b) No se ha insertado parámetro para el
comando Char o Set.
La longitud de la cadena para el comando Stringn es
9 Longitud de cadena inválida
menor a 0 o mayor a 128.
a) Se ha insertado una cadena vacía para el
10 Cadena vacía comando String o Stringn.
b) Se ha insertado un carácter identificado como "
a) Se ha intentado transferir una variable inválida
en la lista de variables internas.
11 Variable desconocida
b) Se ha intentado utilizar una variable de
transmisión en el script de recepción o viceversa.
Error en el disco duro. Contáctese con el
12 Archivo dañado
Service/Ventas.
Error interno. Probablemente, programa dañado.
13 Archivo desconocido Reinstale el programa. Si el problema persiste,
contáctese con el Service/Ventas.
a) Texto SET BEGIN o SET END no escrito.
Identificador incorrecto en el b) Un valor diferente a ANALYSEDATA se ha
14
comando SET transferido como <nombre de grupo> para el
comando SET.
Error en el disco duro. Contáctese con el
15 Archivo de salida dañado
Service/Ventas.
Comando SET no se ha No se ha insertado el SET END en el script.
16
cerrado
17 Demasiados comandos SET Se han insertado más de un comando SET BEGIN.
No se ha encontrado el No se ha encontrado el comando SET BEGIN en el
18
comando SET script.
Un valor diferente a ANALYSEDATA se ha
Variable incorrecta para el
19 transferido como <nombre de grupo> para el
comando SET
comando SET.
Variable no encontrada La variable resaltada que requiere el script antes del
20
antes del comando SET comando SET BEGIN.
La variable debe ser de tipo La variable resaltada debe ser de tipo String, no
21
String Char.
22 Posición ya ocupada Se ha ingresado una posición ya ocupada en la bandeja.
El paciente ya existe pero Se ha ingresado un código ya existente (o ya
23
en listas diferentes ejecutado) en la bandeja, pero la lista es diferente.
Paciente ejecutado pero no Se ha ingresado un código ya procesado sin
24
hay repetición indicación de una repetición o de un clon.
258
TABLA 1 - TRANSMISIÓN
• Si solo se busca el resultado final, siempre refiérase a variables pertenecientes al 2do resultado.
• Si no hay un 2do resultado, entonces las variables tendrán los mismos valores que el 1er resultado.
259
TABLA 1 - RECEPCIÓN
260
(4)
Representa un Control o una Muestra (seleccione una opción):
$0 : Muestra
$1 : Control
‘0’ : Muestra
‘1’ : Control
‘N’ : Muestra
‘Y’ : Control
‘S’ : Muestra
‘C’ : Control
‘NO’ : Muestra
‘YES’ : Control
‘SAMPLE’ : Muestra
'CONTROL' : Control
(5)
Representa un Control conocido o desconocido (seleccione una opción):
$0 : Desconocido
$1 : Conocido
‘0’ : Desconocido
‘1’ : Conocido
‘N’ : Desconocido
‘Y’ : Conocido
‘U’ : Desconocido
'K' : Conocido
‘NO’ : Desconocido
‘YES’ : Conocido
‘UNKNOW’ : Desconocido
‘KNOW’ : Conocido
(6)
Representa el nivel de control (seleccione una opción):
$1 : Nivel 1
$2 : Nivel 2
$3 : Nivel 3
‘1’ : Nivel 1
‘2’ : Nivel 2
‘3’ : Nivel 3
‘L’ : Nivel 1
‘N’ : Nivel 2
‘A’ : Nivel 3
‘LOW’ : Nivel 1
'NORMAL' : Nivel 2
‘ABNORMAL’ : Nivel 3
(7)
Representa si es un clon (seleccione una opción):
$0 : Normal
$1 : Clon
‘0’ : Normal
‘1’ : Clon
‘N’ : Normal
‘Y’ : Clon
‘NOCLONE’ : Normal
‘CLONE’ : Clon
261
TABLA 2 – VARIABLES INTERNAS
262
EJEMPLOS DE SCRIPTS
Stringn #PatientCode|$15
Char #PatientListType
Char #PatientType
Char #PatientClone
Stringn #PatientCupPosition|$2
Stringn #PatientNumberTest|$2
Set #BeginAnalysesData
Stringn #AnalysesCode|$4
Set #EndAnalysesData
Stringn #CheckSum|$3
Stringn #PatientCode|$15
Código de paciente de longitud fija de 15 caracteres
Char #PatientListType
Tipo de lista (Rutina/STAT) como carácter individual
Char #PatientType
Tipo de suero (Suero/Orina) como carácter individual
Char #PatientClone
Identifica si el paciente es o no un clon (carácter individual)
Stringn #PatientCupPosition|$2
Posición del contenedor de suero (cadena de longitud fija de 2 caracteres)
Stringn #PatientNumberTest|$2
Cantidad de tests a ejecutarse (cadena de longitud fija de 2 caracteres)
Set #BeginAnalysesData
Inicio de los códigos de análisis
Stringn #AnalysesCode|$4
Código de análisis de longitud fija de 4 caracteres. Debe ingresarse para cada tipo de test así
como para la cantidad indicada en #PatientNumberTest.
Set #EndAnalysesData
Finalización de los códigos de análisis
Stringn #CheckSum|$3
Suma de verificación (transferida como una cadena de longitud fija de 3 caracteres)
263
Los siguientes ejemplos son la transformación en script de la rutina estándar para la
transmisión de un informe desde el analizador a la computadora huésped:
Stringn #PatientCode|$15
Char #PatientType
Stringn #PatientNumberTest|$3
Set #BeginAnalysesData
Stringn #AnalysesCode|$04
Stringn #AnalysesConcentration2|$7
Set #EndAnalysesData
Stringn #CheckSum|$3
Stringn #PatientCode|$15
Código de paciente de longitud fija de 15 caracteres
Char #PatientType
Tipo de suero (Suero/Orina) como carácter individual
Stringn #PatientNumberTest|$3
Cantidad de resultados a ser enviados (cadena de longitud fija de 3 caracteres)
Set #BeginAnalysesData
Inicio de zona repetida para la cantidad de resultados a ser enviados (véase
#PatientNumberTest)
Stringn #AnalysesCode|$04
Código de análisis de longitud fija de 4 caracteres.
Stringn #AnalysesConcentration2|$7
Concentración referida al código de análisis como en #AnalysesCode (una cadena de longitud
fija de 7 caracteres)
Set #EndAnalysesData
Finalización de zona repetida para la cantidad de resultados a ser enviados
Stringn #CheckSum|$3
Suma de verificación (transferida como una cadena de longitud fija de 3 caracteres)
264
3.7. PROGRAMAS PARA TESTS CON COMUNICACIÓN EN SERIE
3.7.1. Programa COMUNICA.EXE:
Es un simple programa de comunicación para enviar caracteres de orden (mandato) al analizador y
recibir cualquier respuesta.
En el inicio, la única entrada al programa es el número del puerto de comunicación (de 1 a 4).
Se muestra una pantalla azul dividida en dos secciones. En la sección superior, se muestran los caracteres
provenientes del analizador; en la sección inferior, se muestran los caracteres enviados al analizador.
Las únicas teclas especiales que se utilizan son F1 para limpiar la pantalla y F10 para salir del programa.
Los caracteres especiales (con valores menores a 32) se muestran en notación ASCII junto a sus
valores. Por ejemplo, el carácter EOT, valor 4, se muestra como EOT (4).
Para enviar un carácter especial (con valores menores a 32 o mayores a 124), es necesario
mantener presionada la tecla ALT y escribir el valor del carácter a ser enviado utilizando las teclas
numéricas. Por ejemplo, para enviar EOT es necesario mantener la tecla ALT e ingresar el valor 4 a
través de la tecla numérica y luego soltar la tecla ALT.
Baud-Rate………………… 9600
Stop-Bits........................... 1
Paridad……………………….. Ninguna
Hand-Shake……………….. Hardware
265