2. Cómo ejecuta la VCU una función personalizada
#El bucle de 1 kHz
La VCU ejecuta el diagrama completo cada 1 ms (1 kHz). Cada ejecución es un ciclo. El intervalo es nominal: el instante exacto de cada ciclo depende de la carga del procesador. El tamaño del diagrama está limitado por las dos reservas de memoria descritas más adelante. Después de grabar una función, confirme en el registro (log) que la VCU responde como antes.
El ciclo no les pasa a los bloques el intervalo de tiempo. Cada bloque usa su propia base:
| Base de tiempo | Bloques |
|---|---|
| Por paso: 1 paso es 1 ciclo, cerca de 1 ms | Filtro EMA, Filtro de médias, Contador, Muestra y Retén (guarda un valor en el instante de un disparo); el filtro interno de la Derivada |
| Tiempo real, en milisegundos o por el intervalo medido por la VCU | Retardo (la pantalla muestra Atraso), Temporizador cíclico, Rampa, Filtro de paso bajo, Integrador, Derivada, decaimiento del Detector de Pico |
| Escala fija del campo Tiempo de loop (ms) | PID (control proporcional, integral y derivativo): el campo no es el período; el bloque se ejecuta en cada ciclo |
#Un solo diagrama, en orden de dependencia
Las funciones habilitadas del mapa, hasta 10, se convierten en un único diagrama. La VCU ejecuta los bloques en el orden de dependencia: cada bloque se ejecuta después de todos los que lo alimentan y lee el valor del ciclo actual de ellos, nunca el del ciclo anterior.

Las funciones distintas no tienen cables entre sí. Para pasar un valor de una función a otra, escríbalo con Valor para la VCU en un canal Medida personalizada (la pantalla muestra Medida customizada en la mayoría de los canales) y lea el mismo canal con Valor de la VCU en la otra. Verifique en el registro en qué momento el valor llega a la otra función.
#Bucle en el dibujo
El editor permite conectar bloques en círculo, de modo que el resultado de un bloque vuelva, a través de otros bloques, a una entrada anterior. Solo rechaza el cable de un bloque a sí mismo y un segundo cable en la misma entrada. No confunda este bucle en el dibujo con el bucle de 1 kHz.
La VCU no ejecuta el bucle en el dibujo. Los bloques que forman parte de él, y todos los que dependen de ellos, nunca entran en el orden de ejecución: la VCU no los ejecuta y el medidor de memoria sigue contando esos bloques.

En la VCU, un bloque nunca lee la salida de un bloque que se ejecuta después de él. Para que el resultado anterior influya en el siguiente, hay dos caminos. El primero es usar un bloque que guarda estado de un ciclo al otro, como Histeresis, Biestable SR (guarda un estado entre un comando Set y un comando Reset), Integrador o Contador: el valor guardado vuelve a 0 cuando se carga el diagrama. El segundo es pasar el valor por un canal Medida personalizada libre: Valor para la VCU escribe y Valor de la VCU lee el mismo canal. Una medida que ya viene de una entrada física o de la red CAN (la red de comunicación entre los módulos del vehículo) puede tener el valor sobrescrito. Verifique en el registro el retardo entre escribir y leer antes de depender de ese camino.
#Números con decimales
Todo valor que pasa por un cable es un número con decimales, con cerca de 7 dígitos de precisión; el editor muestra 6 decimales. Lo que esto implica:
- Una señal lógica es el número 1,0 (verdadero) o 0,0 (falso).
- Una entrada sin cable vale 0,0, no el último valor. Hay pocas excepciones, descritas en las fichas de los bloques.
- En el bloque Lógica, una entrada es verdadera cuando es mayor que 0,0: 0,3 es verdadero; 0 y los números negativos son falsos. No existe umbral de 0,5. Quien conecta una magnitud analógica directamente a la Lógica lo percibe; quien usa solo 0 y 1, no.
- Un botón llega al diagrama como 1,0 o 0,0. Las RPM y la marcha son enteras en la VCU y llegan al diagrama como números enteros, sin escala.
- La VCU no verifica ni avisa resultado inválido (NaN, sigla en inglés de "no es un número", o infinito) ni división por cero. El bloque Operación matematica devuelve 0 en una división por cero.
#Memoria: dos reservas para el mapa completo
La VCU reserva dos áreas de memoria para las funciones personalizadas. Los límites valen para el mapa completo, no para cada función: se suma el uso de todas las funciones habilitadas.
- Memoria de trabajo, 512 bytes (barra RAM): guarda el estado de cada bloque, como la salida y los acumuladores.
- Memoria de configuración, 2048 bytes (barra Configuración): guarda el tipo de cada bloque, las conexiones y los parámetros.

FuelTech Vision muestra el uso en la esquina inferior izquierda del editor. El título Memoria: N% trae el mayor de los dos porcentajes; los números "usado / total" muestran el valor real (los colores y el límite de 100 % de la barra están en el capítulo La pantalla de Funciones personalizadas).
Habilitar y deshabilitar. Solo las funciones habilitadas cuentan en la memoria y se ejecutan. Una función deshabilitada sigue guardada en el mapa, y sus bytes vuelven a quedar libres. Si todas las funciones están deshabilitadas, la VCU no ejecuta ningún diagrama. El capítulo La pantalla de Funciones personalizadas muestra cómo habilitar.
#Lo que consume más
La mayoría de los bloques usa de 4 a 16 bytes de memoria de trabajo. Pesan más los bloques siguientes:
| Bloque | Memoria de trabajo (de 512 bytes) | Configuración (de 2048 bytes) |
|---|---|---|
| Acción en la VCU | 32 | 16 |
| Filtro de médias (1 a 32 puntos) | 16 a 140 | 5 |
| Tabla 12x12 | 4 | 682 |
| Tabla 8x8 | 4 | 330 |
| Tabla 4x4 | 4 | 106 |
| Vector 1x16 | 4 | 136 |
| PID | 12 | 22 |
| Valor de la VCU | 4 | 4 |
#Al superar el límite
Confirmar no se bloquea por la memoria. Al grabar en la VCU el mapa abierto, FuelTech Vision verifica la memoria antes de enviar: si la configuración supera 2048 bytes o la memoria de trabajo supera 512 bytes, no graba y muestra el cuadro Memoria de las Funciones Personalizadas excedida: "Las Funciones Personalizadas de este mapa exceden la memoria disponible. Reduzca la cantidad de bloques/parámetros e intente grabar nuevamente." Esa verificación ocurre en el botón Grabar de la barra superior (sugerencia "Grabar en la VCU"), en cualquiera de las tres opciones de grabación. Hacer activo, en la lista de mapas guardados en la VCU, no la repite: solo activa un mapa que ya está allí.
Si un mapa por encima del límite se activa en la VCU sin haber pasado por esa verificación, ninguna función personalizada se ejecuta: no existe carga parcial. Con la memoria de trabajo por encima de 512 bytes, la VCU avisa "Función personalizada: memoria de ejecución agotada". Con la configuración por encima de 2048 bytes, el diagrama se descarta sin aviso.
#Acciones en la VCU: prioridad y convivencia con las funciones nativas
El bloque Acción en la VCU tiene 17 acciones, además de Nada, y ningún campo de prioridad. En los nombres de las acciones, ETC es la mariposa electrónica, Flex Fuel es el uso de combustible con contenido de etanol variable, sonda lambda es el sensor que mide la mezcla en el escape y EV es vehículo eléctrico. Cada tipo de acción convive de una manera con las funciones nativas:
| Tipo | Ejemplos | Convivencia con las funciones nativas |
|---|---|---|
| Compensación | Compensación de ignición, Compensación de Inyección, Compensación de ETC, Compensación de objetivo de par (EV) | Se suma a lo que las funciones nativas ya calculan. Varios bloques de la misma compensación se suman. |
| Sustitución | Punto de ignición, Apertura máxima de ETC (la pantalla muestra Abertura máxima de ETC), Override de etanol (Flex Fuel), Override del objetivo de sonda lambda, Override de objetivo de par (EV) | Cambia el valor nativo en ese punto, con prioridad fija. Gana la de mayor prioridad. La Apertura máxima de ETC escala el objetivo en lugar de sustituirlo (ficha Acción en la VCU). |
| Corte | Corte de ignición, Corte de inyección de combustible | Compite con los cortes nativos: gana el mayor nivel. |
La función personalizada entra con prioridad fija, que usted no puede cambiar. En la ignición, pierde frente a las funciones nativas de largada (3-step, 2-step y burnout) y frente al cambio de marcha, y empata con el anti-lag, que sostiene la presión del turbo con el acelerador cerrado. En la apertura máxima de ETC, pierde, entre otras, frente al control de boost por ETC. Las funciones nativas de prioridad menor pierden frente a ella. Con el hard cut, el limitador de RPM, la función gana solo en el punto de ignición fijo que el limitador puede aplicar: el corte del limitador sigue actuando. El bloque Corte de encendido alta res. no usa esta prioridad: compite con el control de tracción, el 2-step, el 3-step y el burnout por el mayor porcentaje. En el empate con el anti-lag no hay un orden garantizado: no cuente con ninguna de las dos y verifique en el registro cuál actúa. Dos bloques que piden la misma acción de sustitución: solo uno vale, y el otro no actúa. Las sustituciones quedan activas todo el tiempo en que la función se ejecuta, incluso con la entrada en 0, inclusive el Override de objetivo de par (EV); solo el Override del objetivo de sonda lambda depende de una entrada mayor que 0.
#Inicialización
Al encender la VCU y en cada grabación de mapa, la VCU carga el diagrama:
- La memoria de trabajo se pone a cero: todo estado interno recomienza en 0, como los acumuladores y el estado de histéresis y de los latches.
- Los bloques de salida y el bloque Acción en la VCU entran apagados y pasan a responder al diagrama a partir del primer ciclo.
- Mientras la VCU recibe un mapa nuevo, el diagrama no se ejecuta. Vuelve después de la recarga.
- Al retirar el diagrama de la ejecución (por ejemplo, en un mapa con todas las funciones deshabilitadas), las acciones dejan de actuar, las salidas On/Off y PWM se apagan, las salidas analógicas van a 0 V y los canales escritos por Valor para la VCU quedan con el último valor.
#Valores que aparecen en los bloques en el editor
Los valores que el editor muestra en los bloques se calculan en la computadora, no se leen de la VCU (sección Valores en vivo en los bloques, en el capítulo Armar el diagrama). Úselos para verificar las conexiones del dibujo, no el comportamiento en el tiempo: la simulación puede diferir de la VCU, principalmente en los bloques que dependen del tiempo o guardan estado, como los filtros, el Contador, el Detector de Pico, Retardo, Temporizador cíclico, Rampa, Integrador y Derivada. Un Filtro EMA, por ejemplo, responde en el editor cerca de 100 veces más lento que en la VCU.
Para ver lo que la VCU calculó de verdad, escriba el valor con Valor para la VCU en un canal Medida personalizada y siga ese canal. Casi todos los ejemplos de esta guía hacen eso. Verifique antes si el canal está en la lista de canales del registro.