Skip to content

πŸš€ Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ постпроцСссор для CAM-систСм с Python-макросами. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Siemens, Fanuc, Heidenhain, Haas.

License

Notifications You must be signed in to change notification settings

rybakov25/PostProcessor

Repository files navigation

πŸš€ PostProcessor

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ постпроцСссор для CAM-систСм с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Python-макросов

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ G-ΠΊΠΎΠ΄ ΠΈΠ· APT/CL Ρ„Π°ΠΉΠ»ΠΎΠ² для любого оборудования: 3-5 осСвыС Ρ„Ρ€Π΅Π·Π΅Ρ€Π½Ρ‹Π΅ станки, Ρ‚ΠΎΠΊΠ°Ρ€Π½Ρ‹Π΅, ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ с ЧПУ Siemens, Fanuc, Heidenhain, Haas

Release .NET Python Build Tests License


πŸ“‹ ОглавлСниС


Π§Ρ‚ΠΎ это?

PostProcessor β€” это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ постпроцСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° APT/CL (ΠΈΠ· CAM-систСм CATIA, NX, Mastercam, Fusion 360) Π² G-ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… станков с ЧПУ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   CAM-систСма   β”‚     β”‚   PostProcessor  β”‚     β”‚    Π‘Ρ‚Π°Π½ΠΎΠΊ ЧПУ   β”‚
β”‚   (CATIA, NX)   │───▢│ + Python макросы │────▢│    (Siemens,    β”‚
β”‚   APT/CL Ρ„Π°ΠΉΠ»   β”‚     β”‚                  β”‚     β”‚    Fanuc...)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ

АрхитСктура Π½Π° Python-макросах позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ любого оборудования Π±Π΅Π· пСрСкомпиляции основного ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎ создайтС Python-Ρ„Π°ΠΉΠ» с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ для вашСго станка!


✨ ВозмоТности

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ОписаниС
🌍 Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° любого оборудования Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ макросы
🧩 ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python макросы Π±Π΅Π· пСрСкомпиляции основного ΠΊΠΎΠ΄Π°
βš™οΈ 4 ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Siemens, Fanuc, Heidenhain, Haas β€” Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
🏭 8+ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ DMG Mori, Haas, Romi, Mecof β€” Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ станков
🐍 Python 3.8-3.12 ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Python для Π»ΠΎΠ³ΠΈΠΊΠΈ постпроцСссора
πŸ”„ 3-5 осСй 3-осСвая ΠΈ 5-осСвая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (RTCP, CYCLE800)
πŸ› οΈ Вокарная TURRET, CHUCK, TAILSTK β€” Ρ‚ΠΎΠΊΠ°Ρ€Π½Ρ‹Π΅ макросы
πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ станка ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ
πŸ“ ΠœΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ G-ΠΊΠΎΠ΄Π°
πŸ’Ύ StateCache Кэш состояний LAST_* (IMSPost-style) для ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
πŸ”„ CycleCache ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ² β€” автоматичСский Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ опрСдСлСния ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°
πŸ”’ NumericNCWord Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ числовых NC-слов ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°
πŸ”£ SequenceNCWord НумСрация Π±Π»ΠΎΠΊΠΎΠ² (N10, N20...) ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°
πŸ“ TextNCWord ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ со стилСм ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° (parentheses/semicolon)
βœ… 169 тСстов Unit-тСсты для ядра, макросов ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты
πŸ“– ~16,000 строк Полная докумСнтация ΠΈ ΠΊΠΎΠ΄ Π½Π° C#

πŸ†• НовыС возмоТности (v1.1.0)

StateCache β€” кэш состояний

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ LAST_* ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для модального Π²Ρ‹Π²ΠΎΠ΄Π°:

  • LAST_FEED, LAST_TOOL, LAST_CS...
  • АвтоматичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π° G-ΠΊΠΎΠ΄Π°

CycleCache β€” ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ²

АвтоматичСский Π²Ρ‹Π±ΠΎΡ€: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²:

; ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² (ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅)
CYCLE800(MODE=1, TABLE="TABLE1", X=100.000, ...)

; Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² (Ρ‚Π΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ²)
CYCLE800()

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ форматирования Π² JSON-ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°Ρ…:

  • НумСрация Π±Π»ΠΎΠΊΠΎΠ² (N10, N20...)
  • Π‘Ρ‚ΠΈΠ»ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² (parentheses/semicolon)
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (decimals, leadingZeros)
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΏΠΎΠ΄Π°Ρ‡ΠΈ ΠΈ шпиндСля

NumericNCWord

ЧисловыС NC-слова с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

  • ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹: X{-#####!###}
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°
  • АвтоматичСская ΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

TextNCWord

ВСкстовыС NC-слова для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²:

  • Π‘Ρ‚ΠΈΠ»ΠΈ: parentheses (Comment), semicolon ; Comment, both
  • ВранслитСрация ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹

Python API

НовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Python-макросах:

context.cacheGet("LAST_FEED", 0.0)
context.cacheSet("LAST_FEED", 500.0)
context.cycleWriteIfDifferent("CYCLE800", params)
context.setNumericValue('X', 100.5)
context.getFormattedValue('F')
context.comment("ΠŸΡ€ΠΈΠ²Π΅Ρ‚")  # Π‘Ρ‚ΠΈΠ»ΡŒ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°

πŸš€ Быстрый старт

1. Установка

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
git clone https://github.com/rybakov25/PostProcessor.git
cd PostProcessor

# Π‘Π±ΠΎΡ€ΠΊΠ°
dotnet build

2. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запуск

# ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° APT Ρ„Π°ΠΉΠ»Π°
dotnet run --project src/PostProcessor.CLI/PostProcessor.CLI.csproj \
  -- -i input.apt -o output.nc -c siemens -m mmill

3. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ макрос Π·Π° 5 ΠΌΠΈΠ½ΡƒΡ‚

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» macros/python/user/hello.py:

# -*- coding: ascii -*-
def execute(context, command):
    context.comment("=== ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΎΡ‚ Python! ===")
    context.write("G0 X0 Y0 Z50")

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² output.nc:

(=== ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΎΡ‚ Python! ===)
N1 G0 X0. Y0. Z50.

πŸ“– ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅: QUICKSTART.md β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ макрос Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚


πŸ› οΈ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ (4 Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ…)

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ БСмСйства ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Бтатус
Siemens 840D / 840D sl 9 Π±Π°Π·ΠΎΠ²Ρ‹Ρ… + mmill βœ… Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²
Fanuc 31i / 32i / 35i 11 (Ρ„Ρ€Π΅Π·Π΅Ρ€Π½Ρ‹Π΅ + Ρ‚ΠΎΠΊΠ°Ρ€Π½Ρ‹Π΅) βœ… Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²
Heidenhain TNC 640 / TNC 620 9 (ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис) βœ… Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²
Haas NGC / Next Gen 9 (с % ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ) βœ… Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²

Π’ΠΈΠΏΡ‹ станков

Π’ΠΈΠΏ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°
3-осСвыС Ρ„Ρ€Π΅Π·Π΅Ρ€Π½Ρ‹Π΅ DMG Mori DMU50, Haas VF-2 βœ…
5-осСвыС DMG Mori DMU50 5-axis, Haas UMC βœ… (RTCP, CYCLE800)
Π’ΠΎΠΊΠ°Ρ€Π½Ρ‹Π΅ Mori Seiki NLX2500, Romi GL250 βœ… (TURRET, CHUCK, TAILSTK)
ΠœΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Π΅ Mazak Integrex πŸ”„ Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

πŸ“– ΠŸΠΎΠ»Π½Ρ‹ΠΉ список: SUPPORTED_EQUIPMENT.md


πŸ“‹ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

3-осСвой Ρ„Ρ€Π΅Π·Π΅Ρ€Π½Ρ‹ΠΉ (Siemens 840D)

dotnet run -- -i part.apt -o part.nc \
  -c siemens \
  --machine-profile mmill

5-осСвой ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π½Ρ‚Ρ€ (Fanuc 31i)

dotnet run -- -i impeller.apt -o impeller.nc \
  -c fanuc \
  --machine-profile dmg_mori_dmu50_5axis

Π’ΠΎΠΊΠ°Ρ€Π½Ρ‹ΠΉ станок (Haas NGC)

dotnet run -- -i shaft.apt -o shaft.nc \
  -c haas \
  --machine-profile romi_gl250

Валидация APT Ρ„Π°ΠΉΠ»Π°

dotnet run -- -i part.apt -o /dev/null \
  -c siemens \
  --validate-only

🐍 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ макросов

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ шаблон

# -*- coding: ascii -*-
# MACRO_NAME - ОписаниС

def execute(context, command):
    """
    ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° APT ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    Args:
        context: ΠžΠ±ΡŠΠ΅ΠΊΡ‚ контСкста постпроцСссора
        command: ΠžΠ±ΡŠΠ΅ΠΊΡ‚ APT ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
    """
    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    if not command.numeric:
        return

    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    x = command.numeric[0]

    # ОбновлСниС рСгистров
    context.registers.x = x

    # Π’Ρ‹Π²ΠΎΠ΄ G-ΠΊΠΎΠ΄Π°
    context.write(f"G01 X{x:.3f}")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: GOTO (Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅)

# -*- coding: ascii -*-
def execute(context, command):
    if not command.numeric:
        return

    x = command.numeric[0] if len(command.numeric) > 0 else 0
    y = command.numeric[1] if len(command.numeric) > 1 else 0
    z = command.numeric[2] if len(command.numeric) > 2 else 0

    context.registers.x = x
    context.registers.y = y
    context.registers.z = z

    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° быстроС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅
    if context.system.MOTION == 'RAPID':
        context.write(f"G0 X{x:.3f} Y{y:.3f} Z{z:.3f}")
    else:
        context.write(f"G1 X{x:.3f} Y{y:.3f} Z{z:.3f}")

        # Модальная ΠΏΠΎΠ΄Π°Ρ‡Π° с использованиСм StateCache
        if context.registers.f > 0:
            last_feed = context.cacheGet("LAST_FEED", 0.0)
            if last_feed != context.registers.f:
                context.write(f"F{context.registers.f:.1f}")
                context.cacheSet("LAST_FEED", context.registers.f)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: SPINDL (шпиндСль)

# -*- coding: ascii -*-
def execute(context, command):
    # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ RPM
    if command.numeric:
        context.registers.spindle_rpm = command.numeric[0]

    # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов
    spindle_state = 'OFF'
    if command.minorWords:
        for word in command.minorWords:
            if word.upper() in ['ON', 'CLW']:
                spindle_state = 'CW'
            elif word.upper() in ['CCLW', 'CCW']:
                spindle_state = 'CCW'
            elif word.upper() == 'OFF':
                spindle_state = 'OFF'

    # Π’Ρ‹Π²ΠΎΠ΄ M-ΠΊΠΎΠ΄Π°
    if spindle_state == 'CW':
        context.write("M3")
        if context.registers.spindle_rpm > 0:
            context.write(f"S{int(context.registers.spindle_rpm)}")
    elif spindle_state == 'CCW':
        context.write("M4")
        if context.registers.spindle_rpm > 0:
            context.write(f"S{int(context.registers.spindle_rpm)}")
    else:
        context.write("M5")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: CYCLE800 с CycleCache

# -*- coding: ascii -*-
def execute(context, command):
    # Π‘Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ†ΠΈΠΊΠ»Π°
    params = {
        "MODE": command.numeric[0] if len(command.numeric) > 0 else 1,
        "TABLE": command.string if command.string else "TABLE1",
        "X": context.registers.x,
        "Y": context.registers.y,
        "Z": context.registers.z
    }
    
    # АвтоматичСский Π²Ρ‹Π±ΠΎΡ€: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²
    context.cycleWriteIfDifferent("CYCLE800", params)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: comment с TextNCWord

# -*- coding: ascii -*-
def execute(context, command):
    # Π‘Ρ‚ΠΈΠ»ΡŒ коммСнтария бСрётся ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°
    # Siemens: (Comment), Haas: ; Comment
    context.comment("Начало ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ")
    context.comment("ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€")  # ВранслитСрация ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹

πŸ“– ПолноС руководство: PYTHON_MACROS_GUIDE.md


πŸ“š ДокумСнтация

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ОписаниС
πŸš€ QUICKSTART ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ макрос Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚
πŸ“š PYTHON_MACROS_GUIDE ПолноС API макросов (1400+ строк)
πŸ—οΈ ARCHITECTURE АрхитСктура для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²
βš™οΈ CUSTOMIZATION Настройка ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ΠΈ станков
🌍 SUPPORTED_EQUIPMENT ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
πŸ”„ IMSPOST_TO_PYTHON ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ с IMSpost
πŸ“Š COMPLETION_REPORT Бтатус ΠΈ ΠΏΠ»Π°Π½ развития

πŸ“¦ Установка

Из исходного ΠΊΠΎΠ΄Π°

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
git clone https://github.com/rybakov25/PostProcessor.git
cd PostProcessor

# Π‘Π±ΠΎΡ€ΠΊΠ°
dotnet build

# Запуск
dotnet run --project src/PostProcessor.CLI/PostProcessor.CLI.csproj \
  -- -i input.apt -o output.nc -c siemens

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΈ

Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ с страницы Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²:

  • Windows: PostProcessor-1.1.0-win-x64.zip
  • Linux: PostProcessor-1.1.0-linux-x64.zip

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вСрсии:

  • v1.0.0: PostProcessor-v1.0.0-win-x64.zip, PostProcessor-v1.0.0-linux-x64.zip

βš™οΈ Настройка

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ОписаниС Default
--input -i Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ APT Ρ„Π°ΠΉΠ» ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
--output -o Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ NC Ρ„Π°ΠΉΠ» ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
--controller -c Π’ΠΈΠΏ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° siemens
--machine-profile -mp ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ станка НСт
--debug -d Π Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ false

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ configs/controllers/siemens/840d.json:

{
  "name": "Siemens Sinumerik 840D sl",
  "machineType": "Milling",
  "formatting": {
    "coordinates": {
      "decimals": 3,
      "trailingZeros": false
    },
    "sequenceNumbers": {
      "enabled": true,
      "prefix": "N",
      "increment": 10
    },
    "comments": {
      "style": "parentheses",
      "transliterate": true
    }
  },
  "gcode": {
    "rapid": "G0",
    "linear": "G1"
  },
  "mcode": {
    "spindleCW": "M3",
    "coolantOn": "M8"
  },
  "fiveAxis": {
    "tcpOn": "RTCPON",
    "tcpOff": "RTCPOF"
  }
}

πŸ”§ ВрСбования

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ВСрсия ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
.NET SDK 8.0+ Для сборки
Python 3.8-3.12 Для макросов
CAM-систСма Π›ΡŽΠ±Π°Ρ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ APT/CL

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ CAM-систСмы

  • βœ… CATIA
  • βœ… Siemens NX
  • βœ… Mastercam
  • βœ… Fusion 360
  • βœ… SolidCAM
  • βœ… HyperMill
  • βœ… Π”Ρ€ΡƒΠ³ΠΈΠ΅ (с экспортом Π² APT/CL)

πŸ“Š Бтатус ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ВСкущая вСрсия: v1.1.0 (Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° 24.02.2026)

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Π‘Ρ‚Ρ€ΠΎΠΊ ΠΊΠΎΠ΄Π° ~10,000 (C#)
C# Ρ„Π°ΠΉΠ»Ρ‹ 50+
Python макросы 65
Unit-тСсты 169 βœ…
ДокумСнтация ~8,000 строк
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 4 ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° + 7 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ

Π“ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊ производству

βœ… Π“ΠΎΡ‚ΠΎΠ² для:

  • 3-5 осСвых Ρ„Ρ€Π΅Π·Π΅Ρ€Π½Ρ‹Ρ… станков
  • Π’ΠΎΠΊΠ°Ρ€Π½Ρ‹Ρ… станков (базовая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°)
  • Π‘Ρ‚Π°Π½ΠΊΠΎΠ² с Siemens, Fanuc, Heidenhain, Haas
  • Ѐорматирования ΠΈΠ· JSON-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²
  • ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ состояний ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ²

⚠️ Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅:

  • Π’ΠΎΠΊΠ°Ρ€Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ G71-G76
  • Mill-Turn ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° (ΠΏΡ€ΠΈΠ²ΠΎΠ΄Π½ΠΎΠΉ инструмСнт)
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ (Mazak, Okuma)
  • ГрафичСский интСрфСйс (GUI)

πŸ“‹ План развития: COMPLETION_REPORT.md


🀝 Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

  1. Fork рСпозитория
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ (git checkout -b feature/amazing-feature)
  3. Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ измСнСния (git commit -m 'Add amazing feature')
  4. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π² Π²Π΅Ρ‚ΠΊΡƒ (git push origin feature/amazing-feature)
  5. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Pull Request

πŸ“– ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅: CONTRIBUTING.md (Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅)


πŸ“„ ЛицСнзия

MIT License β€” см. Ρ„Π°ΠΉΠ» LICENSE


πŸ“ž ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹


πŸ™ Благодарности

  • IMSpost β€” Π·Π° Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ
  • pythonnet β€” Π·Π° Python ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ
  • xUnit β€” Π·Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ тСстирования
  • ПАО "ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΡ Π’Π‘ΠœΠŸΠž-ΠΠ’Π˜Π‘ΠœΠ" ΠΈ Π‘ΠΎΠ»Π΄Π°Ρ‚ΠΎΠ²Ρƒ ВячСславу, Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρƒ-программисту станков с ЧПУ β€” Π·Π° Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ
  • QWEN AI β€” Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

PostProcessor β€” Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ постпроцСссор для CNC

ΠΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ β€’ ДокумСнтация β€’ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

About

πŸš€ Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ постпроцСссор для CAM-систСм с Python-макросами. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Siemens, Fanuc, Heidenhain, Haas.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published