Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance 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

Contributors

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /