Skip to content

feat(#19): TCP/IP — bloques cliente estilo LabVIEW#70

Merged
anlaco merged 6 commits into
mainfrom
feat/issue-19-tcp-labview
Apr 21, 2026
Merged

feat(#19): TCP/IP — bloques cliente estilo LabVIEW#70
anlaco merged 6 commits into
mainfrom
feat/issue-19-tcp-labview

Conversation

@anlaco
Copy link
Copy Markdown
Owner

@anlaco anlaco commented Apr 21, 2026

Summary

  • Implementa los 4 bloques TCP cliente (tcp-open, tcp-write, tcp-read, tcp-close) con patrón connection refnum estilo LabVIEW.
  • Puertos de entrada cableables (address, remote-port, timeout-ms, data, bytes-to-read) con defaults.
  • Salidas reales (bytes-written, bytes-read, data) encadenadas por connection-in/out para mantener dataflow.
  • Sin error cluster por ahora (DT-029 Nivel 0) — se añadirá en Fase 4-E junto con VISA.
  • Cambios de infraestructura: parser block-def admite defaults opcionales en in, bind-emit usa append/only en rama true para preservar path! en emit, build-bindings rellena con default si el puerto no está cableado.
  • Documentación: docs/review-issue-19.md incluye review cruzado con triage final.

Cierra #19.

Test plan

  • red-cli tests/run-all.red → 558/558 PASS
  • Verificado con socat TCP-LISTEN:5000,reuseaddr,fork EXEC:/bin/cat usando examples/tcp-echo-demo.qvi
  • Verificado con respuesta predefinida (servidor fijo) → datos llegan al indicador
  • Verificado desde la UI guardando examples/test-tcp.qvi
  • Revisar triage del review antes de merge (P1-1, P1-2, P1-3, P2-3 pendientes de aplicar — ver docs/review-issue-19.md)

anlaco added 6 commits April 20, 2026 18:40
- Binarios compilados desde fork anlaco/red con TCP nativo
- Reemplaza librería red-tcp externa para Fase 4 (Hardware)
- tcp-api.md: referencia completa de la API TCP nativa en red-cli/red-view
- skills/red-lang/SKILL.md: skill de Red-Lang con sintaxis, View, Draw, Parse, TCP
- CLAUDE.md: referencias actualizadas

TCP integrado como objeto de bajo nivel (tcp/connect, tcp/send, tcp/receive, etc.)
para soporte nativo de SCPI, Modbus y protocolos custom en Fase 4.
SCPI y VISA son conceptos distintos (protocolo vs transporte) que no
debemos mezclar. QTorres ofrece bloques TCP/USBTMC genéricos; el usuario
elige qué string enviar (comandos de instrumento, Modbus, HTTP, etc.).

Cambios:
- CLAUDE.md: lista de issues Fase 4 + nota aclaratoria
- docs/plan.md: sección "comunicación con instrumentación"
- docs/roadmap-9-10.md: título Fase 4, ejemplo tcp-query
- docs/decisiones.md: DT-029 ejemplo con tcp-write-block
- docs/ai-reference.md: mención de hardware genérico
- docs/tcp-api.md: casos de uso genéricos, nota aclaratoria
- skills/red-lang/SKILL.md: ejemplo TCP genérico
- 4 bloques hardware en blocks.red con dialecto block-def
- Helper runtime tcp-read-helper (inyectado en .qvi generado)
- Categoría 'hardware' con color turquesa oscuro en canvas-render.red
- Sección "Hardware (TCP)" en paleta de bloques (canvas-dialogs.red)
- 44 tests nuevos (registro, puertos, configs, emit, helper) — 526/526 PASS
- Ejemplo examples/tcp-echo-demo.qvi verificado E2E con socat
- Docs: corregido `to-string!` → `to string!` (no existe la primera en Red)
Rehace los 4 bloques TCP siguiendo el patrón VISA session-through de LabVIEW:
- tcp-connect → session-out ('tcp-session)
- tcp-write: session-in + data → session-out
- tcp-read: session-in → session-out + response
- tcp-close: session-in → session-out

El wire 'tcp-session (verde oliva) encadena los nodos forzando el orden
topológico igual que VISA session en LabVIEW. Sin session-through la v1
permitía que write/read se ordenasen arbitrariamente.

Helpers runtime (_make-tcp-session, _tcp-connect/write/read/close-helper)
definidos en blocks.red e inyectados en .qvi generados.
549/549 tests PASS. E2E verificado con socat (connected/HELLO/closed).

Pendiente: error-in/error-out en Fase 4-E (error cluster dedicado).
Rediseño de los 4 bloques TCP (tcp-open/write/read/close) con
puertos de entrada cableables (address, remote-port, timeout-ms,
bytes-to-read, data) y salidas reales (bytes-written, bytes-read)
en lugar de una config inicial única. Coincide con la interfaz
de los nodos TCP nativos de LabVIEW, sin error cluster (DT-029
Nivel 0 — se añadirá en Fase 4-E).

- Parser block-def: default opcional para puertos de entrada
- bind-emit: append/only en rama `true` para preservar path! en
  emit (corrige aplastamiento de _w/1, _r/2)
- build-bindings: fallback a default si el puerto no está cableado
- Helpers de runtime alineados con el nuevo modelo connection refnum
- Ejemplo tcp-echo-demo.qvi reescrito; test-tcp.qvi añadido
- Audit y review cruzado en docs/review-issue-19.md

Cierra #19. Tests: 558/558 PASS. Verificado con socat echo server.
@anlaco anlaco force-pushed the feat/issue-19-tcp-labview branch from 1af5b81 to af3e966 Compare April 21, 2026 22:04
@anlaco anlaco merged commit e8e9de8 into main Apr 21, 2026
2 checks passed
@anlaco anlaco deleted the feat/issue-19-tcp-labview branch April 21, 2026 22:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant