macro M6 -controler AXBBE

While UCCNC does not currently have a TURN Modual Here is the place to discuss your wants and wishes for TURN

macro M6 -controler AXBBE

Postby karczmarzdesign » Thu Sep 05, 2024 8:13 am

I have an AXBBE + UCCNC 1.1213 controller

I have a problem writing the correct macro for head rotation.

The macro is implemented by:
1. sending a signal to the relay which causes the magazine to be unlocked
2. Moving the magazine in axis A, e.g. A45 - Tool 2
3. cutting off the signal from the magazine which causes the magazine to be blocked.

I switched from mach3 to uccnc - the macro worked without a problem there.

Below I have written a new macro for uccnc - m6

Please help me analyze and tell me where I made a mistake in the code:


Code: Select all
// ================================================================================================
// M6 Automatic tool changer with A axis and Port 2, Pin 2 control for UCCNC
// ================================================================================================

if (!ChangeTool())
  exec.Callbutton(130);  // Zakończenie, jeśli zmiana narzędzia się nie powiedzie

// ================================================================================================

#Events

// ================================================================================================ Dialogs
// Dialogs
// ================================================================================================

static string _macro_title = "Tool change";
static string _error_msg = _macro_title + " error";

// ================================================================================================ ChangeTool

private bool ChangeTool()
{
    double ToolX = -1;  // Pozycja X do zmiany narzędzia (maszyna)
    double ToolZ = -15; // Pozycja Z do zmiany narzędzia (maszyna)

    int NewTool = exec.Getnewtool();
    int CurrentTool = exec.Getcurrenttool();

    // Sprawdzanie, czy wybrano to samo narzędzie
    if (NewTool == CurrentTool)
        return true;  // Nie zmieniaj, jeśli wybrane to samo narzędzie

    if (!exec.IsHomed())  // Jeśli maszyna nie została zhomowana
    {
        ShowError("The machine was not yet homed,\ndo homing before executing a tool change!");
        return false;
    }

    // Czekaj na zakończenie ruchu
    while (exec.IsMoving()) ;

    // Pobranie bieżących współrzędnych X i Z, aby móc wrócić do tych pozycji po wymianie narzędzia
    double Xoriginalpos = exec.GetXmachpos();
    double Zoriginalpos = exec.GetZmachpos();

    // Zatrzymanie wrzeciona
    exec.Stopspindle();
    while (exec.IsMoving()) ;

    if (exec.Ismacrostopped())
    {
        ShowError("Tool change aborted");
        return false;
    }

    // Najazd na pozycję wymiany narzędzia na płaszczyźnie XZ
    exec.Code("G00 G53 X" + cs(ToolX) + " Z" + cs(ToolZ));
    while (exec.IsMoving()) ;

    if (exec.Ismacrostopped())
    {
        ShowError("Tool change aborted");
        return false;
    }

    // Aktywacja portu 1, pinu 2 - wyjście sterujące
    exec.Setoutpin(1, 2, true);  // Ustaw port 2, pin 2 na stan wysoki (aktywacja)

    // Przesunięcie rewolwera na odpowiednią pozycję dla nowego narzędzia
    MoveToToolPosition(NewTool);

    // Automatyczne ustawienie nowego narzędzia
    exec.Setcurrenttool(NewTool);
    exec.Code("G43 H" + NewTool.ToString());  // Załadowanie przesunięć narzędzia
    while (exec.IsMoving()) ;

    if (exec.Ismacrostopped())
    {
        ShowError("Tool change aborted");
        return false;
    }

    // Dezaktywacja portu 2, pinu 2 po zakończeniu zmiany narzędzia
    exec.Setoutpin(1, 2, false);  // Ustaw port 2, pin 2 na stan niski (dezaktywacja)

    // Powrót do pierwotnej pozycji
    exec.Code("G00 X" + cs(Xoriginalpos) + " Z" + cs(Zoriginalpos));
    while (exec.IsMoving()) ;

    if (exec.Ismacrostopped())
    {
        ShowError("Tool change aborted");
        return false;
    }

    // Automatyczne wznowienie cyklu po zakończeniu zmiany narzędzia
    exec.CycleStart();

    return true;
}

// ================================================================================================
// Funkcja do obsługi rewolwera narzędziowego (oś A)
private void MoveToToolPosition(int toolNumber)
{
    // Przesuń do odpowiedniej pozycji na osi A w zależności od numeru narzędzia
    switch (toolNumber)
    {
        case 1:
            exec.Code("G00 A0.0");  // Narzędzie 1 na pozycji 0 stopni
            break;
        case 2:
            exec.Code("G00 A45.0");  // Narzędzie 2 na pozycji 45 stopni
            break;
        case 3:
            exec.Code("G00 A90.0");  // Narzędzie 3 na pozycji 90 stopni
            break;
        case 4:
            exec.Code("G00 A135.0");  // Narzędzie 4 na pozycji 135 stopni
            break;
        case 5:
            exec.Code("G00 A180.0");  // Narzędzie 5 na pozycji 180 stopni
            break;
        case 6:
            exec.Code("G00 A225.0");  // Narzędzie 6 na pozycji 225 stopni
            break;
        case 7:
            exec.Code("G00 A270.0");  // Narzędzie 7 na pozycji 270 stopni
            break;
        case 8:
            exec.Code("G00 A315.0");  // Narzędzie 8 na pozycji 315 stopni
            break;
        default:
            ShowError("Invalid tool number: " + toolNumber);
            break;
    }

    // Czekaj na zakończenie ruchu osi A
    while (exec.IsMoving()) ;
}

// ================================================================================================
// Konwersja wartości liczbowych na string z 6 cyframi po przecinku
private string cs(double d)
{
    return d.ToString("F6");
}

// ================================================================================================
// Wyświetlanie komunikatów błędów
void ShowError(string str)
{
    ShowDialog(str, _error_msg, MessageBoxButtons.OK, "*#");
}

// ================================================================================================
// Funkcja do wyświetlania okien dialogowych
DialogResult ShowDialog(string msg, string caption = "", MessageBoxButtons buttons = MessageBoxButtons.OK, string style = "")
{
    // Wyświetl komunikat na ekranie głównym UCCNC
    exec.Displaymessage(msg);

    // Obsługa opcji dialogowych
    return MessageBox.Show(exec.mainform, msg, caption, buttons);

// Automatyczne wznowienie cyklu po zmianie narzędzia
exec.CycleStart();

}




below is a macro from the mach3 program:

Code: Select all

Sub Main()         'Definir variables
OldTool = GetOEMDRO (1200)   
x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
a = GetToolChangeStart( 3 )
b = GetToolChangeStart( 4 )
c = GetToolChangeStart( 5 )
tool = GetSelectedTool()




'Konfiguracja
iToolNum     = 8    'maksymalna ilosc narzedzi
RefTool      = 1    'numer narzedzia po wyzerowaniu osi
iCwFeed      = 5000 'posuw zmiany
iCcwFeed     = 1000 'posuw cofania

'Najazd na punkt wymiany narzedzia
Code "G90 G00 G53 X-10"
Code "G90 G00 G53 Z-45"
While IsMoving()
Message "WYMIANA NARZĘDZIA"
    sleep(10)
Wend
sleep(20)
Message ""



NewTool = tool
MaxToolNum = 13             
If NewTool = OldTool Then
   Exit Sub
End If
While NewTool = MaxToolNum
NewTool = Question ("Place valid tool number (1 to 13)")
Wend
'Call MovePos(OldTool)     
'While IsMoving()
'Wend

ActivateSignal(Output4)   
Code "G4 P 500."             
Call  MovePos(NewTool)     
While IsMoving()
Wend
DeActivateSignal(Output0) 
Code "G4 P40."                             
While IsMoving()
Wend
Call SetUserDRO (1200,NewTool)
SetCurrentTool( NewTool )

If isactive(input4) Then
              I = 1
                 Else
              I=0
    End If

   
        
        ActivateSignal(OUTPUT4)
   
      sleep 700
      deActivateSignal(output4)
      sleep 0
   
      If isactive(Output4) Then
              J = 1
              Else
              J=0
              End If


If IsActive(Input3) Then
   
    While IsMoving()
    Wend
Else
    ' Wejście 3 nieaktywne - przejście w stan błędu
    Code "M30"  ' Przykładowa komenda kończąca program w stanie błędu
End If



End Sub

Sub MovePos(ByVal ToolNumber As Integer)

Select Case ToolNumber     
       Case Is = 1
             
         Code "G00  A0.0"
       Case Is = 2
       
         Code "G00   A45.0"
       Case Is = 3
       
         Code "G00  A90.0"
       Case Is = 4
     
         Code "G00   A135.0"
       Case Is = 5
        
         Code "G00   A180.0"
       Case Is = 6
       
          
         Code "G00   A225.0"
       Case Is = 7
          
         Code "G00  A270 .0"
       Case Is = 8
         
         Code "G00  A315  .0"
                 
End Select
         
End Sub                             
 
karczmarzdesign
 
Posts: 7
Joined: Wed Jan 24, 2024 6:47 pm

Return to UCCNC TURN (CNC Lathe)

Who is online

Users browsing this forum: No registered users and 3 guests