Skip to content

This project is a lathe oriented CNC controller built on top of LinuxCNC

License

Notifications You must be signed in to change notification settings

dragossusi/ktcnc

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kotlin CNC

Important

This is not an officially supported Google product

About

I own a Weiler E30 Lathe, built in 1993, that originally had a Sinumerik 805 controller, with some Weiler flavors on top of it. The Weiler's UI was enhancing the usage of the lathe with a few predefined called Simple Cycles, for operations like: cutting tapers, radii, thread reliefs, among the default cycles for ID/OD turning, threading or drilling. The HMI of that controller was a membrane keyboard and a 640x480 display.

The purpose of this project is to create a modern, touch screen based solution, for operating this lathe. The display used is a Iiyama ProLite TF1215MC-B1 12" with a resolution of 1024x768px. At least for now, the UI is made for this resolution. On higher resolutions it will scale, on smaller resolutions, it might not fit.

Due to the environment in which this application will run, it was designed to be used without a mouse or keyboard that can collect metal chips or coolant. All the numeric inputs will be done from the touch screen.

The controller relies on two sources of inputs.

  1. The touch screen (that emulates a mouse pointer input)
  2. The physical buttons & handwheels on the apron of the machine and the spindle switch lever.

In order to maintain the UI cleanliness & logic, the UI does not contain actions for the physical buttons that are present on the machine: These include: E-Stop, Enable, Cycle Start, Cycle Stop, Spindle FWD/REV/STOP, Feed Override, Spindle Override, Joystick functions for jogging or feeding. The software will take all these physical inputs into account, but they are displayed in a read-only manner.

Dependencies

This project depends on a 3rd party library, that handles the communication with LinuxCnc library: https://github.com/dragossusi/ktlcnc

Follow the instructions there to build the library that this project depends on.

Hal Pins

In order to have this software interact with the physical world (button presses, relays), this application relies on some custom defined input/output hal pins. Because these pins are defined in the software, the software need to run before they become available. Therefore, these pins can be used only in postgui_hal files, because those files are executed after the UI was created.

The list of hal pins defined by this app is listed below. The names are quite self-explanatory, so only a few are detailed

Pin Name Type Dir Function
weiler-e30.joystick-x-minus BIT IN
weiler-e30.joystick-x-plus BIT IN
weiler-e30.joystick-z-minus BIT IN
weiler-e30.joystick-z-plus BIT IN
weiler-e30.joystick-rapid BIT IN
weiler-e30.is-power-feeding BIT OUT In order to obtain power-feeding, there is some black magic done in classic ladder.
weiler-e30.cycle-start BIT IN
weiler-e30.cycle-stop BIT IN
weiler-e30.spindle.switch-rev-in BIT IN
weiler-e30.spindle.switch-fwd-in BIT IN
weiler-e30.spindle.started BIT OUT With the original simodrive 611, this tells the contactors to enable the spindle
weiler-e30.spindle.actual-rpm FLOAT IN
weiler-e30.jog-increment-value FLOAT IN
weiler-e30.tool-change.number S32 IN This makes our app aware of tool changes requests
weiler-e30.tool-change.change BIT IN
weiler-e30.tool-change.changed BIT OUT
weiler-e30.axis-limits.x-min FLOAT OUT Used for virtual Limits
weiler-e30.axis-limits.x-max FLOAT OUT Used for virtual Limits
weiler-e30.axis-limits.z-min FLOAT OUT Used for virtual Limits
weiler-e30.axis-limits.z-max FLOAT OUT Used for virtual Limits

Build

When cloning the project, you need to run the following command in the root of the project:

git submodule update --init --recursive

This will clone the 3rd party library that this project depends on.

Set the required arguments in gradle.properties or environment variables.

Env Property Description
LINUXCNC_HOME linuxcnc.home The linuxcnc home folder
LINUXCNC_JDK linuxcnc.jdk The jdk to be used for JNI

TODO

Run the app

At least while in the development phase, in order to run the app, you will need to have the linuxcnc running in the background. This is because this app will use the same NML channels & it will read the memory buffers that LinuxCnc is using to interact with the UI. That means that any postgui.hal files will have to be executed manually.

Run using gradle(you need to specify an ini file to run):

./gradlew run --args="configs/sim/axis/lathe.ini"

Other arguments:

command description
tb disable system top app bar

Usage

TODO

Screenshots

InputDialogView.png

screenshot

screenshot

screenshot

screenshot

screenshot

About

This project is a lathe oriented CNC controller built on top of LinuxCNC

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 92.7%
  • C++ 6.5%
  • Java 0.6%
  • Makefile 0.2%
  • Shell 0.0%
  • HTML 0.0%