8. Del problema al diagrama
Una función personalizada buena empieza en el papel, no en el editor. Este capítulo es la guía de 11 pasos que siguen los ejemplos del capítulo siguiente. El dibujo completo de la función, con todos los bloques y cables, es el diagrama.

#Paso 1: escriba el objetivo en una frase
Escriba lo que hace la función y cuándo actúa, por ejemplo: "enciende el ventilador por encima de 95 °C y lo apaga por debajo de 90 °C". Cada bloque gasta memoria del mapa completo: son 512 bytes de memoria de trabajo y 2048 bytes de configuración para las 10 funciones sumadas, y solo cuentan las funciones habilitadas. Un objetivo corto evita bloques que no sirven para nada.
#Paso 2: liste las entradas
- Cada entrada es un bloque Valor de la VCU. Lee el canal que usted elige en la lista, en el valor que la VCU guarda, sin convertirlo a la unidad que muestra la pantalla. Verifique la unidad leyendo el canal en el registro.
- El bloque no revisa si el canal es válido: con el sensor desconectado entrega lo que esté guardado en el canal. Una entrada sin cable vale 0.
- Algunos canales de la lista siempre valen 0, entre ellos Temperatura del procesador, Odómetro, Cuentahoras y la fecha y la hora de la VCU. La lista completa está en el capítulo Bloques de entrada, matemática y lógica.
- El editor muestra una alerta en el bloque cuando el canal viene de una entrada que no está configurada en el mapa. Vea el capítulo Bloques de entrada, matemática y lógica.
#Paso 3: acondicione la señal
Acondicionar es dejar la señal lista para decidir: filtrar, limitar y escalar. Filtre antes de derivar.
- La Derivada divide la diferencia entre dos ejecuciones seguidas por el tiempo real entre ellas y entrega unidades por segundo, sin ventana. Un escalón en la entrada se vuelve un pico. Filtre antes la entrada con Filtro EMA o Filtro de paso bajo.
- En el Filtro EMA, Alpha es el peso de la muestra nueva en cada ejecución de la función (cerca de 1 ms, según la carga del procesador): un Alpha pequeño filtra más. La constante de tiempo es −1 ms ÷ ln(1 − Alpha): Alpha 0,005 da cerca de 200 ms y 0,15 da cerca de 6 ms.
- El Limitador viene con mínimo 0 y máximo 100: un Limitador olvidado en el valor predeterminado corta magnitudes negativas o mayores que 100. La Zona Muerta entrega 0 dentro del rango y, fuera de él, la entrada menos el límite. Vea los capítulos Bloques de entrada, matemática y lógica y Bloques de tiempo, filtro, control y tabla.
#Paso 4: decida
| Usted necesita | Use | Cuidado |
|---|---|---|
| Comparar un valor con un límite | Interuptor | La comparación es estricta: en el valor exacto del límite la condición es falsa. Al cambiar el modo, mueva el cable del límite al conector correcto. |
| No oscilar alrededor del límite | Histeresis | Enciende con un valor mayor o igual al límite superior y apaga con uno menor o igual al inferior. Comienza apagada. |
| Recordar un evento hasta un reinicio | Biestable SR | Conjunto y Restablecer valen por encima del umbral (0,5 en el valor predeterminado). Con los dos activos, el campo Prioridad decide. |
| Exigir que la condición dure un tiempo | Retardo (Retardo de encendido; la pantalla muestra Atraso) | Trata la entrada como encendido/apagado (mayor que 0). El tiempo es en segundos. No retrasa una señal analógica. |
| Mantener encendido después de que la condición cae | Retardo (Retardo de apagado) | Mismas reglas del Retardo de encendido. |
| Combinar condiciones | Lógica | Es verdadero cualquier valor mayor que 0: 0,3 ya es verdadero. |
#Paso 5: actúe
- La Acción en la VCU suma o sustituye un valor dentro de la VCU (17 acciones). Las compensaciones se suman con las correcciones nativas. Las acciones de sustitución no tienen prioridad ajustable y pierden frente a funciones nativas como las de largada (2-step, 3-step y burnout), el cambio de marcha y el control de boost por ETC. El bloque limita el valor entre Mínimo y Máximo, y un bloque nuevo viene con los dos en 0: ajuste el Mínimo y el Máximo. Dos casos aparte: el Punto de ignición gana al hard cut, el limitador de RPM, pero solo en el punto de ignición fijo, y el corte del limitador sigue actuando; y el bloque Corte de encendido alta res. compite con el control de tracción, el 2-step, el 3-step y el burnout por el mayor porcentaje.
- Salida On/Off, Salida PWM y Salida analógica 0-5V eligen una función de salida, por ejemplo Salida de función personalizada 1, y no un pin. Asigne esa función a un pin en la pantalla Salidas (la salida analógica, en la pantalla Salidas Analógicas): sin eso el bloque no hace nada y nada avisa. Vea el capítulo Bloques de salida.

#Paso 6: registre
- Use un bloque Valor para la VCU para cada magnitud intermedia que usted quiera ver en el registro. Los canales Medida personalizada #01 a #36 (la pantalla muestra Medida customizada #01 a #36) son de uso libre y no gastan memoria de trabajo (solo 6 bytes de configuración).
- No grabe en un canal que tenga dueño, como una entrada física o un canal de CAN: el dueño puede sobrescribir el valor.
- Habilite cada canal en el datalogger (el grabador de registros de la VCU, pantalla Configuraciones del datalogger) y confirme que aparece en el registro. Vea el capítulo Bloques de salida, ficha Valor para la VCU.

#Paso 7: nombre todos los bloques
- El nombre del bloque es el único comentario que acepta el diagrama. Abra Configurar bloque (el engranaje del bloque) y complete Nombre del bloque. El texto vacío se ignora: no se puede volver al nombre predeterminado borrando.
- Todo campo que va a la pantalla del usuario necesita Nombre personalizado. Sin él el campo aparece con el nombre predeterminado, y dos Valor fijo quedan iguales para el cliente. Vea los capítulos Armar el diagrama y Pantalla del usuario.
#Paso 8: verifique la memoria antes de grabar en la VCU
- El medidor del editor muestra Memoria: N%, el mayor entre RAM (trabajo, límite de 512 bytes) y Configuración (límite de 2048 bytes), sumando las funciones habilitadas. El texto queda ámbar por encima de 75 % y rojo por encima de 90 %, y la barra se detiene en 100 % aunque el uso real sea mayor.
- Confirmar no bloquea nada. Al grabar, FuelTech Vision verifica los límites y rechaza el envío con el cuadro Memoria de las Funciones Personalizadas excedida, que no dice qué función ni cuánto se pasó. Use el medidor antes.
Las tablas y el Filtro de médias son los bloques que más pesan: una Tabla 8x8 usa 330 bytes de configuración (16,1 %) y el Filtro de médias con 32 puntos usa 140 bytes de trabajo (27,3 %). Use el medidor para el total.
#Paso 9: pruebe con el motor detenido
- La función corre siempre que la VCU está encendida y el diagrama está cargado, incluso con el motor detenido. Los cortes de ignición y de combustible solo actúan con RPM por encima de 0, pero las salidas, las acciones de ETC y las de par (EV) actúan.
- Mueva el pedal y la mariposa (TPS, el sensor de posición de la mariposa) y lea cada canal de registro. Los valores que el editor muestra en los bloques los calcula la computadora, no se leen de la VCU, y los bloques con tiempo (Retardo, Temporizador cíclico, Rampa, Integrador, Derivada, Filtro de paso bajo) usan el reloj de la computadora: no valide por ellos.
- Si un pin está en prueba manual en la pantalla Salidas, la función no comanda ese pin.
#Paso 10: valide en el registro
- Registre la entrada, las magnitudes intermedias y el resultado en el mismo registro. Compare cada Medida personalizada con lo que prevé el dibujo y verifique la unidad de cada entrada.
- El editor no avisa cuando el dibujo tiene un bucle, es decir, un cable que vuelve a un bloque anterior: los bloques del bucle y los que dependen de ellos quedan fuera de lo que la VCU ejecuta. Si un bloque no actúa, busque un bucle.
- Una salida sin pin asignado no hace nada y Valor para la VCU en un canal que no acepta escritura no escribe nada. Ninguno de los dos avisa. Vea el capítulo Diagnóstico y errores comunes.
#Paso 11: versione el archivo
- Exportar graba un archivo `.ftcf` con el nombre de la función (el nombre predeterminado es función_personalizada, y el nombre de la función tiene hasta 32 caracteres). Importar borra el diagrama de la función que está abierta y carga el archivo en su lugar, sin pedir confirmación y sin mensaje de éxito ni de error. El editor tampoco tiene Deshacer.
- Por eso, exporte antes de importar y guarde cada cambio como archivo nuevo, con la versión en el nombre (por ejemplo ventilador_v2.ftcf), en lugar de sobrescribir. Vea el capítulo Entrega al cliente.