Pulser3 Kurulum PDF İndir

Post Processor

Bir DXF dosyası ya da hazır şekil G koda dönüştürülüp sisteme aktarılmak istendiğinde Post Prosesör makrosu kullanılır. Operatör bir DXF doyasını ya da hazır şekillerden birini açtığında HSC Studio şekilleri sırayla tarayarak Post Prosesör makrosuna yönlendirir. Post Prosesör makrosu diğer C# makroları gibi makrolar bölümüne PostPro ismi ile oluşturulmalıdır. HSC Studio bu makro programına ilgili değerleri aktarmak ve oluşan G kodları biriktirmek için ön tanımlı post sınıfı içerir. Makro programı içinde hiçbir atama yapmaya gerek kalmadan bu sınıfa ulaşılabilir. Oluşturulan makro içerisinde PostProCmd isimli bir fonksiyon bulunmalıdır. HSC Studio çıktıları bu fonksiyona string tipinde yönlendirir.

public void PostProCmd(string cmd)

{

   // Post prosesör yönlendirmeleri burada yapılmalıdır

}

 

Post Prosesör komut listesi:

Init

Finish

Comment

BeginLayer

EndLayer

Line

Arc

StartDistance

EndDistance

 

post sınıfı:

public float Tolerance = 0.1F;

public int CompSide = 0;

public float StartX = 0;

public float StartY = 0;

public float StartZ = 0;

public float EndX = 0;

public float EndY = 0;

public float EndZ = 0;

public float ArcCenterX = 0;

public float ArcCenterY = 0;

public float ArcRadius = 0;

public bool ArcDir = false;

public float ZRetract = 0;

public float ZSafePos = 0;

public float ZCutPos = 0;

public int Tool = 0;

public float Feed = 0;

public float ZFeed = 0;

public int SpindleDir = 0;

public int SpindleSpeed = 0;

public string Comment = "";

public string LayerName = "";

public string Label = "";

 

/// <summary>

/// Gönderilen karakter dizesini Output değişkenine ekler

/// </summary>

/// <param name="s">Output değişkenine eklenecek karakter dizesi</param>

/// <returns></returns>

public void Add(string s)

/// <summary>

/// Gönderilen karakter dizesini 

/// sonuna satır sonu karakterleri ilave ederek 

/// Output değişkenine ekler

/// </summary>

/// <param name="s">Output değişkenine eklenecek karakter dizesi</param>

/// <returns></returns>

public void AddLine(string s)

 

/// <summary>

/// Gönderilen double tipini ve komutu formatlayarak string olarak döndürür

/// </summary>

/// <param name="cmd"></param>

/// <param name="n"></param>

/// <returns></returns>

public string Cmd(string cmd, float n, int precision)

 

Örnek Post Prosesör Makrosu :

// Yerel değişkenler

int precision = 4;       // Ondalık hane sayısı

int compSide = 0;        // Son takım yarıçap telafi yönü (0: KAPALI, 1: SOL, 2: SAĞ)

int spdDir = 0;          // Son spindle dönüş yönü

int spdSpeed = 0;        // Son spindle hızı

int tool = 0;            // Son takım

float curX = float.MinValue;        // İşlenen son X pozisyonu

float curY = float.MinValue;        // İşlenen son Y pozisyonu

float curZ = float.MinValue;        // İşlenen son Z pozisyonu

float curF = float.MinValue;        // Verilen son ilerleme komutu

int NCounter = 1;

bool g50_1 = false;

 

/// <summary>

/// Boş bırakın

/// </summary>

public void Main()

{

}

/// <summary>

/// Dönüşüm için ana metod

/// <param name="cmd">Command</param>

/// </summary>

public void PostProCmd(string cmd)

{

   switch (cmd)

   {

      case "Init":

         Init();

         break;

      case "Finish":

         Finish();

         break;

      case "Comment":

         Comment();

         break;

      case "BeginLayer":

         BeginLayer();

         break;

      case "EndLayer":

         EndLayer();

         break;

      case "Line":

         Line();

         break;

      case "Arc":

         Arc();

         break;

      case "StartDistance":

         break;

      case "EndDistance":

         break;

      default:

         break;

   }

}

/// <summary>

/// G kod dosyası oluşturmaya başlamadan hemen önce çağrılır

/// İhtiyaç duyulan başlangıç atamaları burada gerçekleştirilebilir

/// </summary>

private void Init()

{

   compSide = 0;

   feed = 0;

   spdDir = 0;

   spdSpeed = 0;

   tool = 0;

   curX = float.MinValue;

   curY = float.MinValue;

   curZ = float.MinValue;

   curF = float.MinValue;

 

 

   post.AddLine("(THIS FILE IS CREATED BY HSC STUDIO)");

   post.AddLine("(-- www.hsckontrol.com ---)");

   post.AddLine("");

   post.AddLine("G54 G90 G00 G40 G49 G80 G21");

   post.AddLine("");

}

 

/// <summary>

/// Dosyanın sonuna yazdırılacak kod bloğu

/// </summary>

private void Finish()

{

 

   // Takım çap telafiyi (açıksa) kapat

   if (compSide != 0) post.AddLine("G40");

 

   // Spindle stop

   post.AddLine("M5");

 

   // Z referans konumuna

   post.AddLine("G53 G90 G00 Z0.");

   post.AddLine("M30 (END OF PROGRAM)");

   post.AddLine("%");

 

   // G kod dosyasına kaydet

   string file_name = "C:\\shape.cnc";

   using (StreamWriter writer = new StreamWriter(file_name, false))

   {

      writer.Write(post.Output);

   }

   // Pulser’a kopyala

   CopyGCode(file_name);

}

/// <summary>

/// Açıklama

/// <param name="post.Comment">Açıklama içeriği</param>

/// </summary>

private void Comment()

{

   post.AddLine("(" + post.Comment + ")");

}

 

 

/// <summary>

/// Yeni bir katmana başlanıyor

/// </summary>

private void BeginLayer()

{

 

}

 

/// <summary>

/// Katman tamamlandı

/// </summary>

private void EndLayer()

{

 

}

/// <summary>

/// Lineer kesim hareketi için gereken kod bloğu

/// <param name="post.StartX">Hareketin X başlangıç koordinatı</param>

/// <param name="post.StartY">Hareketin Y başlangıç koordinatı</param>

/// <param name="post.StartZ">Hareketin Z başlangıç koordinatı</param>

/// <param name="post.EndX">Hareketin X hedef koordinatı</param>

/// <param name="post.EndY">Hareketin Y hedef koordinatı</param>

/// <param name="post.EndZ">Hareketin Z hedef koordinatı</param>

/// </summary>

private void Line()

{

 

   // Çerçeve çizgileri atlanır

   if (post.Label == "Border") return;

 

   // Gerekliyse hareketin başlangıç noktasına rapid hareket

   RapidMoveToStartPos();

 

   // Z başlangıç koordinatına hareket

   if (curZ != post.StartZ)

   {

      // Z Eksen kesim başlangıç koordinatına yavaş hareket

      post.AddLine("G01" + post.Cmd("Z", post.StartZ, precision) +

                   post.Cmd("F", post.ZFeed, precision));

      curZ = post.StartZ;

   }

 

   // Dokum baslangıcı tamamlandı

   if (g50_1 == true)

   {

      post.Add("G50.1 ");

      g50_1 = false;

   }

   // Lineer kesim komutu

   post.Add("G01 ");

 

   // X hedef

   if (post.StartX != post.EndX)

      post.Add(post.Cmd("X", post.EndX, precision));

 

   // Y hedef

   if (post.StartY != post.EndY)

      post.Add(post.Cmd("Y", post.EndY, precision));

 

   // Z hedef

   if (post.StartZ != post.EndZ)

      post.Add(post.Cmd("Z", post.EndZ, precision));

 

   // F hedef

   if (curF != post.Feed)

      post.Add(post.Cmd("F", post.Feed, 1));

 

   // Satır sonu

   post.AddLine("");

 

   // Anlık konumu sakla

   curX = post.EndX;

   curY = post.EndY;

   curZ = post.EndZ;

   curF = post.Feed;

 

}

 

/// <summary>

/// Yay kesim hareketi için gereken kod bloğu

/// <param name="post.StartX">Hareketin X başlangıç koordinatı</param>

/// <param name="post.StartY">Hareketin Y başlangıç koordinatı</param>

/// <param name="post.StartZ">Hareketin Z başlangıç koordinatı</param>

/// <param name="post.EndX">Hareketin X hedef koordinatı</param>

/// <param name="post.EndY">Hareketin Y hedef koordinatı</param>

/// <param name="post.EndZ">Hareketin Z hedef koordinatı</param>

/// <param name="post.ArcCenterX">Yay merkezinin X koordinatı</param>

/// <param name="post.ArcCenterY">Yay merkezinin Y koordinatı</param>

/// <param name="post.ArcRadius">Yayın yarıçapı</param>

/// <param name="post.ArcDir">Yay dönüş yönü false: CCW, true: CW </param>

/// </summary>

private void Arc()

{

 

   // Çerçeve çizgileri atlanır

   if (post.Label == "Border") return;

 

   // Gerekliyse hareketin başlangıç noktasına rapid hareket

   RapidMoveToStartPos();

 

   // Z başlangıç koordinatına hareket

   if (curZ != post.StartZ)

   {

      // Z Eksen kesim başlangıç koordinatına yavaş hareket

      post.AddLine("G01" + post.Cmd("Z", post.StartZ, precision) +

                   post.Cmd("F", post.ZFeed, precision));

      curZ = post.StartZ;

   }

   // Dokum baslangıcı tamamlandı

   if (g50_1 == true)

   {

      post.Add("G50.1 ");

      g50_1 = false;

   }

 

   // Yay kesim komutu

   if (post.ArcDir == false) post.Add("G03 ");

   else post.Add("G02 ");

 

   // X hedef

   if (post.StartX != post.EndX)

      post.Add(post.Cmd("X", post.EndX, precision));

 

   // Y hedef

   if (post.StartY != post.EndY)

      post.Add(post.Cmd("Y", post.EndY, precision));

 

   // Z hedef

   if (post.StartZ != post.EndZ)

      post.Add(post.Cmd("Z", post.EndZ, precision));

 

   // Yay merkezi X (I komutu)

   post.Add(post.Cmd("I", post.ArcCenterX - post.StartX, precision));

 

   // Yay merkezi Y (J komutu)

   post.Add(post.Cmd("J", post.ArcCenterY - post.StartY, precision));

 

   // F hedef

   if (curF != post.Feed)

      post.Add(post.Cmd("F", post.Feed, 1));

 

   // Satır sonu

   post.AddLine("");

 

   // Anlık konumu sakla

   curX = post.EndX;

   curY = post.EndY;

   curZ = post.EndZ;

   curF = post.Feed;

}

 

/// <summary>

/// Hareketin başlangıcına -gerekliyse- Rapid hareket

/// </summary>

private void RapidMoveToStartPos()

{

     /*

      if(post.Tool != tool){

         post.AddLine( "M06 T" + post.Tool.ToString());

         post.AddLine( "G43 H" + post.Tool.ToString());

         tool = post.Tool;

      }

    */

   if ((post.SpindleDir != spdDir) || (post.SpindleSpeed != spdSpeed))

   {

      switch (post.SpindleDir)

      {

         case 1:

            post.AddLine("M03 S" + post.SpindleSpeed.ToString());

            break;

         case 2:

            post.AddLine("M04 S" + post.SpindleSpeed.ToString());

            break;

         default:

            post.AddLine("M05");

            break;

      }

      spdDir = post.SpindleDir;

      spdSpeed = post.SpindleSpeed;

   }

 

   if ((Math.Abs(post.StartX - curX) > post.Tolerance)

        || (Math.Abs(post.StartY - curY) > post.Tolerance))

   {

      // Rapid hareketten önce takım çap telafiyi (açıksa) kapat

      if (compSide != 0) post.AddLine("G40");

 

      // Z geri kaçma noktasına hızlı hareket

      post.AddLine("G00" + post.Cmd("Z", post.ZRetract, precision));

 

      //N Numaraları eklenir

      post.AddLine("N" + NCounter++.ToString());

       

      // Kesime başlamadan önce takım çap telafiyi aç

      if (post.CompSide == 1) post.AddLine("G41 D" + post.Tool.ToString());

      else if (post.CompSide == 2) post.AddLine("G42 D" + post.Tool.ToString());

      compSide = post.CompSide;

 

 

      // XY kesim başlangıç noktasına hızlı hareket

      post.AddLine("G00" + post.Cmd("X", post.StartX, precision) +

                   post.Cmd("Y", post.StartY, precision));

 

 

      // Z Eksen emniyetli noktaya rapid hızlı hareket

      post.AddLine("G50.2 G00" + post.Cmd("Z", post.ZSafePos, precision));

 

      // Z Eksen kesim koordinatına yavaş hareket

      post.AddLine("G01" + post.Cmd("Z", post.StartZ, precision) +

                   post.Cmd("F", post.ZFeed, precision));

 

 

      // Anlık konumu sakla

      curX = post.StartX;

      curY = post.StartY;

      curZ = post.StartZ;

      curF = post.ZFeed;

 

   }

}