ls2tp — Compilateur Fanuc LS → TP

Compilateur open-source de programmes Fanuc LS (ASCII) vers le format TP binaire, compatible avec les contrôleurs R-30iB Mate Plus (V9.30+).

Équivalent libre de l'outil WinOLPC de Fanuc Robotics.

🎯 Objectif

Permettre l'écriture et la compilation de programmes pour robots Fanuc sans dépendre des outils Windows propriétaires (Roboguide, WinOLPC). Le compilateur produit des fichiers .TP chargables directement sur une baie robot R-30iB.

📦 Installation

git clone https://gitea-8eze.srv1554967.hstgr.cloud/hermes/ls2tp.git
cd ls2tp
pip install -e ".[dev]"

🚀 Utilisation

Analyser un fichier LS

# Analyse lexicale (tokens)
ls2tp lex monprog.ls

# Analyse syntaxique (AST)
ls2tp parse monprog.ls

Compiler LS → TP

ls2tp compile monprog.ls -o monprog.tp

Analyser un fichier TP binaire

# Analyse complète
tp_dump monprog.tp

# Header uniquement
tp_dump monprog.tp --header-only

# Comparer deux fichiers TP
tp_dump prog1.tp --compare prog2.tp

# Dump hexadécimal
tp_dump monprog.tp --hex

🏗️ Architecture

ls2tp/
├── ls2tp/
│   ├── __init__.py      # Métadonnées du package
│   ├── cli.py           # Interface en ligne de commande
│   ├── lexer.py         # Analyseur lexical LS → tokens
│   ├── parser.py        # Analyseur syntaxique tokens → AST
│   ├── tokens.py        # Définitions des tokens et types
│   └── tp_format.py     # Structures du format binaire TP
├── tools/
│   └── tp_dump.py       # Analyseur hexadécimal TP
├── tests/
│   └── test_lexer_parser.py
└── pyproject.toml

🔬 État du projet

✅ Implémenté

  • Lexer LS : tokenisation complète du format LS Fanuc
    • Mots-clés, opérateurs, registres (R/PR/SR/...)
    • Mouvements (J/L/C/A), terminaisons (FINE/CNT)
    • Directives (/PROG, /MN, /POS, /ATTR)
    • Commentaires, chaînes, nombres
  • Parser LS : construction d'un AST
    • Programme, headers, instructions de mouvement
    • CALL, JMP/LBL, WAIT, IF/ENDIF
    • Assignations de registres, définitions de positions
  • Analyseur TP (tp_dump) : hex dump et analyse structurelle
    • Parsing du header TP (magic, version, nom, timestamp)
    • Dump hexadécimal formaté (style xxd)
    • Comparaison de fichiers TP
    • Détection de version

🚧 En cours

  • Rétro-ingénierie du format TP binaire — nécessite des paires de fichiers LS/TP pour déduire la correspondance exacte entre instructions LS et opcodes binaires.

📋 À faire

  • Compilateur LS → TP (nécessite les paires LS/TP)
  • Encodage des positions (joints, cartésien, configurations)
  • Gestion des offsets et programs multi-groupes
  • Support des instructions avancées (SELECT, FOR, TIMER, etc.)
  • Validation par chargement sur Roboguide / robot réel

🔑 Format TP — Connaissances actuelles

Le format binaire TP est propriétaire Fanuc et non documenté publiquement. Les connaissances ci-dessous proviennent de travaux de rétro-ingénierie :

Structure générale

┌──────────────┐
│   HEADER     │  64+ bytes : signature, version, nom, timestamp
├──────────────┤
│ INSTR TABLE  │  Table d'offsets vers chaque instruction
├──────────────┤
│ INSTR DATA   │  Opcodes (1-2 bytes) + operandes
├──────────────┤
│ POS DATA     │  Positions (float32 × 6 axes) + config
├──────────────┤
│   FOOTER     │  Checksum / padding
└──────────────┘

Header TP (hypothèse)

Offset Taille Champ
0x00 4 Magic number
0x04 2 Version contrôleur
0x06 16 Nom du programme
0x16 4 Timestamp
0x1A 2 Nombre d'instructions
0x1C 2 Nombre de positions
0x1E 4 Offset table instructions
0x22 4 Offset données positions
0x26 4 Taille totale

⚠️ Ces offsets sont hypothétiques et doivent être validés par l'analyse de fichiers TP réels.

🤝 Contribution

Pour aider à la rétro-ingénierie du format, fournissez des paires de fichiers .LS et .TP (le même programme en source et compilé), idéalement :

  1. Un programme minimal (END uniquement)
  2. Un programme avec 1 mouvement (J P[1] 100% FINE)
  3. Des programmes de complexité croissante

📚 Références

  • tp_plus — Compilateur TP+ → LS (Ruby)
  • frfformats — Librairie Python de parsing de formats Fanuc
  • fanucpy — Interface Python pour robots Fanuc

📄 Licence

MIT — Copyright (c) 2026 Julien Baumeyer

Description
Compilateur Fanuc LS → TP binaire pour R-30iB Mate Plus (V9.30+) — équivalent open-source de WinOLPC
Readme 182 KiB
Languages
Python 100%