Git Product home page Git Product logo

cncjs-shopfloor-tablet's Introduction

cncjs-shopfloor-tablet

A stable cncjs UI for machine operators

The normal cncjs UI is too complex for production use on a shop floor. The many widgets, small buttons, complex screen repositioning, and developer-level information displays get in the way of a machine operator's needs for predictability and ease of access to the most important and frequently-used functions.

The cncjs-pendant-* UIs are great for simple jogging, but lack functions needed for running a complete job.

This project builds on cncjs-pendant-tinyweb to create a UI suitable for running production jobs. It adds the following capabilities to cncjs-pendant-tinyweb:

  • Loading GCode files from the cncjs server's watch directory
  • Text display of the currently loaded GCode file
  • Two MDI (Manual Data Input) boxes to run arbitray GCode commands
  • Goto specific coordinates
  • Set the work coordinates to specified values (not just zero)
  • Direct buttons (bypassing the dropdown) for setting the jog increment
  • Automatic reconnect to most-recently-used serial port
  • State-driven highlighting of applicable program-control buttons
  • Separation between important buttons to reduce accidental touches
  • Removal of semi-dangerous buttons like diagonal jogs (diagonal jogging requires the operator to monitor two simultaneous motions, which pushes human attention limits)
  • 2D toolpath display with tool position tracking

The layout is optimized for use on tablet computers. It works well on inexpensive tablets, even those with a slow GPU, since it does not use 3D graphics.

It can be used as the only UI for running complete jobs - choosing the program, setting up the work coordinate system, and controlling the run.

The full cncjs UI can still be used, perhaps on a different computer or in a different browser tab on the same computer, if its advanced capabilities are required for something that cncjs-shopfloor-tablet does not support. The intention is that cncjs-shopfloor-tablet is sufficient for daily use in a production environment.

Limitations

It works well with TinyG/g2core and GRBL. It has been tested a little with Marlin but not extensively. It has not been tested with Smoothieware - but Smoothie and GRBL are quite similar from a protocol standpoint so it is likely to work.

Rotary axis A is supported from the GUI, but not B and C. You can issue GCode commands for those axes manually via the MDI boxes. The A axis GUI support includes a DRO, Set and GoTo functions, but not jog buttons. There is a Home A menu entry in the dropdown menu.

Setup

Get the cncjs-shopfloor-tablet files onto the machine control computer that runs the cncjs app, either by cloning the git tree or by downloading and extracting a .zip.

Create a subdirectory to contain GCode files, for example "/home/pi/GCode".

$ mkdir /home/pi/GCode

Edit the .cncrc file in your home directory, adding a "watch directory" to hold GCode files, and adding a "mount point" to attach the shopfloor-tablet code to the CNCjs server. You need to add lines like these to .cncrc, somewhere after the opening brace:

    "watchDirectory": "/home/pi/GCode",
    "mountPoints": [
        {
            "route": "/tablet",
            "target": "/home/pi/cncjs-shopfloor-tablet/src/"
        }
     ],   

You can use any text editor to edit that file. On a Raspberry Pi, the most common such editor is called "nano". The Internet has tutorials for using it.

After editing that file, you will need to restart the CNCjs server to make it see these new lines. One way to do that is to reboot the machine that runs the CNCjs server.

After you have restarted the server, browse to the url 'http://host:8000/tablet/', where host is the name or IP address of the cncjs server.

You can still use the full cncjs UI by browsing 'http://host:8000'. You can use the different UI's simultaneously in different browser windows or tabs, which can be on different machines if you wish.

Usage

cncjs-shopfloor-tablet

From left to right, top to bottom, the screen elements are:

  • The legend in the upper left hand corner shows the current controller state and sometimes error messages.
  • There are two program control buttons that change according to the program state
    • The left button is generalized "Go", while the right is generalized "Stop"
    • The idea is that the left one is always the "accelerator" and the right the "brake"
    • If no program is loaded, neither button is active (both are greyed out)
    • If a program is loaded but not running, the left button is green/Start
    • When a program is running, the right button is red, labeled Pause
    • Then a program is paused, the left one is green/Resume and the right is red/Stop
    • When a program is running, hitting the "brake" (right button) pauses exection. From there you can decide whether to Resume or Stop (go back to idle state).
  • The number to the right of the control buttons is the number of program lines that have been executed.
  • The number to the right of that is the program run time.
  • The button in the upper right corner is a drop-down menu with miscellaneous functions that are used infrequently.
  • "G54" shows the current work coordinate system - G54, G55, .. G59. To change the coordinate system manually you can enter e.g. G55 in an MDI box.
  • The gray "DRO" boxes labeled X, Y, Z, A show the current work coordinate for that axis. Touching a DRO box brings up an RPN calculator in which you can enter or calculate a new value. Having entered the value, you can exit from the calculator with Cancel (does nothing), GoTo (rapid move to the new location) or Set (change the work coordinate to the new value).
  • You can use the calculator to quickly perform custom jogs, as follows: When the calculator starts, the current location is pre-entered. If you type a number followed by + or -, the new number will be added to or subtracted from the current location. You can then hit GoTo.
  • The Inch or mm button shows the currently-active units, and toggles them if clicked. Switching units also changes the jog increment selections.
  • X= Y= Z= set the axis work coordinate to the value in the number box above
  • X=0 Y=0 Z=0 A=0 set the axis work coordinate to 0
  • ->X0 ->Y0 ->Z0 **->A0" rapid to work 0 for that axis
  • 0.001 .. 5 set the jog increment. The selection of increments changes according to the units (Inch or mm).
  • The selector box between Z+ and Z- shows the current jog increment, and, when clicked, permits the choice of some additional jog increments.
  • X- X+ Y- Y+ Z- Z+ jog by the current increment. You can jog continuously by selecting a large increment, starting the jog, then hitting Stop when it has gone far enough.
  • MDI sends the GCode command entered in the box to its left. To resend that command, click MDI again. There are MDI blocks so you can have two different GCode commands "queued up" for easy execution.
  • To load a GCode file from the cncjs server's watch directory, select it from the file selector at the lower left. Its GCode text will be displayed in the scrollable textarea to the right and the X-Y projection of its toolpath will be displayed in the image area to the right of that.
  • Rfrsh refreshes the file selector list. That is useful if additional files are added to the watch directory. Another way to refresh the file list is to reload the page.
  • Load reloads the GCode program from the currently selected file. That is useful if you edit the file from another computer and want to pick up the new version. To reload it directly from the file selector, you would have to first select a different file and then re-select the edited one (because of the way selector ".change" events work).
  • If the file selector is blank and there is GCode text in the GCode display text area, the GCode is probably a macro loaded by a different cncjs session.
  • The text box to the right of MDI shows the currently loaded GCode program. You can scroll it by swiping in the box. When a program is running, the currently executing line is highlighted. The highlighted line is sometimes wrong due to the fact that the CNCjs server filters out blank lines, so the line that the controller reports is sometimes a little off compared to the raw text in the file.
  • The graphic window in the lower right shows the toolpath looking down from the top. Feedrate (cutting) moves are shown in blue, with rapid moves in green.There is a crosshair reticle at the origin, and the current tool position is shown as a pink circle. The numbers are the motion limits in X and Y.
  • The scrollable Serial Messages box shows selected serial messages from the controller, filtering out very common protocol and flow control messages that are generally uninteresting. The messages that are shown include error and alarm messages, and responses to inquiries that you enter in MDI boxes.

cncjs-shopfloor-tablet's People

Contributors

andrewhodel avatar cheton avatar mitchbradley avatar regis208 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

cncjs-shopfloor-tablet's Issues

MDI boxes not interpreting g code correctly

Using the latest release of shopfloor tablet. Decided to try the MDI boxes and discovered the lower box intrprets coordinates incorrectly. Upper MDI box interprets y80 as 80mm in the y direction. But the lower MDI box intrpreted y-80 as something much larger and it hit the limit switch. I tried y-8 just for the heck of it and it moved 80mm in the -y direction. I tried x-20 in the lower MDI box and it tried to move what seemed like 200mm in th -x direction, but the limit switch stopped it. I tried x-2 and it moved 20mm in the -x direction. The upper MDI box does not seem to have any problems as far as I can tell.

Unable to get program list

@MitchBradly
Sir, I am unable to get the program list using shopfloor tablet. I doubt if i missed any process to configure watch directory. I have manually created a directory named "watch" under home/pi
Kindly guide me.

Open Gcode File

Hi Mr Mitch

how to open gcode file using shopfloor
i cannot get list of gcode file

need your guidance again

thanks a lot
Rizki

Path Error on execution

Getting the following error when I try and run the cmd to start. Also how do you run this in the background, how to make it work with pm2?

error: uncaughtException: "path" is not defined: null date=Wed Mar 07 2018 16:05:06 G MT-0600 (CST), pid=7529, uid=1000, gid=1000, cwd=/usr/lib/node_modules/cncjs/dist/cnc/app, execPath=/usr/bin/nod e, version=v8.9.4, argv=[/usr/bin/node, /usr/bin/cnc, -m, /tablet:/home/pi/cncjs-shopfloor-tablet/src], rss=1291 91936, heapTotal=102518784, heapUsed=86225476, external=357078, loadavg=[2.05908203125, 1.70556640625, 1.3447265 625], uptime=1154, trace=[column=19, file=/usr/lib/node_modules/cncjs/dist/cnc/app/index.js, function=new Serial Connection, line=2018, method=null, native=false, column=27, file=/usr/lib/node_modules/cncjs/dist/cnc/app/index .js, function=new GrblController, line=17181, method=null, native=false, column=34, file=/usr/lib/node_modules/c ncjs/dist/cnc/app/index.js, function=null, line=16817, method=null, native=false, column=13, file=events.js, fun ction=emitTwo, line=126, method=null, native=false, column=7, file=events.js, function=Socket.emit, line=214, me thod=emit, native=false, column=12, file=/usr/lib/node_modules/cncjs/node_modules/socket.io/lib/socket.js, funct ion=null, line=503, method=null, native=false, column=7, file=internal/process/next_tick.js, function=_combinedT ickCallback, line=131, method=null, native=false, column=9, file=internal/process/next_tick.js, function=process ._tickCallback, line=180, method=_tickCallback, native=false], stack=[TypeError: "path" is not defined: null, at new SerialConnection (/usr/lib/node_modules/cncjs/dist/cnc/app/index.js:2018:19), at new GrblController (/usr/lib/node_modules/cncjs/dist/cnc/app/index.js:17181:27), at Socket. (/usr/lib/node_modules/ cncjs/dist/cnc/app/index.js:16817:34), at emitTwo (events.js:126:13), at Socket.emit (events.js:214:7), at /usr/lib/node_modules/cncjs/node_modules/socket.io/lib/socket.js:503:12, at _combinedTickCallback (in ternal/process/next_tick.js:131:7), at process._tickCallback (internal/process/next_tick.js:180:9)]

No serial port connection

After starting with the command: $ cnc -m /tablet:/home/pi/cncjs-shopfloor-tablet/src
And navigating to the page: http://<ip_address>:8000/tablet/
It redirects to http://<ip_address>:8000/tablet/#/connection however there is no serial port in the ports list.
If I go straight to http://<ip_address>:8000/tablet/#/axes then it says "NoConnect" in the top left, if i click any of the buttons then I get the message serial port "" not available.

CNCjs works fine and the serial port shows up.

Numeric inputs reverting

After entering a value into the X/Y/Z input box and clicking Done, the new value briefly appears in the input box and quickly reverts to the original value. Sometimes the new value persists long enough to successfully click X= or GoX, but most of the time it reverts after less than 1 second. I have experienced this issue this on PC, iPhone, iPad, and Kindle Fire with different browsers and have not yet found a pattern. The X/Y/Z input boxes have a greyed-out appearance, as if they're read-only.

With the exception of Probe, which does nothing when I click it, all other functions seem to work as expected (jog, start/stop jobs, etc.). I haven't tested MDI. I'm running shopfloor latest as of Sept 2020, and cncjs 1.9.22.

Thanks for any help.

EDIT: As a workaround, I can disable Work Position reporting by setting $10=1 (or any value that doesn't contain 2). This seems to stop the input boxes from being clobbered by updates from grbl. I'm not sure how cncjs gets its data, because work position still displays properly in cncjs even with $10=1. The only issue now is that planner and rx buffer no longer display in the main cncjs window. (Also not sure why those were working in the first place, when I had $10=3).

Z-number is not working

Just installed the shopfloor pendant, and noticed that the z-number on the shopfloor pendant is moving with the y-number. If I move the y-axis 10mm, it says on the UI also has moved the z-axis the same amount. The z-axis does not move on the machine, just the on the UI. I can also control the z-axis with the UI, but the number will not change. This is only happening on the shopfloor UI, I have tested it on the regular cncjs UI.

Servo control?

Is there a way to use CNC JS with a servo for a z axis?

Nothing displayed in the port drop down

I'm sure it's something I'm doing, but with two pendants loaded (the tiny one for my phone and this one for my rpi touchscreen), the shopfloor one does not show anything in the ports dropdown.

I've successfully connected via the phone pendant and the normal cncjs interface, but for whatever reason, this one shows nothing in the ports drop down.

I'm happy to dig/poke/hack at this, but haven't found anything useful yet.

Connection issue when using larger files

Hi @MitchBradley
When i already have connected controller with main cncjs interface and I open and connect tablet in another tab, the system hangs. Particularly this happens when i use programs larger than 6MB. I have also noticed that shopfloor tablet hangs while loading larger files individually. (Main interface not connected).
What can be the possible reason? I use RPi4 with 2GB RAM. Router is connected to RPi with ethernet and I use local RPi display and chromium browser. Let me tell you, initially I used wifi and then switched to ethernet. By doing this, it started responding faster for smaller files.
Another observation is, some programs of approx 5 to 6MB sizes are opening smoothly in main interface while it doesn't load in shopfloor tablet and make system unresponsive.

Compatibility with work offsets G55 to G59

Hi @MitchBradley

This is a feature request for work offsets G55 to G59. Currently tablet UI supports only G54. If I manually do G55 (in MDI) and then click X=0 button, it doesn't work (it seems it works but makes X=0 in G54 instead of G55). I found the "X=0" (G10 L20 P1 X0) and all such kind of buttons are hard-bound with G54 work offsets. I have also tried with P0, P2, etc but no success as if there is still somewhere some code is linked to G54 only.

Ideal case should be G10 L20 P0 X0 for "x=0" button and so for others. P0 makes X=0 for the active work offset mode. I request to see the matter.

Regards,
Ravi

Problem with 2D visualizer

Hi @MitchBradley.
I have installed your new version of shopfloor tablet on my Raspberry Pi and found good changes as you have mentioned.
My concern is, now I can't see 2D visualization after update. This also occured in past, at that time you suggested to install a different branch named "patch all ports". Can you explain me why this happens so that I can remove the root cause of the problem. I doubt on the default port it opens while it connects.
Secondly, I was not able to click on feedrate override (new feature in tablet) while machine was running. All those buttons stays disabled. Is that having any relation to the above problem or you have just put those buttons but not programmed yet for functionality?
Let me inform you that I am planning for building an economic industrial VMC machine with shopfloor pendant as its default HMI.

[Support] Y axis reversed

I'm running CNCJS with a grbl CNC router, where 0,0 is in the back rear corner when facing the machine.

The UI for shopfloor tablet shows my Y-axis reversed, as are the arrow keys when using a laptop. Directions and coordinates are correct in the normal CNCJS interface.

Is there a setting to change this and other coordinate issues that may be affected?

Problems with incognito mode

Hi,
I'm using the install script for cncjs and activated the kiosk mode. This works but I have problem:

I use the url http://localhost:80/tablet to open in tablet view but it always falls back to the default web interface.
Tried it on my browser and if I open a private browsing window or opening a fresh browser profile directly with http://:80/tablet I get redirected to the default interface.

when I take a regular window or if I disable incognito mode on the raspberry pi kiosk it happens as followed:

  • first boot -> redirect to default interface
  • all other boots -> tablet interface shows

so it must have something to do with cookies / local storage etc.

Would it be possible to fix it that the redirect is omitted when directly accessed for the first time like in an private browsing environment?

I cant see the 2D visualization in shopfloor tablet

I am not able to see 2D visualization in shopfloor tablet UI. I am running it in chromium browser in full screen mode on ras-pi.
One more input. If I open full version of cncjs first and select program file there, it shows 3d visualization and after that if I open shopfloor tablet in another tab, then It shows 2D visualization perfectly and also by selecting other program from watch directory, it updates as per program.
I have configured my pi to boot directly to chromium in fullscreen mode (not kiosk mode) with shopfloor UI.
Any clue??

Wrong bounding box calculated, caused by G2 in ZX plane (OK in CNCjs)

The X/Y min/max range can report incorrectly for shopfloor tablet on some files, and I've tracked it down to vertical arc lead out moves:

Here's a minimal example, extracted from a facing operation:

G90 G94
G17
G21

(Face)
S16000 M3
G54
G0 X146.905 Y0.418
Z15
Z5
G1 Z0.435 F1000
G18 G3 X146.27 Z-0.2 I-0.635 K0
G1 X142.986
X-0.244 F1430
G17 G2 X-0.244 Y2.396 I0 J0.989
G1 X142.986
G18 G2 X143.621 Z0.435 I0 K0.635 F1000
G0 Z15
G17

Shopfloor tablet reports this having file having a range of: X: -1.23 - 146.91, and Y: 0.42 - 146.91.
CNCJS correctly reports this as X: -1.233 - 146.905, and Y: -0.418 - 2.396

The last curve: G18 G2 X143.621 Z0.435 I0 K0.635 F1000 ends up getting converted to start coordinates of x: -0.2, y: 142.968, z: 2.396 by the G2 handler, causing the wrong bounding box for the Y axis.

Plain English

Obviously I have never used a Pi before. I regret getting it now as I find the process of operating it to be utterly infuriating. What an absurd way to do things. All this mind boggling code. Why can't I just click and drag like on my Mac. Less than one second to install a program. I've been trying for weeks and have got nothing but more agitated!

O.K. so i have followed the instructions and may or may not have installed cncjs on my Pi. I wouldn't have a clue because I can't find it and i can find no instructions on how to go about doing that or running it.
I understand it has to be run through the browser. I can find that because there's an icon to click.
See, they do know about clicking an icon, but I have to go through this terminal crap to do anything. ridiculous!

So now I realise I have to install the shopfloor tablet version and i have found the unintelligible instructions. I'm fine with downloading the .zip file and I can probably find out within a week how to create this directory thing, but you lost me here.
"Tell cnc to use that directory as the "watch directory" by adding a line like this to the .cncrc file, after the opening brace:"
Who for God's sake is cnc?
What on earth is an opening brace?

And now we've got
" "watchDirectory": "/home/pi/GCode",
Use cnc's -m option to set up a static mount. Assuming that the files are in the directory /home/pi/cncjs-shopfloor-tablet, the command would be:

$ cnc -m /tablet:/home/pi/cncjs-shopfloor-tablet/src"

Watch directory? What on earth is that?
Now we've got cnc with an m-option!
For god's sake, what is this nonsense?

If I wasn't so fixed into using this Pi I would throw it away, but I have built my machine with space only for it and now I'm sunk.

Does anyone here speak ENGLISH??

Error: listen EADDRINUSE

Please note that I am not an experienced programmer. However, if I am following your steps correctly I am getting a consistent error.
I have unzipped and copied the folder to: /home/pi/cncjs-tablet
Then I PuTTY into my Raspberry Pi and run the command:
$ cnc -m /tablet:/home/pi/cncjs-tablet/src

It gives me the following error:
pi@cncjs:~ $ cnc -m /tablet:/home/pi/cncjs-tablet/src
2018-09-03T17:09:23.203Z - info: init Loading configuration from "/home/pi/.cncrc"
2018-09-03T17:09:23.307Z - info: init Mounting a directory "/home/pi/cncjs-tablet/src" to serve requests starting with /tablet
2018-09-03T17:09:27.185Z - error: init { Error: listen EADDRINUSE 0.0.0.0:8000
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at Server.setupListenHandle [as _listen2] (net.js:1355:14)
at listenInCluster (net.js:1396:12)
at doListen (net.js:1505:7)
at _combinedTickCallback (internal/process/next_tick.js:141:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '0.0.0.0',
port: 8000 }
Error: { Error: listen EADDRINUSE 0.0.0.0:8000
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at Server.setupListenHandle [as _listen2] (net.js:1355:14)
at listenInCluster (net.js:1396:12)
at doListen (net.js:1505:7)
at _combinedTickCallback (internal/process/next_tick.js:141:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '0.0.0.0',
port: 8000 }

Support for keyboard shortcuts

Hi @MitchBradley
Hope you are doing good. I have developed a shortcut keyboard using "pro micro" arduino compatible board which has native HID capability. This keyboard works great with the main CNCjs web client. For some reasons, it is not working with Shopfloor Pendant. So I can understand that such support is not embedded in shopfloor pendant at present.
I request, if possible for you to enable/support all the keyboard shortcuts of CNCjs so that by making an MOP under the shopfloor tablet touchscreen UI in my main machine panel just get more user friendly. Waiting for your comments/answer.

Pull request: Disable accidental pinch-zoom

Hi @MitchBradley
Sorry I don't know how to make a pull request. While using touch screens, sometimes screen is getting zoomed unintentionally. I got a solution to this, if it is of general interest. Kindly add following to starting of theme.css

  • {
    touch-action: none;
    }

This CSS code actually disables multi-touch mode for that page. This works perfectly. I have tested it on Raspberry pi 7 inch display as well as on my mobile.
Thanks.
Ravi

Can we run both the large UI and this one at the same time

Left comment on a closed ticket but wanted to open another so see if there is a workaround to get both UI available at the same time? Id like to run the lard one on my workstation across the shop and the small one on a tablet attached to the machine..

Feature request: Message/Alarm/Override display

Hi @MitchBradley ,
I am using shopfloor tablet for almost a year now intermittently and would like to say it really does its job beautifully. I run it in my 7 inch and 10 inch raspberry pi displays as machine hmi and it functions well. The only time I need to go to main cncjs is for ALARMS, MESSAGES (like tool change) and to see OVERRIDES.
Right now I use grbl with ESP32 and I would like to see those messages/alarms at the bottom of the screen so that user doesn't need to go anywhere else. I can remember that you added override buttons in one of your versions and due to inability of g2 for overrides, you withdrew those buttons. I request if you can bring them back only for display purposes if not controllable or at least for grbl which has robust override control. BTW, I am creating knob for different overrides by programming pro micro as hid keyboard. So I can change overrides from there but can't see it on display.
Waiting for your reply..
Best regards,
Ravi

Interface hangs while making work coordinates Zero with g2core edge

CNCjs shopfloor tablet problem:
Hi Mitch, I am using latest shopfloor tablet. I noticed, while making X=0 or Y=0 or Z=0, the interface hangs with latest edge build of g2core.
CNCjs universal problem:
When limit switches (I use NC swithces on both side of each axis) operate, the console shows limit hit but doesn't generate alarm as in the case of master branch. Even if the limit hits, it lets the machine run normally. Anything you suggest trying in settings_default.h file?

Cannot resume after M6-triggered pause from tablet pendant

If I pause a running job manually, either from the shopfloor tablet interface or the main cncjs interface, the tablet mode changes to a paused state (so that the control buttons change to 'resume' and 'stop').

If that pause is instead caused by an M6 toolchange, the main cncjs interface's buttons correctly change to the paused state, showing resume and stop, but the tablet UI's buttons do not, instead displaying "Start" and "Pause" (with pause disabled), as if a job was not in progress.

If I load the following gcode file:

T3 M6

I can see the following in the websocket logs in dev tools in the tablet UI:

["workflow:state","running"]
["workflow:state","paused"]
["feeder:status",{"hold":false,"holdReason":null,"queue":0,"pending":false,"changed":false}]
["sender:status",{"sp":1,"hold":true,"holdReason":{"data":"M6"},"name":"m6","context":{...lots of context}]

but the tablet UI state will be incorrect.

Versions
CNCjs: 1.9.22
Node.js: 10.19.0
NPM: 6.14.4

Grbl + Raspberry Pi

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.