THC interno a UCCNC

This is where you talk about Macros, show examples of your macro scripting and SHARE handy segments of script code as examples.

THC interno a UCCNC

Postby Cosimo83 » Sun Feb 02, 2025 8:35 pm

Ciao. da molto tempo penso che UCCNC possa fare da THC al suo interno con una MACRO LOOP . Ne ho scritta una e sembra funzionare in Simulazione. Vorrei collegare uno di questi convertitori che ho trovato su aliexpress e vedere se funziona. Il vostro supporto con pareri e consigli lo apprezzerei molto.
Attachments
M20100.txt
(2.4 KiB) Downloaded 121 times
Immagine 2025-02-02 212555.png
Cosimo83
 
Posts: 37
Joined: Wed Nov 14, 2018 8:22 pm

Re: THC interno a UCCNC

Postby cncdrive » Mon Feb 03, 2025 5:32 pm

You could write a plugin and read the analog signal via the plugin and then trigger the Virtual THC signal in the plugin based on the signal and some settings in your plugin.
Virtual THC is implemented in the plugin interface and how it works is that you could tell the controller that the THC up/down and ARC OK signal is now on or off from the plugin code.
So, then the controller will command the cut and move the torch up and down.
cncdrive
Site Admin
 
Posts: 5054
Joined: Tue Aug 12, 2014 11:17 pm

Re: THC interno a UCCNC

Postby Cosimo83 » Mon Feb 03, 2025 7:05 pm

ho perfezionato la macro e testato la velocita con il ciclo while . è velocissima. non so se quel convertitore che ho trovato su aliexpress sia buono per lo scopo.

Code: Select all
// Macro semplificata per il controllo THC con punto morto fisso
int fieldSetPoint = 20000;      // Campo del setpoint
int fieldDeadZone = 20002;      // Campo Offset del punto morto
int fieldInputAnalog = 20001;   // Campo per il valore corrente analogico in ingresso
int fieldInputVoltage = 20003;  // Campo per la conversione voltaggio in ingresso
int fieldLoopTime = 20004;      // Campo per visualizzare il tempo di loop
int fieldPreviousTime = 20005;  // Campo per salvare il tempo precedente tra i loop

while (true) {
    // Recupera il tempo precedente salvato e verifica la conversione
    string previousTimeStr = AS3.Getfield(fieldPreviousTime);
    long previousTime;
    if (string.IsNullOrWhiteSpace(previousTimeStr) || !long.TryParse(previousTimeStr, out previousTime)) {
        previousTime = System.DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
    }

    long currentTime = System.DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
    long loopTime = (previousTime == 0) ? 0 : (currentTime - previousTime);
    AS3.Setfield(currentTime, fieldPreviousTime); // Salva il nuovo tempo per il prossimo loop

    if (exec.GetLED(50)) {  // Controllo se Arc ON è attivo (LED 237)
       
        // Recupera il valore del punto morto e verifica la conversione
        string deadZoneStr = AS3.Getfield(fieldDeadZone);
        double deadZone1 = 0;
        if (!double.TryParse(deadZoneStr, out deadZone1)) {
            deadZone1 = 0; // Default se il valore non è valido
        }
        double deadZone = deadZone1 / 2;

        // Recupera il valore dell'input analogico e verifica la conversione
        string inputAnalogVoltageStr = AS3.Getfield(fieldInputAnalog);
        double inputAnalogVoltage1 = 0;
        if (!double.TryParse(inputAnalogVoltageStr, out inputAnalogVoltage1)) {
            inputAnalogVoltage1 = 0; // Default se il valore non è valido
        }

        double inputVoltage1 = inputAnalogVoltage1 * ( (50 * 5 ) / 65535.0);
        double roundedInputVoltage1 = Math.Round(inputVoltage1, 0);
        AS3.Setfield(roundedInputVoltage1, fieldInputVoltage);
        AS3.Validatefield(fieldInputVoltage);

        // Recupera il valore del voltaggio e verifica la conversione
        string inputVoltageStr = AS3.Getfield(fieldInputVoltage);
        double inputVoltage = 0;
        if (!double.TryParse(inputVoltageStr, out inputVoltage)) {
            inputVoltage = 0; // Default se il valore non è valido
        }

        // Recupera il valore del setpoint e verifica la conversione
        string setPointStr = AS3.Getfield(fieldSetPoint);
        double setPoint = 0;
        if (!double.TryParse(setPointStr, out setPoint)) {
            setPoint = 0; // Default se il valore non è valido
        }

        double error = inputVoltage - setPoint;

        if (error > deadZone) { // Voltaggio troppo alto, abbassa la torcia
            exec.Callbutton(539); // Disattiva THC Up
            exec.Callbutton(540); // Attiva THC Down
        }
        else if (error < -deadZone) { // Voltaggio troppo basso, alza la torcia
            exec.Callbutton(541); // Disattiva THC Down
            exec.Callbutton(538); // Attiva THC Up
        }
        else { // Dentro la zona morta, spegni entrambi i segnali
            exec.Callbutton(539); // Disattiva THC Up
            exec.Callbutton(541); // Disattiva THC Down
        }
    }
    else { // Arc ON non attivo, spegni entrambi i segnali
        exec.Callbutton(539); // Disattiva THC Up
        exec.Callbutton(541); // Disattiva THC Down
    }

    // Salva il tempo di loop nel campo 20004
    AS3.Setfield(loopTime, fieldLoopTime);
    AS3.Validatefield(fieldLoopTime);

    Thread.Sleep(10); // Rimosso per eseguire il ciclo il più velocemente possibile
}



ho inserito anche la macro costruttore M99998

Code: Select all

// MACRO M99998 (Apertura APP) CS-Tec 2025

int[] fields = { 20000, 20001, 20002, 20003, 20004, 20005 };

foreach (int field in fields) {
    string value = exec.Readkey("UserTextfields", field.ToString(), "False");
   
    // Se il valore è nullo o vuoto, metti un valore di default (es. "0")
    if (string.IsNullOrWhiteSpace(value)) {
        value = "0";
    }

    AS3.Setfieldtext(value, field);
    AS3.Validatefield(field);
}



vorrei usare un AXBB per il test ma non so se effettivamente posso collegare quel dispositivo all' entrata analogica dell' AXBB direttamente. Avrei bisogno di aiuto per i collegamenti. e un consiglio sulla scelta del convertitore . il mio generatore è un GYS Neocut125 con innesco a bassa frequenza e divisore di tensione 1/20 - 1/30 - 1/50 - 1/100 . un aiuto sarebbe molto gradito.
Cosimo83
 
Posts: 37
Joined: Wed Nov 14, 2018 8:22 pm

Re: THC interno a UCCNC

Postby cncdrive » Mon Feb 03, 2025 9:14 pm

Yes, you could connect a 0-5Volts signal to the AXBB-E input.
If your signal has higher voltage range then you could simply use 2 resistors as a voltage divider.
The AXBB-E has a schottky diode pair on the analog inputs to protect the analog input from over and negative voltages.
cncdrive
Site Admin
 
Posts: 5054
Joined: Tue Aug 12, 2014 11:17 pm

Re: THC interno a UCCNC

Postby Cosimo83 » Sat Feb 22, 2025 7:36 pm

Ieri mi è arrivata la AXBB-E. Subito ho collegato un potenziometro da 10k per verificare il funzionamento delle macro messe in loop. A primo impatto non sembra avere grandi ritardi come ho letto molto tempo fa in un post qui sul forum. Adesso aspetto che mi arrivi l' isolatore DC DC da collegare al mio generatore plasma e provare fisicamente se la risposta nei movimenti della torcia è accettabile. Chiedo info sul collegamento , non sono molto bravo e non vorrei fare qualche danno alla scheda AXBB-E . l'isolatore DC DC ha un input 0-5v e un out 0-5v . L'uscita OUT la collego con il negativo al "Power OUT" (riferito all'etichetta sulla scheda) 5V0 . Il positivo all' ingresso "Analog Input 1". Giusto ? Correggetemi se sbaglio. Nel frattempo ringrazio ChatGPT che mi ha aiutato a scrivere le tre macro che fanno funzionare il tutto e che condivido qua per chi volesse fare delle prove. Qualsiasi idea o consiglio è ben accetto.
Attachments
PlasmaCS.png
Plasma 6x2 _ 014.png
M20102.txt
(2.9 KiB) Downloaded 81 times
M20101.txt
(2.53 KiB) Downloaded 87 times
M20100.txt
(2.53 KiB) Downloaded 81 times
Cosimo83
 
Posts: 37
Joined: Wed Nov 14, 2018 8:22 pm


Return to Macros

Who is online

Users browsing this forum: No registered users and 2 guests