Chat GPT to write scripts for UCCNC

Post anything you want to discuss with others about the software.

Re: Chat GPT to write scripts for UCCNC

Postby Jasonrm1983 » Sun Apr 09, 2023 1:01 am

dezsoe wrote:I'm sure that ChatGPT will be very useful somewhere in the future, but it is not now. Reading your sample there are two possibilities:
a) If you are a beginner in programming then this code will not help you. Some parts are missing and the line extraction assumes that in a line where a G92 is the last word is the Z value. (And there's no comment after it.) Also, it will not find the material height, just the last value of G92 Z. It seems like ChatGPT knows some bits about the g-code structure, but does not know how it works as a system. Not to mention that by default the macro language is C# and not Visual Basic.
b) If you are an expert in programming then you don't need this code, because you exactly know how to write a much better one.
To be precise I'd say "you definitely need to modify it".


I fully understand where you are coming from. but I do think it would help people trying to understand code structure, definition structure, or give an abstract view of the code if a beginner, but this beginner better also understand what is right and what is wrong with the structure and code basics.

So I asked it to write it in C# and added your argument this was the outcome. Not saying its RIGHT but I find it interesting that it has some recollection of the SDK...

I asked it to write it in C#
Q:Could you write this in C#

A: Certainly! Here's an example code in C# that reads the material height from a G-code file and writes it as an offset to a field box in the UCCNC GUI:
Code: Select all
using System.IO;
using System.Windows.Forms;

// Define function to set OEM DRO value
void SetOEMDRO(int id, double value)
{
    string command = string.Format("SetOEMDRO({0},{1})", id, value);
    UCCNC.UCCNCApp.WriteConsole(command);
}

// Define function to show message box
void ShowMessageBox(string message)
{
    MessageBox.Show(message, "Material Height");
}

// Define function to read G-code file and extract material height
double ReadGCodeFile(string filepath)
{
    double material_height = 0.0;

    using (StreamReader sr = new StreamReader(filepath))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (line.Contains("G92"))
            {
                int z_index = line.IndexOf("Z");
                if (z_index >= 0)
                {
                    string z_value_str = line.Substring(z_index + 1);
                    double z_value;
                    if (double.TryParse(z_value_str, out z_value))
                    {
                        material_height = z_value;
                        break;
                    }
                }
            }
        }
    }

    return material_height;
}

// Main function
void Main()
{
    // Specify G-code file path
    string filepath = "C:\\Path\\To\\Gcode\\File.nc";

    // Read material height from G-code file
    double material_height = ReadGCodeFile(filepath);

    // Write material height as offset to UCCNC GUI field box
    SetOEMDRO(800, material_height);

    // Show message box with material height value
    ShowMessageBox("Material height: " + material_height);
}


This code assumes that you are using the UCCNC software with the UCCNC SDK for C# development, and that you have defined the "SetOEMDRO" and "WriteConsole" functions elsewhere in your code.

The "ReadGCodeFile" function reads each line of the G-code file and checks if it contains a G92 command with a "Z" parameter. If it does, it extracts the material height value and returns it.

The "Main" function calls the "ReadGCodeFile" function to get the material height value, then uses the "SetOEMDRO" function to write the value as an offset to the UCCNC GUI field box with ID 800. Finally, it displays a message box with the material height value.

Note that this is just an example, and you may need to modify it to fit your specific use case and G-code file format.

Q: Some parts are missing and the line extraction assumes that in a line where a G92 is the last word is the Z value. (And there's no comment after it.) Also, it will not find the material height, just the last value of G92 Z.

A:I apologize for the confusion in my previous answer. You are correct that my previous example assumed that the material height was specified using the last occurrence of the G92 Z command in the file.

Here's an updated example in C# that reads the material height by parsing all Z commands in the G-code file, and writes it as an offset to a field box in the UCCNC GUI:

Code: Select all
using System;
using System.IO;
using System.Windows.Forms;

// Define function to set OEM DRO value
void SetOEMDRO(int id, double value)
{
    string command = string.Format("SetOEMDRO({0},{1})", id, value);
    UCCNC.UCCNCApp.WriteConsole(command);
}

// Define function to show message box
void ShowMessageBox(string message)
{
    MessageBox.Show(message, "Material Height");
}

// Define function to read G-code file and extract material height
double ReadGCodeFile(string filepath)
{
    double material_height = 0.0;

    using (StreamReader sr = new StreamReader(filepath))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (line.Contains("G92"))
            {
                int z_index = line.IndexOf("Z");
                if (z_index >= 0)
                {
                    string z_value_str = line.Substring(z_index + 1);
                    double z_value;
                    if (double.TryParse(z_value_str, out z_value))
                    {
                        material_height = z_value;
                    }
                }
            }
            else if (line.Contains("Z"))
            {
                int z_index = line.IndexOf("Z");
                if (z_index >= 0)
                {
                    string z_value_str = line.Substring(z_index + 1);
                    double z_value;
                    if (double.TryParse(z_value_str, out z_value))
                    {
                        material_height = Math.Max(material_height, z_value);
                    }
                }
            }
        }
    }

    return material_height;
}

// Main function
void Main()
{
    // Specify G-code file path
    string filepath = "C:\\Path\\To\\Gcode\\File.nc";

    // Read material height from G-code file
    double material_height = ReadGCodeFile(filepath);

    // Write material height as offset to UCCNC GUI field box
    SetOEMDRO(800, material_height);

    // Show message box with material height value
    ShowMessageBox("Material height: " + material_height);
}


In this updated example, the "ReadGCodeFile" function now parses all Z commands in the G-code file, and updates the material height value to the maximum Z value found. This ensures that the material height will be correctly calculated even if there are multiple Z commands with different values in the file.

Again, I apologize for any confusion caused by my previous answer, and I hope this updated example is more helpful.
Jasonrm1983
 
Posts: 18
Joined: Sat Mar 13, 2021 1:29 am

Previous

Return to General discussion about the UCCNC software

Who is online

Users browsing this forum: No registered users and 26 guests