Appearance
Built-in Devices: Demo, Local Tags and the Appliance
Last updated
Built-in devices don't talk to external equipment. They don't use the driver service and have no _STATUS/* tags.
Demo CNC Machine
A ready-made, realistic CNC machine for learning the product and building dashboards without hardware.
Add it: Devices → Add Demo Device (admin or editor). The button disappears once a demo device exists; only one is allowed (a second request fails with Demo device already exists). Don't use the wizard's Demo Simulator card — it fails.
It is created as Demo CNC Machine, machine name DEMO-001, type cnc, location Virtual, polling 1000 ms, with 15 tags already subscribed (history off). Data starts immediately, updating once a second, and restarts automatically when the server starts.
| Tag path | Display name | Type | Behavior |
|---|---|---|---|
Status/Running | Running | bool | true while running |
Status/Mode | Mode | string | AUTO while running; AUTO, MANUAL or MDI picked at random when it stops |
Spindle/Speed | Spindle Speed | float | about 7,775–8,225 rpm running (whole numbers), 0 stopped |
Spindle/Load | Spindle Load | float | about 17.5–62.5 running, 0 stopped |
Feed/Rate | Feed Rate | float | about 240–460 running, 0 stopped |
Axis/X/Position | X Position | float | about ±200, smooth motion |
Axis/Y/Position | Y Position | float | about ±160 |
Axis/Z/Position | Z Position | float | about −20 to −5 |
Program/Number | Program Number | int | 1001, 2005, 3010, 4020 or 5015 |
Tool/Number | Tool Number | int | 1–12, starts at 3 |
Parts/Count | Part Count | int | starts at 42 each time the server starts, +1 at each tool/program change |
Coolant/Active | Coolant Active | bool | true running, false stopped |
Servo/X/Load | Servo X Load | float | about 18.5–36.5 running, 0 stopped |
Servo/Y/Load | Servo Y Load | float | about 16.5–31.5 running, 0 stopped |
Temperature/Spindle | Spindle Temp | float | climbs toward 55 while running, cools toward 22 when stopped |
Every 45–90 seconds a running machine either stops (20% chance) or changes tool and program and adds a part; a stopped machine restarts at the next change. The device's run state (running/idle) follows Status/Running. There is no cycle-time tag and no alarm events; build alarms yourself, for example Temperature/Spindle > 50.
Browse Tags on the demo device lists exactly these 15 tags.
Controls: Disconnect or Stop halts the data and the pill shows Stopped, also after a server restart; Connect restarts it (see Device Detail). Writes aren't supported. Deleting the demo device brings Add Demo Device back.
Simulator
Configurable simulated machines with per-tag behaviors. See Simulator Devices.
Local Tags
Every appliance has one Local Tags device, created automatically when the server starts if it's missing. It holds software variables — operator entries, setpoints, counters kept by scripts — that behave like any other tag. It has no connection controls and isn't created through the wizard. Create and edit local tags on the Local Tags page; see Tags.
Scada Appliance
On Scada.Ink hardware, the Scada Appliance device exposes the board's own I/O. It is managed by the system: it isn't in the wizard, has no connection controls, and can't be deleted (The Scada Appliance device cannot be deleted).
| Tag path | Type | Access | Meaning |
|---|---|---|---|
IO/ADC1, IO/ADC2 | float | read | Analog inputs 1 and 2 (volts) |
IO/DIN1, IO/DIN2 | bool | read | Isolated digital inputs |
IO/DIN1Count, IO/DIN2Count | int | read/write | Parts counted on that input, when its counter is on (see below). Write 0 to reset, any other number to preset |
IO/DIN1LastPulseMs, IO/DIN2LastPulseMs | int | read | How long the last part stayed present, in ms — counted or not. Use it to set Min. time present |
IO/Relay1, IO/Relay2 | bool | read/write | The relay output; both tags drive the same relay coil |
IO/UserButton | bool | read | true while the user button is pressed |
IO/Buzzer | bool | read/write | true sounds the buzzer |
Serial/RS232, Serial/RS485_1, Serial/RS485_2 | string | read | Device paths of the serial ports (/dev/ttyAMA5, /dev/ttyAMA3, /dev/ttyAMA4) — use them as serial_port for Modbus RTU, scanners or scales |
Writing the relay, the buzzer or a count needs Allow Tag Writes on the device. The ADC bus, address and reference voltage are set on the Appliance page. On non-appliance hardware the device runs in development mode: inputs read 0/false and writes are ignored.
Part counters
Polling reads an input only as often as the polling rate (100 ms at best), so it can miss a short part and can't tell a 50 ms glitch from a real one. A part counter counts from the input's hardware interrupts instead, timed to the millisecond. Turn one on under Part counters on the Appliance page, per input:
| Setting | Meaning |
|---|---|
| Count parts on DIN1 / DIN2 | Turns the counter on. Save to start it |
| A part is present when the input is | On if the sensor energizes the input when a part is there (IO/DIN1 reads true), Off if it de-energizes it (reads false) |
| Min. time present (ms) | A part must stay present this long to count; shorter pulses are glitches and are ignored. The count goes up this long after the part arrives. 0 counts every pulse |
| Debounce (ms) | A part arriving sooner than this after the last counted one is ignored — a part rocking under the sensor, or sensor chatter. Set it just below the shortest real gap between parts |
A part already under the sensor when the counter starts isn't counted. The count is saved on the appliance every couple of seconds and on shutdown, so it survives a restart; after a power cut it can be up to two seconds' worth of parts short. A counter that is off reads its last count with bad quality.
Resetting the count. Write a number to IO/DIN1Count — 0 to reset, anything else to preset. The Reset button on the Appliance page does this, and so can:
- Ladder — XIC
ShiftReset→ OSR → MOV Source0→IO/DIN1Count(Scada Appliance). Keep the OSR: a MOV writes on every scan its rung is true, so without it the count stays at 0 for as long asShiftResetis on. - Scripts —
tags.writeDevice('Scada Appliance', 'IO/DIN1Count', 0), e.g. in a Cron-triggered script at shift change. - Workflows — a Set Tag node on Scada Appliance ›
IO/DIN1Countwith value 0. - Dashboards — a button that writes 0 to the tag.
Counters need the rpi-lgpio GPIO library, which the installer sets up. On an appliance that has the older RPi.GPIO library instead, the counter can't start: the Count tag stays bad and the drivers log says to re-run the installer.