Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-04 Thread andy pugh
On Sun, 4 Feb 2024 at 17:51, Steffen Möller via Emc-developers
 wrote:

> I added all in src that ends with .comp or .hal. This is what now happened. I 
> was a bit surprise by the emphasis on Python.

> Copy code
> #include "hal.h"
> #include 
> #include 
> #include 
>
> static int comp_id; // Component ID
> static hal_bit_t *signal; // Pointer to the signal pin

This all seems slightly scary, has anyone tried these?

I am not 100% sure that you can use stdio.h in realtime code, though
that might only be an RTAI kernel mode thing.
(looks to be, see for example
https://github.com/LinuxCNC/linuxcnc/blob/5e7d654d772b52da7bb703788bf78951a942bc82/src/hal/components/lcd.c#L29
)

So, I for one welcome our new robot overlords.

-- 
atp
"A motorcycle is a bicycle with a pandemonium attachment and is
designed for the especial use of mechanical geniuses, daredevils and
lunatics."
— George Fitch, Atlanta Constitution Newspaper, 1912


___
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers


Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-04 Thread Steffen Möller via Emc-developers
> Gesendet: Samstag, 03. Februar 2024 um 01:29 Uhr
> Von: "Jacob Rush" 

> I wonder what would happen if you added the source code.

Hi Jacob,
I added all in src that ends with .comp or .hal. This is what now happened. I 
was a bit surprise by the emphasis on Python.
Best,
Steffen

User
Can you give an example program for HAL that I can use without hardware 
attached to my computer?
GPT
Certainly! A simple HAL (Hardware Abstraction Layer) example in LinuxCNC 
doesn't necessarily need to interact with actual hardware. Instead, it can 
simulate a scenario or handle software-only interactions. Here's a basic 
example that demonstrates creating a HAL component in Python that toggles a 
signal back and forth, simulating a simple digital input/output scenario 
without requiring any physical hardware.

This example uses a Python HAL component (toggle.py) that creates a HAL pin and 
toggles its value between true (1) and false (0) every second. This could 
simulate, for example, a sensor being activated and deactivated.

Step 1: Create the Python HAL Component (toggle.py)
First, create a Python file named toggle.py with the following content:

python
Copy code
import hal, time

# Create a new HAL component named "toggle"
h = hal.component("toggle")
# Add a pin named "signal" of type bit (boolean) that is an output
h.newpin("signal", hal.HAL_BIT, hal.HAL_OUT)

# Initialize the component
h.ready()

try:
# Main loop to toggle the signal
while True:
# Toggle the signal pin
h['signal'] = not h['signal']
# Print the current state to the console (optional)
print("Signal is now", h['signal'])
# Wait for 1 second before toggling again
time.sleep(1)
except KeyboardInterrupt:
# Handle the user pressing CTRL+C gracefully
print("Exiting toggle.py")
Step 2: Load the Component into LinuxCNC
You will need to integrate this Python component into your LinuxCNC 
configuration. Assuming you're running LinuxCNC in a simulated environment (no 
actual hardware), you can add the component to your HAL file typically 
associated with your LinuxCNC configuration.

Edit Your HAL File: Open the HAL file you're using with your LinuxCNC 
configuration, often found in your LinuxCNC configuration directory 
(your_config_name.hal).

Load the Python Component: Add the following line to load the toggle.py script 
as a HAL component:

Copy code
loadusr -W python toggle.py
This command assumes toggle.py is in the same directory as your HAL file or in 
a location that's in your system's PATH. The -W option waits for the script to 
initialize before proceeding.

Run LinuxCNC: Start your LinuxCNC configuration as you normally would. You 
should see messages printed to the terminal showing the signal pin being 
toggled between 1 and 0 every second.

Conclusion
This example demonstrates a basic use of HAL in LinuxCNC to simulate a digital 
input/output without actual hardware. It's a starting point for more complex 
interactions where you can simulate signals and behaviors before integrating 
real hardware components.

User
How would you describe that logic of toggle.py in HAL directly, i.e. without 
falling back to Python?
GPT
Describing the logic of toggle.py (a Python script that toggles a signal every 
second) directly in HAL without using Python involves creating a HAL component 
that utilizes existing functionalities within LinuxCNC to achieve the toggle 
effect. In HAL, there isn't a direct method to create timed loops as in Python; 
however, you can achieve a similar outcome by using a combination of HAL 
components that are provided by LinuxCNC, such as a signal generator and a 
bit-wise XOR gate.

Here is a conceptual approach to replicate the toggling behavior:

Step 1: Generate a Periodic Signal
First, you would need a signal that changes state periodically. LinuxCNC's hal 
library includes a siggen component that can generate a square wave, which 
alternates between high and low states at a defined frequency.

shell
Copy code
loadrt siggen # Load the signal generator component
addf siggen.0 servo-thread # Attach it to a servo thread for periodic updates
Step 2: Configure the Signal Generator
Configure the siggen to generate a square wave with a period of 2 seconds (0.5 
Hz frequency) so that the signal toggles every second. The siggen component 
outputs a float, but for a toggle, you only need a high (1) or low (0) signal. 
Therefore, the setup might need an additional step to convert this to a bit.

shell
Copy code
setp siggen.0.square 0.5 # Set the frequency for a square wave
Since siggen outputs float values, and direct conversion to a binary signal 
(bit) for toggling isn't straightforward without a custom component or Python, 
this approach illustrates the conceptual setup. In actual HAL usage, especially 
for binary toggling, a Python script or a custom C component is often more 
practical.

Step 3: Additional Steps for Binary Toggling
To convert the siggen output to a 

Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-03 Thread Stuart Stevenson
I agree with Andy. The explanation is largely complete and accurate. It is
very impressive.

I look forward to the result of it learning the source code.


On Fri, Feb 2, 2024 at 6:47 PM Jacob Rush  wrote:

> I wonder what would happen if you added the source code.
> 
> From: andy pugh 
> Sent: Friday, February 2, 2024 6:06:52 PM
> To: EMC developers 
> Subject: Re: [Emc-developers] LinuxCNC-aware chat bot
>
> On Fri, 2 Feb 2024 at 23:43, Steffen Möller via Emc-developers
>  wrote:
>
> > GPT 4 after receiving all our documentation:
> > In HAL (Hardware Abstraction Layer) configuration for LinuxCNC,
> traditional programming constructs like loops (for, while) are not directly
> supported in the HAL configuration language itself.
> ...
> > In summary, while HAL itself does not support loops in the way a
> conventional programming language does, you can achieve similar outcomes
> through the methods mentioned above. This design choice keeps HAL
> configurations straightforward and focused on hardware-software
> interfacing, with more complex logic handled by custom components or
> external scripts.
>
> That's really quite impressive.
>
> --
> atp
> "A motorcycle is a bicycle with a pandemonium attachment and is
> designed for the especial use of mechanical geniuses, daredevils and
> lunatics."
> — George Fitch, Atlanta Constitution Newspaper, 1912
>
>
> ___
> Emc-developers mailing list
> Emc-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/emc-developers
>
> ___
> Emc-developers mailing list
> Emc-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/emc-developers
>


-- 
Addressee is the intended audience.
If you are not the addressee then my consent is not given for you to read
this email furthermore it is my wish you would close this without saving or
reading, and cease and desist from saving or opening my private
correspondence.
Thank you for honoring my wish.

___
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers


Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-03 Thread John Thornton

Could be a good idea but I don't "sign up" for much.

JT

On 2/2/24 17:40, Steffen Möller via Emc-developers wrote:

Hello,

I created a GPT as an extension of chatGPT 4 that users of chatGPT 4 (it still 
costs a bit) can give a try at 
https://chat.openai.com/g/g-vfeQnX43z-linuxcnc-assistant
If you know of documents that I should add - please tell me. So far I only 
added HTML-translated pages of our documentation.

I am not ultimately sure why I did this. I think I wanted to have someone 
"local" to help me get my mill running. And questions that cannot be answered 
by that GPT may be a motivation to extend our documentation for.

The extra documentation seems to make a small difference, though version 4 is 
impressive alone already. For instance, G-code is no longer listed as a means 
to configure LinuxCNC. I think this is correct.

Feel free to send me questions to that chat bot you want me to ask if you do 
not have direct access to it. Once we have something like this implemented on a 
Free Software, should we have some bot like this on IRC/our home page?

Best,
Steffen


Me:
How is the language called that is used to configure LinuxCNC?

GPT 3.5:
The language used to configure LinuxCNC is called "G-code." G-code is a 
standardized language used in the CNC (Computer Numerical Control) industry to control 
machine tools and 3D printers. It consists of a series of alphanumeric codes that define 
the toolpath, feed rates, and other parameters for the machine. This information is based 
on general knowledge about CNC and LinuxCNC as of my last training data update in January 
2022.

GPT 4 out of the box:

The language used to configure LinuxCNC, which is an open-source system for 
controlling machine tools, is primarily INI (Initialization) file format for 
configuration settings, along with a combination of G-code for operational 
commands and Python for scripting and customization.

1. **INI Files**: LinuxCNC uses INI files to configure the software for a 
specific machine. These files contain settings for hardware, motion control 
parameters, and interface options. The format is straightforward, allowing 
users to specify parameters in a key-value format within sections.

2. **HAL (Hardware Abstraction Layer) Configuration**: LinuxCNC also uses a 
specific system for connecting the software components to the hardware called 
the Hardware Abstraction Layer (HAL). Configuration of HAL is done through HAL 
files, which are written in a custom syntax specific to LinuxCNC. These files 
define how hardware and software components are interconnected.

3. **G-code**: For operational commands, such as moving the machine or 
executing a cutting operation, LinuxCNC uses G-code. G-code is a language used 
by machine tools to control CNC operations. It consists of commands that 
instruct the machine on movements and actions to perform.

4. **Python**: For scripting, automation, and more complex customization, 
LinuxCNC supports the use of Python scripts. Python can be used to create 
custom user interfaces, automate tasks, or extend the functionality of LinuxCNC 
beyond what is possible with G-code and INI configuration alone.

These components together allow for a highly customizable and powerful system 
for CNC machine control, catering to a wide range of applications and machine 
types.

GPT 4 with training on our documentation:
The language used to configure LinuxCNC is not a single language but rather a 
combination of configuration files, HAL (Hardware Abstraction Layer) scripts, 
and sometimes Python scripts for more complex behaviors or customizations. 
Here's a breakdown of each:

INI Files: Configuration for LinuxCNC is primarily done through INI files 
(.ini). These are plain text files that set parameters for the LinuxCNC 
software, including machine geometry, kinematics, hardware settings, and file 
paths. INI files are structured with sections, keys, and values, providing a 
straightforward way to configure the various aspects of a CNC system.

HAL Files: The Hardware Abstraction Layer (HAL) configuration files (.hal) are 
used to connect the LinuxCNC software to the physical hardware. HAL files 
describe how software components are connected to each other and to the 
hardware interfaces. This allows for a flexible setup where users can define 
how signals are routed within the system, map inputs and outputs, and configure 
hardware drivers. HAL uses its own syntax to define these connections and 
configurations.

Python Scripts: For advanced customization, Python scripts can be used to 
extend the functionality of LinuxCNC. Python allows for the creation of custom 
GUI elements, complex logic operations, and integration with external systems. 
This is more advanced than INI and HAL configurations and requires programming 
knowledge.

Together, these components allow for highly customizable and flexible setups to 
suit a wide range of CNC machines and applications.

Me:
Is it possible to define 

Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-02 Thread Jacob Rush
I wonder what would happen if you added the source code.

From: andy pugh 
Sent: Friday, February 2, 2024 6:06:52 PM
To: EMC developers 
Subject: Re: [Emc-developers] LinuxCNC-aware chat bot

On Fri, 2 Feb 2024 at 23:43, Steffen Möller via Emc-developers
 wrote:

> GPT 4 after receiving all our documentation:
> In HAL (Hardware Abstraction Layer) configuration for LinuxCNC, traditional 
> programming constructs like loops (for, while) are not directly supported in 
> the HAL configuration language itself.
...
> In summary, while HAL itself does not support loops in the way a conventional 
> programming language does, you can achieve similar outcomes through the 
> methods mentioned above. This design choice keeps HAL configurations 
> straightforward and focused on hardware-software interfacing, with more 
> complex logic handled by custom components or external scripts.

That's really quite impressive.

--
atp
"A motorcycle is a bicycle with a pandemonium attachment and is
designed for the especial use of mechanical geniuses, daredevils and
lunatics."
— George Fitch, Atlanta Constitution Newspaper, 1912


___
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers

___
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers


Re: [Emc-developers] LinuxCNC-aware chat bot

2024-02-02 Thread andy pugh
On Fri, 2 Feb 2024 at 23:43, Steffen Möller via Emc-developers
 wrote:

> GPT 4 after receiving all our documentation:
> In HAL (Hardware Abstraction Layer) configuration for LinuxCNC, traditional 
> programming constructs like loops (for, while) are not directly supported in 
> the HAL configuration language itself.
...
> In summary, while HAL itself does not support loops in the way a conventional 
> programming language does, you can achieve similar outcomes through the 
> methods mentioned above. This design choice keeps HAL configurations 
> straightforward and focused on hardware-software interfacing, with more 
> complex logic handled by custom components or external scripts.

That's really quite impressive.

-- 
atp
"A motorcycle is a bicycle with a pandemonium attachment and is
designed for the especial use of mechanical geniuses, daredevils and
lunatics."
— George Fitch, Atlanta Constitution Newspaper, 1912


___
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers