Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf ·...

132
Interfaz entre SPC y Cargadero de Cisternas TITULACIÓN: Ingeniería Técnica en Informática de Sistemas AUTOR: Iván López Calero TUTOR EMPRESA: Tomás Berasategui Gastón, Bert Duijneveld D TUTOR UNIVERSIDAD: Pere Millán Marco FECHA: Abril / 2008 Departament d’Enginyeria Informàtica i Matemàtiques

Transcript of Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf ·...

Page 1: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

Interfaz entre SPC y Cargadero de Cisternas

TITULACIÓN: Ingeniería Técnica en Informática de Sistemas

AUTOR: Iván López Calero TUTOR EMPRESA: Tomás Berasategui Gastón, Bert Duijneveld D TUTOR UNIVERSIDAD: Pere Millán Marco

FECHA: Abril / 2008

Departament d’Enginyeria Informàtica i Matemàtiques

Page 2: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 2 -

ÍNDICE

1. DESCRIPCIÓN DE LA EMPRESA .............................................................................................. - 5 -

1.1 REPSOL YPF ........................................................................................... - 5 - 1.2 COMPLEJO INDUSTRIAL REFINO – LA POBLA DE MAFUMET (TARRAGONA) ................ - 8 -

2. UBICACIÓN DEL PROYECTANTE DENTRO DE LA EMPRESA .......................................... - 9 -

3. DESCRIPCIÓN DEL PROYECTO .............................................................................................. - 10 -

3.1 ESPECIFICACIÓN ............................................................................................ - 10 - 3.2 ESQUEMA ..................................................................................................... - 14 - 3.3 OBJETIVOS ................................................................................................... - 16 -

4. DECISIONES DE DISEÑO ......................................................................................................... - 17 -

4.1 MEZCLADOR DE PRODUCTOS .............................................................................. - 17 - 4.2 HARDWARE QUE CONTROLA LAS BÁSCULAS ............................................................ - 18 - 4.3 INTERFAZ DE COMUNICACIÓN CON SPC ............................................................... - 18 - 4.4 SERVICIO QUE GUARDA DATOS EN TIEMPO REAL ..................................................... - 18 - 4.5 APLICACIÓN QUE MUESTRA DATOS EN TIEMPO REAL ................................................. - 19 -

5. HERRAMIENTAS USADAS ........................................................................................................ - 20 -

5.1 ENTORNO DE PROGRAMACIÓN. .......................................................................... - 20 - 5.2 LANTRONIX MSS100 ................................................................................. - 22 - 5.3 TECNOIL ACCULOAD III-X. ........................................................................... - 24 - 5.3.1 ESPECIFICACIÓN GENERAL DEL FABRICANTE. ............................................................ - 24 - 5.3.2 PLANTEAMIENTO Y RESOLUCIÓN ESQUEMÁTICA. ......................................................... - 26 - 5.3.3 SIMULADOR DE CARGA. .................................................................................... - 28 - 5.3.4 PROTOCOLO DE COMUNICACIÓN. ......................................................................... - 30 - 5.3.5 CONFIGURACIÓN DE LANTRONIX. ..................................................................... - 33 - 5.3.6 CONFIGURACIÓN DETALLADA. ............................................................................. - 35 - 5.3.6.1 Dynamic Displays ............................................................................... - 36 - 5.3.6.2 Print Menu ......................................................................................... - 37 - 5.3.6.3 Program Mode Menu ........................................................................... - 37 - 5.3.6.4 Diagnostics Menu ................................................................................ - 41 -

5.3.7 INSTRUCCIONES NECESARIAS. ............................................................................ - 42 - 5.3.7.1 Instrucción AB – Allocate Blend Recipes ................................................. - 42 - 5.3.7.2 Instrucción SB – Set Batch ................................................................... - 44 - 5.3.7.3 Instrucción SA – Remote Start ............................................................. - 46 - 5.3.7.4 Instrucción EQ – Enquire Status ........................................................... - 47 - 5.3.7.5 Instrucción RB – Request Batch Totals ................................................... - 48 - 5.3.7.6 Instrucción SP – Remote Stop .............................................................. - 50 - 5.3.7.7 Instrucción ET – End Transaction .......................................................... - 51 -

5.3.8 APLICACIÓN DE PRUEBA. .................................................................................. - 52 - 5.3.8.1 Especificación y diseño ........................................................................ - 52 - 5.3.8.2 Implementación.................................................................................. - 53 - 5.3.8.3 Prueba con el simulador de carga ......................................................... - 58 -

5.4 SERTEC IT8000 & IT9000E ........................................................................ - 62 - 5.4.1 ESPECIFICACIONES GENERALES Y SIMULADOR. .......................................................... - 62 - 5.4.2 ESPECIFICACIÓN DE LA LIBRERÍA. ........................................................................ - 65 - 5.4.3 APLICACIÓN DE PRUEBA. .................................................................................. - 67 - 5.4.3.1 Especificación e Implementación ........................................................... - 67 - 5.4.3.2 Prueba .............................................................................................. - 69 -

Page 3: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 3 -

6. IMPLEMENTACIÓN ..................................................................................................................... - 73 -

6.1 INTERFAZ ..................................................................................................... - 73 - 6.1.1 ACCULOAD.DLL ............................................................................................. - 73 - 6.1.2 API ACCULOAD ............................................................................................ - 84 - 6.1.3 API BÁSCULAS ............................................................................................. - 89 - 6.1.4 ACCUBAS.OCX .............................................................................................. - 90 - 6.1.5 SIMULADOR DE SPC ....................................................................................... - 99 - 6.2 VISORES .................................................................................................... - 102 - 6.2.1 SERVICIO DE DATOS EN TIEMPO REAL. ................................................................. - 102 - 6.2.2 VISOR DE PESOS EN TIEMPO REAL. ..................................................................... - 106 -

7. PRUEBAS ..................................................................................................................................... - 108 -

7.1 SIMULACION ........................................................................................... - 108 - 7.1.1 PRUEBAS Y CAPTURAS CARGANDO PROPELENTES. ..................................................... - 108 - 7.1.2 FICHERO DE LOG. ........................................................................................ - 121 - 7.1.3 PRUEBA A ERRORES. ..................................................................................... - 122 -

8. APORTACIONES DEL PROYECTO A LOS CONOCIMIENTOS ....................................... - 130 -

9. APORTACIONES DE LOS ESTUDIOS AL PROYECTO ..................................................... - 131 -

10. CONCLUSIONES...................................................................................................................... - 132 -

Page 4: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 4 -

Page 5: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 5 -

1. DESCRIPCIÓN DE LA EMPRESA

1.1 REPSOL YPF

Repsol YPF es una empresa internacional integrada de petróleo y gas, con actividades en más de 30 países y líder en España y Argentina. Es una de las diez mayores petroleras privadas del mundo y la mayor compañía privada energética en Latinoamérica en términos de activos. Exploración y Producción

El objetivo de Repsol YPF en sus actividades de exploración y producción de petróleo y gas natural, es el crecimiento rentable y diversificado. Las bases de esta estrategia son:

• el crecimiento en producción y reservas • la diversificación geográfica de la actividad • la excelencia operativa manteniéndose como un operador de bajo coste y la

rentabilidad con un incremento de los márgenes unitarios medios

La producción total de hidrocarburos de la compañía supera los 1,1 millones de barriles equivalentes de petróleo al día.

Page 6: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 6 -

Refino y Marketing

Repsol YPF es el mayor refinador de petróleo de España y Argentina, estando presente además en Perú y Brasil. Opera nueve refinerías con una capacidad de refino de más de 1,2 millones de barriles por día. En cuanto a las actividades de marketing, Repsol YPF comercializa sus productos petrolíferos en 12 países de Europa y Latinoamérica a través de una amplia red de más de 6.800 puntos de venta. Es el operador líder en Argentina y en España y uno de los principales en Perú y Ecuador. En el negocio de los gases licuados del petróleo (GLP), con unas ventas anuales de más de tres millones de toneladas, Repsol YPF es la tercera compañía más grande del mundo y una de las más eficientes.

Química

La actividad petroquímica de Repsol YPF se desarrolla principalmente en España, Argentina y Portugal. Los mercados más importantes son Europa y los países del Mercosur. Este negocio, que cuenta con un alto nivel de integración con el refino y con la producción de gas natural, dispone de tecnología propia en productos de alto valor añadido.

Page 7: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 7 -

Gas y electricidad

Repsol YPF distribuye gas natural, directamente o a través de sus filiales, a más de 9 millones de clientes en España y Latinoamérica, de los cuales más de 4,5 están en Latinoamérica. Las ventas totales de gas natural ascienden a más de 36 billones de metros cúbicos. Más del 60% de estas ventas se generan en España.

Responsabilidad Corporativa

Para Repsol YPF, la responsabilidad corporativa constituye su marco de actuación respecto a los grupos de interés con los que la compañía se relaciona: accionistas, clientes, socios y proveedores, empleados, y la sociedad en general. Ese marco de actuación se fundamenta en la ética y la transparencia; el cuidado del medio ambiente y la seguridad, y el cumplimiento de nuestro compromiso con nuestros empleados y la sociedad. Las personas que integran Repsol YPF constituyen la base sobre la que se sustentan todas las actividades y negocios de la organización. La compañía cuenta con una plantilla que supera los 35.000 empleados, presentes en más de veinte países.

Page 8: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 8 -

1.2 Complejo Industrial Refino – La Pobla de Mafumet (Tarragona)

REPSOL YPF – Refino Tarragona

La actividad tecnológica en el área de Refino abarca toda la cadena de producción en la refinería, desde las materias primas (crudos), a los procesos de transformación (destilación, platforming, hidrodesulfuración, FCC, etc) requeridos para conseguir el máximo aprovechamiento del crudo, obteniendo los productos que demanda el mercado (LPG, gasolinas, gasóleos, fuelóleos, etc) que deben cumplir las más estrictas especificaciones de calidad.

Todo ello promoviendo el desarrollo sostenible a través de procesos más seguros, respetuosos con el medioambiente y energéticamente más eficaces en nuestras Refinerías.

Medios y herramientas de trabajo

Para la realización de esta actividad, en la que trabajan más de 50 personas, se cuenta entre otros con:

• Medios experimentales tanto en laboratorios con las más modernas técnicas de análisis de productos (crudos, fracciones, otros productos, etc) y catalizadores como en instalaciones piloto donde podemos estudiar y reproducir la práctica totalidad de los procesos de refino.

• Software tanto de desarrollo propio (RepCAPT y RepHDS) como comercial debidamente adaptado a nuestras unidades, productos y procesos.

Resumen por líneas de trabajo

Entre las principales líneas de trabajo, cabe destacar:

• Evaluación de crudos. • Procesos de conversión. • Procesos de reformado e isomerización. • Procesos de hidrotratamiento. • Desarrollo y adaptación de modelos para aplicaciones en control avanzado,

seguimiento de unidades, etc, de aplicación en las líneas de trabajo anteriores.

Page 9: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 9 -

2. UBICACIÓN DEL PROYECTANTE DENTRO DE LA EMPRESA Dentro de la refinería hay dos oficinas principales, la técnica y la general, dos paneles de control, un laboratorio, etc. en los cuales trabajan los profesionales de cada sección. Está dividida en varias secciones dentro de cada área: DIRECCIÓN, RELACIONES PETROQUÍMICAS, RELACIONES EXTERNAS Y COMUNICACIÓN, COMITÉ DE EMPRESA. PRODUCCIÓN: Combustibles, Olefinas, Movimientos y entregas, Energías, Planificación y control, Procesos, Control Avanzado y Sistemas. SERVICIOS TÉCNICOS: Laboratorio, Seguridad, Calidad y medio ambiente. INGENIERÍA Y MANTENIMIENTO: Control y contratos, Proyectos y obras, Inspección, Materiales, Mantenimiento. GESTIÓN DE RECURSOS: Administración y control, Gestión de recursos, Delegación de servicios. Mi ubicación principal en el desarrollo del proyecto reside en las oficinas técnicas, formando parte de la sección de Control Avanzado y Sistemas (C.A.S.), concretamente en la subsección de Sistemas. En ocaciones se ha ido al cargadero de cisternas, para visionar las básculas, donde irán ubicados los PLC, los instrumentos del operador que realizará la carga en la caseta, los tanques de producto a cargar, etc.

Page 10: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 10 -

3. DESCRIPCIÓN DEL PROYECTO

3.1 Especificación

Concepto Debido a las nuevas necesidades de carga y a la capacidad de automatización, se desea implantar e implementar una interfaz entre una base de datos, dos básculas de pesaje y un mezclador de productos. Las recetas que cargaremos serán:

• Isobutano (100% Isobutano) • Propel 45 (100% Propel 45) • Propel 35 (65% Isobutano y 35% Propel 45)

La base de datos pertenece a una aplicación llamada SPC, ubicada en un servidor en el CPD (Centro de Protección de Datos) y que permite gestionar la producción de la refinería de Tarragona. ¿Qué funcionalidades ofrece SPC?

• Existencias: se calculan las existencias de todos los productos almacenados en los tanques, esferas y silos de Planta.

• Movimientos de productos: se calculan las cantidades de productos producidos por las Unidades de Planta, las mezclas de crudo a procesamiento, las mezclas de componentes a los productos comerciales finales. Los cálculos se realizan a través de las producciones y consumos de las Unidades y de las variaciones de existencias en tanques y esferas.

• Entradas y Salidas: se registran las cantidades de materias primas recibidas y productos entregados, dando las bases para emitir comprobantes de facturación de los proveedores y facturación a los clientes, así como información fiscal.

• Centro de Expediciones: se realiza un control de las operaciones de carga de cisternas, comprobándose los permisos de circulación de estas, de los conductores, las cargas máximas y contabilizándose las efectuadas.

• Balances de materia: se calculan los balances globales del Complejo y de las Unidades a partir de los datos obtenidos en las funciones anteriores. Se realizan cálculos de reconciliación estadística de datos para compensar los errores aleatorios de los instrumentos de medida.

El mezclador de producto es de la firma TECNOIL, concretamente el modelo Accuload III-X, que nos permitirá automatizar la carga de cualquiera de las 3 recetas definidas anteriormente. El hardware que controla las básculas de pesaje nos lo ha proporcionado la empresa SERTEC, con el cual podremos obtener el peso en báscula, además de poder cargar recetas formadas por un único producto.

Page 11: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 11 -

Comunicación entre la BBDD de SPC y la interfaz Para realizar el proceso de carga, debe haber un operador que ejecuta el formulario correspondiente al cargadero desde la aplicación SPC, y otro que este en el cargadero. La carga se podría realizar de forma totalmente automática, pero se ha decidido tener que teclear la matrícula en el teclado de la báscula por medidas de seguridad, puesto que si sólo dependiera del operador que está trabajando con el formulario de SPC, un error en inserción de la matricula, supondría cargar un cantidad errónea para ese camión, situación que podría resultar peligrosa. Inicialmente, se tenía previsto interactuar con la BBDD mediante el protocolo MessageQ, firmado por la empresa BEA. No obstante, debido al poco flujo de mensajes que vamos a usar, y a fin de facilitar la comunicación con SPC, se ha decidido implementarla mediante un control Active X (*.ocx). El control Active X sigue el siguiente protocolo:

• El operador ejecutará la aplicación SPC, se irá a la pestaña que ofrece las posibilidades de carga.

• Solicitará el “Peso Inicial”, habiendo indicado previamente el número de

báscula (1 o 2), la matrícula y el punto de carga. En ese instante, SPC llamará el método siguiente en el control Active X:

Pesada_Inicial (Tipo_Pesada, Numero_Bascula, Matricula, Punto_Carga, PesoInicial, Aviso) El operador del cargadero, como medida de seguridad, deberá introducir la matrícula del camión mediante el teclado del hardware que controla la báscula. En caso de que no coincidan las matrículas, no se retornará un valor de peso válido. El valor del peso leído de la báscula se retorna hacia SPC mediante el parámetro PesoInicial.

• Una vez SPC haya obtenido un peso inicial válido y se haya verificado que las matrículas corresponden, cuando el operador guarde la carga desde el formulario, SPC accederá a la BBDD y obtendrá la cantidad a cargar para dicho camión. Una vez obtenida, llamará al siguiente método del control Active X:

Cantidad_a_Cargar (Tipo_Pesada, Numero_Bascula, Matricula, Punto_Carga, Cantidad_Cargar, Aviso) En la cual, dependiendo el parámetro Numero_Bascula, se enviará a cargar mediante el hardware de las básculas (Numero_Bascula=1) o Accuload (Numero_Bascula=2), junto al peso a cargar en Kilogramos por el parámetro Cantidad_Cargar y la receta (Punto_Carga). El hardware debe ser programado para que inicie la carga con los parámetros descritos.

• El operador del cargadero, avisará al operador que está delante del formulario de SPC cuando la carga haya finalizado. En ese instante, el

Page 12: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 12 -

operador de SPC deberá solicitar el “Peso Final”, en el cual mediante el control Active X se llamará al siguiente método:

Pesada_Final (Tipo_Pesada, Numero_Bascula, Matricula, Punto_Carga, PesoFinal, Aviso)

SPC obtendrá el valor del peso final cargado por el parámetro PesoFinal.

En caso que el operador de SPC solicite el peso final antes de que la carga haya finalizado, no se obtendrá un valor válido y se mostrará un aviso.

Notas importantes:

• Todos los parámetros de los métodos anteriores deben ser cadenas de caracteres.

• El parámetro Aviso, deberá contener información relevante sobre si ha

habido algún problema con la comunicación hardware.

• Todos los movimientos deberán quedar registrados en un fichero de Log. Comunicación con el mezclador A partir de las especificaciones que nos proporciona el fabricante, debemos implementar el protocolo de comunicación con Accuload, para que sea capaz de cargar una cantidad en concreto (en Kg), de una determinada receta (Isobutano, Propel 45, Propel 35). Comunicación con las básculas El protocolo de comunicación con las básculas nos lo ha proporcionado la misma empresa, encapsulado en una librería dinámica (*.dll). Guardar y monitorizar datos en tiempo real Debemos crear un servicio que arranque automáticamente, ubicado en el mismo servidor de SPC también, y que vaya actualizando los datos en tiempo real sobre el estado de la carga. Los datos en tiempo real, los escribiremos en una base de datos de otro servidor llamado PI, que es el que contiene todos los datos en tiempo real de la refinería, tal como presiones, temperaturas, volúmenes, peso, etc. Además, hay que realizar una aplicación que pueda ejecutarse desde cualquier PC, que acceda a los datos correspondientes del PI y vaya monitorizando la información.

Page 13: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 13 -

Tareas a realizar Las tareas principales a desarrollar son:

• Implementación de un control Active X (*.ocx), que se usará como interfaz entre SPC, las básculas y el mezclador, a fin de ser integrada en un formulario de Oracle. Además, se debe crear un fichero de Log con todos los eventos realizados por el operador en referencia a la carga.

• Implementación versátil de la comunicación con el mezclador. • Incorporar la comunicación con el mezclador, y la que nos proporciona el

fabricante de la báscula, en nuestro control Active X. • Implementación de una aplicación que simule el funcionamiento de SPC en

el formulario de carga, usando nuestra interfaz implementada en el control Active X.

• Implementación de un servicio del sistema para el servidor de SPC, que guarde los datos de la carga en tiempo real en el servidor PI.

• Implementación de una aplicación para monitorizar los datos en tiempo real. El lenguaje de programación debe ser Visual Basic 6.

Page 14: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 14 -

3.2 Esquema

Page 15: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 15 -

Si analizamos con detenimiento el esquema simplificado anterior, podemos ver el conexionado y el control entre los PCs, PLCs, básculas y tanques de producto. Puesto que se trata de un sistema, en el que ante todo se busca seguridad, se implementa una doble seguridad para el control de las válvulas que entregan producto, de las cuales el control y/o accionamiento sobre las mismas dependerá de la báscula sobre la que realizaremos la carga. Báscula 1 (K05) Permite cargar Etileno (Producto 1), Isobutano (Producto 2) y Propel 45 (Producto 2). Para discriminar entre Isobutano y Propel 45 (los dos corresponden al producto 2), el operador obturará un ramal de producto u otro, accionando el disco ciego que sea necesario en cada caso. La carga será controlada por el PLC Micromotion y por el controlador de las básculas. Con éste último será con el que interactuaremos desde SPC para preparar la carga. Una vez este preparado para cargar, enviará un permisivo (permiso) al PLC Micromotion, para que éste accione la válvula de apertura del ramal que contiene el producto a cargar. El corte o cierre de la válvula los pueden realizar los dos PLC, para mantener la doble seguridad comentada anteriormente. El primero de los dos en detectar el fin de carga cierra las válvulas, y por lo tanto, finaliza la carga. Báscula 2 (K06) Permite cargar Propel 35 (Producto 2), compuesto por una mezcla al 65% de Isobutano y al 35% de Propel 45, además de todos los productos que permite cargar la báscula 1. La discriminación entre Isobutano, Propel 45 y Propel 35 la realiza el mezclador de producto, gobernando las válvulas de Propel 45 e Isobutano. La carga de Propel 35 se realizará de forma secuencial, en primer lugar se entregará el porcentaje de un producto y cuando éste finalice, se entregará el porcentaje restante del otro producto. La apertura inicial de la válvula que controla el ramal de producto irá a cargo del mezclador, en lugar del PLC Micromotion como en la báscula 1. Para iniciar la carga, el mezclador esperará un permisivo del controlador de la báscula indicando que ya esta preparado. En este caso SPC interactuará con los dos PLCs. El cierre de la válvula del ramal que entrega el producto, lo realizará el primero de los dos PLC que lo detecte, el mezclador o el controlador de la báscula.

Page 16: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 16 -

3.3 Objetivos

Como objetivos principales propongo lo siguiente:

• Desarrollar la interfaz de tal forma que sea lo más versátil, flexible y eficiente posible.

• Asegurar una total robustez. • Clarificar y comentar todo el código implementado.

• Documentar y explicar cada paso realizado referente a las configuraciones.

• Verificar el correcto funcionamiento de la interfaz.

Page 17: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 17 -

4. DECISIONES DE DISEÑO

4.1 Mezclador de productos

En primer lugar, y siguiendo el mismo orden que hemos establecido en la implementación, exponemos la decisiones de diseño referentes al mezclador de producto, al que a partir de ahora llamaremos Accuload. Puesto que se nos pide versatilidad, hemos implementado una DLL (Dynamic Link Libray), estándar de Win32, que se encarga de todo el proceso de comunicación con Accuload (Accuload.dll) a nivel de paquete de datos. Las ventajas de haber realizado la implementación en una dll son múltiples:

• Una DLL es totalmente independiente de la aplicación, no importa en que lenguaje haya sido programada, es interpretada en código binario.

• Una función definida dentro de una DLL estará disponible para cualquier aplicación del entorno Windows.

• Se puede incorporar a cualquier entorno de programación, sin necesidad de saber como está implementada, únicamente conociendo sus cabeceras.

• Se reduce el tamaño de las aplicaciones que utilizan la DLL, gracias a la reutilización de su código.

• Reduce el tiempo de compilación y/o carga de la aplicación, debido al menor tamaño del código.

• Tamaño en disco más reducido, en consecuencia ahorramos espacio.

Como punto débil podemos decir, que la aplicación creará más dependencias, puesto que deberemos hacer referencia a la DLL para poder compilar. De todas maneras, en nuestro caso no supondrá ningún problema, ya que todas las librerías que necesitamos vienen con el sistema operativo. Todo el código fuente ha sido comentado. De todas formas, centrándonos en la implementación de nuestra librería, debemos hacer hincapié en ciertos detalles:

- A nivel de dependencias tenemos wsock32.dll, ws2_32.dll, kernel32.dll, icmp.dll, que vienen implementadas en cualquier versión de Windows y ubicadas en el directorio system32 del sistema operativo Windows.

- La comunicación con Accuload se establece mediante sockets, usando directamente las funciones que nos proporciona Windows para ello. También podríamos usar la API de VB6 de más alto nivel (Winsock), pero así eliminamos dependencias y optimizamos nuestra DLL.

- Establecemos un socket TCP/IP orientando a la conexión. - Hemos implementado una pequeña función que usa el paquete icmp, y que

nos permitirá hacer ping. - Enviamos una trama de datos con el LRC calculado y lo volvemos a calcular

al recibirla. En caso de que haya algún error, usamos recursividad en la función de envió/recepción hasta un máximo de 10 intentos, para obtener la trama íntegra y no bloquear la comunicación en caso de que haya alteración de datos.

También se ha implementado una API (Aplication Program Interface) para Visual Basic 6 que usa dicha DLL (AcculoadAPI.bas), a fin de simplificar, facilitar el acceso al hardware y refinar los códigos de error.

Page 18: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 18 -

4.2 Hardware que controla las básculas

En cuanto al hardware que controla las básculas de pesaje, no hemos podido interactuar directamente con él, puesto que la empresa SERTEC que nos lo ha proporcionado no ha incluido las especificaciones del mismo, tan sólo nos ha dado implementada una librería DLL-ActiveX que se encarga de comunicar con la báscula. Esta librería (sckIT9e.dll) sólo es válida para su uso en Visual Basic, puesto que no es una DLL estándar de Win32, y no es posible usarla desde otro lenguaje de programación, a cambio de poder usar código de más alto nivel dentro de la misma. De todas maneras, hemos implementado una pequeña API (BasculasAPI.bas) que permite refinar los códigos de error que nos retorna la DLL-ActiveX.

4.3 Interfaz de comunicación con SPC

Se ha desarrollado mediante un Control ActiveX llamado AccuBas.ocx. El control incorpora, además de las funciones especificadas (Pesada_Inicial, Cantidad_a_Cargar, Pesada_Final) una serie de métodos y funciones complementarias que permiten estructurar y simplificar el código. Incorpora:

• Acceso al hardware del mezclador de productos, mediante la API AcculoadPI.bas, que a su vez accede al hardware con las llamadas de la librería Accuload.dll que hemos implementado.

• Acceso al hardware que controla las básculas mediante una instancia de la clase cIT9e, contenida en la DLL-ActiveX (sckIT9e.dll) implementada por la empresa SERTEC.

• Acceso al servidor de datos en tiempo real mediante la API PIAPI.bas (piapi32.dll), para actualizar el tag sobre el estado de carga de Accuload (BAS2ACCU) y sobre el estado bloqueado/desbloqueado (BASLOCK) para acceder a las funciones que comunican con el hardware de la báscula.

• Robustez en el control de errores. No se permite una secuencia ilógica de las operaciones de carga, ni de la inserción campos vacíos o no válidos.

• Robustez si se rompe la comunicación. Es capaz de reconectar con el hardware de la báscula y/o mezclador cuando así lo requiera.

• Fichero de Log que guarda todos los eventos que ha realizado el operador contra el SPC. Reconoce la acción seleccionada, los valores de los parámetros tanto de entrada como de retorno, y una breve descripción de lo que ha sucedido en cada caso.

4.4 Servicio que guarda datos en tiempo real

Tal y como se ha especificado, hemos implementado un servicio que es capaz de guardar datos relevantes sobre las básculas en el servidor PI. Los datos que refrescamos cada segundo son los correspondientes al peso en actual en las dos básculas (BAS1PES y BAS2PES), siempre y cuando el tag que controla el permisivo de acceso (BASLOCK) esté desbloqueado (0).

Page 19: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 19 -

4.5 Aplicación que muestra datos en tiempo real

Aplicación ejecutable desde cualquier PC de la refinería. Se trata de un formulario con 4 visores, que muestra el peso actual de las básculas 1 (BAS1PES) y 2 (BAS2PES) del cargadero de cisternas. También muestra si Accuload está en carga o no (BAS2ACCU), y el peso actual en la báscula de azufre* (BAS3PESO), respectivamente. * Peso escrito por otra aplicación en PI.

Page 20: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 20 -

5. HERRAMIENTAS USADAS

5.1 Entorno de Programación.

Los lenguajes oficiales de REPSOL-YPF en entornos de programación son C/C++ y Visual Basic 6. Puesto que la mayoría de aplicaciones de la refinería están hechas en VB6, se optó por este lenguaje. Las ventajas de dicho lenguaje son múltiples. No obstante, también tiene una serie de desventajas. A continuación, veremos las características más relevantes. Ventajas:

• Lenguaje fácil de aprender, permite crear aplicaciones para Windows en poco tiempo. En otras palabras, permite un desarrollo eficaz y menor inversión en tiempo que otros lenguajes.

• Permite la utilización de formularios (Forms) tanto a partir de recursos (como en otros lenguajes) como utilizando un IDE para diseñarlos.

• Posibilidad de desarrollar y ejecutar aplicaciones de Visual Basic 6.0 en Windows Vista sin realizar cambios en la mayoría de los casos.

Desventajas:

• Los ejecutables generados son relativamente lentos en Visual Basic 6.0 y anteriores al ser código pseudo-interpretado.

• No permite programación a bajo nivel ni incrustar secciones de código en ASM.

• No permite el manejo de memoria dinámica, punteros, etc. como parte del lenguaje.

• Inicialmente, no permite generar librerías dinámicas (DLL) nativas Win32, hay que reconfigurar el enlazador (LINK) en el proceso de compilación.

Como acabamos de mencionar, Visual Basic 6 no nos permite crear, inicialmente, librerías de vínculos dinámicos nativas (DLL Standard), hecho que limitaría mucho la funcionalidad de la DLL. He obtenido el código de un nuevo enlazador, descargado de la página www.canalvisualbasic.net .y que se encarga de comprobar, a partir de un archivo *.def (explicado posteriormente) si se debe generar una DLL ActiveX o una DLL Win32.

He seguido los siguientes pasos, tal y como se indica en la información obtenida: 1 – Compilar el nuevo código descargado, con VB6 y generar el ejecutable con nombre LINK.exe. 2 – En el directorio de instalación de VB6, renombrar el linkeador original LINK.EXE a LINKlnk.exe.

Page 21: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 21 -

3 – Copiar el nuevo LINK.exe generado del código descargado, en el directorio de instalación de VB6. 4 – Finalmente, el directorio de instalación deberá contener el ejecutable LINKlnk.exe (el antiguo y original LINK.exe) y el nuevo generado, llamado LINK.exe. Una vez realizados estos pasos, VB6 será capaz de compilar una DLL Win32, obtenida de un proyecto DLL-ActiveX, previamente implementando las funciones y métodos en un módulo (*.bas), y usando un fichero (*.def), ubicado en el directorio donde tengamos el proyecto, que contendrá los nombres de los métodos y funciones implementadas en el módulo. Veremos el proceso detalladamente en la creación de nuestra DLL.

Page 22: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 22 -

5.2 LANTRONIX MSS100

Por motivos de infraestructura de cableado y flexibilidad, no resulta viable realizar la conexión directamente desde un único PC hasta el hardware mediante cable RS232, por lo que usaremos un convertidor RJ-45/Ethernet a Serial/RS232 de la marca LANTRONIX, concretamente el modelo MSS100. Especificaciones

Interfaz Serie

• Interfaz: RS-232 • Conector: 1 DB25 macho DTE • Velocidad: 300 bps hasta 230 Kbps • Caracteres: 7 o 8 bits • Stop Bits: 1 o 2 bits • Paridad: Par, Impar, señalizada, espaciada, ninguna.

Control de Flujo

• XON/XOFF (Software) • RTS/ETS (hardware)

Red

• Standard: TCP/IP, IPX, LAT • Interfaz: 1 Puerto Ethernet 10/100 Mbps • Conector: RJ-45

Protocolos Soportados

• TCP/IP, UDP, HTTP, FTP, TFTP, SNMP, ICMP, EZWebCon®, Telnet, LAT logins y DHCP

Controles MODEM

• RTS, CTS, DSR, DTR Dispositivos Soportados

• Soporta cualquier puerto serie asíncrono RS-232 que requiera acceso a Ethernet

Page 23: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 23 -

Software

• Flash ROM Standard: se puede descargar desde un TCP/IP host (descarga TFTP), DECNET host (descarga MOP), servidor de ficheros NetWare o EZWebCon®

LEDs de diagnóstico

• Link • OK • Power • 100Base-T • Network Activity

Compatibilidad

• Ethernet: Version 2/IEEE 802.3/IEEE 802.3u Aprobaciones de Agencia

• FCC (A), C/UL, TUV, CE (B) Requisitos de Alimentación

• 5VDC @ 0.8ª (Adaptador externo AC incluido) Características Ambientales

• Temperatura de funcionamiento: 5º C - 50º C • Temperatura de almacenamiento: -40º C - 66º C

Características Físicas

• Dimensiones (Largo, Ancho y Alto): 9.0 x 6.4 x 2.3 cm • Peso: 0.35Kg

Exigencias del Embalaje de Transporte

• Dimensiones (Largo, Ancho y Alto): 24.2 x 19.1 x 11.5 cm • Peso: 1.50 Kg

Page 24: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 24 -

5.3 TECNOIL Accuload III-X.

5.3.1 Especificación general del fabricante.

The Smith MeterTM AccuLoad III-X is a microprocessor based electronic preset/blending instrument that supports up to 50 recipes on six load arms (six dual channel meters total) and six products per load arm. It is configurable to support a variety of user applications. In addition, the firmware is able to detect the absence of the BSE expansion board and enforce a limit of three meters. The firmware is also able to detect whether a second display is available and use the second display only if present. If limited to one display, the number of arms is limited to two. The AccuLoad III-X offers six options: Straight product, sequential blending, ratio blending, side-stream blending, hybrid blending and unloading. If ratio, sequential blending or hybrid is selected, the operador enters the number of products to be associated with the load arm. Straight product arms must be programmed for one product. Side-stream product arms must be programmed for two products. If multiple arm operation is selected, the process is repeated for each load arm defined. Side-stream blending is a two-product ratio blender where the minor of two products is metered and is controlled by a valve. The main product is freeflowing. Another meter and its corresponding control valve are located downstream from where the two products merge. Two to six meters may be used to create a ratio blend. The AccuLoad III-X allows any combination of ratio blending arms to be supported with the available meter inputs. (This limits the number of ratio blending arms to three two-product arms maximum. Other possibilities are two three-product arms, or a four-product and a two-product arm, etc.) For purposes of determining valid arm combinations, a sidestream blending arm can be considered a twoproduct ratio blending arm, as both require the same resources. For applications with straight product delivery or sequential blending, each load arm may be configured independently for blending activity and product number. Two to six meters may be used to create a Irbid blend. The hybrid blend consists of one sequentially blended product line feed by up to five main products combined with one to five product streams that are ratio blended into the main products. Irbid blending is ideal for applications where two or more diesel products are being blended sequentially combined with bio mass which it is recommended to be ratio blended.

Optimum measurement accuracy is attained through continuous linearization of the meter factor with changes in flow rates. The AccuLoad III-X is also capable of

Page 25: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 25 -

maintaining back pressure on the measurement system using either automatic flow optimization or a pressure transmitter. Volumetric correction is calculated directly from published API equations providing precise volumetric measurement results. Precise temperature, pressure compensation, and density correction are options that are available in the instrument. The dynamic real-time display of the current actual operating conditions of the system provides the operador with valuable system information while the system is operating. The AccuLoad III-X provides several loading system control functions: Additive injection, pump control, alarm control, set stop, valve control, back pressure control, automatic adjustment of final trip point, and flow rate controlled injector. Other significant features are as follows:

• One display on AccuLoad III-S hardware; two displays on AccuLoad III-Q hardware. When six arms are programmed for use, all six arms can be viewed on the two displays.

• Up to 24 different additive injectors can be simultaneously paced or controlled through communications.

• The AccuLoad III-X interfaces with Add-Pak smart additive injector systems. Each Add-Pak system incorporates up to ten metered injectors along with digital outputs to energize additive pumps and injector solenoids. The AccuLoad IIIX controls the Add-Pak injectors via 232 or 485 communications, and can interface with a maximum of two Add-Pak systems.

• The AccuLoad III-X will monitor and totalize the volume of additive injected by piston-type additive injectors or smart injectors.

• The AccuLoad III-X, if so programmed, Hill automatically calculate and adjust the additive pulse output to be stopped at the first trip point of the product with the same number of pulses. This will have the same effect as if the additive output was stopped at the end of the batch.

• A contact is available to start and stop a puma or other electrically operated equipment as well as a program code that will set the time delay of that start or stop.

• Two programmable alarm contacts are available. They operate independently and can be configured to close on a Valve Fault, on any alarm, or not at all.

• The AccuLoad III-X contains the intelligence to control a Smith Model 210 or 215 Digital Control Valve, or an analog valve, that will provide low flow start and multi-stage shutdown.

• The AccuLoad III-X contains the intelligence to automatically reduce the flow of product and ensure the flow is within the pumping capabilities of the system. Once the flow is able to continu at the programmed high flow rate, the AccuLoad III-X will increase the flow to programmed values.

• The AccuLoad III-X, if so programmed, Hill automatically adjust the final trip point of the batch (Preset).

Critical functions such as minimum flow rate, exceso flow rate, temperature detection, preset volume overrun, and memory retention, are monitored by internal circuits. Any failure will signal closure of the valve. Should the valve fail to close within a programmable period after having been signaled, a contact is closed. This can be wired through external relays to shut off the pump and/or kill power circuits. Environmental fluctuations within specified limits have virtually no effect on the operation of this control system. AccuLoad III is available in an explosion- proof housing for hazardous locations.

Page 26: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 26 -

5.3.2 Planteamiento y resolución esquemática.

A fin de capacitar al sistema de automatización en la carga, poder mezclar productos, y establecer más seguridades, usaremos ACCULOAD III-X, del fabricante TECNOIL. Únicamente usaremos Accuload en la báscula 2. Típicamente, las recetas a cargar serán las siguientes:

• Isobutano 100% • Propel 45 100% • Propel 35 (65% Isobutano / 35% Propel 45)

Descripción Operativa:

• Al iniciar el control ActiveX (AccuBas.ocx), se establece la conexión con Accuload, al cual nos conectamos mediante el conversor RJ45/Ethernet a Serie/RS-423.

• El operador selecciona desde SPC la opción peso inicial (llama al método

Pesada_Inicial de AccuBas.ocx), escribiendo la matrícula, el número de báscula y el producto a cargar.

• Si el peso inicial retornado es válido, cuando el operador lo solicite SPC

calculará automáticamente el valor del peso a cargar, según los datos introducidos en el peso inicial, llamando al método Cantidad_Cargar.

• Únicamente si la báscula seleccionada es la 2, y si la receta a cargar

contiene propelentes (Isobutano, Propel45 o Propel35), entra en acción Accuload, que toma el control de las válvulas.

• Se le envía la receta a cargar.

• Se le envía el peso a cargar (en Kg).

• Se espera confirmación por parte del operador. Cuando presione la tecla

“START” del teclado de Accuload y tenga los permisivos necesarios, la carga empezará.

• En función de nuestra elección, una vez autorizada la carga, Accuload

realizará los cálculos oportunos para conocer las cantidades de cada producto a circular por cada ramal y regulará las válvulas de control para que el/los producto/s a cargar se mantengan a la presión adecuada. Cuando la receta esté compuesta por una mezcla de productos, la entrega se realizará de forma concurrente.

• Cuando el operador del cargadero le comunique al operador de la caseta (el

que está con el formulario de SPC), que la carga ha finalizado, éste último solicitará el peso final desde SPC (llamando al método Pesada_Final). En caso de que solicite el peso final y la carga aún no haya finalizado, no se retornará un valor válido hasta que ésta no finalice.

• Si la carga realmente ha finalizado, la función Pesada_Final nos devolverá el

peso final en Kg y ya se podrá retirar el camión cisterna.

Page 27: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 27 -

Esquema General: Esquema Refinado:

AMBAR – Valores. ROJO – Comunicación con SPC.

VERDE – Comunicación con Accuload. NEGRO – Comunicación con el hardware de la báscula.

Peso Inicial (SPC)

¿Válido?

Cant. Cargar (SPC)

Seleccionar Receta

Seleccionar Cantidad

Iniciar Carga

Peso Final (SPC)

¿Válido?

Peso final en báscula

/ Fin de carga

Báscula = 2 Producto = Propelentes

No

No

P = Pesada_Inicial(…)

P= Bas.Peso_Inicial(…)

¿p/=9…9?

Cantidad_a_Cargar(…)

Bas.Cantidad_Cargar(…)

Allocate Blend Recipes

EnviarIns(“AB …”)

Set Batch

EnviarIns(“SB …”)

Press “START”

P = Pesada_Final(…)

P= PesoFin

¿p/=9…9?

P=Bas.Peso_final(…)

Báscula = 2

No

No

Producto = Propelentes

Page 28: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 28 -

5.3.3 Simulador de carga.

La empresa TECNOIL, también facilitó un simulador, con lo que podemos emular el funcionamiento de Accuload para hacer pruebas de carga.

El dispositivo permite emular las siguientes señales de campo:

• Señales de pulsos de ambos medidores másicos (FT-05 y FT-06). En lugar de emplear 2 señales de pulsos por medidor, el dispositivo simula únicamente 1 señal por medidor.

• Electroválvulas Normalmente Abierta y Normalmente Cerrada de las válvulas de control FV-05 y FV-16.

• Sondas de temperatura de ambas líneas de Isobutano y Propel 45 (TE-12 y

TE-20). La temperatura simulada puede variarse mediante dos potenciómetros Temp1 y Temp2 situados en la parte posterior de la carcasa del simulador.

• Contactos finales de carrera de los discos Onis y las válvulas FV-05 y FV-16.

Dichas señales son las siguientes:

FZSL-05 XZSL-61 XZSL-63 FZSL-16 XZSH-61 XZSH-63

Estas señales son simuladas mediante 2 interruptores Perm1 y Perm2 situados en la parte posterior de la carcasa del simulador, de manera que para simular la carga de los distintos productos habrá que situar los interruptores en su posición correspondiente, de acuerdo con la siguiente tabla:

PRODUCTO A CARGAR PERM 1 PERM 2 Isobutano ON OFF Propel 45 OFF ON Propel 35 ON ON

Page 29: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 29 -

En función de la posición de dichos interruptores, las distintas señales toman los siguientes valores: DESCRIPCIÓN SEÑAL ISOBUTANO PROPEL45 PROPEL 35

VALVULA FV-05 (ISOBUTANO) CERRADA

FZSL-05 OFF ON OFF

VALVULA FV-16 (PROPEL 45) CERRADA

FZSL-16 ON OFF OFF

DISCO ONIS PROPEL 45 CERRADO

XZSL-61 OFF ON OFF

DISCO ONIS PROPEL 45 ABIERTO

XZSH-61 ON OFF ON

DISCO ONIS ISOBUTANO CERRADO

XZSL-63 ON OFF OFF

DISCO ONIS ISOBUTANO ABIERTO

XZSH-63 ON ON ON

• Permisivo del PLC de la báscula: Esta señal se simula mediante el interruptor adicional (externo al simulador de carga). Debe estar accionado para permitir la carga.

Page 30: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 30 -

5.3.4 Protocolo de comunicación.

The type of communicating device that is being used in the system with an AccuLoad III is programmable and can be defined in the communications directory of the AccuLoad III. Communicating devices can be used with either the EIA-232 Port or EIA-485 Port on the AccuLoad III. Terminal (Term Host) – The AccuLoad III communications ports communicate with a terminal type device using a simplified communications protocol.

Minicomputer (Minicomp Host) – The AccuLoad III communications ports communicate with a minicomputer type device using a sophisticated and secure communications protocol.

Modbus Host – The AccuLoad III communication ports support Modbus communications.

Printer – The AccuLoad III will automatically print a report at the end of each transaction. One AccuLoad III will communicate with a printer.

Shared Printer – The AccuLoad III will automatically print a report at the end of each transaction. Multiple AccuLoads may communicate with a single printer.

Smart Injector – Permits the AccuLoad III to comunícate with smart additive injector systems. (Examples are Gate City Blend-Pak and Mini-Pak, Titan Pak3 and Smith AccuTroller.)

CIVACON Monitor – Permits the AccuLoad III to communicate with the CIVACON grounding and overfill system.

Communications for Minicomputer Mode of Operation

This character-oriented protocol uses the transmisión control character STX to define the start of a message, and ETX to terminate the message. A Longitudinal Redundancy Check (LRC) carácter follows the ETX character for additional message error detection beyond the traditional parity check done on each transmitted character. The message format is:

for an instruction to AccuLoad III, or

for a response from AccuLoad III

Page 31: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 31 -

Where: NL = Null character Hex "00" STX = Start of Text Hex "02" Text = Character string containing instructional or response information ETX = End of Text Hex "03" LRC = Longitudinal Redundancy Check PAD = Pad character Hex "7F" A1 A2 = AccuLoad III Address (01 to 99) The LRC is an ASCII character computed as the exclusive OR (XOR) sum of all characters following the STX and including the ETX transmission control characters. The universal or global address "00" is an invalid address and must not be assigned to any AccuLoad. The address, A1 A2, always consists of two ASCII characters. Data is formatted using ASCII characters and each character frame consists of 1 start bit, 7 or 8 data bits, none, even or odd parity, and 1 or 2 stop bits. There is no echo back of received characters by the AccuLoad III in the Minicomputer Mode of communications.

Text Format

Command and Response text will be shown enclosed in single quotes. Embedded spaces are represented by an underscore character (_). Any other character representation will be described where used. An "OK" is used in response to any action type command that has been successfully carried out. For request only commands, a good response Hill report the data requested in the format shown for that command. A "NOXX" (XX represents a two character code) is used to show that the command has been rejected. The two-character code represents the condition causing the rejection. For an expanded description of these codes, see "Appendix II." Time-out, or no response received from the Accu- Load III, occurs when the command string has been entered incorrectly. The communicating program should set an upper limit on the amount of time it Hill wait for a response from any AccuLoad, and register a time-out when that time has elapsed, to prevent a bad command from locking up the communications. Commands must be formatted exactly as stated. Invalid addresses, incomplete data, and excess data are all causes for this to occur. A more detailed explanation follows: Invalid Address - An AccuLoad III will ignore a command whose address does not match its own. The communication address is programmed into the AccuLoad III System program code 701 and following.

Incomplete Data - The code format for each communication command is stated in the Command Referente Guide section. If any portion of the command is left out, a time-out will occur.

Excess Data - Commands must be formatted exactly as stated. No excess data may be inserted or added.

Page 32: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 32 -

Communication Control Selections

The amount of control that the communicating device has over the AccuLoad III is programmable for various degrees of control.

Polling Only – Permits the EIA-232 or EIA-485 communication device to request information only.

Poll and Authorize – Permits the EIA-232 or EIA-485 communication device to request information and to authorize operation.

Remote Control – Permits the EIA-232 or EIA-485 communication device to have complete control over all operations.

Xon/Xoff – Printer security protocol, designed to keep the printer buffer from overflowing. The printer sends an Xoff (13 hex) when the print buffer is nearly full. The AccuLoad stops sending data until the printer sends an Xon (11 hex) signifying that it is ready for more data. Poll and Program – Identical to "Polling Only" and adds programming privilege, but excludes authorizing privilege.

PTB-FX Protocol – This security level is designed to support the PTB Weights and Measures Agency approved printer interface. This interface is currently supported by and applies to the Epson FX-850 printer. This interface uses a data block structure with handshaking. The AccuLoad initially sends an ENQ (enquire) to the printer. The printer then responds with an ACK (acknowledge) and is now ready to receive a block of data from the AccuLoad. A block of data is defined to be one line to be printed. The data is wrapped between a STX (start of text) and an ETX (end of text) and is followed by the longitudinal redundancy checksum for the data block. After the AccuLoad has sent the data block, the printer will then respond with an ACK if the data was received correctly or a NAK (negative acknowledge) if not received correctly. If the printer responds with a NAK, the data block will be re-transmitted.

PTB-LQ PROTOCOL – This security level is designed to support a PTB Weights and Measures Agency- approved printer interface. This interface is currently supported by and applies to the Epson LQ-570 printer. This interface uses a data block structure with handshaking. The AccuLoad initially sends an ENQ (enquire) to the printer. The printer then responds with an ACK (acknowledge) and is now ready to receive a block of data from the AccuLoad. A block of data is defined to be one line to be printed. The data is wrapped between a STX (start of text) and an ETX (end of text) and is followed by the longitudinal redundancy checksum for the data block. After the AccuLoad has sent the data block, the printer will then respond with an ACK if the data was received correctly or a NAK (negative acknowledge) if not received correctly. If the printer responds with a NAK, the data block will be re-transmitted. Each command listed in the Command Referente Guide section of this manual indicates the supporting communication modes.

Page 33: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 33 -

5.3.5 Configuración de LANTRONIX.

Accuload dispone de una conexión serie RS485/RS232 de 9 pines para la comunicación. Según las especificaciones anteriores y teniendo en cuenta las necesidades, usaremos el protocolo de comunicación “MiniComputer (Minicomp Host)”, definido en la especificación como “Communications for Minicomputer Mode of Operation”. Como queremos controlar Accuload remotamente, sin necesidad de que el operador tenga que intervenir, lo configuraremos en modo “Remote Control” (ver especificación y configuración paramétrica), para así tener control total sobre las operaciones. Además, como Accuload Trabaja con interfaz serie RS485/RS232 de 9 pines necesitamos un convertidor macho-hembra y uno que pase de 25 a 9 pines, tal y como podemos ver en las imágenes siguientes:

Convertidor Macho -> Hembra De 25 a 9 pines Menú de configuración Se nos ha proporcionado la siguiente IP y puerto para acceder a LANTRONIX, y en consecuencia, podernos comunicar con Accuload. Dirección IP: 172.27.48.249 Puerto: 3001 Si introducimos dicha dirección IP en cualquier navegador, podemos acceder a la página de configuración de LANTRONIX.

Page 34: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 34 -

Aspecto de la pantalla principal:

Tan sólo nos queda configurar el puerto serie, ajustando la velocidad de transferencia a 9600 baudios (velocidad de modulación), 8 bits de datos, 1 de stop y ninguno de paridad:

Es importante configurar el puerto serie correctamente, tiene que estar igual que en Accuload (ver Especificación y Configuración paramétrica), de lo contrario la comunicación fallará.

Page 35: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 35 -

5.3.6 Configuración detallada.

Accuload III-X dispone de innumerables opciones de configuración paramétrica, las cuales podemos ver resumidas a continuación:

Funciones del teclado: 0 – 9 Teclas usadas para seleccionar y configurar la cantidad de

producto a cargar. 2, 4, 6, 8 Permiten desplazarnos por el menú en las direcciones arriba,

izquierda, derecha y abajo respectivamente. CLEAR Se usa para borrar un valor de entrada incorrecto y para salir

de los menús. ENTER Usada para poder acceder a las diferentes opciones de los

menús y para seleccionar opciones. PRINT En nuestro caso es usada para mostrar información de ciertos

parámetros de configuración. SET Usada para iniciar la secuencia actual. START Se usa para iniciar la entrega de producto. STOP Se usa para parar la carga en cualquier momento. F1 En modo pantalla dividida, cambia entre una pantalla y la

otra; en modo pantalla completa, cambia entre un brazo de carga y otro.

F2 Cambia de pantalla completa a dividida y viceversa. ENTER+STOP Acceso al menú principal.

Page 36: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 36 -

El menú principal tendrá el siguiente aspecto:

5.3.6.1 Dynamic Displays Ofrece información sobre la carga en curso o última carga, (presión, temperatura, volúmenes entregados, etc.) Seguidamente, explicaremos brevemente las opciones de que dispone: Load Arm 1

• Product: muestra información sobre el tipo de producto. • Batch: contiene información sobre la carga que especifiquemos. • Transaction: información sobre la transición en curso. • Blend: porcentaje cargado de cada producto en la receta usada en la

última carga. • Ratio Blend Data: más información sobre la proporción de la mezcla. • Recipes: muestra información sobre cada una de las recetas registradas.

Recipes

• Enter Recipe #: muestra información del número de receta seleccionado. • Select Recipe: muestra las recetas disponibles, a fin de poder mostrar la

información de la receta que seleccionemos. Diagnostics

• Comm Monitor: muestra la información recibida y enviada por el puerto

serie. • Force Inj Auto Detect: fuerza la autodetección del inyector. • CIVACON Overfill Monitor: sólo es usado internamente. • Boolean Algebraic: visualiza los registros boleanos y algebraicos, además

de mostrar su resultado. • Transaction Archive Data: permite ver la transición de datos y especificar

el brazo de carga. • ComFlash Archive Data: muestra número de serie y versión. • Download Directory: permite descargar el directorio. • Software Version: muestra la versión del software. • Factory Diagnostics: muestra estadísticas y diagnósticos. • Active Alarms: muestra las alarmas que han saltado. • Alarm History: log sobre las últimas alarmas activadas. • Non-Reset Volumen: visualizar volúmenes.

Page 37: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 37 -

• Event Log: log sobre los eventos importantes sucedidos. • Transaction: log que contiene información sobre las transiciones

realizadas. • Audit Trail: registra varios cambios sobre parámetros. • Digital Inputs: visualiza las entradas digitales. • Digital Outputs: visualiza las salidas digitales. • Analog Inputs: visualiza las entradas analógicas. • Analog Input Summary: visualiza un resumen sobre las entradas

analógicas. • Analog Outputs: visualiza las salidas analógicas. • Pulse Inputs: visualiza los pulsos de entrada. • View Turbine Mtr Data: visualiza datos sobre la turbina.

System

Muestra información sobre el flujo actual en Kg/Min y Kg/Hora, la receta seleccionada, los Kg cargados en la última carga y en la actual, y finalmente, la última vez que hubo un corte de corriente.

5.3.6.2 Print Menu Menú de impresión. No usado para nuestra aplicación.

5.3.6.3 Program Mode Menu En este menú, se configuran todos los parámetros relativos al funcionamiento de TECNOIL ACCULOAD III-X. Nombraremos todos los parámetros disponibles, adjuntando una breve descripción en los que hayamos usado. Config Directories

000 – Load Arm Configuration: parámetros de configuración del brazo de

carga, hemos asignado el número de brazos de carga y el número de productos de los que dispone dicho brazo.

100 – Pulse Inputs 200 – Pulse Outputs 300 – DC & AC Digital Inputs 500 – DC & AC Digital Ouputs

900 – Analog Inputs/Ouputs: I/O 1 y I/O 2 asignadas a “Temp In”, I/O 3 y I/O 4 asignadas a “Pressure In”.

System Directories

100 – Gen Purpose Dir: • Date and Time: configuramos fecha y hora. • Units & Identifiers: establecemos el Flowrate a Kg/minuto (Kgm)

Page 38: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 38 -

• Timeouts: valores por defecto. • Display & Control: establecemos “.” como separador decimal, 1

batch/transaction y los mensajes de error que se producirán si la receta seleccionada no se corresponde con los permisos perm1 y perm2.

• Security: valores por defecto. 300 – Vol Accuray Dir

• Pulse Input: Unidades de medida seleccionadas: masa (Kilogramos), volumen (litros)

• Transaction Control: acotamos los parámetros. Masa mínima para cargar = 150Kg; Masa máxima para cargar = 45.000Kg (SPC calculará el valor según el camión). Permitimos múltiples recetas por transición y habilitamos el inicio de carga automático.

• Prove Control: valores por defecto. • Display Conventions: ajustamos la medida de peso a masa estándar,

y la resolución de los valores mostrados en la pantalla a unidades.

400 – Temp/Dens Dir • Temperature: en grados Celsius (C); Temperatura de

referencia 15ºC. • Density: valor por defecto (Kg/m^3)

500 – Pressure Dir • Pressure Units: valor por defecto (Kg/cm^2)

600 – Alarm Dir Tomamos todos los valores preestablecidos, puesto que no usamos alarmas.

• Run/Ready Clear Alr: permite borrar una alarma. • Default Alarm Configuration: vuelve a la configuración de las

alarmas que vienen por defecto. • User Alarm Configuration: configura las alarmas. • User Alarm Messages: configura los mensajes de advertencia

de las alarmas. 700 – Communications Dir

• Comm Addresses: establece la dirección de comunicación para nuestro brazo de carga. Address = 01.

• Comm Port Configuration: o Function = Minicomp Host o Baud = 9600 o Data/Parity = 8/None o Control = Remote Control o Timeout = 0

• Host Interface: valores por defecto. • Prompts: valores por defecto.

800 – Additive Dir Tomamos todos los valores preestablecidos, puesto que no usamos aditivos.

• General Inj Menu • Misc Inj Menu • Piston Inj Menu • Inj Config Menu • Smart Inj Menu

Page 39: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 39 -

Load Arm 1 Directories

100 – Gen Purpose • Principalmente para configurar los mensajes que aparecen en la

pantalla principal de Accuload.

200 – Flow Control • Opciones relacionadas con el control de flujo de producto, nos

permite indicar el tiempo de abertura de la válvula, el caudal mínimo (250 Kgm), el caudal máximo (505 Kgm), etc.

300 – Vol Accuray

• Establece tolerancias en la mezcla de productos, como máximo un 5% del total o 25 Kg.

700 – Communications

• Tomamos los valores por defecto.

Meter 1 • 200 – Flow Control

o 201 – Valve Type: Digital • 300 – Vol Accuracy • 400 – Temp/Dens • 500 – Pressure • Product 1

o 100 Gen Purpose � 101 – Product ID: Isobutano

o 200 Flow Control � 201 – Min Flow Rate: 100 kgm � 202 – Hi Flow Rate: 505 kgm � 204 – Flow Tolerante %: 9 % � 205 – Flow Tolerante Rate: 20 Kg

o 300 Vol Accuracy � 301 – Min Batch Amt: 0 Kg

o 400 Temp/Dens � Temperatura

• 401 – Main Temp: 0.0 ºC • 402 – Hi Temp Alarm: 45 ºC • 403 – Lo Temp Alarm: -5 ºC

� Densidad • 412 – Ref Dens: 15 Kg/m^3 • 413 – Hi Dens Alarm 600 Kg/m^3 • 414 – Lo Dens Alarm 500 Kg/m^

o 500 Pressure � General Purpose

• 501 – Maint Pressure: 8 Kg/cm^2 � Back Pressure � Vapor Pressure

Meter 2

• 200 – Flow Control o 201 – Valve Type: Digital

• 300 – Vol Accuracy • 400 – Temp/Dens • 500 – Pressure

Page 40: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 40 -

• Product 2 o 100 Gen Purpose

� 101 – Product ID: Propel 45 o 200 Flow Control

� 201 – Min Flow Rate: 100 kgm � 202 – Hi Flow Rate: 505 kgm � 204 – Flow Tolerante %: 9 % � 205 – Flow Tolerante Rate: 20 Kg

o 300 Vol Accuracy � 301 – Min Batch Amt: 0 Kg

o 400 Temp/Dens � Temperatura

• 401 – Main Temp: 0.0 ºC • 402 – Hi Temp Alarm: 45 ºC • 403 – Lo Temp Alarm: -5 ºC

� Densidad • 412 – Ref Dens: 15 Kg/m^3

o 500 Pressure � General Purpose

• 501 – Maint Pressure: 8 Kg/cm^2 � Back Pressure � Vapor Pressure

Recipe Directory

� Select Recipe

o Recipe 1 ISOBUTANO � Recipe Composition

• 01 Recipe Used: Load Arm 1 • 02 Recipe Name: ISOBUTANO • 03 HM Classification: Product 1 • 05 1st Percentatge: 100 % • 07 2nd Percentatge: 0 % • 90 Delivery Mode: Concurrent

o Recipe 2 Propel 45 � Recipe Composition

• 01 Recipe Used: Load Arm 1 • 02 Recipe Name: Propel 45 • 03 HM Classification: Product 2 • 05 1st Percentatge: 0 % • 07 2nd Percentatge: 100 % • 90 Delivery Mode: Concurrent

o Recipe 3 Propel 35 � Recipe Composition

• 01 Recipe Used: Load Arm 1 • 02 Recipe Name: Propel 45 • 03 HM Classification: Product 1 • 05 1st Percentatge: 65 % • 07 2nd Percentatge: 35% • 90 Delivery Mode: Sequential

Page 41: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 41 -

5.3.6.4 Diagnostics Menu

El menú de diagnóstico nos ofrece valiosa información sobre el estado de los diferentes sensores, así como los totalizadores absolutos, registro histórico de operaciones anteriores, etc. Además, nos permite ejecutar tests de prueba de las entradas y salidas analógicas, entradas y salidas digitales, entrada y salida de pulsos, comunicaciones, etc.

Page 42: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 42 -

5.3.7 Instrucciones Necesarias.

5.3.7.1 Instrucción AB – Allocate Blend Recipes Especificación This command allocates the blend recipes that will be allowable for selection. This allocation is a subset of those enabled in the program mode.

Command: "AB_C1C2C3…C13"

where C1C2C3…C13 is the three- to thirteen-character bit map described on the following pages.

Responses: "OK" Good Response. Recipes have been allocated

or...

"NOXX" Recipes have not been allocated

Remarks: 1. A one allocates the corresponding recipe number for selection. Allocation is cancelled on transaction done status being set.

2. Allocation is also cancelled if, when in Remote Control Mode, a power-fail restart occurs between batches.

3. This command does not require all characters. A minimum of three characters is accepted. For those characters omitted, the corresponding recipes are not allocated.

4. This command will automatically exit from Program Mode when initiated.

Constraints: Recipe allocation remains in effect for the current transaction only.

Special Case: None.

Comm. Modes: Polling Only, Poll and Authorize, or Remote Control

Page 43: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 43 -

Uso Usamos esta instrucción para seleccionar la receta que queremos cargar. Disponemos de las 3 recetas que hemos almacenado en Accuload (ver Especificación y configuración paramétrica). Según las especificaciones, tendremos que ejecutar una de las siguientes instrucciones según queramos una receta u otra:

• Seleccionar Isobutano: “AB_100” (Receta 1) • Seleccionar Propel 45: “AB_200” (Receta 2) • Seleccionar Propel 35: “AB_400” (Receta 3)

Escribimos 3 dígitos como mínimo para determinar la receta, tal y como nos especifica.

Page 44: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 44 -

5.3.7.2 Instrucción SB – Set Batch

Especificación

This command authorizes a batch and presets Batch Volumes for a transaction. Command: "SB_VVVVVV"

"SB_A1A2A3A4A5A6_VVVVVV"

Where:

A1A2A3A4A5A6 = Additive selection code VVVVVV = Volume to preset

Response: "OK" Good Response. Batch volume has been accepted.

or...

"NOXX" The batch volume has not been set.

Remarks: If the additive qualifier (A1A2A3…) is not used, the additive selection will operate as currently programmed in the AccuLoad III. For authorization with additives, only one recipe may be allotted. Additives selected in the qualifier must be programmed for use. Additives will be injected for all components of the blend recipe. If more than one recipe is enabled, the "Select Recipe" prompt will be displayed.

See also Remarks for "AB" - Allocate Blend Recipes command. (*)

See Command Codes AP and AU for a description of A1A2… characters.

Constraints: Batch volume must not exceed programmed maximum batch

size and must not be below the programmed minimum batch size. Units value must correspond to what is programmed into AccuLoad III for units of measurement.

Special Case: An authorization command with batch size of 0 allows the

driver to select batch size. Driver may clear any preset batch size and enter a new batch volume providing that it is less than the preset batch size. A batch amount of zero while in the Auto Preset Mode will result in the maximum batch amount being displayed; a non-zero set batch amount will override the maximum batch amount as the auto preset amount and cannot be overridden by the driver while in the Auto Preset Mode.

Comm. Modes: Remote Control.

Page 45: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 45 -

Uso Esta instrucción nos permite, una vez seleccionada una receta (en caso contrario, seleccionará la última cargada), determinar el volumen en Kilogramos que vamos a cargar en el camión cisterna. SPC determinará cuanto vale dicho valor y lo enviará a Accuload mediante dicha instrucción de la siguiente manera:

• Cargar XXXXX Kg: “SB_XXXXX” Donde XXXXX Kg es el valor obtenido de SPC con el peso a cargar en Kilogramos, calculado específicamente para el camión según la matrícula. El peso mínimo admisible será 150 Kg y el máximo 45.000 Kg, de lo contrario Accuload no iniciará la carga (ver especificación y configuración paramétrica).

Page 46: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 46 -

5.3.7.3 Instrucción SA – Remote Start

Especificación

This command remotely starts the AccuLoad III as though the "START" key was pressed. Command: "SA"

Responses: "OK" Good Response. AccuLoad III is released for flow to begin.

or... "NOXX" AccuLoad III is not released for remote start.

Remarks: None.

Constraints: NO01 will be returned if another load arm is in the program mode locally or via communications.

Special Case: None.

Comm. Modes: Poll & Authorize or Remote Control Uso Gracias a esta instrucción podremos iniciar el proceso de carga de forma remota, una vez seleccionada la receta y el peso. En caso contrario, tomará la última receta cargada y establecerá el peso a cargar en 0 kg, por lo que Accuload no iniciará la carga.

Page 47: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 47 -

5.3.7.4 Instrucción EQ – Enquire Status

Especificación

This command retrieves the operational status of AccuLoad III. Data is returned in a bit-mapped format. Command: "EQ" Request Status Responses: “AAAAAAAAAAAAAAAA” Good Response: 16 Characters.

For descriptions of each of the characters, see the following pages. where each “A” is a quas hex value; “0 1 2 3 4 5 6 7 8 9 : ; < > ?”.

Remarks: Allow for additional characters to be added on the end for

future status indicators.

For bay configurations – SA, SF, TD, and TP – refer to the bay. Other flags continue to be specific to the load arm.

Constraints: None.

Special Case: See notes under tables.

Comm. Modes: Polling only, Poll & Authorize, Remote Control, Poll & Program.

Quasi Hex Value 0x08 0x04 0x02 0x01

A1 Program mode Released Flowing Authorized A2 Trans in progress Trans done Batch done Keypad data pending A3 Alarm Standby Transactions Storage Full In Standby Mode A4 Prog value changed Delayed prompt Display msg time out Power fail occurred A5 Checking entries Input #1 Input #2 Input #3 A6 Input #4 Input #5 Input #6 Input #7 A7 Input #8 Input #9 Input #10 Input #11 A8 Input #12 Input #13 Input #14 Input #15 A9 Input #16 Input #17 Input #18 Input #19 A10 Input #20 Input #21 Input #22 Input #23 A11 Input #24 Input #25 Input #26 Input #27 A12 Input #28 Input #29 Input #30 Input #31 A13 Input #32 Input #33 Input #34 Input #35 A14 Input #36 Input #37 Input #38 Input #39 A15 Input #40 Input #41 Input #42 Input #43 A16 Printing in Progress Permissive Delay New card data avail. Presetting in Progress

Uso

Usamos esta instrucción para comprobar el estado de la carga en un momento dado, concretamente cuando el operador de planta solicita el peso final desde el formulario de SPC. En ese momento, el hardware del mezclador consulta el estado de la transición, para saber realmente si ha finalizado o sigue en curso.

Page 48: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 48 -

5.3.7.5 Instrucción RB – Request Batch Totals Especificación This command retrieves Batch Data from the AccuLoad III. Command: Current Transaction

"RB" Current batch volume, delivery volume type "RB_Px" Current batch, specified product (ratio, sequential, hybrid) "RB_YY" Completed batch volume, delivery volume type "RB_YY_X" Completed batch volume, specified volume type "RB_YY_Px" Product volume of batch, delivery volume type "RB_YY_X_Px" Product volume of batch, specified volume type Local Storage Transaction "RB_YY_NNN" Historic transaction requests "RB_YY_Px_NNN" Returns the product volume type "RB_YY_X_NNN" Returns the batch in the volume type requested if tha volume type was stored. "RB_YY_Z_Px_NNN" Returns the product in the volume type requested if that volume type was stored. Where X = R for raw total (Indicated Volume – IV)

= G for gross volume (GV) = N for gross @ standard temperature volume (GST) = P for net pressure & temperature volume (GSV) = M for mass total Px = Product 1, 2, 3, 4, 5, or 6 YY = Batch Number (01 – 10) NNN = number of transactions back into Local Storage to retrieve data

Response: Current Transaction

"RB_YY_X_A1A2A3A4A5A6_RR_VVVVVVV" For "RB," "RB_YY," and "RB_YY_X" "RB_YY_X_A1A2A3A4A5A6_Px_VVVVVVV" For "RB_YY_Px," "RB_YY_Px_X," and "RB_Px" Local Storage Transaction "RB_YY_X_A1A2A3A4A5A6_RR_VVVVVVV_NNN" For "RB_XX_NNN" and "RB_XX_X_NNN" "RB_YY_X_A1A2A3A4A5A6_Px_VVVVVVV_NNN" For "RB_XX_Px_NNN" and "RB_XX_Px_X_NNN’

YY = Batch number requested or current batch X = R for raw total = G for gross total = N for gross at standard temperature total = P for net temperature & pressure = M for mass totals A1 = Additive selection code character 1 A2 = Additive selection code character 2 A3 = Additive selection code character 3 A4 = Additive selection code character 4 A5 = Additive selection code character 5 A6 = Additive selection code character 6

Page 49: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 49 -

Px = Product 1, 2, 3, 4, 5, or 6 RR = Recipe Number 01 – 50 VVVVVVV = Batch Volume NNN = # of transactions back into local storage to retrieve data

or... "NOXX"

Remarks: The batch is not considered complete until the start key is pressed for the next batch, or the transaction is ended. RB_YY will always fail on the current batch even after BD status is reported in Command EQ or RS. See AU and AP for additive code (A1A2A3…). If bays are configured, the returned value is the bay-based batch total. Constraints: Batch volume units are assumed as the type programmed into AccuLoad III. NO03 will be returned for a product request if the product requested was not delivered in the batch. NO30 will be returned if the product specified is not currently configured to the arm to which the command was directed. NO31 will be returned if the product batch totals are requested for an arm currently configured for straight product delivery. Special Case: None. Comm. Modes: Polling only, Poll & Authorize, Remote Control, Poll & Program. Uso Esta instrucción es usada para monitorizar el peso en Kilogramos que hay cargados hasta el momento. En la pequeña aplicación que prueba el funcionamiento de Accuload, llamamos a la instrucción cada segundo, a fin de ir actualizando la cantidad de producto cargado en dicho intervalo de tiempo.

Page 50: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 50 -

5.3.7.6 Instrucción SP – Remote Stop Especificación This command instructs the AccuLoad III to stop, halting product delivery on all arms. Command: "SP"

Responses: "OK" Good Response.

or... "NOXX" The AccuLoad III was not stopped. NO36 will be returned if the AccuLoad is being used with a card reader and the card data is invalid or has expired

Remarks: None. Constraints: Valve and pump are shut down whether flow is present or not. If a batch is in progress, the "START" key or the Remote Start command "SA" must be used to continue the batch. Special Case: None. Comm. Modes: Polling only, Poll & Authorize, Remote Control, Poll & Program Uso Instrucción usada para parar la carga en un momento determinado. Para reanudar se usa la instrucción “SA”.

Page 51: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 51 -

5.3.7.7 Instrucción ET – End Transaction Especificación This command removes authorization and flags the transaction as complete.

Command: "ET"

Responses: "OK" Good Response. Transaction is flagged as complete if a transaction is in progress. Authorization is removed.

or...

"NOXX" Transaction was not ended Remarks: If bays are configured, this command will end the transaction

for the entire bay.

Constraints: None.

Special Case: None.

Comm. Modes: Poll & Authorize, Poll & Program, or Remote Control

Uso Usamos esta instrucción para abortar, siempre antes del inicio de carga, en caso de que haya habido algún problema con las instrucciones (respuestas del tipo NOXX) o con la conexión.

En caso de que queramos abortar en pleno proceso de carga, previamente se debe enviar la instrucción “SP” para parar la carga.

Page 52: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 52 -

5.3.8 Aplicación de prueba.

5.3.8.1 Especificación y diseño Hemos realizado una pequeña aplicación de prueba como primera toma de contacto con Accuload, que nos permite simular la carga. Se testea que la conexión se establezca y se cierre correctamente, la sucesión de instrucciones que deben ejecutarse en una carga (AB -> SB -> SA), que podamos parar/reanudar la carga en cualquier momento, así como poder abortarla (previamente habiéndola parado). También se visualiza en el formulario el peso cargado hasta el momento, dato que se refresca cada segundo. El diseño de la aplicación se basa en un formulario principal para seleccionar y visualizar, que usa el control winsock para comunicaciones y el control timer para el temporizador. Además se ha implementado un objeto que trata los mensajes. Puesto que es una aplicación de prueba, no se trata la encapsulación del objeto ni se busca optimizar código, tan sólo una primera toma de contacto.

Page 53: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 53 -

5.3.8.2 Implementación Formulario

Código del Formulario (Formulario.frm) Option Explicit 'Obligamos a declarar las variables. 'Control Winsock 6 & Timer Private Message As Mensajes 'Creamos Objeto Private Automatizar As Boolean Private Sub Form_Load() Set Message = New Mensajes 'Instanciamos Objeto Isoprop35.Caption = "Accuload Communication" TextIP.Text = "172.27.48.249" 'Cambiar por IP correspondiente TextPort.Text = "3001" 'Cambiar por puerto correspondiente ShapeOK.FillStyle = 0 'Color de envio verde ShapeFail.FillStyle = 0 ShapeOK.Visible = False ShapeFail.Visible = False Timer1.Interval = 1000 'Iniciamos timer Timer1.Enabled = False Automatizar = False End Sub Private Sub Timer1_Timer() 'Actualizamos la información sobre la carga cada segundo. Message.CMDS = "RB" EnviarCMD

Page 54: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 54 -

End Sub 'Abrimos el socket según configuración de LTX, por defecto 172.27.48.249:3001 Private Sub cmd_connect_Click() Winsock1.RemoteHost = TextIP.Text Winsock1.RemotePort = TextPort.Text Winsock1.Connect ShapeOK.Visible = True ShapeFail.Visible = False End Sub Private Sub cmd_disconnect_Click() 'Seleccionamos cerrar el socket Winsock1.Close ShapeOK.Visible = False ShapeFail.Visible = True TextResponse.Text = "" End Sub Private Sub EnviarCMD() 'Enviamos comando a Accuload If Winsock1.State = sckConnected Then 'Comprobamos que haya comunicación establecida previamente. Winsock1.SendData Message.send ShapeOK.Visible = True Else 'En caso contrario, informamos por el recuadro de texto. TextResponse.Text = "Comunicación Perdida" ShapeFail.Visible = True End If End Sub Private Sub TextVol_KeyPress(KeyAscii As Integer) 'Seleccionamos el volumen de carga de producto- If (KeyAscii = 13) Then If (TextVol.Text >= 157) And (TextVol.Text <= 40000) Then 'Dependera del camión para ajustar los rangos Message.Volume = TextVol.Text Message.CMDS = "SB " & TextVol.Text EnviarCMD Else MsgBox "ERROR: El volumen debe estar entre 157Kg y 40.000Kg" End If End If End Sub 'Evento que captura la respuesta de accuload Private Sub Winsock1_DataArrival(ByVal bytesTotales As Long) Dim trama As String Winsock1.GetData trama, vbString 'Obtenemos la respuesta Message.CMDR = trama 'Simulamos la automatización de los comandos requeridos para realizar la carga, los datos serán 'importados de la base de datos de SPC.

Page 55: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 55 -

If Automatizar = True Then Select Case Mid(Message.CMDS, 1, 2) Case "AB": Message.Volume = 250 Message.CMDS = "SB 250" 'Cargamos Volumen EnviarCMD Case "SB": Message.End_Load = False Message.CMDS = "SA" 'Iniciamos Carga EnviarCMD Timer1.Enabled = True End Select End If TextResponse.Text = Message.response 'Mostramos la respuesta de Accuload en el cuadro de texto If Message.response = "LRC Error" Then EnviarCMD End If If Message.End_Load = True Then 'Cuando haya finalizado la carga, paramos el timer. Timer1.Enabled = False Automatizar = False End If End Sub Private Sub Isobutano_Click() 'Seleccionamos cargar Isobutano Message.CMDS = "AB 100" EnviarCMD End Sub Private Sub Propel45_Click() 'Seleccionamos cargar Propel 45 Message.CMDS = "AB 200" EnviarCMD End Sub Private Sub Blend_Propel35_Isobutano_Click() 'Seleccionamos la mezcla Propel 35 e Isobutano Message.CMDS = "AB 400" EnviarCMD End Sub Private Sub cmd_aut_Click() 'Proceso de carga secuencial de instrucciones sin interactividad. Automatizar = True Message.CMDS = "AB 100" 'Por defecto cargamos Isobutano. EnviarCMD End Sub Private Sub cmd_abort_Click() 'Abortamos el proceso de carga Message.CMDS = "ET" EnviarCMD End Sub

Page 56: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 56 -

Private Sub cmd_end_Click() 'Paramos el proceso de carga Message.CMDS = "SP" EnviarCMD Timer1.Enabled = False 'Paramos el timer End Sub Private Sub cmd_ini_Click() 'Iniciamos / Reanudamos el proceso de carga Message.End_Load = False Message.CMDS = "SA" EnviarCMD Timer1.Enabled = True 'Iniciamos el timer End Sub

Código del módulo de clase (Message.cls) Option Explicit Public CMDS, CMDR As String Public End_Load As Boolean Public Volume As Integer Public Function send() As Byte() 'Preparamos la trama para enviar a Accuload Dim Msg() As Byte '0..255 Dim lrc As Byte Dim i As Integer Const IniLengthCMDS = 5 'Estructura del mensaje: [STX A1A2 Text ETX LRC] 'Redimensionar array. ReDim Msg(0 To IniLengthCMDS + Len(CMDS) + 1) 'Longitud del mensaje variable según la instrucción Msg(0) = &H2 'STX Msg(1) = &H30 'A1 'A1A2=@01 Msg(2) = &H31 'A2 For i = 1 To Len(CMDS) 'Text Msg(i + 2) = Asc(Mid(CMDS, i, 1)) 'Añadimos la instrucción en la trama Next Msg(Len(CMDS) + 3) = &H3 'ETX For i = LBound(Msg) + 1 To UBound(Msg) - 1 'Calculamos el LRC lrc = lrc Xor Msg(i) 'A1 Xor A2 Xor ... ETX Next Msg(Len(CMDS) + 4) = lrc 'LRC send = Msg() 'Return End Function

Page 57: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 57 -

Private Function error(cmd As String) As String Select Case cmd 'Enviaremos los mensajes de error más comunes Case "NO03": error = "Valor rechazado" Case "NO04": error = "Primero debe parar la carga" Case "NO06": If CMDS = "RB" Then error = "Abriendo Valvula..." Else error = "Operación no permitida" End If Case "NO08": error = "Carga en progreso" Case "NO11": error = "Valor de volumen no valido" Case "N021": error = "Revisar Posición de los discos Onis" End Select End Function Public Function response() As String 'Tratamos la trama de respuesta que nos llega de Accuload Dim vol_load, i As Integer Dim cmd As String Dim clrc As Byte 'Estructura del mensaje: [NL STX A1 A2 text ETX LRC PAD] For i = 3 To Len(CMDR) - 2 clrc = clrc Xor Asc(Mid(CMDR, i, 1)) 'Calculamos el CRC Next If clrc = Asc(Mid(CMDR, Len(CMDR) - 1, 1)) Then 'Si el CRC recibido es correcto... cmd = Mid(CMDR, 5, Len(CMDR) - 7) 'text If Mid(cmd, 1, 2) <> "NO" Then 'Si no ha habido ningún error... If Mid(cmd, 1, 2) = "RB" Then 'Si el comando es el caso especial RB... vol_load = Mid(cmd, 23, 3) If vol_load < Volume Then 'Vamos actualizando los Kg de volumen cargados End_Load = False response = "Volumen cargado: " & vol_load & " Kg" Else 'Cuando la carga haya sido completada, lo comunicamos response = "Carga completada, se han cargado " & vol_load & " Kg." End_Load = True End If Else 'En caso de que el comando no sea RB, mostramos la respuesta directamente desde Accuload. response = cmd End If Else 'En caso de que haya habido un error... response = error(cmd) End If Else 'En caso de CRC incorrecto, lo notificamos para tratarlo posteriormente response = "LRC Error" End If End Function

Page 58: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 58 -

5.3.8.3 Prueba con el simulador de carga

Vamos a realizar una simulación de carga de la receta Isobutano, teniendo en cuenta las especificaciones del simulador, según el producto que queramos cargar.

La señal Permisivo del PLC debe permanecer accionada. Ejemplo de Carga de Isobutano Pondremos el interruptor Perm1 a ON y Perm2 a OFF. Ejecutamos la aplicación: IP: 172.27.48.249:3001. Botón Connect.

Seleccionamos Isobutano: Introducimos 200 Kg de volumen

y apretamos intro.

Page 59: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 59 -

Accuload mostrará la siguiente pantalla:

Apretamos en Start/Resume: La carga se refresca cada segundo:

Accuload va cargando el producto:

Page 60: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 60 -

Si apretamos el botón “Stop” de nuestra aplicación a plena carga, Accuload mostrará:

Apretando “Start/Resume”, la carga se reanudará.

Cuando la carga finalice: Finalmente, apretamos Disconnect.

Con el botón Auto Load, automatizamos todo el ejemplo anterior, se simula directamente la carga con 250 Kg de Isobutano. El objetivo de este evento es verificar que las tramas se envían y se reciben en el momento oportuno (usando el evento DataArrival que nos proporciona el control Winsock.ocx)

Page 61: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 61 -

El proceso de carga se repite para las demás recetas, teniendo en cuenta que:

• Para simular Propel 45 debemos poner las señales Perm1 a OFF y Perm2 a ON.

• En caso de Propel 35, los interruptores Perm1 y Perm2 deberán

colocarse en la posición ON. De no coincidir la receta con la posición de los interruptores, Accuload mostrará un mensaje de error advirtiéndonos de que la posición de los discos no es la correcta. Deberemos accionar los interruptores adecuados, o abortar en caso que queramos seleccionar otra receta, puesto que Accuload quedará esperando a la correcta posición de los discos y válvulas.

Page 62: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 62 -

5.4 SERTEC IT8000 & IT9000E

5.4.1 Especificaciones generales y simulador.

La empresa SERTEC Pesage, S.L. nos ha proporcionado el hardware necesario y configurado específicamente para realizar nuestro proceso de carga.

Vista general del simulador, con el procesador y los visores de peso.

Como podemos ver en la foto, dicha empresa nos ha facilitado un simulador formado por dos visores de peso IT8000 (ubicados en el fondo de la mesa), uno para cada báscula, un procesador de peso IT9000E (primer plano de la foto), que irá ubicado en la caseta donde el operador gestionará la carga desde el formulario de SPC, dos potenciómetros que permiten simular el peso en la báscula (uno para cada visor) y dos cajas de relevadores (una por báscula también) que emiten una señal u otra dependiendo del estado en que se encuentre la carga. Los dos modelos IT8000 nos permiten, principalmente, leer el peso de cada una de las básculas. Además en nuestro caso, antes de iniciar una carga, el operador del cargadero deberá introducir la matricula y el producto para que se haga efectiva. Las características principales de IT8000, especificadas por el fabricante, son las siguientes:

• Visor de peso de alta fiabilidad, aprobado CE. • Acabado en acero inoxidable. • Protección ip65 para instalación en ambientes húmedos y hostiles.

Page 63: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 63 -

• Alimentación 12-30 V DC. • Display LCD retroiluminado inteligente de gran calidad (4x20 caracteres). • Teclado de membrana estanco numérico y protección general ip65. • Gran conectividad y versatilidad en software opcional y de libre

programación. • CPU8000 con 1 MByte. • Incluye dos zócalos para células de carga o uno para célula de carga y otro

para células digitales. • 3 zócalos para puertos de comunicación serie rs232, rs422 ó c1. • 2 zócalos para módulos in/out de 2 in y 2 out cada uno. • 1 zócalo para Fieldbus.

El modelo IT9000E es el procesador principal. Convierte la interfaz Ethernet en RS422 para comunicase con los visores de peso IT8000. Además es capaz de monitorizar toda la información de los visores de peso en su LCD, además de mostrar una breve descripción del estado en cada caso. Las características principales de IT9000E, especificadas por el fabricante, son las siguientes:

• Procesador de peso de alta fiabilidad, aprobado ce. • Acabado en acero inoxidable. • Protección para ambientes húmedos y hostiles. • Alimentación 110-240 vac o 12-30 vdc. • Pantalla TFT color de gran calidad 5.7” (320x240 píxels), reservando una

línea de grandes caracteres para el peso y ocho líneas de 44 caracteres cada una para información adicional.

• Teclado de membrana estanco numérico y alfanumérico incluyendo teclas de función y cursores.

• Gran conectividad y versatilidad en software opcional y de libre programación.

• Procesador ARM a 520 MHz con sistema operativo Linux real time multitasking kernel, incluyendo 2 Mb de memoria con batería de respaldo ampliable mediante memoria stick USB, pudiendo archivar hasta 500.000 transacciones de peso.

• Interface ethernet incluido a 10/100 Mbps con conector externo rj45 (ip67) para conexión a redes de PC.

• También incluye un puerto USB 2.0 para conectar periféricos como impresoras, PC compatibles y USB memory stick con protección ip67 opcional.

• Incluye dos zócalos para células de carga adm con velocidad de conversión seleccionable entre 50 y 400 lecturas por segundo para cada báscula analógica conectada.

• 3 zócalos para puertos de comunicación serie rs232, rs485 o 20mA cl. • 2 zócalos para módulos pim in/out de 2 in y 2 out cada uno o módulo de

entrada / salida analógico dau (consultar los diferentes módulos compatibles disponibles).

• 1 zócalo para fieldbus que a su vez incluye zócalos para 3 puertos de comunicación sim, 6 pim e para entradas / salidas digitales y un puerto para interfaz devicenet.

• 1 zócalo para interfaz profibus dp con 2 zócalos adicionales para puertos de comunicación sim.

• 1 zócalo para módulo de comunicaciones canbus. • 1 zócalo para módulo de comunicaciones wireless LAN.

Page 64: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 64 -

En la parte posterior del equipo podemos ver el conexionado:

Vista posterior del simulador, con el procesador y los visores de peso.

En primer plano tenemos las dos cajas de relevadores, en segundo plano los visores IT8000 y en tercer lugar el procesador IT9000E y los dos potenciómetros que simulan el peso en báscula. Si analizamos un poco el conexionado, vemos como la comunicación entre nuestra interfaz y el procesador de peso la establecemos vía ethernet. Mediante un conversor hardware interno, IT9000E consigue comunicarse con los dos visores IT8000 vía comunicación serie, con interfaz RS485 (hasta 32 estaciones, reduce mucho el ruido, longitud máxima 1,2 Km).

Page 65: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 65 -

5.4.2 Especificación de la librería.

La empresa SERTEC ha preferido responsabilizarse totalmente del hardware IT8000 e IT9000E, y nos ha implementado una DLL-ActiveX. La librería implementa las funciones necesarias (accediendo al procesador de peso IT9000E) para nuestra secuencia de carga. El motivo de esto ha sido puramente preventivo, para evitar posibles riesgos de distribución ilegal del software, que podría darse en algún caso al entregar todo el protocolo de comunicación. Como acabamos de comentar se trata de una librería DLL-ActiveX, que sólo entiende el lenguaje de programación Visual Basic de Microsoft, por lo que limita su funcionalidad al no ser una DLL estándar de Win32. La especificación de la librería es la siguiente: sckIT9e.dll Plataforma desarrollo: Visual Basic 6 Constructor: Por defecto

Funciones: Public Function Peso_en_bascula(ByVal DireccionIP As String, ByVal BasculaNo As Integer) As Double Public Function Peso_inicial(ByVal DireccionIP As String, ByVal BasculaNo As Integer, ByVal Matricula As String, ByVal Producto As Integer) As Double Public sub Cantidad_cargar(ByVal DireccionIP As String, ByVal BasculaNo As Integer, ByVal Matricula As String, ByVal CantidadACargar As Double, ByVal Producto As Integer) Public Function Peso_final(ByVal DireccionIP As String, ByVal BasculaNo As Integer) As Double

Comandos de comunicación:

Peso_en_bascula: Formato envío:

Báscula 1: <1PESBA> Formato recepcion: Correcto: <123456> Peso[6]:123456, Peso bruto en báscula

Incorrecto: <999999>,Peso[6]:999999 Error comunicación visor Sin conexión: <-1>

Peso_inicial: Formato envío para:

Báscula 1: <1PESIN11111111112> Matrícula[10]:1111111111, Producto[1]:2

Formato recepción: Correcto: <123456>,Peso[6]:123456 Comprobaciones correctas Incorrecto: <999999>,Peso[6]:999999 Error comprobando datos

Page 66: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 66 -

Sin conexión: <-1>

Cantidad_a_cargar: Formato envío para:

Báscula 1: <1CARGA11111111112222223> ,Matrícula[10]:1111111111, Carga[6]:222222, Producto[1]:3

Formato recepción: Sin conexión: <-1> Peso_final: Formato envío para:

Bascula 1: <1PESFI> Formato recepción: Correcto: <123456> , Peso[6]:123456 Carga finalizada Incorrecto: <999999> ,Peso[6]:999999 Carga no finalizada Sin conexión: <-1>

Page 67: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 67 -

5.4.3 Aplicación de prueba.

5.4.3.1 Especificación e Implementación Para probar el correcto funcionamiento de la librería sckIT9e.dll antes de incorporarla a nuestra interfaz, la testeamos con un pequeño programa llamando a cada una de sus funciones. El día de la instalación del simulador se cambió la configuración de la IP en IT9000E y se introdujo “172.27.49.250”, que es la que teníamos reservada para asignarle. Formulario

Código del Formulario Option Explicit Private Sub cmdCantidadCarga_Click() On Error Resume Next If Not ComprobarDatos Then Exit Sub If txtMatricula.Text = "" Or txtCarga.Text = "" Or txtProducto.Text = "" Then Exit Sub Dim it As New sckIT9e.cIT9e it.Cantidad_cargar txtDireccionIp, txtBascula.Text, txtMatricula, txtCarga, txtProducto lblResultado = "" End Sub Private Sub cmdPesoBascula_Click() On Error Resume Next If Not ComprobarDatos Then Exit Sub cmdPesoBascula.Enabled = False Dim it As New sckIT9e.cIT9e

Page 68: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 68 -

lblResultado = it.Peso_en_bascula(txtDireccionIp, txtBascula.Text) cmdPesoBascula.Enabled = True End Sub Private Sub cmdPesoFinal_Click() On Error Resume Next If Not ComprobarDatos Then Exit Sub cmdPesoFinal.Enabled = False Dim it As New sckIT9e.cIT9e lblResultado = it.Peso_final(txtDireccionIp, txtBascula.Text) cmdPesoFinal.Enabled = True End Sub Private Sub cmdPesoInicial_Click() On Error Resume Next If Not ComprobarDatos Then Exit Sub If txtMatricula.Text = "" Or txtProducto.Text = "" Then Exit Sub cmdPesoInicial.Enabled = False Dim it As New sckIT9e.cIT9e lblResultado = it.Peso_inicial(txtDireccionIp, txtBascula.Text, txtMatricula, txtProducto) cmdPesoInicial.Enabled = True End Sub Private Function ComprobarDatos() As Boolean ComprobarDatos = True If txtBascula.Text = "" Or txtDireccionIp.Text = "" Then ComprobarDatos = False lblResultado.Caption = "" End Function

Page 69: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 69 -

5.4.3.2 Prueba Realizaremos la prueba con los siguientes parámetros: IP: 172.27.49.250 Bascula: 1 Matricula: RP1234 Carga: 5000 (Kg) Producto: 1 (ETILENO) Peso_en_báscula (IP, Bascula):

Como podemos comprobar el peso en báscula se obtiene correctamente. Peso_inicial (IP, Bascula, Matricula, Producto): Debemos introducir en el visor IT8000 la matrícula y el producto especificado en el formulario, sinó se retornará el código de error especificado en la librería.

Al introducir la matrícula y el producto, IT8000 mostrará el mensaje anterior por pantalla, momento en el que hemos obtenido el peso inicial.

Page 70: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 70 -

Cantidad_cargar (IP, Bascula, Matricula, Carga, Producto):

Al enviar el peso a cargar, el visor IT8000 queda a la espera de confirmación por parte del operador para iniciar la carga. Simulando el peso en báscula

Estado del visor IT8000 de la báscula 1, una vez ha aceptado el operador y antes de proceder a la entrega de producto.

Estado del visor IT8000 cuando la carga está en curso (vamos simulando el aumento de peso con el potenciómetro).

Page 71: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 71 -

Peso_final (IP, Bascula):

Seguimos cargando hasta llegar a los 5000 Kg que habíamos establecido.

Finalmente, una vez cargados los 5000 Kg, IT8000 queda a la espera del peso final.

Page 72: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 72 -

Una vez seleccionado el peso final, aparece en el visor IT8000 y muestra un mensaje que ya se pueden retirar seguridades, que ya se puede retirar el camión cisterna. Finalmente:

Debemos retirar el camión de la báscula para que IT8000 deje de mostrar el mensaje “Retirar Seguridades”

Una vez retirado el camión, volvemos al estado inicial.

Page 73: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 73 -

6. IMPLEMENTACIÓN

6.1 Interfaz

6.1.1 Accuload.dll

'LIBRERIA VÍNCULO DINÁMICO: Accuload.dll 'EMPRESA: REPSOL-YPF 'DEPARTAMENTO: Control Avanzado y Sistemas (C.A.S.) 'DISEÑADOR: Iván López Calero 'DESCRIPCION: Librería DLL (Dynamic Link Libray) que nos permite trabajar a bajo nivel con el 'hardware de TECNOIL ACCULOAD III-X. En esta librería se implementa la conectividad con el hardware, 'mediante el convertidor Ethernet -> Serial LANTRONIX MSS100, además se proporcionan las funciones 'para enviar y recibir datos con el hardware según el protocolo especificado. 'REFERENCIAS ESENCIALES: 'Todas las librerias vienen por defecto en Windows, ubicadas en ../System 32 'wsock32.dll 'ws2_32.dll 'kernel32.dll Option Explicit Private Const NUM_ARGS = 7 'Constantes para gestionar tramas Private Const LONGITUD_FIJA = 5 Private Const SOCKET_ERROR = -1 'Constantes para tratamiento de errores Private Const ERROR_PARAMETRO = -2 Private Const ERROR_LRC = -3 Private Const SUCCESSFUL = 0 Private Const WINSOCK_VERSION = &H101 'Número de versión de Winsock Public Const DLL_PROCESS_DETACH = 0 Public Const DLL_PROCESS_ATTACH = 1 'Constantes punto fr entrada de Accuload.dll Public Const DLL_THREAD_ATTACH = 2 Public Const DLL_THREAD_DETACH = 3 Private Const ICMP_SUCCESS As Long = 0

Page 74: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 74 -

'Llamadas a las funciones que usaremos de las DLL de Windows wsock32.dll, ws2_32.dll y kernel32.dll Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequested As Integer, lpWSAData As WSADATA) As Long Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal Name As String) As Long Private Declare Function htons Lib "WSOCK32.DLL" (ByVal hostshort As Integer) As Integer Private Declare Function socket Lib "WSOCK32.DLL" (ByVal af As Long, ByVal prototype As Long, ByVal protocol As Long) As Long Private Declare Function Connect Lib "WSOCK32.DLL" Alias "connect" (ByVal s As Long, Name As SOCKADDR, ByVal namelen As Long) As Long Private Declare Function Send Lib "WSOCK32.DLL" Alias "send" (ByVal s As Long, buf As Any, ByVal Length As Long, ByVal Flags As Long) As Long Private Declare Function Recv Lib "WSOCK32.DLL" Alias "recv" (ByVal s As Long, buf As Any, ByVal Length As Long, ByVal Flags As Long) As Long Private Declare Function vbselect Lib "ws2_32.dll" Alias "select" (ByVal nfds As Long, ByRef readfds As Any, ByRef writefds As Any, ByRef exceptfds As Any, ByRef Timeout As Long) As Long Private Declare Function CloseSocket Lib "WSOCK32.DLL" Alias "closesocket" (ByVal s As Long) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long Private Declare Function inet_addr Lib "WSOCK32.DLL" (ByVal cp As String) As Long Private Declare Function IcmpSendEcho Lib "icmp.dll" _ (ByVal IcmpHandle As Long, _ ByVal DestinationAddress As Long, _ ByVal RequestData As String, _ ByVal RequestSize As Long, _ ByVal RequestOptions As Long, _ ReplyBuffer As ICMP_ECHO_REPLY, _ ByVal ReplySize As Long, _ ByVal Timeout As Long) As Long '''''''''''''''''''''''''''''''' ESTRUCTURA DE DATOS ''''''''''''''''''''''''''''''''' Private Type IP_OPTION_INFORMATION Ttl As Byte Tos As Byte Flags As Byte OptionsSize As Byte OptionsData As Long End Type Public Type ICMP_ECHO_REPLY address As Long

Page 75: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 75 -

Status As Long RoundTripTime As Long DataSize As Long Reserved As Integer ptrData As Long Options As IP_OPTION_INFORMATION Data As String * 250 End Type 'Estructura específica de Windows. 'Almacena la información acerca de la iniciación de la librería WS2_32.dll, tras la llamada a la función WSAStartup() en IniciarSocket() Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription As String * 257 szSystemStatus As String * 129 iMaxSockets As Long iMaxUdpDg As Long lpVendorInfo As Long End Type 'Almacena la información referente al host. Private Type HOSTENT h_name As Long h_aliases As Long h_addrtype As Integer h_length As Integer h_addr_list As Long End Type 'Almacena información acerca de la familia de protocolos con la cual se va a trabajar. Private Type SOCKADDR sin_family As Integer sin_port As Integer sin_addr As Long sin_zero As String * 8 End Type Private Const AF_INET = 2 'Constante que indica que trabajamos con TCP/IP Private Const SOCK_STREAM = 1 'Constante que define el socket como orientado a la conexión. Dim wsockinfo As WSADATA ' Información sobre Winsock Dim sock As Long ' Número de socket obtenido Dim RetVal As Long ' Valor de retorno genérico Dim pHostinfo As Long ' Puntero con información del servidor LANTRONIX Dim hostinfo As HOSTENT ' Información sobre el servidor LANTRONIX Dim pIPAddress As Long ' Puntero a la IP del servidor LANTRONIX Dim ipAddress As Long ' Dirección IP del servidor LANTRONIX Dim sockinfo As SOCKADDR ' Información sobre el socket Dim Buffer As String ' Buffer de comunicaciones Dim reply As String ' Respuesta del servidor LANTRONIX

Page 76: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 76 -

'Estructura necesaria para usar la llamada select y consultar si se han recibido datos. Private Type fd_set fd_count As Long fd_array(1 To 64) As Long End Type ' IP:Puerto pasado por parámetro Private DireccionIp As String Private Puerto As Integer Private ItLRCreceived As Integer 'Iteraciones máxima de recursividad en caso de error de LRC. Private ItLRCsend As Integer '''''''''''''''''''''''''''''''' PUNTO ENTRADA DLL ''''''''''''''''''''''''''''''''' 'Estructura de una DLL típica, todas las DLL estándar Win32 la deben contener Private Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean Select Case fdwReason Case DLL_PROCESS_DETACH 'El proceso descarga la DLL Case DLL_PROCESS_ATTACH 'Se lanza cuando un procesao carga la DLL. DllMain = True Case DLL_THREAD_ATTACH 'El proceso esta recargando la DLL Case DLL_THREAD_DETACH 'El proceso esta descargando una DLL End Select End Function '''''''''''''''''''''''''''''''' FUNCIONES y METODOS PRIVADOS ''''''''''''''''''''''''''''''''' Public Function ping(sAddress As Variant) As Long Dim hIcmp As Long Dim lAddress As Long Dim lTimeOut As Long Dim StringToSend As String Dim reply As ICMP_ECHO_REPLY ping = -1 Call WSAStartup(WINSOCK_VERSION, wsockinfo) StringToSend = "Test Conexion" lTimeOut = 500 'ms 'Timeout lAddress = inet_addr(sAddress) 'Convertir @IP a long If (lAddress <> -1) And (lAddress <> 0) Then 'Creamos la estructura para la respuesta hIcmp = IcmpCreateFile() If hIcmp Then 'Ping a la @IP destino Call IcmpSendEcho(hIcmp, lAddress, StringToSend, Len(StringToSend), 0, reply, Len(reply), lTimeOut)

Page 77: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 77 -

ping = reply.Status 'Respuesta con el estado IcmpCloseHandle hIcmp End If End If WSACleanup End Function 'Función SocketInitialize: Nos permite inicializar la dll de sockets. 'Retorna: 0 - si todo ha ido bien. Private Function SocketInitialize() As Long RetVal = WSAStartup(WINSOCK_VERSION, wsockinfo) SocketInitialize = RetVal End Function 'Método SocketClose: Permite cerrar el socket y finalizar la dll de sockets. 'Retorna: 0 - si todo ha ido bien. Private Sub SocketClose() RetVal = CloseSocket(sock) RetVal = WSACleanup() End Sub 'Función SocketCreate: Crea un socket con LANTRONIX de Accuload. 'Retorna: 0 - si todo ha ido bien. ' -1 - en caso de error. Private Function SocketCreate(ServName As String, ServPort As Integer) As Long 'Obtenemos un puntero con información del servidor LANTRONIX pHostinfo = gethostbyname(ServName) If pHostinfo = 0 Then 'Si ha habido un error, abortamos. SocketCreate = SOCKET_ERROR SocketClose Exit Function Else 'Si todo ha ido bien... CopyMemory hostinfo, ByVal pHostinfo, Len(hostinfo) 'Copiamos el contenido obtenido a nuestra estructura. If hostinfo.h_addrtype <> AF_INET Then 'Si el host no admite TCP/IP abortamos. SocketCreate = SOCKET_ERROR SocketClose Exit Function Else 'Si admite TCP/IP... CopyMemory pIPAddress, ByVal hostinfo.h_addr_list, 4 'Obtenemos puntero a la IP y posteriormente su valor. CopyMemory ipAddress, ByVal pIPAddress, 4 sock = socket(AF_INET, SOCK_STREAM, 0) 'Creamos socket TCP/IP orientado a conexión. If sock = &HFFFFFFFF Then SocketCreate = SOCKET_ERROR SocketClose Exit Function Else End If

Page 78: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 78 -

End If End If 'Rellenamos la siguiene estructura con información acerca del socket. With sockinfo .sin_family = AF_INET 'Protocolo TCP/IP .sin_port = htons(ServPort) 'Conectar al puerto especificado por parámetro. .sin_addr = ipAddress 'Dirección IP del servidor LANTRONIX para Accuload. .sin_zero = String(8, vbNullChar) 'Campo no usado End With RetVal = Connect(sock, sockinfo, Len(sockinfo)) SocketCreate = RetVal End Function 'Función SocketSendData: Nos permite enviar datos a Accuload. 'Retorna: Número de bytes transferidos. Private Function SocketSendData(Buffer As String) As Long SocketSendData = Send(sock, ByVal Buffer, Len(Buffer), 0) End Function 'Función IsDataAvailable: Nos permite verificar si se han recibido 'datos. Usada junto con SocketReceiveData nos permite 'caputar los datos únicamente cuando esten disponibles. 'Retorna: True - Hay datos disponibles ' False - No hay datos disponibles Private Function IsDataAvailable(lngSocket As Long) As Boolean Dim udtRead_fd As fd_set Dim udtWrite_fd As fd_set Dim udtError_fd As fd_set Dim lngSocketCount As Long 'Consultamos con un Timeout de 5ms. udtRead_fd.fd_count = 1 'Hay un único socket udtRead_fd.fd_array(1) = lngSocket 'Número de socket obtenido lngSocketCount = vbselect(0&, udtRead_fd, udtWrite_fd, udtError_fd, 5) IsDataAvailable = CBool(lngSocketCount) ' > 0 Datos disponibles ; 0 = Sin datos. End Function 'Función SocketReceiveData: Retorna una cadena que contiene la 'respuesta proporcionada por Accuload. 'En caso de error, devolvemos un -1. Private Function SocketReceiveData() As String Buffer = Space(128) ' Reservamos 128 bytes para el buffer de recepción RetVal = Recv(sock, ByVal Buffer, Len(Buffer), 0) If RetVal = SOCKET_ERROR Then SocketReceiveData = SOCKET_ERROR Else 'Devolvemos únicamente los caracteres, empezando por la izquierda, no nulos.

Page 79: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 79 -

SocketReceiveData = Left(Buffer, RetVal) End If End Function Public Sub SetIP(IP As Variant) If IsString(IP) Then DireccionIp = IP End If End Sub Public Sub SetPort(Port As Integer) Puerto = Port End Sub 'Función IsString: Retorna un valor booleano, indicando si la variable de tipo variant pasada como 'argumento contiene una cadena de carácteres. Private Function IsString(Var As Variant) As Boolean If VarType(Var) = vbString Then IsString = True Else IsString = False End If End Function 'Función String_To_VectorOfByte: Convierte una cadena de carácteres en un vector de bytes. 'Retorna: Vector de bytes con la conversión realizada. Private Function String_To_VectorOfByte(Cadena As String) As Byte() Dim Vector() As Byte Dim I As Integer 'Convertimos String a vector de bytes ReDim Vector(0 To Len(Cadena)) For I = 1 To Len(Cadena) Vector(I - 1) = Asc(Mid(Cadena, I, 1)) Next String_To_VectorOfByte = Vector() End Function 'Función CalcLRC: Calcula el código de redundáncia cíclica del vector Mens(), desde la posición ini 'hasta la fin. Private Function CalcLRC(Mens() As Byte, ini As Integer, fin As Integer) As Byte Dim lrc As Byte Dim I As Integer 'Calculamos el LRC For I = ini To fin lrc = lrc Xor Mens(I) 'A1 Xor A2 Xor ... ETX Next CalcLRC = lrc 'Retornamos un byte con el valor. End Function

Page 80: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 80 -

'Función CheckLRC: Comprueba el código de redundáncia cíclica de la trama recibida. 'Devuelve cierto si es correcto y falso en caso contrario. Private Function CheckLRC(Trama As String) As Boolean Dim Respuesta() As Byte ItLRCreceived = ItLRCreceived + 1 'Convertimos String a vector de bytes para su tratamiento. Respuesta = String_To_VectorOfByte(Trama) 'Si el LRC es correcto devolvemos cierto, en caso contrario devolvemos falso. If Respuesta(UBound(Respuesta) - 2) = CalcLRC(Respuesta, LBound(Respuesta) + 2, UBound(Respuesta) - 3) Then CheckLRC = True Else CheckLRC = False End If End Function 'Función SendAndReceive: Envía un paquete de datos a Accuload siguiendo las especificaciones del protocolo 'y captura la respuesta. Además, en caso de error en la verificación del LRC, ejecuta la función recursivamente 'a fin de obtener el valor correcto y no obtener valores alterados por el medio físico. Private Function SendAndReceive(Trama As String) As String Dim Datos As String SendAndReceive = SOCKET_ERROR If SocketSendData(Trama) = SOCKET_ERROR Then 'Enviamos la trama preparada a Accuload SendAndReceive = "-1" SocketClose Exit Function End If 'Comprobamos si Accuload ya ha respondido, en caso afirmativo, obtenemos los datos. If IsDataAvailable(sock) Then Datos = SocketReceiveData 'En caso de error de cálculo del LRC, aplicamos recursividad hasta resolver el error(reenviamos la trama las veces que haga falta). If CheckLRC(Datos) = False And ItLRCreceived < 10 Then Datos = SendAndReceive(Trama) End If Else 'Accuload ha recibido la trama con un error de LRC ItLRCsend = ItLRCsend + 1 If ItLRCsend < 10 Then Datos = SendAndReceive(Trama) End If End If SendAndReceive = Datos If ItLRCreceived >= 10 Or ItLRCsend >= 10 Then SendAndReceive = ERROR_LRC End If End Function

Page 81: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 81 -

'Función ReceiveStruct: Se encarga de procesar la trama recibida, retornando únicamente la información 'relevante, de la respuesta proporcionada por Accuload. Private Function ReceiveStruct(Response As String) As String 'Estructura del mensaje recibido: [NL STX A1 A2 text ETX LRC PAD] ReceiveStruct = Response 'Si no hay error de LRC ni de conexión, procesamos la trama, eligiendo únicamente la tira de bytes "text". If Response <> "-1" And Response <> "-3" Then ReceiveStruct = Mid(Response, 5, Len(Response) - NUM_ARGS) End If End Function 'Función SendStruct: A partir del parámetro, que es la instrucción convertida a un vector de bytes, 'se obtiene la trama completa, según el protocolo de comunicación que especificado. Private Function SendStruct(cmd() As Byte) As Byte() Dim Msg() As Byte '0..255 Dim I As Integer 'Estructura del mensaje a enviar: [STX A1A2 Text ETX LRC] 'Redimensionar array. ReDim Msg(0 To LONGITUD_FIJA + UBound(cmd) + 1) 'Longitud del mensaje variable según la instrucción Msg(0) = &H2 'STX Msg(1) = &H30 'A1 'A1A2=@01 Msg(2) = &H31 'A2 For I = LBound(cmd) To UBound(cmd) 'Text Msg(I + 3) = cmd(I) 'Añadimos la instrucción en la trama Next Msg(UBound(cmd) + 3) = &H3 'ETX Msg(UBound(cmd) + 4) = CalcLRC(Msg(), LBound(Msg) + 1, UBound(Msg) - 1) 'LRC SendStruct = Msg() 'Retornamos la trama totalmente estructurada. End Function '''''''''''''''''''''''''''''''' FUNCIONES y METODOS PUBLICOS ''''''''''''''''''''''''''''''''' 'Función que establece un socket, medianete el Convertidor Ethernet/Serie, con Accuload. 'Retorna: 0 - Si todo ha ido bien ' -1 - Si no se puede conectar. ' -2 - Si el parámetro no es una cadena.

Page 82: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 82 -

Public Function ConnectToAccuload(ByVal IP As Variant, ByVal Port As Integer) As Integer 'Si el parámetro IP no es una cadena, devolvemos un error y abortamos. If Not IsString(IP) Then ConnectToAccuload = ERROR_PARAMETRO Exit Function End If ConnectToAccuload = SOCKET_ERROR DireccionIp = IP Puerto = Port 'Guardamos IP:Puerto If SocketInitialize <> SUCCESSFUL Then 'Iniciamos los servicios de Winsock. SocketClose Exit Function End If If SocketCreate(DireccionIp, Puerto) <> SUCCESSFUL Then 'Creamos un socket con el convertidor Ethernet/Serie SocketClose Exit Function End If ConnectToAccuload = SUCCESSFUL 'Si todo ha ido bien, devolveremos un 0. End Function 'Método que cierra los servicios de Winsock y el socket establecido con Accuload. Public Sub CloseAccuload() 'OK SocketClose End Sub 'Función SetInstruction: A partir del parámetro "Instruction", que contiene una cadena de carácteres 'con una instrucción válida, la envía a Accuload y recibe la parte informativa de la respuesta, tratando 'los errores que se puedan producir. 'Retorna: -1 - Error de conexión ' -2 - El parámetro no es una cadena Public Function SetInstruction(ByVal Instruction As Variant) As String Dim I As Integer Dim Trama As String Dim Instruccion() As Byte Dim Ins() As Byte ItLRCreceived = 0 ItLRCsend = 0 If Not IsString(Instruction) Then SetInstruction = ERROR_PARAMETRO Exit Function End If

Page 83: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 83 -

Trama = Instruction 'Transformamos a vector de bytes la instrucción en formato String que nos llega por parámetro. Instruccion = String_To_VectorOfByte(Trama) Ins = SendStruct(Instruccion()) For I = LBound(Ins) To UBound(Ins) Trama = Trama & Chr(Ins(I)) Next SetInstruction = ReceiveStruct(SendAndReceive(Trama)) End Function

Page 84: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 84 -

6.1.2 API Accuload

'MODULO: AcculoadAPI.bas 'DISEÑADOR: Iván López Calero 'EMPRESA: REPSOL-YPF 'DESCRIPCION: API (Application Program Interface) que permite, de cara a una aplicación, ' tratar y facilitar los accesos al hardware TECNOIL ACCULOAD III-X, mediante la libreria ' de enlaces dinámicos "Accuload.dll". ' Dicha API ya ofrece las instrucciones a las llamadas esenciales que necesitaremos, pero admite ' cualquier comando válido ' Aplicación -> API -> DLL -> Accuload Option Explicit 'Obligamos a declar las variables 'CONSTANTES Y PROPIEDADES 'Constantes Privadas Private Const VOL_POS = 21 Private Const FIN_TRANSICION = 6 Public Const ACCIP = "172.27.48.249" Public Const ACCPORT = 3001 'Constantes públicas Public Const RES_NO_VALIDA = "NO" Public Const RES_VALIDA = "OK" Public Const PESO_NO_VALIDO = 999999 Public Const ERROR_PARAM = -2 Public Const ERROR_CON = -1 Public Const PING_ERROR = -3 Public Const SUCCESSFUL = 0 ' Declaraciones de las funciones contenidas en Accuload.dll que necesitamos. Public Declare Function ping Lib "Accuload.dll" (IP As Variant) As Long Public Declare Function ConnectToAccuload Lib "Accuload.dll" (ByVal IP As Variant, ByVal port As Integer) As Integer Public Declare Function SetInstruction Lib "Accuload.dll" (ByVal Ins As Variant) As String Public Declare Sub CloseAccuload Lib "Accuload.dll" ()

Page 85: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 85 -

'METODOS Y FUNCIONES 'Función MTrim: Puesto que las cadenas retornanadas desde la DLL son unicode, quitamos los Chr(0), 'puesto que en una cadena se interpreta como centinela. Private Function MTrim(ByVal s As String) As String Dim i As Long Dim res As String For i = 1 To Len(s) If Mid(s, i, 1) <> Chr(0) Then res = res & Mid(s, i, 1) End If Next MTrim = res End Function 'Función InfoAccuload: En caso que Accuload genere un error en la respuesta, esta función es capaz de decodificar el 'el código de error en una cadena informativa. Public Function InfoAccuload(Codigo As String) As String Select Case Codigo Case ERROR_CON: InfoAccuload = "ERROR ACCULOAD : CONEXION PERDIDA" Case PING_ERROR: InfoAccuload = "ERROR ACCULOAD : IMPOSIBLE REALIZAR PING" Case ERROR_PARAM: InfoAccuload = "ERROR ACCULOAD : ERROR EN PARAMETRO" Case PESO_NO_VALIDO: InfoAccuload = "ERROR ACCULOAD : ERROR COMPROBANDO DATOS" Case SUCCESSFUL: InfoAccuload = "INFO ACCULOAD : OK" Case "NO00": InfoAccuload = "ERROR ACCULOAD : COMANDO_INEXISTENTE" Case "NO01": InfoAccuload = "ERROR ACCULOAD : EN_MODO_PROGRAMA" Case "NO02": InfoAccuload = "ERROR ACCULOAD : RELEASED" Case "NO03": InfoAccuload = "ERROR ACCULOAD : VALOR_RECHAZADO" Case "NO04": InfoAccuload = "ERROR ACCULOAD : FLUJO_ACTIVO" Case "NO05": InfoAccuload = "ERROR ACCULOAD : TRANSICION_NUNCA_HECHA" Case "NO06": InfoAccuload = "ERROR ACCULOAD : OPERACION_NO_PERMITIDA" Case "NO07": InfoAccuload = "ERROR ACCULOAD : MODO_CONTROL_ERRONEO" Case "NO08": InfoAccuload = "ERROR ACCULOAD : TRANSICION_EN_PROGRESO" Case "NO09": InfoAccuload = "ERROR ACCULOAD : CONDICION_DE_ALARMA" Case "NO10": InfoAccuload = "ERROR ACCULOAD : ALMACENAMIENTO_COMPLETO" Case "NO11": InfoAccuload = "ERROR ACCULOAD : OPERACION_FUERA_DE_SECUENCIA" Case "NO12": InfoAccuload = "ERROR ACCULOAD : ALIMENTACION_DETENIDA_DURANTE_TRANSICION" Case "NO13": InfoAccuload = "ERROR ACCULOAD : AUTORIZACION" Case "NO14": InfoAccuload = "ERROR ACCULOAD : PROGRAMA_NO_CIFRADO"

Page 86: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 86 -

Case "NO15": InfoAccuload = "ERROR ACCULOAD : PANTALLA_O_TECLADO_EN_USO" Case "NO16": InfoAccuload = "ERROR ACCULOAD : NO_TICKET_EN_IMPRESORA" Case "NO17": InfoAccuload = "ERROR ACCULOAD : NO_DATOS_PENDIENTES_DE_TECLADO" Case "NO18": InfoAccuload = "ERROR ACCULOAD : NO_TRANSICION_EN_PROGRESO" Case "NO19": InfoAccuload = "ERROR ACCULOAD : OPCION_NO_INSTALADA" Case "NO20": InfoAccuload = "ERROR ACCULOAD : INICIAR_DESPUES_DE_PARAR_RETARDO" Case "NO21": InfoAccuload = "ERROR ACCULOAD : PERMISO_RETARDO_ACTIVADO" Case "NO22": InfoAccuload = "ERROR ACCULOAD : RESPUESTA_IMPRESORA_PENDIENTE" Case "NO23": InfoAccuload = "ERROR ACCULOAD : MEDIDOR_DESHABILITADO" Case "NO24": InfoAccuload = "ERROR ACCULOAD : DEBERIA_SER_EN_MODO_PROGRAMA" Case "NO25": InfoAccuload = "ERROR ACCULOAD : ALARMA_DURANTE_TRANSICION" Case "NO26": InfoAccuload = "ERROR ACCULOAD : TIPO_DE_VOLUMEN_NO_SELECCIONADO" Case "NO27": InfoAccuload = "ERROR ACCULOAD : UNA_RECETA_DEBE_SER_HABILITADA" Case "NO28": InfoAccuload = "ERROR ACCULOAD : LIMITE_POR_BATCH_ALCANZADO" Case "NO29": InfoAccuload = "ERROR ACCULOAD : COMPROBANDO_ENTRADAS" Case "NO30": InfoAccuload = "ERROR ACCULOAD : PRODUCTO_RECIPIENTE_O_ADITIVO_NO_ASIGNADO" Case "NO31": InfoAccuload = "ERROR ACCULOAD : ARGUMENTO_INVALIDO_PARA_CONFIGURACION" Case "NO32": InfoAccuload = "ERROR ACCULOAD : TECLA_NUNCA_APRETADA" Case "NO33": InfoAccuload = "ERROR ACCULOAD : MAXIMO_ALARMAS_ACTIVAS_EN_USO" Case "NO34": InfoAccuload = "ERROR ACCULOAD : TRANSICION_NO_STANDBY" Case "NO35": InfoAccuload = "ERROR ACCULOAD : BRAZO_FUERA_DE_POSICION" Case "NO36": InfoAccuload = "ERROR ACCULOAD : TARJETA_REQUERIDA" Case "NO37": InfoAccuload = "ERROR ACCULOAD : DATOS_NO_DISPONIBLES" Case "NO38": InfoAccuload = "ERROR ACCULOAD : DEMASIADOS_ADITIVOS_COMPARTIDOS_SELECCIONADOS" Case "NO39": InfoAccuload = "ERROR ACCULOAD : NO_HAY_BATCH_PARA_ESTE_BRAZO" Case "NO90": InfoAccuload = "ERROR ACCULOAD : DEBERIA_USAR_MINI_PROTOCOL" Case "NO91": InfoAccuload = "ERROR ACCULOAD : BUFFER_ERROR" Case "NO92": InfoAccuload = "ERROR ACCULOAD : TECLADO_BLOQUEADO" Case "NO93": InfoAccuload = "ERROR ACCULOAD : ERROR_DE_DATOS" Case "NO94": InfoAccuload = "ERROR ACCULOAD : NO_EN_MODO_PROGRAMA" Case "NO95": InfoAccuload = "ERROR ACCULOAD : SEGURIDAD_NO_ACCESIBLE" Case "NO99": InfoAccuload = "ERROR ACCULOAD : ERROR_INTERNO"

Page 87: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 87 -

Case Else: InfoAccuload = "INFO ACCULOAD : OK" End Select End Function 'Función EnviarReceta: Envia según la receta, la instrucción correspondiente. Public Function EnviarReceta(Receta As String) As String Dim Instruccion As String Select Case Receta 'Seleccionamos instrucción según receta. Case "K6I": Instruccion = "AB 100" Case "K6P": Instruccion = "AB 200" Case "K6M": Instruccion = "AB 400" End Select EnviarReceta = MTrim(SetInstruction(Instruccion)) End Function 'Función EnviarPeso: Envia a Accuload el Peso que le proporciona la base de datos de SPC. 'Dicho Peso siempre será válido, por lo que no hace falta tratarlo. Public Function EnviarPeso(peso As String) As String Dim Instruccion As String Instruccion = "SB " & peso 'Preparamos la instrucción EnviarPeso = MTrim(SetInstruction(Instruccion)) 'La enviamos y posteriormente recibimos la respuesta de Accuload End Function 'Función EnviarInstrucción: Envía la instrucción pasada por parametro a Accuload. Si es inválida no ' se obtendrá respuesta. Public Function EnviarInstruccion(Cmd As String) As String EnviarInstruccion = MTrim(SetInstruction(Cmd)) End Function 'Función PesoFinal: Consulta con Accuload si hay una transición en curso, en caso contrario devuelve el peso. Public Function PesoFin() As String 'Solo devuelve cuando accuload ha acabado de cargar. Dim Response As String Dim peso As String Dim i As Integer Response = MTrim(SetInstruction("EQ")) If Mid(Response, 2, 1) = FIN_TRANSICION Then 'Si la transicion ha finalizado... Response = MTrim(SetInstruction("RB 01 M")) peso = Mid(Response, VOL_POS, Len(Response) - VOL_POS + 1) PesoFin = peso Else PesoFin = PESO_NO_VALIDO End If End Function

Page 88: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 88 -

'Función Carga Accuload: Establece automáticamente el producto y cantidad deseada seleccionada desde 'el formulario de SPC por parte del operador. Public Function CargaAccuload(Punto_Carga As String, Cantidad As String) As String Dim Response As String Response = MTrim(EnviarReceta(Punto_Carga)) If Response = RES_VALIDA Then Response = MTrim(EnviarPeso(Cantidad)) End If CargaAccuload = Response End Function

Page 89: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 89 -

6.1.3 API Básculas

'MODULO: BasculasAPI.bas 'DISEÑADOR: Iván López Calero 'EMPRESA: REPSOL-YPF 'DESCRIPCION: API (Application Program Interface) que permite, de cara a una aplicación, ' tratar los códigos de error en relación a la librería DLL-ActiveX skcIT9e.dll. ' Aplicación <- API <- sckIT9e.dll Option Explicit Public Const BASCULA_1 = 1 Public Const BASCULA_2 = 2 Public Const PESO_MINIMO = 1000 Public Const BASIP = "172.27.49.250" Public Const ERROR_CONEXION = -1 Public Const ER_DAT = -4 Public Const ERROR_DATOS = 999999 Public Function InfoBascula(Mensaje As String) As String Select Case Mensaje Case ERROR_CONEXION: InfoBascula = "ERROR BASCULA : CONEXION PERDIDA" Case ERROR_DATOS: InfoBascula = "ERROR BASCULA : ERROR COMPROBANDO DATOS" Case ER_DAT: InfoBascula = "ERROR BASCULA : ERROR COMPROBANDO DATOS" Case PING_ERROR: InfoBascula = "ERROR BASCULA : IMPOSIBLE REALIZAR PING" Case Else: InfoBascula = "INFO BASCULA : OK" End Select End Function

Page 90: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 90 -

6.1.4 AccuBas.ocx

'CONTROL ACTIVE-X: AccuBas.ocx 'EMPRESA: REPSOL-YPF 'DEPARTAMENTO: Control Avanzado y Sistemas (C.A.S.) 'DISEÑADOR: Iván López Calero 'DESCRIPCION: Control ActiveX (*.ocx) que permite a SPC y a cualquier aplicación, comunicarse con las 'Básculas y con TECNOIL ACCULOAD III-X, a partir de los 3 métodos públicos definidos en el control. 'Además, dicho control crea un log mensual con los eventos sucedidos entre la aplicación y 'el hardware. 'REFERENCIAS ESENCIALES 'Accuload.dll 'Basculas.dll 'Scrrun.dll para FileSystemObject ' Aplicación -> *.ocx -> *.dll -> Hardware ' SPC -> AccuBas.ocx -> (Accuload.dll; sckIT9E.dll) -> Hardware (ACCULOAD III-X y IT9000E) 'Invisible at runtime = True Option Explicit Private PesoIni As String Private NumBas As String Private File As FileSystemObject 'Variables Globales Privadas Private LogCargadero As TextStream Private Basculas As sckIT9e.cIT9e Private DiaAnterior As Integer Private SocketEstablecido As Boolean Private MatriculaAnterior As String Private InfoTag(2) As TagList Private SPE As Boolean Private DCC As Boolean Private SPS As Boolean Type DatosCarga Num_bascula As String Matricula As String PuntoCarga As String End Type Private R As DatosCarga Private Const ETILENO = 1 Private Const PROPELENTES = 2 Private Const UNLOCKED = "0"

Page 91: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 91 -

Private Const LOCKED = "1" Private Const ACCU_CARGANDO = "1" Private Const ACCU_PARADO = "0" 'Método que convierte un valor de un dígito a dos dígitos Private Function RellenarDigitos(Num As Integer) As String Dim n As String n = CStr(Num) If Len(n) = 1 Then 'Sólo rellenaremos con un 0 delante cuando el valor sera de un dígito. RellenarDigitos = "0" & n Else RellenarDigitos = n End If End Function 'Función que retorna la hora actual en formato HH:MM:SS Private Function HoraActual() As String HoraActual = "Día:" & RellenarDigitos(DateTime.Day(Now)) & " Hora:" & RellenarDigitos(DateTime.Hour(Now)) & ":" & RellenarDigitos(DateTime.Minute(Now)) & ":" & RellenarDigitos(DateTime.Second(Now)) End Function 'Función que retorna un String con el mes Actual Private Function MesActual() As String Select Case DateTime.Month(Now) Case 1: MesActual = "ENERO" Case 2: MesActual = "FEBRERO" Case 3: MesActual = "MARZO" Case 4: MesActual = "ABRIL" Case 5: MesActual = "MAYO" Case 6: MesActual = "JUNIO" Case 7: MesActual = "JULIO" Case 8: MesActual = "AGOSTO" Case 9: MesActual = "SEPTIEMBRE" Case 10: MesActual = "OCTUBRE" Case 11: MesActual = "NOVIEMBRE" Case 12: MesActual = "DICIEMBRE" End Select End Function 'Cuando se inicie el control, instanciamos los objetos necesarios. Private Sub UserControl_Initialize() Dim estado As String Dim Name As String Dim Mes As String Dim i As Integer 'Inicializamos Variables booleanas SPE = False DCC = False SPS = False NumBas = 0

Page 92: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 92 -

DiaAnterior = 0 SocketEstablecido = False MatriculaAnterior = "/" If piut_connect("BASOCX") = SUCCESSFUL Then InfoTag(0).TagName = "BASLOCK" InfoTag(1).TagName = "BAS2ACCU" Call pipt_findpoint(InfoTag(0).TagName, InfoTag(0).Point) Call pipt_findpoint(InfoTag(1).TagName, InfoTag(1).Point) Call pisn_putsnapshot(InfoTag(1).Point, ACCU_PARADO, 0, 0) piut_disconnect End If 'Instanciamos Set Basculas = New sckIT9e.cIT9e Set File = CreateObject("Scripting.FileSystemObject") Name = "C:\CARGADERO - " & MesActual() & " " & DateTime.Year(Now) & ".log" If File.FileExists(Name) = False Then 'Si el fichero de log no existía... 'Instanciamos e inicializamos el fichero de log con un título. Set LogCargadero = File.CreateTextFile(Name) LogCargadero.WriteLine "============================ INFORMACION ENTRE SPC, BASCULAS Y ACCULOAD ============================" LogCargadero.WriteBlankLines 1 LogCargadero.WriteLine "**************************************** " & MesActual() & " " & DateTime.Year(Now) & " ****************************************" LogCargadero.WriteBlankLines 2 Else 'Lo abrimos en modo "Añadir", para que vaya adjuntando el texto al final del fichero. Set LogCargadero = File.OpenTextFile(Name, ForAppending) End If DiaAnterior = DateTime.Day(Now) 'Establecemos comunicación con Accuload If ping(ACCIP) = SUCCESSFUL Then estado = ConnectToAccuload(ACCIP, ACCPORT) If estado = SUCCESSFUL Then 'Conectamos con Accuload SocketEstablecido = True End If Else CloseAccuload estado = PING_ERROR End If LogCargadero.WriteLine (HoraActual() & " - " & InfoAccuload(estado)) End Sub 'Cuando cerremos el control, cerramos el fichero de log. Private Sub UserControl_Terminate() Call pisn_putsnapshot(InfoTag(1).Point, ACCU_PARADO, 0, 0) CloseAccuload LogCargadero.WriteLine (HoraActual() & " - " & "INFO ACCULOAD : Conexión Cerrada") LogCargadero.Close End Sub

Page 93: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 93 -

'Redimensionamos el tamaño del icono del cargadero. Private Sub UserControl_Resize() Image1.Top = 0 Image1.Left = 0 UserControl.Height = Image1.Height UserControl.Width = Image1.Width End Sub 'Función que convierte el punto de carga en un entero 1 o 2, segun sea Etileno o Propelente. Private Function Producto(Punto_Carga As String) As Integer If Punto_Carga = "ETI" Then Producto = 1 Else If Punto_Carga = "K6I" Or Punto_Carga = "K6P" Or Punto_Carga = "K6M" Then Producto = 2 End If End If End Function 'Función que nos permite comprobar si existe comunicación física con Accuload y un socket con Accuload. Private Function PingAccuload() As String If ping(ACCIP) = SUCCESSFUL Then If SocketEstablecido = True Then PingAccuload = RES_VALIDA Else PingAccuload = ConnectToAccuload(ACCIP, ACCPORT) If PingAccuload = SUCCESSFUL Then SocketEstablecido = True PingAccuload = RES_VALIDA Else SocketEstablecido = False CloseAccuload End If End If Else PingAccuload = PING_ERROR End If End Function 'Método usado para sincronizar el acceso a IT9000E, escribe un 0 o 1 en un tag de pi. Private Sub BlockAccess(status As Single) If piut_connect("BASOCX") = SUCCESSFUL Then Call pisn_putsnapshot(InfoTag(0).Point, status, 0, 0) piut_disconnect End If End Sub

Page 94: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 94 -

''''''''''''''''''''''''''' MÉTODOS PÚBLICOS PARA COMUNICACIÓN CON SPC '''''''''''''''''''''''''''' 'El procedimiento retorna el valor por referencia, en el parámetro 'Tipo_Pesada' 'SPC invocará esta función cuando el operador solicite el peso de entrada. Public Sub Pesada_Inicial(Tipo_Pesada As String, Numero_Bascula As String, Matricula As String, Punto_Carga As String, PesoInicial As String, Aviso As String) Dim PIni As String 'Verificamos que el operador ejecuta las instrucciones en el orden establecido. 'En caso contraio mostraremos un error y abortaremos la ejecución del método. If DCC Then Aviso = "ALERTA: Cargando Producto" Exit Sub End If 'Consideramos que SPC, en caso de no introducir los parametros de entrada, no inicializa las cadenas. If Len(Matricula) > 0 And Len(Numero_Bascula) > 0 And Len(Punto_Carga) > 0 Then If ping(BASIP) = SUCCESSFUL Then If R.Num_bascula <> Numero_Bascula Or R.Matricula <> Matricula Or R.PuntoCarga <> Punto_Carga Then R.Num_bascula = Numero_Bascula R.Matricula = Matricula R.PuntoCarga = Punto_Carga BlockAccess (LOCKED) PIni = Basculas.Peso_inicial(BASIP, Numero_Bascula, Matricula, Producto(Punto_Carga)) BlockAccess (UNLOCKED) If PIni <> ERROR_DATOS And PIni <> ERROR_CONEXION And PIni <> PING_ERROR Then PesoInicial = PIni PesoIni = PIni MatriculaAnterior = Matricula SPE = True Else PesoInicial = vbNullChar End If Aviso = InfoBascula(PIni) Else Aviso = "ALERTA: Datos del camión ya introducidos." PesoInicial = vbNullChar End If Else PIni = PING_ERROR Aviso = InfoBascula(PIni) End If LogCargadero.WriteLine (HoraActual() & " - " & "SPE:" & Chr(9) & "B = " & Numero_Bascula & Chr(9) & "M = " & Matricula & Chr(9) & "PC = " & Punto_Carga & " (P = " & Producto(Punto_Carga) & ") " & "PI: " & PesoInicial & " Kg" & Chr(9) & "A: " & Aviso) Else Aviso = "ALERTA: Faltan parametros" End If

Page 95: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 95 -

End Sub 'Dicho método es llamado cuando el operador solicita, desde el formulario de SPC, inicar la carga. Public Sub Cantidad_a_Cargar(Tipo_Pesada As String, Numero_Bascula As String, Matricula As String, Punto_Carga As String, Cantidad As String, Aviso As String) Dim ResAcc As String Dim ResBas As String 'Verificamos que el operador ejecuta las instrucciones en el orden establecido. 'En caso contraio mostraremos un error y abortaremos la ejecución del método. If Not SPE Then Aviso = "ALERTA: Debe obtener PESO INICIAL previamente" Exit Sub End If If DCC Then Aviso = "ALERTA: Cargando Producto" Exit Sub End If 'Si previamente ha obtenido el peso inicial correctamente, procederemos a enviar el peso a cargar. If SPE And Not DCC And Not SPS Then ResBas = RES_VALIDA If ping(BASIP) = SUCCESSFUL Then Select Case CInt(Numero_Bascula) Case BASCULA_1: 'En caso de trabajar con la báscula 1, debemos seleccionar si vamos a cargar etileno o propelentes. 'En caso de abrir la electroválvula de propelentes, un disco ciego se encargará de seleccionar Isobutano o Propel 45. BlockAccess (LOCKED) Call Basculas.Cantidad_cargar(BASIP, BASCULA_1, Matricula, CInt(Cantidad), Producto(Punto_Carga)) BlockAccess (UNLOCKED) DCC = True Case BASCULA_2: 'En caso de cargar con la báscula 2, primero seleccionamos si queremos cargar etileno o propelentes. Select Case Producto(Punto_Carga) Case ETILENO: 'Si vamos a cargar etileno... 'Abrimos la electroválvula con el hardware SERTEC IT8000 BlockAccess (LOCKED) Call Basculas.Cantidad_cargar(BASIP, BASCULA_2, Matricula, CInt(Cantidad), ETILENO) BlockAccess (UNLOCKED) DCC = True Case PROPELENTES: 'Si vamos a cargar propelentes...

Page 96: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 96 -

'Realizaremos un doble control de seguridad. 'Abrimos la válvula de propelentes conectada al hardware SERTEC IT8000, 'que cortará el flujo de producto una vez obtenido el peso a cargar. BlockAccess (LOCKED) Call Basculas.Cantidad_cargar(BASIP, BASCULA_2, Matricula, CInt(Cantidad), PROPELENTES) BlockAccess (UNLOCKED) 'ACCULOAD III-X controlará dos válvulas de propelentes, Isobutano y Propel 45. 'Cortará el flujo de producto una vez entregado. ResAcc = PingAccuload If ResAcc = RES_VALIDA Then 'Si funciona Ping y hay socket ResAcc = CargaAccuload(Punto_Carga, Cantidad) If piut_connect("BASOCX") = SUCCESSFUL Then '1 - Cargando; 0 - Parado; Call pisn_putsnapshot(InfoTag(1).Point, ACCU_CARGANDO, 0, 0) piut_disconnect End If DCC = True End If End Select End Select Else ResBas = PING_ERROR End If Aviso = InfoBascula(ResBas) If Numero_Bascula = BASCULA_2 And Producto(Punto_Carga) = PROPELENTES Then Aviso = Aviso & " | " & InfoAccuload(ResAcc) End If LogCargadero.WriteLine (HoraActual() & " - " & "DCC:" & Chr(9) & "B = " & Numero_Bascula & Chr(9) & "M = " & Matricula & Chr(9) & "PC = " & Punto_Carga & " (P = " & Producto(Punto_Carga) & ") " & "PC: " & Cantidad & " Kg" & Chr(9) & "A: " & Aviso) End If End Sub 'SPC llamará a este método cada vez que el operador lo solicite, sólo retornará un valor válido 'cuando la carga haya sido finalizada. Public Sub Pesada_Final(Tipo_Pesada As String, Numero_Bascula As String, Matricula As String, Punto_Carga As String, PesoFinal As String, Aviso As String) Dim ResAcc As String Dim ResBas As String Dim PesosFinales As String

Page 97: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 97 -

'Verificamos que el operador ejecuta las instrucciones en el orden establecido. If Not SPE And Not DCC Then Aviso = "ALERTA: Debe obtener PESO INICIAL previamente" PesoFinal = vbNullChar Exit Sub End If If SPE And Not DCC Then Aviso = "ALERTA: Se debe ejecutar CANTIDAD A CARGAR previamente" PesoFinal = vbNullChar Exit Sub End If 'Si previamente ha obtenido el peso inicial correctamente y se ha enviado el peso a cargar, 'procederemos a devolver el peso final sólo en caso que haya finalizado. If SPE And DCC And Not SPS Then ResBas = ER_DAT If ping(BASIP) = SUCCESSFUL Then 'Si existe conexión física con la báscula... Select Case CInt(Numero_Bascula) 'Obtenemos el peso final de la báscula 1 Case BASCULA_1: BlockAccess (LOCKED) ResBas = Basculas.Peso_final(BASIP, BASCULA_1) BlockAccess (UNLOCKED) Case BASCULA_2: Select Case Producto(Punto_Carga) 'Si estábamos cargando Etileno... Case ETILENO: BlockAccess (LOCKED) ResBas = Basculas.Peso_final(BASIP, BASCULA_2) BlockAccess (UNLOCKED) 'Si estábamos cargando Propelentes... Case PROPELENTES: 'Si funciona Ping y hay socket ResBas = Basculas.Peso_final(BASIP, BASCULA_2) If ResBas = ERROR_DATOS Then 'Si la báscula aún no ha llegado al peso a cargar... ResAcc = PingAccuload If ResAcc = RES_VALIDA Then ResAcc = PesoFin 'Obtenemos el peso de Accuload If ResAcc <> PESO_NO_VALIDO And ResAcc <> PING_ERROR Then ResBas = Basculas.Peso_en_bascula(BASIP, BASCULA_2) 'Si el peso de Accuload es válido, End If 'obtenemos el peso en báscula como peso final. End If End If End Select End Select

Page 98: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 98 -

Else 'En caso que no exista conexión física con la báscula lo notificamos. ResBas = PING_ERROR End If 'Retornamos un valor de peso final válido. If ResBas <> ERROR_DATOS And ResBas <> ERROR_CONEXION And ResBas <> PING_ERROR And ResBas <> ER_DAT Then PesoFinal = ResBas piut_connect ("BasOCX") '1 - Cargando; 0 - Parado; Call pisn_putsnapshot(InfoTag(1).Point, ACCU_PARADO, 0, 0) piut_disconnect NumBas = Numero_Bascula SPS = True Else 'En caso de carga no finalizada, el operador no visualizará el peso final, pero se 'mostrará el mensaje de error. PesoFinal = vbNullChar End If 'Mostramos información esencial al operador mediante el campo aviso, para saber si el proceso ha ido bien o ha habido un error. PesosFinales = "PF(BAS): " & ResBas & " Kg" Aviso = InfoBascula(ResBas) If Numero_Bascula = BASCULA_2 And Producto(Punto_Carga) = PROPELENTES Then PesosFinales = PesosFinales & " | PF(ACC): " & ResAcc & " Kg" Aviso = Aviso & " | " & InfoAccuload(ResAcc) End If LogCargadero.WriteLine (HoraActual() & " - " & "SPS:" & Chr(9) & "B = " & Numero_Bascula & Chr(9) & "M = " & Matricula & Chr(9) & "Pc = " & Punto_Carga & " (P = " & Producto(Punto_Carga) & ") " & PesosFinales & Chr(9) & "AVISO: " & Aviso) If SPS Then SPE = False DCC = False SPS = False End If End If End Sub

Page 99: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 99 -

6.1.5 Simulador de SPC

'Simulador SPC: Simulador.exe 'EMPRESA: REPSOL-YPF 'DEPARTAMENTO: Control Avanzado y Sistemas (C.A.S.) 'DISEÑADOR: Iván López Calero 'DESCRIPCION: Simulador de SPC. Formulario que integra el Control Active X implementado y va llamando 'a las distintas funciones implementadas en el control, a fin de poderlo testear. 'REFERENCIAS ESENCIALES 'AccuBas.ocx ' *.exe -> *.ocx -> *.dll -> Hardware ' Simulador SPC -> AccuBas.ocx -> (Accuload.dll; sckIT9E.dll) -> Hardware (ACCULOAD III-X y IT9000E) Option Explicit Const NO_INI = "NULL" Public Matricula As String Public Tipo_Pesada As String Public Peso As String Public PesoInicial As String Public PesoFinal As String Public Punto_Carga As String Public BasID As String Public PesoInicialOK As Boolean Public IniciarCargaOK As Boolean Public Aviso As String

Page 100: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 100 -

Private Sub Inicializar() Matricula = NO_INI Tipo_Pesada = NO_INI Peso = NO_INI Punto_Carga = NO_INI BasID = NO_INI Aviso = NO_INI PesoInicial = NO_INI PesoFinal = NO_INI End Sub Private Sub cmdIniciarCarga_Click() Peso = "300" ' SPC indicará este valor, a partir de la matricula (Key), busca en la base de datos y obtiene el valor Cargadero1.Cantidad_a_Cargar Tipo_Pesada, BasID, Matricula, Punto_Carga, Peso, Aviso IniciarCargaOK = True WarningLabel.Caption = Aviso End Sub Private Sub cmdPesoFinal_Click() Cargadero1.Pesada_Final Tipo_Pesada, BasID, Matricula, Punto_Carga, PesoFinal, Aviso VisorPrincipal.Caption = PesoFinal WarningLabel.Caption = Aviso End Sub Private Sub cmdPesoInicial_Click() Cargadero1.Pesada_Inicial Tipo_Pesada, BasID, Matricula, Punto_Carga, PesoInicial, Aviso VisorPrincipal.Caption = PesoInicial WarningLabel.Caption = Aviso End Sub Private Sub ComboPuntoCarga_Click() Select Case ComboPuntoCarga.Text Case "ETI": Punto_Carga = "ETI" Case "K6I": Punto_Carga = "K6I" Case "K6P": Punto_Carga = "K6P" Case "K6M": Punto_Carga = "K6M" End Select End Sub Private Sub ComboBasID_Click() Select Case ComboBasID.Text Case "1": BasID = 1 Case "2": BasID = 2 End Select End Sub Private Sub Form_Load() FormSPC.Caption = "Simulador de SPC"

Page 101: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 101 -

MatriculaText.Text = "RP0000" ComboPuntoCarga.List(ComboPuntoCarga.ListIndex) = "ETI" ComboPuntoCarga.List(ComboPuntoCarga.ListIndex) = "K6I" ComboPuntoCarga.List(ComboPuntoCarga.ListIndex) = "K6P" ComboPuntoCarga.List(ComboPuntoCarga.ListIndex) = "K6M" ComboBasID.List(ComboBasID.ListIndex) = "1" ComboBasID.List(ComboBasID.ListIndex) = "2" End Sub Private Sub MatriculaText_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then Matricula = MatriculaText.Text End If End Sub

Page 102: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 102 -

6.2 Visores

6.2.1 Servicio de datos en tiempo real.

'SERVICE para WINDOWS NT: "AccuBAS PI" 'EMPRESA: REPSOL-YPF 'DEPARTAMENTO: Control Avanzado y Sistemas (C.A.S.) 'DISEÑADOR: Iván López Calero 'DESCRIPCION: Servicio del sistema que se ejecuta automáticamente al iniciar el sistema operativo. 'Su tarea fundamental consiste en escribir en el servidor PI, en intervalos de 1 segundo, las lecturas 'en tiempo real del peso actual en báscula, sólo en caso que podamos acceder a ella. Option Explicit Private Const LOCKED = 1 Private Const UNLOCKED = 0 Private Const BASIP = "172.27.49.250" Private InfoTags(4) As TagList Private PIStat(4) As QERROR Private Basculas As sckIT9e.cIT9e Private Sub Form_Load() On Error GoTo ServiceError If Command = "/i" Then 'Instalamos el servicio 'Instalamos la aplicación como un NT service If NTService.Install Then 'Salvamos el intervalo de tiempo del timer en el Registro NTService.SaveSetting "Parameters", "TimerInterval", "1000" MsgBox NTService.DisplayName & ": Instalado correctamente" Else MsgBox NTService.DisplayName & ": Error al instalar" End If End 'Borrar las claves de registro y desinstalar servicio ElseIf Command = "/u" Then If NTService.Uninstall Then

Page 103: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 103 -

MsgBox NTService.DisplayName & ": Desinstalado correctamente" Else MsgBox NTService.DisplayName & ": Error al desinstalar" End If End 'Parámetro inválido ElseIf Command <> "" Then MsgBox "Parámetro inválido" End End If NTService.StartMode = svcStartAutomatic TimerTag.Interval = CInt(NTService.GetSetting("Parameters", "TimerInterval", "1000")) 'Conectamos el servicio al controlador de servicios de Windows NT NTService.StartService Exit Sub ServiceError: Call NTService.LogEvent(svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description) End Sub Private Sub Form_Terminate() MsgBox "Form Terminate" piut_disconnect End Sub 'Sucede cuando reanudamos la ejecución del servicio Private Sub NTService_Continue(Success As Boolean) On Error GoTo ServiceError Success = True NTService.LogEvent svcEventInformation, svcMessageInfo, "Service continue" Exit Sub ServiceError: NTService.LogEvent svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description End Sub 'Sucede cuando pausamos el servicio Private Sub NTService_Pause(Success As Boolean) On Error GoTo ServiceError TimerTag.Enabled = False piut_disconnect NTService.LogEvent svcEventError, svcMessageError, "Service paused" Success = True Exit Sub ServiceError: NTService.LogEvent svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description End Sub

Page 104: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 104 -

'Sucede cuando iniciamos el servicio Private Sub NTService_Start(Success As Boolean) Dim i As Integer Dim PIConn As Long Dim ErPointer As Boolean Dim LogVal As Long ErPointer = False TimerTag.Enabled = False InfoTags(0).TagName = "BAS1PES" 'Guardamos los nombres de los Tags de PI. InfoTags(1).TagName = "BAS2PES" InfoTags(2).TagName = "BAS2ACCU" InfoTags(3).TagName = "BASLOCK" On Error GoTo ServiceError Set Basculas = New sckIT9e.cIT9e PIConn = piut_connect(ByVal "BasService") ' Devuelve 0 si todo ha ido bien, > 0 si han habido errores. For i = 0 To 3 PIStat(i).piapierror = pipt_findpoint(InfoTags(i).TagName, InfoTags(i).Point) If PIStat(i).piapierror > 0 Then ErPointer = True End If Next If PIConn = 0 And Not ErPointer Then 'Si no han habido errores, habilitamos el timer. TimerTag.Enabled = True End If Success = True Exit Sub ServiceError: NTService.LogEvent svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description End Sub 'Evento que para y finaliza el servicio Private Sub NTService_Stop() On Error GoTo ServiceError piut_disconnect Unload Me ServiceError: NTService.LogEvent svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description End Sub 'Método que se ejecuta en intervalos de 1 segundo. Primero comprueba que tiene permiso para acceder a la báscula, 'y en caso afirmativo, accede para leer el peso en báscula y lo escribe en PI. Private Sub TimerTag_Timer() 'Metodo que se ejecutará cada 500ms Static PIop As PI_EXCEPT

Page 105: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 105 -

Static i As Integer On Error GoTo ServiceError 'Obtenemos el permisivo de acceso. Call pisn_getsnapshot(InfoTags(3).Point, PIop.NewVal, PIop.newstat, PIop.newTime) If PIop.NewVal = UNLOCKED Then 'Si podemos acceder a las basculas... For i = 0 To 1 'Escribimos en PI PIop.prevVal = pisn_putsnapshot(InfoTags(i).Point, Basculas.Peso_en_bascula(BASIP, i + 1), 0, 0) If PIop.prevVal <> 0 Then piut_disconnect Call piut_connect(ByVal "BasService") End If Next End If Exit Sub ServiceError: NTService.LogEvent svcMessageError, svcEventError, "[" & Err.number & "] " & Err.Description End Sub

Page 106: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 106 -

6.2.2 Visor de pesos en tiempo real.

'Visor de Pesos: Visor.exe 'EMPRESA: REPSOL-YPF 'DEPARTAMENTO: Control Avanzado y Sistemas (C.A.S.) 'DISEÑADOR: Iván López Calero 'DESCRIPCION: Visor que refresca cada segundo los pesos en las básculas y el estado de Accuload. 'REFERENCIAS ESENCIALES 'AccuBas PI Service ' AccuBas PI -> Servidor PI <- Visor.exe Option Explicit Private Const ERROR_CONEXION = -1 Private Const ERROR_VISOR = 999999 Dim ListTags(3) As TagList Dim ErrorTags(3) As QERROR Dim i As Integer Dim GetPI As PI_EXCEPT Dim PutPI As PI_EXCEPT Private Const UNLOCKED = 0 Private Const LOCKED = 1 Private Const ACCU_CARGANDO = 1 Private Const ACCU_PARADO = 0 Private Sub SystemError() For i = 0 To 3 Text(i).Caption = "******" Next End Sub Private Sub Form_Load() Dim Estado As Long Dim ErrorPointer As Boolean ErrorPointer = False Aplicacion.Caption = "Monitorización de pesos" Estado = piut_connect("BASAPP") 'Conectamos con el servidor PI. ListTags(0).TagName = "BAS1PES" ListTags(1).TagName = "BAS2PES" ListTags(2).TagName = "BAS3PESO" ListTags(3).TagName = "BAS2ACCU"

Page 107: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 107 -

'Obtenemos los punteros de los tags creados para tal fin. For i = LBound(ListTags) To UBound(ListTags) ErrorTags(i).piapierror = pipt_findpoint(ListTags(i).TagName, ListTags(i).Point) If ErrorTags(i).piapierror > 0 Then ErrorPointer = True End If Shape(i).FillColor = &HFF& Shape(i).Visible = True Next TimerRefresco.Interval = 1000 'Refrescamos la información cada segundo. 'Si ha habido algún error de conexión con PI, mostramos asteriscos. If ErrorPointer Or Estado > 0 Then SystemError TimerRefresco.Enabled = False Else TimerRefresco.Enabled = True End If End Sub 'Método que se ejecuta cada segundo Private Sub TimerRefresco_Timer() For i = LBound(ListTags) To UBound(ListTags) 'Leemos un tag en cada iteración Call pisn_getsnapshot(ListTags(i).Point, GetPI.NewVal, GetPI.newstat, GetPI.newTime) Select Case i Case 3: 'Si es el tag de Accuload... 'Ajustamos el color del shape If GetPI.NewVal = ACCU_PARADO Then Text(3).Caption = "NO CARGA" Shape(i).FillColor = &HFF& Else Text(3).Caption = "CARGANDO" Shape(3).FillColor = &HC000& End If Case Else: 'En los demás tags... 'Ajustamos colores y estado. If GetPI.NewVal = ERROR_CONEXION Or GetPI.NewVal = ERROR_VISOR Then Text(i).Caption = "******" Else Text(i).Caption = GetPI.NewVal & " Kg" If GetPI.NewVal > 0 Then Shape(i).FillColor = &HC000& Else Shape(i).FillColor = &HFF& End If End If End Select Next End Sub

Page 108: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 108 -

7. PRUEBAS

7.1 SIMULACIÓN

7.1.1 Pruebas y capturas cargando Propelentes.

En la prueba siguiente simularemos la carga de propelentes desde la báscula 2, para que las válvulas sean gobernadas por Accuload. En primera instancia, abriremos la aplicación implementada para los operadores, que muestra en tiempo real, actualizándose cada segundo, los pesos en báscula y si Accuload está gobernando las válvulas. Seguidamente, ejecutaremos el simulador de SPC, e introduciremos los siguientes parámetros: Matrícula: RP123 ID báscula: 2 Peso a Cargar: 300 Kg (determinado en la implementación del código del simulador. En el caso real, lo calcula la base de datos). Punto de Carga: K6M (corresponde a Propel 35). Visión general al inicio de la simulación:

Page 109: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 109 -

A continuación, simularemos la entrada de un camión en la báscula 2 (K06): Supongamos que el camión cisterna vacío pesa 3880 Kg, ajustamos el potenciómetro y obtenemos el valor:

Comprobamos que se va actualizando el valor, en tiempo real, en la aplicación implementada y válida para cualquier PC de la refinería:

Page 110: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 110 -

Si obtenemos el peso inicial antes de introducirlo en el visor IT8000 de la báscula 2, el simulador nos mostrará la siguiente pantalla:

Introducimos los datos correctamente en el visor IT8000 (Matricula=RP123; Producto=2). Recordamos que ETILENO corresponde al producto 1, y los distintos PROPELENTES a producto 2.

Page 111: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 111 -

Una vez introducidos los datos necesarios en IT8000, nos mostrará la siguiente pantalla:

Si nos fijamos en el visor IT9000E, podemos ver marcado en rojo el error en la inserción de datos que hemos cometido desde SPC. Accuload presentará el siguiente estado antes de iniciar la carga:

Page 112: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 112 -

El procesador de peso IT9000E y el mezclador Accuload III-X ya están preparados para iniciar nuestra secuencia de carga. Desde SPC obtendremos el peso inicial:

AccuBas.ocx espera la secuencia lógica: “Peso Inicial -> Iniciar Carga -> Peso Final”, por lo que no permite realizar otra tipo de secuencia, retornando un error. Seguidamente, seleccionamos “Iniciar Carga” en el simulador (proceso que hace automáticamente la aplicación SPC real después de obtener el peso inicial):

Page 113: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 113 -

Como podemos ver, se muestra un “OK” en el mensaje de aviso por parte de IT8000 y Accuload. Si hubiera algún problema se mostraría el correspondiente mensaje de error. Tras la ejecución del inicio de carga, IT 8000 queda a la espera de que el operador del cargadero presione la tecla ‘1’ para enviar el permisivo:

Accuload III-X también queda a la espera de confirmación por parte del operador:

En la prueba real, sólo iniciará la entrega de producto cuando los permisivos necesarios estén activados.

Page 114: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 114 -

Presionamos la tecla ‘1’ en IT8000 para enviar la señal correspondiente y empiece a pesar. También apretamos la tecla ‘START’ en Accuload para que empiece a entregar producto:

Accuload abre las válvulas de producto necesarias e inicia la entrega:

Page 115: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 115 -

Simultáneamente, vamos simulando el peso en báscula de la cantidad de producto que esta entregando Accuload con IT8000:

Page 116: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 116 -

Actualizándose los valores de carga en el visor:

Page 117: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 117 -

Una vez que Accuload haya finalizado la entrega de producto, cerrará las válvulas y volverá a mostrar la pantalla principal:

IT8000 quedará a la espera del peso final:

Page 118: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 118 -

Pedimos el peso final desde SPC:

Que como podemos comprobar en la siguiente captura, el peso final obtenido es el valor correcto:

Page 119: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 119 -

Si por error el operador le diera a iniciar la carga de nuevo con los mismos datos, desde nuestro control ActiveX retornamos el error correspondiente:

Finalmente, simulamos la retirada del camión cisterna de la báscula 2, con lo que volvemos al estado inicial:

Page 120: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 120 -

Page 121: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 121 -

7.1.2 Fichero de Log.

El fichero de Log que hemos obtenido después de ejecutar la prueba anterior es el siguiente: =============== INFORMACION ENTRE SPC, BASCULAS Y ACCULOAD ================ *********************************** MARZO 2008 ************************************ Día:10 Hora:08:26:25 - INFO ACCULOAD : OK Día:10 Hora:08:43:17 - SPE: B = 2 M = RP123 PC = K6M (P = 2) PI: Kg A: ERROR BASCULA : ERROR COMPROBANDO DATOS Día:10 Hora:09:01:47 - SPE: B = 2 M = RP123 PC = K6M (P = 2) PI: 3880 Kg A: INFO BASCULA : OK Día:10 Hora:09:50:37 - DCC: B = 2 M = RP123 PC = K6M (P = 2) PC: 300 Kg A: INFO BASCULA : OK | INFO ACCULOAD : OK Día:10 Hora:09:59:36 - SPS: B = 2 M = RP123 Pc = K6M (P = 2) PF(BAS): 4180 Kg | PF(ACC): 4179 Kg AVISO: INFO BASCULA : OK | INFO ACCULOAD : OK Día:10 Hora:10:01:24 - SPE: B = 2 M = RP123 PC = K6M (P = 2) PI: Kg A: ALERTA: Camión cargado. Debe retirarse de la báscula Día:10 Hora:10:26:30 - INFO ACCULOAD : Conexión Cerrada

Esta ubicado en System32, dentro del directorio de instalación de Windows. Como podemos ver, registramos todas las acciones que realiza el operador relacionadas con la carga de productos. Se creará un nuevo fichero cada mes, con el formato siguiente: ‘CARGADERO – “Nombre del mes” “Año”.log’ En el caso anterior tenemos: ‘CARGADERO - MARZO 2008.log’

Page 122: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 122 -

7.1.3 Prueba a errores.

Vamos a someter al sistema a varios errores que pueden ocurrir durante la carga real, para poder verificar la robustez del mismo: Caso 1 – Comunicación caída con IT9000E

Como podemos ver, nos retorna un error al realizar el ping con IT9000E, notificando el error en SPC y guardándolo en el fichero de Log. La aplicación que monitoriza los pesos muestra asteriscos para informar de la desconexión.

Page 123: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 123 -

Si volvemos a establecer la conexión:

Comprobamos que se vuelve a monitorizar el peso en tiempo real, y que podemos obtener, en este caso, el peso inicial.

Page 124: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 124 -

Caso 2 – Comunicación caída con Accuload

Puesto que para que entre en acción Accuload debemos cargar propelentes en la báscula 2, haremos la prueba en dicha báscula con Isobutano por ejemplo (K6I). El socket de comunicación con Accuload lo obtenemos al iniciar nuestro control Active X (AccuBas.ocx), por lo que debemos detectar posibles cortes en la comunicación física con el dispositivo. Abrimos el simulador de SPC, y desconectamos el cable de red en cualquier momento:

Como podemos ver, el campo aviso devuelve un error especificando el motivo. Si reconectamos el cable y volvemos a iniciar la carga:

Page 125: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 125 -

Comprobamos que efectivamente se han enviado los datos a Accuload:

Page 126: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 126 -

Caso 3 – Prueba de Robustez del control ActiveX (AccuBas.ocx) Vamos a probar la robustez de nuestro control ActiveX ante valores nulos y secuencias ilógicas en la carga de productos: Parámetros nulos: Se muestra siempre que falte algún parámetro por introducir.

Empezar secuencia desordenadamente: Sucede si se desea iniciar la carga u obtener el peso final antes de obtener el peso inicial.

Page 127: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 127 -

Falta de datos en el IT8000 correspondiente: Sucede cuando aún no se ha introducido la matrícula y el producto en el visor IT8000 determinado por el formulario.

Seleccionar n veces el peso inicial cuando el obtenido ya es válido: Sucede cuando ya hemos obtenido un peso inicial válido, pero sin embargo lo volvemos a pedir.

Page 128: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 128 -

Seleccionar n veces el iniciar carga cuando está en curso: Sucede cuando seleccionamos iniciar carga, y ésta ya se está entregando.

Seleccionar n veces el peso final cuando la carga no haya finalizado: Sucede cuando seleccionamos el peso final, pero todavía se está entregando y consecuentemente la carga no ha finalizado.

Page 129: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 129 -

Volver a iniciar la misma carga: Sucede cuando el operador pide el peso inicial y el camión actualmente cargado todavía sigue en la báscula.

Page 130: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 130 -

8. APORTACIONES DEL PROYECTO A LOS CONOCIMIENTOS El aporte en cuanto a conocimientos se refiere ha sido notable, destacando los siguientes puntos:

• Comprender todo tipo de documentación técnica en inglés. • Buscar información de todas las fuentes posibles, para ir resolviendo los

problemas que han ido surgiendo en el desarrollo.

• Configurar los parámetros y opciones de un PLC (Accuload).

• Configurar LANTRONIX MSS100.

• Decidir, a partir de la documentación proporcionada por el fabricante, qué tipo de instrucciones había que usar para adaptar Accuload a nuestro proyecto de carga.

• Aprender el lenguaje de programación Microsoft Visual Basic.

o Desarrollar librerias de vínculos dinámicos (DLL) estándar de Win32. o Desarrollar APIs para facilitar la comunicación con nuestras librerías. o Desarrollar controles Active X (*.ocx). o Desarrollar servicios para los sistemas Windows.

• Desarrollar software para poder realizar pruebas y simulaciones, a fin de

poder verificar, en primera instancia, el correcto funcionamiento. • Integrar todo el sistema en un único control ActiveX, listo para ser añadido

al formulario de Oracle de la aplicación SPC.

Page 131: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 131 -

9. APORTACIONES DE LOS ESTUDIOS AL PROYECTO El aporte que nos han proporcionado los estudios a este proyecto real, los dividiremos en varios puntos también:

o Comunicaciones y sockets, protocolos orientados a la conexión. o Implementación y control de dispositivos hardware.

o Capacidad de análisis, discriminación y toma de decisiones ante un problema

a resolver.

o Resolver el problema jerárquicamente, desde bajo nivel hasta alto nivel, testeando el funcionamiento entre fases.

o Capacidad de desarrollar software en cualquier lenguaje de programación,

sea orientado a objetos o imperativo.

o Proporcionar soluciones, lo más eficientes y versátiles posibles, a nivel de computación.

Page 132: Interfaz entre SPC y Cargadero de Cisternas - deim.urv.catpfc/docs/pfc739/d1207040111.pdf · descripciÓn de la empresa ... 1.1 repsol ypf ..... - 5 - 1.2 complejo industrial refino

PFC: Iván López Calero Interfaz entre SPC y Cargadero de Cisternas

- 132 -

10. CONCLUSIONES Proyecto muy interesante de realizar a nivel de formación y experiencia personal. La interfaz desarrollada, la usa un operador ubicado en la caseta del cargadero de cisternas, que como hemos explicado a lo largo del proyecto va integrada en un formulario de SPC, consiguiendo así tener constancia en su base de datos, de todos los movimientos de carga referentes a los camiones. Supone una satisfacción personal saber que el sistema se va a usar para facilitar y mejorar, tanto la carga (capacidad para cargar Propel 35), como el registro de carga (base de datos de SPC) de los camiones cisterna, de una empresa tan importante como es REPSOL-YPF. Remarcando el tema de formación personal, ha supuesto una gran aportación de conocimientos, impulsada por los profesionales que trabajan en la empresa, a los que agradezco la oportunidad profesional.